All Projects → iSa1vatore → vk-callback-bot

iSa1vatore / vk-callback-bot

Licence: other
Бот для сообществ VK на основе CallBack. Взаимодействие с клавиатурой, загрузка файлов.

Programming Languages

PHP
23972 projects - #3 most used programming language

Projects that are alternatives of or similar to vk-callback-bot

VK API
VK API Wrapper - in progress
Stars: ✭ 16 (-23.81%)
Mutual labels:  vkontakte-api, vk-api, vk-sdk
vk-api
VK SDK | VKontakte wrapper for standalone apps
Stars: ✭ 30 (+42.86%)
Mutual labels:  vkontakte-api, vk-api, vk-sdk
Vkbottle
Homogenic! Customizable asynchronous VK API framework
Stars: ✭ 191 (+809.52%)
Mutual labels:  callback, vk-api
VkNet.AudioBypass
Обход закрытия методов audio и messages для VkNet
Stars: ✭ 48 (+128.57%)
Mutual labels:  vk-api, vk-sdk
java-vk-bots-long-poll-api
A Java library to create VK bots using Bots Long Poll API
Stars: ✭ 30 (+42.86%)
Mutual labels:  vk-api, vk-sdk
VK-Scraper
Scrapes VK user's photos
Stars: ✭ 42 (+100%)
Mutual labels:  vkontakte-api, vk-api
vbio
Python модуль для написания скриптов, использующих Bots API для социальной сети Вконтакте (vk.com)
Stars: ✭ 10 (-52.38%)
Mutual labels:  vkontakte-api, vk-api
vkbottle
Сustomizable asynchronous VK API framework
Stars: ✭ 371 (+1666.67%)
Mutual labels:  callback, vk-api
py-vkontakte
A Python wrapper around the vk.com
Stars: ✭ 17 (-19.05%)
Mutual labels:  vkontakte-api, vk-api
Pydesignpattern
Design Pattern that described by Python, This is the source code for the book of Everybody Know Design Patterns.
Stars: ✭ 174 (+728.57%)
Mutual labels:  callback
Escape From Callback Mountain
Example Project & Guide for mastering Promises in Node/JavaScript. Feat. proposed 'Functional River' pattern
Stars: ✭ 249 (+1085.71%)
Mutual labels:  callback
Use Callback Ref
🤙The same useRef, but it will callback
Stars: ✭ 157 (+647.62%)
Mutual labels:  callback
Serializablecallback
UnityEvent and System.Func had a child
Stars: ✭ 180 (+757.14%)
Mutual labels:  callback
Metasync
Asynchronous Programming Library for JavaScript & Node.js
Stars: ✭ 164 (+680.95%)
Mutual labels:  callback
vk
ВКонтакте Social Network SDK
Stars: ✭ 18 (-14.29%)
Mutual labels:  vkontakte-api
Use State With Callback
Custom hook to include a callback function for useState.
Stars: ✭ 147 (+600%)
Mutual labels:  callback
React Permissible
👮‍♂️Making the permission management for React components easier.
Stars: ✭ 145 (+590.48%)
Mutual labels:  callback
prophetjs
Vanilla JS library to display toast messages.
Stars: ✭ 31 (+47.62%)
Mutual labels:  callback
ruling
Stateless rule engine
Stars: ✭ 19 (-9.52%)
Mutual labels:  callback
Keyboard
Hook and simulate global keyboard events on Windows and Linux.
Stars: ✭ 2,687 (+12695.24%)
Mutual labels:  callback

CallBack-бот для VK.

В этой библиотке есть все что вам потребуется для автоматического взаимодействия с пользователем в чате сообщества.

Для настройки вам понадобится:

  1. Создать объект.
require __DIR__.'/VKCallBackBot/VKCallBackBot.php';

$bot = new VKCallBackBot([
    'access_token' => 'ACCESS_TOKEN',
    'confirmation_key' => 'CONFIRMATION',
    'callback_secret' => 'SECRET', //Секретный ключ проверяется, если указан.
    'fwdMessagesProcess' => true, //Берем команды из сообщений, которые переслал пользователь.
    'WebServer' => 1, // 1 - nginx; 2 - apache.
    'vAPI' => '5.92',
]);

access_token - Ключ доступа к сообществу, получается в настройках>Работа c API>Ключи доступа. Создаем и выдаем все нужные права после чего придет смс на телефон, вводим и получаем токен.

confirmation_key - Строка, которую должен вернуть сервер, находится в разделе "CallBack API".

callback_secret - Секретный ключ, в разделе "CallBack API" под него есть поле, вводим любые символы и сохраняем. Те же символы вводим и в конфиг объекта.

WebServer - обязательно нужно указать, используется для того, чтобы отправить VK ответ и продолжить выполнение скрипта. Например если вы будете грузить большой фаил пользователю, то VK вывалит TimeOut на запрос и пошлет его повторно.

В разделе "CallBack API" выбираем версию 5.92 и указываем адрес, например https://example.com/index.php, но не нажимаем подтвердить :)

Добавляем обработку событий после объекта:

switch ($bot->event) {
    case 'confirmation':
    exit($bot->confirmation_key);
    break;
}

Теперь вы можете нажать кнопку "Подтвердить" и если все верно, то сервер установится.

По итогу у вас должен получиться примерно такой код:

require __DIR__.'/VKCallBackBot/VKCallBackBot.php';

$bot = new VKCallBackBot([
    'access_token' => '632130721aa8da3183a02e885eef468947a1ac51139d3bee30c546ce118f23ab77f58e0918e08306bf00k',
    'confirmation_key' => '7c5478f7',
    'callback_secret' => '7c7c5478f7547c5478f778f7', //Секретный ключ проверяется, если указан.
    'fwdMessagesProcess' => true, //Берем команды из сообщений, которые переслал пользователь.
    'WebServer' => 1, // 1 - nginx; 2 - apache.
    'vAPI' => '5.92',
]);

switch ($bot->event) {
    case 'confirmation':
        exit($bot->confirmation_key);
        break;
}

Теперь включим обработку сообщений от пользователя, для этого добавим обработку типа "message_new", так же не забудьте поставить обработку входящих сообщений во вкладке "Типы событий". Обязательно добавляем в конец файла функцию, которая отправит строку "OK", так VK поймет, что мы смогли ответить на событие и не будет отправлять его повторно.

switch ($bot->event) {
    case 'message_new':

        //Обрабатывает сообщение пользователя и вводит нужные переменные.
        $bot->MessageProcessing();

        switch ($bot->command) {
            case 'start':
            case 'начать':
                $bot->message
                    ->text("Добро пожаловать!")
                    ->send();
                break;
            default:
                $bot->message
                    ->text("Команда не найдена.")
                    ->send();
                break;
        }

    break;

    case 'confirmation':
        exit($bot->confirmation_key);
        break;
}

$bot->sendOK();

Команда пользователя находится в переменной $bot->command она формируется из первого слова в сообщении, остальные слова помещаются по одному в массив $bot->commandOptions.

Далее мы видим обращение к объекту $bot->message он нужен для отправки/удаления/редактирования сообщений. Чтобы отправить простое текстовое сообщение нужно выполнить след. команду:

$bot->message
    ->text("Текст")
    ->send();

Также можно прикрепить вложения:

Прикрепление изображения:

$bot->message
    ->addPhoto('photo137371466_325103360') //1 метод
    ->addPhoto(137371466, 456239044) // 2 метод
    ->text("Текст")
    ->send();

Прикрепление документа:

$bot->message
    ->addDoc('doc-166966945_472727937') //1 метод
    ->addDoc(-166966945, 472727937) // 2 метод
    ->text("Текст")
    ->send();

Прикрепление видео:

$bot->message
    ->addVideo('video277941697_456239037') //1 метод
    ->addVideo(277941697, 456239037) // 2 метод
    ->text("Текст")
    ->send();

Прикрепление аудиозаписи:

$bot->message
    ->addAudio('audio137371466_456239655') //1 метод
    ->addAudio(137371466, 456239655) // 2 метод
    ->text("Текст")
    ->send();

Прикрепление записи:

$bot->message
    ->addWall('wall137371466_2811') //1 метод
    ->addWall(137371466, 2811) // 2 метод
    ->text("Текст")
    ->send();

Добавление клавиатуры:

$bot->message
    ->keyboard()
    ->row()
    ->button('Кнопка 1 в первом ряду', 'positive', ['command' => 'start'])
    ->button('Кнопка 2 в первом ряду', 'positive', ['iSa1vatore' => 'Sexy boy'])
    ->row()
    ->button('Кнопка 1 во втором ряду', 'positive', [])
    ->button('Кнопка 2 во втором ряду', 'positive', [])
    ->row()
    ->button('Кнопка 1 третьем ряду', 'positive', ['command' => 'sendAttach', 'parametr' => 5])
    ->one_time() //false by default
    ->text("Клацни на кнопошку")
    ->send();

Для создания массива клавиатуры вызовите ->keyboard()

Для создания ряда используйте ->row()

Для создания кнопки используйте ->button(Название, Цвет, массив который будет передан в payload)

У кнопок может быть один из 4 цветов:

  1. primary — синяя кнопка, обозначает основное действие. #5181B8
  2. default — обычная белая кнопка. #FFFFFF
  3. negative — опасное действие, или отрицательное действие (отклонить, удалить и тд). #E64646
  4. positive — согласиться, подтвердить. #4BB34B Если передать "command" в payload, то именно эта команда попадет в переменную $bot->command. (Кнопка 1 в первом ряду)

После того как вы сформировали клавиатуру добавьте ->one_time() эта функция сформирует клавиатуру. В неё также можно передать параметр true, тогда клавиатура удалится у пользователя как только он ей воспользуется.

Если вам нужно передавать одинаковую клавиатуру сразу в нескольких условиях, то вы можете поместить её в переменную.

Помещение клавиатуры в переменную и отправка:

$defaultKeyboard = $bot->message
->keyboard()
    ->row()
    ->button('Кнопка 1', 'primary', ['command' => 'clickbutton', 'parametr' => 1])
    ->button('Кнопка 2', 'primary', ['command' => 'clickbutton', 'parametr' => 2])
    ->row()
    ->button('Кнопка 3', 'positive', ['thisbutton' => 3])
    ->button('Кнопка 4', 'positive', ['thisbutton' => 4])
    ->one_time() //false by default
    ->getKeyboard(); //getKeyboard возвращает строку.

$bot->message
    ->text("Добро пожаловать!")
    ->setKeyboard($defaultKeyboard) //setKeyboard добавляет клавиатуру из переменной.
    ->send();

Чтобы удалить сообщение вызовите метод delete у объекта message передав в параметр ID сообщения.

$mid = $bot->message->text("Меня удалят, вот же бля(")->send();

$bot->message->delete($mid);

Для редактирования сообщения используйте метод edit вместо send, но передав ID сообщения. Также добавить вложения.

$mid = $bot->message->text("Ghbdtn!")->send();

$bot->message->text("Привет!")->edit($mid);

Загрузка файлов (Думаю, примера кода будет достаточно):

$bot->message->text("Началась загрузка файлов!")->send();
				
//Передаю параметр false, тем самым не прекращая работу скрипта, а VK получает ответ "ok".
//Рекомендую использовать когда пользователю нужно отправить большой фаил и нужно чтобы VK не выбил TimeOut.
$bot->sendOK(false);

//Загрузка фото
$uploadPhoto = $bot->api->uploadPhoto(__DIR__.'/assets/image.jpg');

if(isset($uploadPhoto['id'])) {
    $bot->message
        ->addPhoto($uploadPhoto['oid'], $uploadPhoto['id'])
        ->send();
} else {
  $bot->message->text("Возникла ошибка при загрузке.")->send();
}

//Загрузка документа
$uploadDoc = $bot->api->uploadDoc(__DIR__.'/assets/file.txt', 'Название');

if(isset($uploadDoc['id'])) {
    $bot->message
        ->addDoc($uploadDoc['oid'], $uploadDoc['id'])
        ->send();
} else {
  $bot->message->text("Возникла ошибка при загрузке.")->send();
}

//Загрузка голосового сообщения
$uploadVoice = $bot->api->uploadVoice(__DIR__.'/assets/click_audio.wav');

if(isset($uploadVoice['id'])) {
    $bot->message
        ->addDoc($uploadVoice['oid'], $uploadVoice['id'])
        ->send();
} else {
  $bot->message->text("Возникла ошибка при загрузке.")->send();
}

Пример бота созданного на этой основе: https://vk.com/vkbotbyisa1vatore

Исходный код этого бота: https://github.com/iSa1vatore/vk-callback-bot/tree/master/example

По вопросам и предложениям пишите мне в VK: https://vk.com/s9008

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].