Как сделать разговорного бота для Вконтакте на PHP
Данная статья — продолжение серии моих статей о том, как создается ИИ для профиля VK.COM
Немного времени назад я опубликовал статью на Хабре и из того, что получилось — могу вывести несколько теорий относительно Хабрааудитории:
1. Хабровчане не любят PHP
2. Хабровчане очень сильно не любят PHP
3. Хабра не прощает недописанный код
А теперь, собственно, сама статья:
Как-то в один прекрасный день меня осенила мысль о том, что было бы неплохо, если бы такие повседневные задачи как постинг и поддержание активности аккаунта в какой-либо социальной сети выполнял не человек, а простой разговорный бот. Тем более при «ботнете» в несколько сотен аккаунтов выполнять задачу с помощью одного человека нецелесообразно и почти невозможно. Поэтому возникла идея написать разговорного бота средствами, которые лучше всего мне были известны. Я решил сделать бота на PHP.
Начать, как вы уже догадались, нужно было с поиска баз для ответов бота и элементарного технического задания, которое помогло бы сделать все быстро и с минимальным количеством костылей (у меня без костылей не получилось).
Немного раньше я познакомился с одним интересным проектом от компании «Наносемантика», которая занимается подобными задачами и создает, вроде, комерческих ботов-саппортов и прочее. Этот проект — iii.ru. На сайте проекта можно создать бота и получить его flash-версию для вставки на сайте. API у них не было, пришлось декомпилировать swf.
Первое, что пришло ко мне в голову, когда я открыл декомпилированный код SWF файла — где теперь найти точку вывода ответов и каким образом это все перевернуть в сторону своей задумки. Удивлению не было предела, когда я увидел, что все запросы и ответы шифруются с помощью XOR + Base64, а ключ для расшифровки был в начале кода. Зачем тогда криптовать?
Основные задачи, которые должен был выполнять мой бот — получать последние сообщения с «Вконтакте», отсылать их на сервер, получать ответ, отправлять ответ человеку, который общается с ботом.
Было создано следующие файлы:
— index.php (работает как клиент, обновляющий с помощью jquery файл с подгрузкой пришедших сообщений и последующим ответом)
— autoload.php (собственно, тот файл, который принимает и отвечает)
— showmeid.php (файл, который создает новый ID чата, если собеседник впервые общается с ботом)
— config.php (коннект к базе данных с клиентами бота)
— classes.php (классы для работы с ботом)
- Импортируйте dump.sql в свою базу данных
- Получите «долгоиграющий» access token для работы с VK API с помощью ссылки — получить token
- Переименуйте config.sample.php в config.php предварительно изменив данные для коннекта к базе данных
- Пользуйтесь запустив index.php
Итак, прошу знакомиться — Лариса Чернышова
А также исходники на GitHub.
UPD: Если бот не отвечает — значит блокируется отправка сообщения просьбой ввести капчу.
Похожее
mew.su
Русский чат бот для Вконтакте на Powershell скрипте
В прошлой записи я уже писал о том, как можно реализовать у себя автоответчик для популярных социальных сетей, который будет общаться вместо Вас. Раньше я им активно игрался. Этот русский чат бот для Вконтакте мною использовался для того, чтобы выявить спамера в незнакомом собеседнике и не отвлекаться на его сообщения. Но когда Вконтакте ввело кнопку «Спам» и стало успешно бороться со спамом, надобность автоответчика отпала.
Теперь пришла вторая беда: куча незнакомых людей пытаются втянуть меня в политические дискуссии на тему Украина-Россия-США, которые мне абсолютно не интересны.
Посему захотелось возродить тот автоответчик — пускай он дискуссирует о визитках Яроша, великом комбинаторе Бендере, укропах и американцах, которые хотят нас поссорить. Зачем мне на эту ерунду отвлекаться? Лучше уж верну в строй автоответчик, это более веселое занятие =) Только вот захотелось допилить в нем кое-что, для удобства. И обойтись без установки delphi, да и qip не хотел устанавливать. Потому переписал его на Powershell-скрипте.
Кстати о пользе скрипта: вот пишу сейчас эту запись, а параллельно со скриптом какая-то девушка общается, она уже пять часов выпрашивает у моего скрипта скинуть деньги на телефон, при этом скрипт хитер — и телефон получил, и деньги пообещал скинуть (только не сейчас), и условие поставил: скинет если она, девушка, будет себя хорошо вести. Вот и общаются уже так 5 часов. Собеседница пытается выяснить когда именно и сколько денег скрипт собирается ей скинуть, ну и общается с ним за жизнь, чтобы его не обидеть =)
Помимо самого скрипта нам понадобится:
- База вопросов-ответов — текстовый файл такого же формата, как и в боте реализованном через QIP плагин. В скрипте используется тот же формат базы. Качайте архивы по ссылкам: раз или два и скопируйте в них файл reg.txt
- Сгенерировать токен — ключ, благодаря которому вконтакте поймет что скрипт, это Вы. Для этого, в свою очередь, нужно:
- Создать во вконтакте свое standalone-приложение и скопировать его id.
С базой вопросов-ответов все понятно, идете по ссылкам и качаете одну из тех баз, которыми люди поделились. Рекомендую базу совершенствовать, чем больше в ней будет вопросов и более продуманной ее структура — тем более человеческие диалоги будут получаться. Своей базой я пока не готов делится =) Может потом реализую на сайте api через которое можно будет посылать вопрос и получать ответ из базы.
Генерация токена
По адресу vk.com/editapp?act=create создаем standalone-приложение (под которым будет выступать этот скрипт), название можете вписать любое. При создании приложения вконтакте пошлет Вам на телефон код, который нужно будет ввести.
Далее в созданном приложении переходим на вкладку «настройки» и запоминаем «ID приложения» — оно нам понадобится для генерации токена.
Честно говоря Вам не обязательно создавать свое приложение, достаточно взять ID уже любого, созданного кем угодно приложения. Но есть «Но»:
- Оно должно быть standalone-типа: отправка сообщений доступно только Standalone-приложениям.
- Во вконтакте есть ограничение по количеству обращений в секунду с какого-либо приложения. И чтобы несколько пользователей используя одно и то же приложение не уперлось в это ограничение, лучше создать свое приложение.
- Этому приложению будут выданы те права которые вписаны в ссылке получения токена — будьте аккуратны. Лучше создать свое приложение, а не предоставлять чужому какие-либо опасные права
Получили ID приложения? Идем дальше.
Переходим в браузере по такому адресу:
https://oauth.vk.com/authorize?client_id=ТутIDПриложения&scope=offline,messages&redirect_uri=https://oauth.vk.com/blank.html&display=page&v=5.24&response_type=token
Вместо «ТутIDПриложения» указываем ID своего приложения.
«scope=offline,messages» — говорит о том, что токену будет предоставлен:
- оффлайновый доступ (срок действия токена будет бесконечный, не нужно будет раз в сутки получать новый)
- доступ к сообщениям
При переходе по указанному адресу у вас запросят права на:
- Доступ к сообщениям (мы хотим получать и отправлять сообщения )
- Личной информации (всегда запрашивается)
- В любое время (так как токен бессрочный)
Разрешаем.
После чего вы попадете на страницу с текстом:
Пожалуйста, не копируйте данные из адресной строки для сторонних сайтов. Таким образом Вы можете потерять доступ к Вашему аккаунту.
А в адресной строке браузера будет приблизительно такой адрес:
https://oauth.vk.com/blank.html#access_token=6fd83efcffc00be12345678901234567890123456789a23b7b73a4dc3e7c64ec5914768c8dbddd2d461af&expires_in=0&user_id=24552345
Токен это то, что начинается после «access_token=» и заканчивается перед «&expires_in=». Его и вставляем в скрипт.
Powershell скрипт «Русский чат бот для вконтакте»:
#скрипт автответчика для Вконтакте #Автор: elims.org.ua #Данные которые нужно указать: $users_id = 2141,1234234,134156,4525 #id людей, которых игнорировать, то есть с ними скрипт не будет общаться $base_file_path = "C:\Dropbox\QIPBot\reg.txt" #указываем где находится файл с базой вопросов-ответов $token = "6fd83efcffc00be12345678901234567890123456789a23b7b73a4dc3e7c64ec5914768c8dbddd2d461af" #указываем токен function get_message_base { #получаем и конвертируем базу вопросов ответов $message_base_file = Get-Content $base_file_path $global:file_modify = [int][double]::Parse($(Get-Date -date (Get-Item C:\Dropbox\QIPBot\reg.txt).LastWriteTime.ToUniversalTime() -uformat %s)) #дата изменения файла в юникс формате $global:message_base = @{} #создаем пустой ассоциативный массив $global:message_base.matches = @{} $global:message_base.answers = @{} $i = 0 foreach ($line in $message_base_file) { #для каждой строки из файла if ($line -match '^\^.*\$$') { #если нашли правило $global:message_base.matches[$i] = $line #записываем правило в масив $line_j = $line_i+2 #номер строки с которой начинаются ответы на правило $answers_i = 0 #количество ответов на правило $answers = @{} #масив из ответов на определенный вопрос do { #записываем ответы на правило в отдельный масив $answers[$answers_i] = $message_base_file[$line_j] #записываем ответы на определенный вопрос в масив $answers_i++ $line_j++ } while (-not($message_base_file[$line_j+1] -match '^\^.*\$$')-and($line_j -le $message_base_file.count)) $global:message_base.answers[$i] = $answers #записываем масив ответов на определенный вопрос в общий масив ответов $i++ } $line_i++ #номер текущей строки в файле } } get_message_base #получаем id последнего сообщения, на все последующие нужно отвечать: $uri = "https://api.vk.com/method/messages.get?count=1&v=5.24&access_token="+$token $request = Invoke-WebRequest -Uri $uri $response_array = $request.content | ConvertFrom-Json #Конвертируем полученные данные из формата JSON в массив $message_id_last = $response_array.response.items[0].id "id последнего сообщения: " + $message_id_last #Бесконечный цикл, в котором происходит общение: do { $uri = "https://api.vk.com/method/messages.get?count=10&v=5.24&access_token="+$token $request = Invoke-WebRequest -Uri $uri #получили последние 10 входящих сообщений $response_array = $request.content | ConvertFrom-Json #Конвертируем полученные данные из формата JSON в массив $message_id = $response_array.response.items $items_i = $response_array.response.items.count do { #идем в обратном порядке по сообщениям $items_i-- $item = $response_array.response.items[$items_i] #если человек не среди исключенных и сообщение имеет id больше того, после которого нужно отвечать if (-not($users_id -contains $item.user_id )-and($item.id -gt $message_id_last)) { $i = 0 do { #для каждого правила $i++ if ($item.body -match $message_base.matches[$i]) { #проверяем подпадает ли сообщение под правило "Вопрос от " + $item.user_id + " id-сообщения: " + $item.id + " : " + $item.body $maximum = $message_base.answers[$i].count - 1 if ($maximum -gt 0) {$answer_number = Get-Random -minimum 0 -maximum $maximum}else{$answer_number=0} $answer = $message_base.answers[$i][$answer_number] $time_sleep = $answer.length / 5 #смотрим сколько символов в ответе и делим на 5 для имитации скорости печати 5 символов в секунду $time_sleep_i = 0 "Время общего сна: " + $time_sleep do { #задержка для имитирования скорости печати, раз в 10 секунд посылаем запрос, который говорит что идет печать $uri = "https://api.vk.com/method/messages.setActivity?user_id=" + $item.user_id + "&type=typing&v=5.24&access_token="+$token #посылаем процесс набора текста $request = Invoke-WebRequest -Uri $uri if ($time_sleep-$time_sleep_i -ge 10) { "спим 10 секунд" Start-Sleep -s 10 } else { "спим секунд: " + ($time_sleep-$time_sleep_i) Start-Sleep -s ($time_sleep-$time_sleep_i) } $time_sleep_i = $time_sleep_i + 10 } while ($time_sleep_i -lt $time_sleep) "Ответ: $i из " + $message_base.matches.count + " " + $answer if ($i -eq ($message_base.matches.count - 1)) { #сохраняем вопросы на которые не были найдены ответы и подпали под общее правило $item.body | Out-File -Append "C:\Temp\questions-without-answers.txt" -Encoding UTF8 #ответы на эти вопросы можно придумать и добавить в базу } $i = -1 #ответ найден, прерываем дальнейший поиск маски $message_id_last = $item.id #обновляем указатель на последнее отвеченное сообщение #посылаем ответ $uri = "https://api.vk.com/method/messages.send?user_id="+$item.user_id+"&message="+$answer+"&v=5.24&access_token="+$token $request = Invoke-WebRequest -Uri $uri } } while (($i -le $message_base.matches.count-2)-and($i -ne -1)) } } while ($items_i -ge 0 ) $file_modify_check = [int][double]::Parse($(Get-Date -date (Get-Item $base_file_path).LastWriteTime.ToUniversalTime() -uformat %s)) #unix-время последней модификации файла вопросов-ответов if ($file_modify_check -gt $file_modify) {get_message_base} #если база вопросов ответов изменялась, то снова ее считываем $time = [int][double]::Parse($(Get-Date -date (get-date).ToUniversalTime()-uformat %s)) #берем текущее время в юникс-формате и переводит в целое число write-host("$time Следующий запрос будет через 5 секунды. Последнее сообщение $message_id_last") Start-Sleep -s 5 } while ( 1 -eq 1) #бесконечный цикл
В самом начале скрипта, после строки «#Данные которые нужно указать:» указываем свои данные (вместо моих): id-людей с которыми автоответчик не должен общаться, путь к файлу с вопросами-ответами и токен.
Запускаем из командной строки Powershell-скрипт и любуемся его работой =)
P.S.: На всякий случай предупрежу — пользуйтесь аккуратно, без злоупотреблений, все-таки ботоводство нигде не приветствуется.
Понравилось? =) Поделись с друзьями:
elims.org.ua
50 скриптов для ВКонтакте
50 скриптов для ВКонтакте на все случаи жизни. В архив включены такие скрипты для ВК как:
Музыка под постом.
Редактирует дату дня рождения, типо каждый день день рождение.
Автостатус в группу)
Пост с курсами валют, с точным временем, с кол-вом диалогов и т.д.
Переводит подпищиков в друзья.
Отписываемся от всех.
Вечный онлайн.
Меняет название беседы на время.
Чистка сообщений.
Заменяет родной город на факт.
Пост с временем.
Рассылка заявок в друзья.
В названии группы будет время и погода.
Сохраняет все вложенные картинки в сообщениях.
Флуд в обсуждениях.
Автоответчик.
Флуд в беседку.
Пост с фактом и приклеплённым фото.
Накрутка сообщений методом создания бесед.
Пост с фактом и приклеплённым фото в группу.
Те, кто удалил вас из друзей попадает в чс.
Выберает того, кто лайкает записи в группе.
Флуд фотографиями в альбоме.
Флуд аудиозаписями.
Слитый скрипт LikeTime.
Автопортрет с смайликов.
Уведомление о капчи группы.
Флуд на стене друга.
Автоава для группы.
Автоприём людей в закритые группы.
Автопост \»День рождение через\»
Накрутка отметки фотографий.
Шкурогенератор.
Выбирает счастливчика в коментариях.
Шкурогенератор без уведомлений.
Выбирает счастливчика в коментариях без уведомлений.
Если человек отписался, то перед чс ему отправит сообщение.
Накрутка сохранёнок.
Выход из групп.
Поздравит ваших друзей с Новым Годом ровно в 0:00
Проверка токена на валид.
10 популярных песен в коменты.
Добавляет популярные треки в аудиозаписи.
Флуд на стену с многих акков.
Чистит сохраненки.
Автоматом добавляет в беседу, если в лс написали\»#addchatuser\»
Скрипт пиара с RUCAPTCHA.
Рандомный коммент под аву.
Скрипт пиара.
Топовая визитка
50 скриптов для ВКонтакте на все случаи жизни. В архив включены такие скрипты для ВК как:
Музыка под постом.
Редактирует дату дня рождения, типо каждый день день рождение.
Автостатус в группу)
Пост с курсами валют, с точным временем, с кол-вом диалогов и т.д.
Переводит подпищиков в друзья.
Отписываемся от всех.
Вечный онлайн.
Меняет название беседы на время.
Чистка сообщений.
Заменяет родной город на факт.
Пост с временем.
Рассылка заявок в друзья.
В названии группы будет время и погода.
Сохраняет все вложенные картинки в сообщениях.
Флуд в обсуждениях.
Автоответчик.
Флуд в беседку.
Пост с фактом и приклеплённым фото.
Накрутка сообщений методом создания бесед.
Пост с фактом и приклеплённым фото в группу.
Те, кто удалил вас из друзей попадает в чс.
Выберает того, кто лайкает записи в группе.
Флуд фотографиями в альбоме.
Флуд аудиозаписями.
Слитый скрипт LikeTime.
Автопортрет с смайликов.
Уведомление о капчи группы.
Флуд на стене друга.
Автоава для группы.
Автоприём людей в закритые группы.
Автопост \»День рождение через\»
Накрутка отметки фотографий.
Шкурогенератор.
Выбирает счастливчика в коментариях.
Шкурогенератор без уведомлений.
Выбирает счастливчика в коментариях без уведомлений.
Если человек отписался, то перед чс ему отправит сообщение.
Накрутка сохранёнок.
Выход из групп.
Поздравит ваших друзей с Новым Годом ровно в 0:00
Проверка токена на валид.
10 популярных песен в коменты.
Добавляет популярные треки в аудиозаписи.
Флуд на стену с многих акков.
Чистит сохраненки.
Автоматом добавляет в беседу, если в лс написали\»#addchatuser\»
Скрипт пиара с RUCAPTCHA.
Рандомный коммент под аву.
Скрипт пиара.
Топовая визитка
Скачать
v-zlom.cc
Скрипт Бота Для Вк
Скрипт бот для игры Небеса
Скачать Clickermann: crapware.aidf.org/page/clickermann Скачать скрипт: www.catcut.net/KHP5 Брут аккаунт 8ур: catcut.net/LHP5 Скрипт Бот для…
Hace un año
Капиталист
Добро пожаловать на канал Viki Meyson. У меня ты найдешь много интересных видео о скриптах и багах, накрутке и…
Freebitcoin — рабочий бот скрипт
Регистрация на freebitcoin: goo.gl/wHiYe5 FreeBitcoin обновлённый БОТ v 4.1: gestyy.com/qXsRqk FreeBitcoin обновлённый БОТ v 4.1ставка…
Hace 2 años
Спам бот для сайта vk.com
Спам бот,парсер,поиск открытых групп по тегам. С помощью данного бота вы можете прорекламировать свою групп…
Hace 5 años
Полезности #3 Бот VK
Команды vk.com/doc212188840_334328536?hash=4d548933eabb72f216&dl=40beedc69bfbdc07bb Чат бот vk.com/id283117679.
Hace 3 años
esfilms.net
Скрипт Бота ВК — Обсуждение программ и сервисов💡
Перейти к содержимому
Форум ZiSMO.biz
VkJust — программа для продвижения ВКонтакте
- Вход
- Регистрация
- Забыли?
- Войти через:
- Главная
- Свежие темы
- Спросить
- Новости zismo
- Магазин
- Правила
- Заходите в чат
- Поиск
- Больше
- Форум ZiSMO.biz
- → Популярное на форуме
- → Обсуждение программ и сервисов
- → Скрипт Бота ВК
zismo.biz