Загрузка...

Делаем автоответчик для ВК на РНР [БОТ]

Тема в разделе Backend создана пользователем Hangman666 12 июн 2016. 7039 просмотров

Загрузка...
  1. Hangman666
    Hangman666 Автор темы 12 июн 2016 Хранитель Идей 342 10 мар 2016
    И так, дорогие друзья, сегодня будем писать простого бота автоотвечтика для соцсети ВКонтакте на PHP. Цель статьи:научить бота отвечать на сообщение, в котором есть слово "привет".

    1) Нам нужен локальный сервер типо денвера или open server, или если у вас есть сервак, можете ставить туда, особо разницы нет.

    2) Создали домен в локальном сервере, проверили, если все ок, продолжаем.

    3) Создаем в этой папке файл core.php .Это будет как бы ядро, основа бота с основным функционалом. В файл помещаем следующий код:

    Код

    <?

    $db = mysql_connect("localhost", "stream", "stream") or die("Ошибка"); тут надо вписать данные для входа в базу вот так - хост , логин, пароль
    mysql_select_db("stream", $db); //тут не трогать
    // тут мы подключаемся к базе данных.

    $token = '';
    // тут нам нужно указать токен. как получить напишу ниже.

    $request = file_get_contents("https://api.vk.com/method/messages.get?out=0&offset=0&filtres=0&last_message_id=0&count=10&v=5.34&access_token=".$token."");
    //отправляем запрос на сервер вконтакта и получаем ответ
    echo $request; // тут мы выводим ответ
    $result = json_decode($request);
    // в ответе мы получили json , нам нужно его декодировать

    for($i=0;$i<=10;$i++) {
    // тут мы создаем цикл. больше 10 ставить не надо, слишком долго грузить будет


    $message = $result->response->items[$i]->body;
    $user_id = $result->response->items[$i]->user_id;
    $id = $result->response->items[$i]->id;
    $chat_id = $result->response->items[$i]->chat_id;
    //в данном куске кода мы получаем тело сообщения, ид пользователя, ид сообщения и ид чата, если написали в чате

    $word = '/((П|п)ривет)/i';
    if(preg_match($word, $message) == TRUE) { //ищем слово привет в нашем сообщениие
    $text = array('Привет', 'Хай', 'Хаюшки', 'Ку'); //набор ответов
    $rand = rand(0,3);
    $text = $text[$rand]; //рандомно берем ответ
    $send = send($text,$user_id,$chat_id,$token,$id); //отправляем ответ через функцию ниже
    }


    }
    // собственно функция отправки сообщения
    function send($text,$user_id,$chat_id,$token,$id) {
    $query = mysql_query("SELECT * FROM `message` WHERE `message` = '".$id."'");
    $message = mysql_fetch_assoc($query);
    //делаем запрос в базу, если раньше не отвечали на сообщение, то ответим
    if(empty($message['id'])) {
    //отправляем сообщение
    if(empty($chat_id)) { //условие, если сообщение не в чате, то отправим его пользователю
    $request = file_get_contents("https://api.vk.com/method/messages.send?user_id=".urlencode($user_id)."&message=".urlencode($text)."&access_token=".$token."");
    }
    else { //условие, если сообщение не от пользователя лично, то отправим его в чат
    $request = file_get_contents("https://api.vk.com/method/messages.send?chat_id=".urlencode($chat_id)."&message=".urlencode($text)."&access_token=".$token."");
    }
    $query = mysql_query("INSERT INTO `message` (`message`) VALUES ('".$id."')");
    // пишем в базу что отправили данное сообщение
    }

    }


    ?>

    С данным куском кода закончили. Далее подключаем базу
    Создаем файл stream.sql и помещаем туда такой код

    Код

    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";


    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;


    CREATE TABLE IF NOT EXISTS `message` (
    `id` int(16) NOT NULL AUTO_INCREMENT,
    `message` text NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=316 ;

    INSERT INTO `message` (`id`, `message`) VALUES
    (1, '1');

    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

    Это все дело надо импортировать в базу.
    Если все импортировалось, тогда переходим дальше.
    Не забудьте правильно вписать данные для входа в бд выше.

    Теперь если открыть в браузере ссылку типа http://вашдомен.рф/core.php , произойдет один цикл работы бота. Нам нужно как то его обновлять. Есть несколько вариантов.
    1) Создать файл index.php и вписать туда такое

    HTML
    <html>
    <head>
    <meta charset="utf-8">
    <meta http-equiv="refresh" content="10">
    <!--Вместо 10 писать через сколько секунд страница сделает перезагрузку-->
    </head>
    <body>
    <?PHP
    $ch = curl_init('http://domain/core.php');
    curl_exec($ch); // отправляем запрос curl
    curl_close($ch);
    ?>
    </body>
    </html>
    2 способ - CRON . Если у вас сервер, можете через cron задать выполнение файла core.php раз в 5 секунд допустим.
    3 способ - делфи. кидаем на форму браузер и через него уже открываем файл index.php. есть еще другой способ, но сложнее немного.

    Теперь запускаем нашего бота и пишем ему сообщение, в котором есть "привет". Если ответил тогда все супер, я вас поздравляю, вы написали своего личного бота для вк.
     
    12 июн 2016 Изменено
  2. Hangman666
    Hangman666 Автор темы 12 июн 2016 Хранитель Идей 342 10 мар 2016
    Сорри не заметил, это в самом коде PHP подсвечивает отдельно.
    Заменил чтобы глаза не резало[/PHP]
     
  3. Hangman666
    Hangman666 Автор темы 12 июн 2016 Хранитель Идей 342 10 мар 2016
    Да я уже просто на [.CODE] заменил
     
  4. Hangman666
    Hangman666 Автор темы 12 июн 2016 Хранитель Идей 342 10 мар 2016
    Зашел редактировать, а ты уже чам изменил. БЛАГОДАРЮ!
     
  5. FolkiTOP
    FolkiTOP 26 янв 2018 0 31 окт 2017
    А как сделать что бы он на разные сообщения отвечал?
     
Top