Загрузка...

We make an answering machine for VK on PHP [BOT]

Thread in Backend created by Hangman666 Jun 12, 2016. 7057 views

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

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

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

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

    Code

    <?

    $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 и помещаем туда такой код

    Code

    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. есть еще другой способ, но сложнее немного.

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