Ваш ключ: необходима авторизация | MyProxy - бесплатный обменник валидных прокси между пользователями форума.

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

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

Войдите для ответа
  1. Hangman666 Хранитель Идей

    Hangman666
    Статус:
    Вне сети
    Сообщения:
    474
    Симпатии:
    271
    Регистрация:
    10.03.16
    И так, дорогие друзья, сегодня будем писать простого бота автоотвечтика для соцсети ВКонтакте на 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 #1
    Последнее редактирование модератором: 12 июн 2016
    WALLBANGERPRO нравится это.
  2. #Light Заблокирован

    #Light
    Статус:
    Вне сети
    Сообщения:
    316
    Симпатии:
    0
    Регистрация:
    01.06.15
    Цвета ломают глаза.
     
    12 июн 2016 #2
  3. Hangman666 Хранитель Идей

    Hangman666
    Статус:
    Вне сети
    Сообщения:
    474
    Симпатии:
    271
    Регистрация:
    10.03.16
    Сорри не заметил, это в самом коде PHP подсвечивает отдельно.
    Заменил чтобы глаза не резало[/PHP]
     
    12 июн 2016 #3
  4. #Light Заблокирован

    #Light
    Статус:
    Вне сети
    Сообщения:
    316
    Симпатии:
    0
    Регистрация:
    01.06.15
    [.SRC] - сделай
     
    12 июн 2016 #4
  5. Hangman666 Хранитель Идей

    Hangman666
    Статус:
    Вне сети
    Сообщения:
    474
    Симпатии:
    271
    Регистрация:
    10.03.16
    Да я уже просто на [.CODE] заменил
     
    12 июн 2016 #5
  6. #Light Заблокирован

    #Light
    Статус:
    Вне сети
    Сообщения:
    316
    Симпатии:
    0
    Регистрация:
    01.06.15
    SRC лучше будет.
     
    12 июн 2016 #6
    Hangman666 нравится это.
  7. Hangman666 Хранитель Идей

    Hangman666
    Статус:
    Вне сети
    Сообщения:
    474
    Симпатии:
    271
    Регистрация:
    10.03.16
    Зашел редактировать, а ты уже чам изменил. БЛАГОДАРЮ!
     
    12 июн 2016 #7
    #Light нравится это.
Загрузка...
Похожие темы
  1. Hangman666
    Ответов:
    0
    Просмотров:
    144
Top