Vk api longpoll php

# Примеры работы

Для удобства в каждого бота можно добавлять следущие константы:

const VK_KEY = ''; //токен сообщества или пользователя const CONFIRM_STR = ''; //ключ авторизации сообщества, который вы получили const VERSION = '5.101'; //ваша версия используемого api const VK_USERKEY = "User_Key"; //ключ доступа пользователя const COIN_API_KEY = ''; //Ключ магазина, можно получить ТОЛЬКО 1 РАЗ! - vk.com/coin#create_merchant const COIN_API_MERCHANT = 123; //id страницы, чей ключ используется 

# Минимальный Callback бот для бесед и сообщества

require_once('vendor/autoload.php'); use DigitalStar\vk_api\vk_api; $vk = vk_api::create(VK_KEY, VERSION)->setConfirm(CONFIRM_STR); $vk->initVars($id, $message); $vk->reply($message); 

# Простой Callback бот для бесед и сообщества

require_once('vendor/autoload.php'); use DigitalStar\vk_api\vk_api; $vk = vk_api::create(VK_KEY, VERSION)->setConfirm(CONFIRM_STR); $vk->debug(); $vk->initVars($id, $message, $payload); //инициализация переменных $info_btn = $vk->buttonText('Информация', 'blue', ['command' => 'info']); //создание кнопки if ($payload)  if($payload['command'] == 'info') $vk->reply('Тебя зовут %a_full%'); //отвечает пользователю или в беседу > else $vk->sendButton($id, 'Видишь кнопку? Нажми на нее!', [[$info_btn]]); //отправляем клавиатуру с сообщением 

# Простой LongPoll бот для юзера

require_once('vendor/autoload.php'); use DigitalStar\vk_api\vk_api; use DigitalStar\vk_api\LongPoll; $vk = vk_api::create('login', 'password', VERSION);//или используйте токен вместо лог/пас $vk = new LongPoll($vk); $vk->listen(function()use($vk) //longpoll для пользователя $vk->on('message_new', function($data)use($vk)  //обработка входящих сообщений $vk->initVars($id, $message); $vk->reply($message); >); >); 

# Простой LongPoll бот для сообщества

require_once('vendor/autoload.php'); use DigitalStar\vk_api\vk_api; use DigitalStar\vk_api\LongPoll; $vk = vk_api::create(VK_KEY, '5.101'); $vk = new LongPoll($vk); $vk->listen(function($data)use($vk) //в $data содержится все данные $vk->initVars($id, $message); $vk->reply($message); >); 

# Callback + Execute

Используется, когда callback скрипт во время выполнения много раз обращается к api, а вам нужно экономить запросы, чтобы не привышать лимит(высоконагруженные боты)

require_once('vendor/autoload.php'); use DigitalStar\vk_api\vk_api; use DigitalStar\vk_api\Execute; $vk = vk_api::create(VK_KEY, VERSION)->setConfirm(CONFIRM_STR); $vk = new Execute($vk); $vk->debug(); $vk->initVars($id, $message); //инициализация переменных $vk->reply($message); //отвечает пользователю или в беседу 

# LongPoll + Execute

Лучшая связка для высоконагруженных ботов. Но если вы делаете высоконагруженного бота, лучше посмотрите в сторону NodeJS, он справляется с этим намного лучше за счет асинхронности и многопоточности из коробки.

require_once('vendor/autoload.php'); use DigitalStar\vk_api\vk_api; use DigitalStar\vk_api\LongPoll; use DigitalStar\vk_api\Execute; $vk = vk_api::create(VK_KEY, '5.95'); $vk = new Execute($vk); $vk = new LongPoll($vk); $vk->listen(function($data)use($vk) //в $data содержится все данные события, можно убрать, если не нужен $vk->initVars($id, $message); $vk->reply($message); >); 

# Работа с Coin в Callback боте

require_once('vendor/autoload.php'); use DigitalStar\vk_api\Coin; $coin = Coin::create(COIN_API_KEY, COIN_API_MERCHANT); $coin->initVars($from_id, $amount, $payload, $verify, $data); if($verify) echo "Пользователь с id $from_id отправил вам $amount Coin"; else echo "Платеж не настоящий, возможно попытка взлома или вы использовали hex декодирование ссылки" 

# Работа с классом Message

require_once('vendor/autoload.php'); use DigitalStar\vk_api\Message; use DigitalStar\vk_api\vk_api; use DigitalStar\vk_api\VkApiException; use DigitalStar\vk_api\Group; try  $vk_user = new vk_api('login', 'pass', VERSION); //авторизация пользователя через логин/пароль //$vk_user = new src(VK_USERKEY, VERSION); //авторизация через ключ пользователя $vk_public = new vk_api(VK_KEY, VERSION); //авторизация через ключ группы $fish_button = $vk_user->buttonText("А какие бывают?", "blue", ["animals" => 'Fish']); //инициализация кнопки /*------Отправка сообщения от имени пользователя---------*/ $my_msg = new Message($vk_user); //объект конструктора сообщений $my_msg->setMessage("Разных рыбин сообщение. "); //добавить в конструктор сообщение $my_msg->addImage('img/goldfish.jpg'); //добавить в конструктор изображение $my_msg->addImage('img/pink_salmon.jpg'); //еще одно изображение $my_msg->addDocs('img/plotva.jpg'); //добавить изображение как документ $my_mds->addVoice('voice/voice.ogg');//добавить как голосовое сообщение $my_msg->send('чей_то_id'); //отправить пользователю $my_msg->send('чей_то_id'); //отправить другому полюзователю /*---------Отправка сообщения от имени группы, используя аккаунт пользователя-------------------*/ $my_group = new Group('id_группы', $vk_user); //id группы где вы являетесь админом или создателем $my_msg = new Message($my_group); $my_msg->setMessage("Разных рыбин сообщение. "); $my_msg->addImage('img/pink_salmon.jpg'); $my_msg->addDocs('img/plotva.jpg'); $my_msg->setKeyboard([]); //если оставить такое, то у пользователя исчезнут кнопки, которые есть сейчас $my_msg->setKeyboard([[$fish_button, $fish_button], [$fish_button, $fish_button]], true); //а это добавит к конструктору клавиатуру $my_msg->send('чей_то_id'); $my_msg->send('id_беседы'); //отправит это сообщение в беседу, куда пригласили бота. Отправит даже если бот не является админом /*-----------------Простые функции отправки------------------*/ //все, кроме отправки клавиатуры работает и с объектом пользователя $vk_public->sendMessage('чей_то_id', 'test'); //отправка сообщения $vk_public->sendButton('чей_то_id', 'test', [[$fish_button, $fish_button]]); //отправка клавиатуры $vk_public->sendImage('чей_то_id', 'img/pink_salmon.jpg'); //отправка клавиатуры $vk_public->sendDocMessage('чей_то_id', 'img/pink_salmon.jpg', 'Свое_название картинки'); > catch (VkApiException $e)  //если случится какая-то ошибка в библиотеке, то текст ошибки можно получить используя $e->getMessage() print_r($e->getMessage()); //например можно отправить ошибку себе в вк //$vk_user->sendMessage('ваш_id', $e->getMessage()); > 

# Работа с классом Post

require_once('vendor/autoload.php'); use DigitalStar\vk_api\Post; use DigitalStar\vk_api\VkApiException; try  // $test = new auth('login or cookie', 'pass'); // $vk = new src('login or cookie', 'pass', VERSION); // $vk = new src(VK_USERKEY, VERSION); // $vk = new src($test, VERSION); $my_post = new Post($vk); $my_post->setMessage("Разных рыбин пост. "); $my_post->addProp('from_group', 1); $my_post->addImage('img/goldfish.jpg', 'img/pink_salmon.jpg', 'img/plotva.jpg'); $my_post->addImage('img/plotva.jpg'); $my_post->addDocs('img/goldfish.jpg'); print_r( $my_post->send('-165686210', time() + 120) ); > catch (VkApiException $e)  print_r($e->getMessage()); > 

# Работа с классом Клавиатурой и Коинами

require_once('vendor/autoload.php'); use DigitalStar\vk_api\Coin; use DigitalStar\vk_api\vk_api; try  $vk = vk_api::create(VK_KEY, VERSION)->setConfirm(CONFIRM_STR); $coin = Coin::create(COIN_API_KEY, COIN_API_MERCHANT); $vk->debug(); $vk->initVars($id, $message, $payload, $user_id); //инициализация переменных $INFO = $vk->buttonText("Баланс", "blue", ["command" => 'mymoney']); //Код кнопки 'Баланс' if ($payload)  //если пришел payload if ($payload['command'] == 'mymoney')  $vk->reply('Твой баланс: ' . $coin->getBalance($user_id) . ' VKC'); > > else $vk->sendButton($id, 'Отправил кнопку', [[$INFO]]); //отправляем клавиатуру с сообщением > catch (\DigitalStar\vk_api\VkApiException $e)  $error = "\r\n[Exception]: возникла ошибка:"; $error .= "\r\n[Exception]: текст: $e->getMessage()>"; $error .= "\r\n[Exception]: код ошибки: $e->getCode()>"; $error .= "\r\n[Exception]: файл: $e->getFile()>:$e->getLine()>"; $error .= "\r\n[Exception]: путь ошибки: $e->getTraceAsString()>"; file_put_contents('error_log' . date('d-m-Y_h-i') . ".log", $error); > 

# Настройка коинов

require_once('vendor/autoload.php'); use DigitalStar\vk_api\Coin; $coin = Coin::create(COIN_API_KEY, COIN_API_MERCHANT); $coin->setName('Горячие пирожки'); //установить имя магазина $coin->setCallBack('https://domain.com/callback.php'); //установить путь до калбэк скрипта /*выведет ссылку на пополнение баланса. Ее можете отправить юзеру * Когда юзер оплатит, информация о платеже придет на установленный вами callback скрипт * Реализация калбэк скрипта: https://github.com/digitalstars/vk_api/blob/master/Examples/coin_callback.php */ echo $coin->getLink(100, true)['url']; 

Источник

Скрипт VK бот на User и bots LongPoll с возможностью расширения функционала написанный на PHP

Что бы не покупать сервер для начала работ с ботами ВК, нам будет достаточно установить OpenServer на свой компьютер для запуска PHP скриптов. Я покажу как просто и понятно запускать скрипт с ПК что бы сделать рассылку по группе без использования сторонних сервисов и ответ ботом на входящие сообщения от пользователя. Нам понадобиться:
1. OpenServer установленный на ПК
2. Библиотека для удобной работы с VK API под названием SimpleVK

Скачиваем и устанавливаем OpenServer, с официального сайта качается очень долго, советую найти torrent, или закинуть донат разработчикам что бы скачать на максимальной скорости, решать Вам. Подойдет версия BASIC, но если интернет позволяет, качайте FULL, хуже не будет

И так после установки и запуска OpenServer у нас появится в трее значек флажка красного цвета, нужно нажать на него и выбрать зеленый

Если возникли сложности при запуске, запустите OpenServer от имени администратора.

На этом подготовительные работы окончены.

Теперь в любой папке на пк, пусть это будет рабочий стол, напишем пару строк кода и добавим библиотеку. Первый скрипт отвечает на входящие сообщения пользователю, второй делает рассылку по группе ВК по всем участникам которые писали сообществу ранее. Если диалогов очень много, то начало рассылки может затянуться из-за долгого сбора данных для рассылки, такой он VK API

listen(function()use($vk)< //longpoll для пользователя $vk->on('message_new', function($data)use($vk) < //обработка входящих сообщений $vk->initVars($id, $message, $payload, $user_id, $type, $data); if ($message == 'привет')< // Входящее сообщение $vk->reply('Ну привет мой дорогой дружочек'); // Ответ на него > >); >);

Данный скрипт будет отвечать на все входящие сообщения, дополнять такой код можно используя стандартные методы, большая часть описана на нашем сайте.

Работает он вот так:

Для нормальной работы скрипта, нужен токен от KateMobile можно получить тут (кликтабельно) выбрав KateMobile

Второй более интересный вариант использования это Bots LongPoll используется только для групп, не забываем включить настройку в самой группе

И в разделе ТИП СОБЫТИЙ включить ВХОДЯЩИЕ СООБЩЕНИЯ

listen(function($data)use($vk)< //в $data содержится все данные события, можно убрать, если не нужен $vk->initVars($id, $message); $cmd = explode(' ', $message, 2); // Получаем первое сообщение и последующие слова кроме первого :) if ($cmd[0] == 'рассылка') < $vk->reply("Рассылка запущена, текст: $cmd[1] слово стоп остановит рассылку"); $started1 = $vk->buttonText('Кнопочка 1', 'green', ['command' => 'started1']); $started2 = $vk->buttonText('Кнопочка 2', 'white', ['command' => 'started2']); $started3 = $vk->buttonText('Кнопочка 3', 'white', ['command' => 'started3']); $keyboard = $vk->generateKeyboard( [[$started1],[$started2, $started3]]); // Если клава не нужна то передаем в переменную NULL пример ниже //$keyboard = NULL; $vk->sendAllDialogs($cmd[1], $keyboard, $filter = 'all', $params = []); // $filter = 'all' отправить всем > if ($cmd[0] == 'стоп') < // Вырубаем скрипт $vk->reply('Скрипт остановлен'); exit(); > >);

Таким образом мы делаем абсолютно бесплатную рассылку по группе ВК без сторонних приложений, удобно и легко.

Но как же запустить эти скрипты? Все очень просто. Нажимаем на флажок правой кнопкой мыши и выбираем Интернет -> Консоль, главное запустить сам OpenServer перед запуском самой консоли, должно появится это:

Теперь прописываем команды для каждого скрипта своя команда, выглядит она вот так:

php C:\Users\SEriA\OneDrive\Рабочий стол\LP\bot.php

php — Что будем выполнять
C:\Users\SEriA\OneDrive\Рабочий стол\LP\bot.php — Полный путь до файла который можно скопировать прямо в проводнике Windows

bot.php — Юзерский
bot2.php — Для группы

Архив с библиотекой и исходниками ниже:

Если есть вопросы, смелее пишите их в комментарии на сайте, с радостью поможем. Так же можете написать какую статью хотели бы видеть на нашем сайте, будем очень благодарны!

  • Сергей Котов
  • 29.11.2020
  • 12 182
  • 12
  • 9

Источник

Читайте также:  Cast arraylist to collection java
Оцените статью