KOTOFF.NET
  • Главная
  • Пользователи
  • Контакты
  • Статистика
  • Правила
  • О нас
  • Вход / Регистрация

Создаем бота VK на библиотеке SimpleVK 3.x [Часть 1]

Статьи / PHP


С релизом новой ветки библиотеки SimpleVK появилось немало новых возможностей, что-то добавилось, что-то поменялось. Поэтому, если вы переходите со второй на третью ветку, код своего приложения придётся переделывать под новые реалии. Всё это мы будем постепенно разбирать в этой и последующих статьях на сайте.


Подготовка

Начинаем со стандартных процедур: подключаем библиотеку SimpleVK (будет в архиве с исходниками в конце статьи), создаём константы для работы с ботом (позже их заполним), инициализируем классы SimpleVK, Message и Bot:

<?php

require_once __DIR__ . '/vendor/digitalstars/simplevk/autoload.php';


const VK_KEY = '*********************************'; // Токен сообщества
const ACCESS_KEY = '********'; // Строка, которую должен вернуть сервер
const VERSION = '5.131'; // Версия VK API
const ADMIN_ID = '*******'; // Айди своей страницы (для лога ошибок)



$vk = \DigitalStars\SimpleVK\SimpleVK::create( VK_KEY, VERSION )->setConfirm( ACCESS_KEY )->setUserLogError( ADMIN_ID ); // Включаем лог ошибок в личку себе
$msg = \DigitalStars\SimpleVK\Message::create( $vk ); // Экземпляр класса Message
$bot = \DigitalStars\SimpleVK\Bot::create( $vk ); // Экземпляр класса Bot


Простые команды для бота

Для простых команд бота используется следующая конструкция:

$bot->cmd( $id, $mask )->text( $text );

Также в конце необходимо будет запустить бота (метод run()):

$bot->run();

Метод cmd() принимает на вход $id (уникальный идентификатор команды) и $mask (маска команды). А метод text() - текст сообщения.

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

$bot->cmd( 'date', '/дата' )->text( 'Точное время: ' . date( 'd.m.Y H:i:s' ) );


В качестве второго параметра в методе cmd() можно передать также и массив. Например, если мне необходимо сделать несколько вариаций написания одной и той же команды, то сделать это можно так:

$bot->cmd( 'hi', [ 'привет', 'хелло', 'ку', 'здарова' ] )->text( 'Приветик' );

То есть бот будет отправлять "Приветик", если написать ему одно из четырёх значений из переданного массива.


Отправка картинок

Чтобы заставить бота отправлять изображения пользователям - достаточно приписать к вышеуказанной конструкции метод img() и передать в него ссылку на картинку:

$bot->cmd( 'img', '/картинка' )->text( 'Держи картинку' )->img( 'http://s2.fotokto.ru/photo/full/266/2668620.jpg' );


Опять же, можно передать массив из нескольких картинок, бот отправит все (максимум 10):

$bot->cmd( 'img', '/картинка' )->text( 'Держи картинку' )->img( [ 'http://s2.fotokto.ru/photo/full/266/2668620.jpg', 'https://img.desktopwallpapers.ru/rocks/pics/wide/1920x1200/27640f370156a0e0ae3ee9608fc8480a.jpg' ] );


Команды с параметрами

Для примера добавлю боту команду '/пароль', которая будет генерировать рандомный ключ из указанного количества символов. Для удобства создам функцию для генерации, а потом будем её каждый раз вызывать по команде:

function generatePassword( int $length ) : string
{
    if ( $length < 4 or $length > 120 )
        return 'Минимальная длина пароля - 4 символа, максимальная - 120';


    $symbols = array (
        'A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'E', 'e', 'F', 'f', 'G', 'g', 'H', 'h', 'I', 'i',
        'J', 'j', 'K', 'k', 'L', 'l', 'M', 'm', 'N', 'n', 'O', 'o', 'P', 'p', 'Q', 'q', 'R', 'r',
        'S', 's', 'T', 't', 'U', 'u', 'V', 'v', 'W', 'w', 'X', 'x', 'Y', 'y', 'Z', 'z',

        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
    );
    $password = '';
    $max = count( $symbols ) - 1;

    for ( $i = 0; $i < $length; $i++ )
    {
        $password .= $symbols[ mt_rand( 0, $max ) ];
    }


    return 'Твой пароль: ' . $password;
}

Теперь можно добавить обработку команды '/пароль':

$bot->cmd( 'sum', '/пароль %n' )->func( function ( $msg, $params )
{
    $msg->text( generatePassword( $params[0] ) );
} );

В маску команды добавляем числовой заполнитель %n (числовой, т.к. вторым параметром указывается длина пароля в виде числа). Для строк, кстати, есть свой заполнитель - %s.


Команды с регулярным выражением

Чтобы в качестве параметра команды можно было писать какой-то произвольный текст - следует воспользоваться методом preg_cmd(). Для примера сделаю команду для отправки репорта админу бота (в моём случае самому себе):

$bot->preg_cmd('report', "!/репорт (.*)!")->func( function ( $report, $params )
{
    global $msg;

    $msg->text( 'Новый репорт: ' . $params[1] )->send( ADMIN_ID );
    $report->text( 'Репорт отправлен, текст твоего сообщения: ' . $params[1] );
} );


Кнопки для бота

Сразу сделаю общее меню, а также редирект на это меню, если от пользователя пришла неизвестная команда:

$bot->redirect( 'other', 'first' ); // Отправляем юзеру меню, если от него пришла неизвестная команда/кнопка
$bot->cmd( 'first' )->kbd( [ [ 'commands' ], [ 'btn_1', 'btn_2', 'btn_3' ] ] )->text( 'Меню:' ); // Отправляется при нажатии на кнопку 'Начать'

Принцип работы с кнопками такой же, как и с обычными командами. Метод btn() принимает на вход уникальный идентификатор и текст кнопки. Метод text() - текст сообщения, которое бот отправил юзеру вместе с клавиатурой. 

Кнопка для отправки пользователю списка команд:

$bot->btn( 'commands', 'Список команд' )->text( "/дата - точное время\n/картинка - рандомная картинка\n/пароль - генерация пароля заданной длины" );

Вторым параметром для метода btn() можно передать массив, в котором указать текст кнопки и её цвет:

$bot->btn( 'btn_1', [ 'Кнопка №1', 'green' ] )->text( 'Ты нажал на зелёную кнопку (№1)' );
$bot->btn( 'btn_2', [ 'Кнопка №2', 'blue' ] )->text( 'Ты нажал на синюю кнопку (№2)' );
$bot->btn( 'btn_3', [ 'Кнопка №3', 'red' ] )->text( 'Ты нажал на красную кнопку (№3)' );


Напомню, что в конце нужно запустить бота:

$bot->run(); // Запуск


Весь код

<?php

require_once __DIR__ . '/vendor/digitalstars/simplevk/autoload.php';


const VK_KEY = '*********************************'; // Токен сообщества
const ACCESS_KEY = '********'; // Строка, которую должен вернуть сервер
const VERSION = '5.131'; // Версия VK API
const ADMIN_ID = '*******'; // Айди своей страницы (для лога ошибок)



$vk = \DigitalStars\SimpleVK\SimpleVK::create( VK_KEY, VERSION )->setConfirm( ACCESS_KEY )->setUserLogError( ADMIN_ID ); // Включаем лог ошибок в личку себе
$msg = \DigitalStars\SimpleVK\Message::create( $vk ); // Экземпляр класса Message
$bot = \DigitalStars\SimpleVK\Bot::create( $vk ); // Экземпляр класса Bot



/* Команды для бота [Начало] */

$bot->cmd( 'date', '/дата' )->text( 'Точное время: ' . date( 'd.m.Y H:i:s' ) );
$bot->cmd( 'img', '/картинка' )->text( 'Держи картинку' )->img( [ 'http://s2.fotokto.ru/photo/full/266/2668620.jpg', 'https://img.desktopwallpapers.ru/rocks/pics/wide/1920x1200/27640f370156a0e0ae3ee9608fc8480a.jpg' ] );
$bot->cmd( 'hi', [ 'привет', 'хелло', 'ку', 'здарова' ] )->text( 'Приветик' );

$bot->cmd( 'sum', '/пароль %n' )->func( function ( $msg, $params )
{
    $msg->text( generatePassword( $params[0] ) );
} );
$bot->preg_cmd('report', "!/репорт (.*)!")->func( function ( $report, $params )
{
    global $msg;

    $msg->text( 'Новый репорт: ' . $params[1] )->send( ADMIN_ID );
    $report->text( 'Репорт отправлен, текст твоего сообщения: ' . $params[1] );
} );

/* Команды для бота [Конец] */


/* Кнопки для бота [Начало] */

$bot->redirect( 'other', 'first' ); // Отправляем юзеру меню, если от него пришла неизвестная команда/кнопка
$bot->cmd( 'first' )->kbd( [ [ 'commands' ], [ 'btn_1', 'btn_2', 'btn_3' ] ] )->text( 'Меню:' ); // Отправляется при нажатии на кнопку 'Начать'
$bot->btn( 'commands', 'Список команд' )->text( "/дата - точное время\n/картинка - рандомная картинка\n/пароль - генерация пароля заданной длины" );
$bot->btn( 'btn_1', [ 'Кнопка №1', 'green' ] )->text( 'Ты нажал на зелёную кнопку (№1)' );
$bot->btn( 'btn_2', [ 'Кнопка №2', 'blue' ] )->text( 'Ты нажал на синюю кнопку (№2)' );
$bot->btn( 'btn_3', [ 'Кнопка №3', 'red' ] )->text( 'Ты нажал на красную кнопку (№3)' );

/* Кнопки для бота [Конец] */

$bot->run(); // Запуск



function generatePassword( int $length ) : string
{
    if ( $length < 4 or $length > 120 )
        return 'Минимальная длина пароля - 4 символа, максимальная - 120';


    $symbols = array (
        'A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'E', 'e', 'F', 'f', 'G', 'g', 'H', 'h', 'I', 'i',
        'J', 'j', 'K', 'k', 'L', 'l', 'M', 'm', 'N', 'n', 'O', 'o', 'P', 'p', 'Q', 'q', 'R', 'r',
        'S', 's', 'T', 't', 'U', 'u', 'V', 'v', 'W', 'w', 'X', 'x', 'Y', 'y', 'Z', 'z',

        '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
    );
    $password = '';
    $max = count( $symbols ) - 1;

    for ( $i = 0; $i < $length; $i++ )
    {
        $password .= $symbols[ mt_rand( 0, $max ) ];
    }


    return 'Твой пароль: ' . $password;
}


Настройка сообщества

 Показать / Скрыть текст

1. Включаем сообщения сообщества и возможности для ботов:

2. Создаём новый токен и вставляем его в константу VK_KEY:

3. Выбираем версию API и вставляем её в константу VERSION -> указываем ссылку на бота -> копируем и вставляем ACCESS_KEY в одноимённую константу в коде -> сохраняем файл на сервере -> нажимаем кнопку 'Подтвердить':

4. В типах событий выбираем входящие:


На этом первая часть по SimpleVK 3.x завершена, осталось протестировать бота:


bot.zip

  • 5id15
  • 26.07.2022
  • 389
  • 0
Callback-кнопки для бота ВК
Callback-кнопки для бота ВК
22-07-2022, 20:20, PHP
Карусели для бота ВК
Карусели для бота ВК
24-07-2022, 15:48, PHP
Movie

Нет комментариев. Не желаешь оставить первый комментарий?

Перед публикацией, советую ознакомится с правилами!

{login}

Твой комментарий..

Заказывай!
Разработка ботов на заказ, любой сложности, обращаться:
 VK KOTOFF.net - Сообщество, в личные сообщения или по контактам указанным там 
 mail: [email protected]

Рекламный блок
  • Новости
  • Блог
  • Игры
  • Обновления
  • Программы
  • Статьи
    • PHP
    • Python
  • Дизайн
    • PSD исходники
  • DLE
    • Шаблоны
    • Модули
    • Хаки
  • Магазин
Комментарии
Готовый обработчик платежей ANYPAY.io для ботов ВК и сайтов
А ты сделай на сайт этот шаблон какой-то и отправь запрос они примут
Вывод записей из БД по дням (по месяцам)
А можно просто сгрупировать нужные данные по дням в sql запросе и не городить кучу ненужно кода.
Скрипт исключения из беседы VK и не только, написанный на PHP
Если Ваш код соответствует, то в $userinfo будут лежать first_name и last_name
Callback-кнопки для бота ВК
Если есть предложения про что конкретно нужно написать статью, пишите)
Callback-кнопки для бота ВК
Спасибо за статью! Читаю все ваши статьи про создание ботов, мне было очень полезно! Странно, что
Все комментарии..
Полный список последних комментариев
Лучшие новости
Создание простого Telegram-бота с клавиатурой и inline-кнопками [Часть 2]

Создание простого

10-08-2022, 20:16
Стейты для бота ВК (последовательный ввод step by step)

Стейты для бота ВК

20-07-2022, 20:03
Callback-кнопки для бота ВК

Callback-кнопки для бота ВК

22-07-2022, 20:20
Карусели для бота ВК

Карусели для бота ВК

24-07-2022, 15:48
Создаем бота VK на библиотеке SimpleVK 3.x [Часть 1]

Создаем бота VK на

26-07-2022, 17:01
Форматы вывода дат относительно текущего времени

Форматы вывода дат

14-07-2022, 00:16
Вывод записей из БД по дням (по месяцам)

Вывод записей из БД по дням

15-07-2022, 15:02
Пагинация кнопок для LongPoll-бота ВК — на библиотеке SimpleVK 3.x [Часть 2]

Пагинация кнопок для

4-08-2022, 16:43
Поиск записей в группе ВКонтакте по автору

Поиск записей в группе

3-08-2022, 17:26
Всего публикаций: 66
Добавлено за сутки: +0
Записей в блоге: 1
Добавлено за сутки: +0
Комментариев: 810
Добавлено за сутки: +0
Пользователей: 3711
Добавлено за сутки: +0
Полная статистика..
Подробная статистика сайта
Loading...

Нашли ошибку?
Вы можете сообщить об этом администрации.
Выделив текст нажмите CTRL+Enter

Полезные ссылки
  • О проекте
  • Наши контакты
  • Администрация
  • Рекламные материалы
  • Идеи и предложения
  • Ответы на вопросы
Информация
  • Условия сделки
  • Способы оплаты
  • Поддержка / F.A.Q
  • Онлайн документация
  • Статистика сайта
  • Список пользователей
Услуги/Работа
  • Разработка ботов ВК
  • Обновление проекта
  • Консультация/поддержка
KOTOFF.net

Copyright © Footer 2019-2022. All right reserved.
KOTOFF.net - Уроки по PHP, SQL, IT новости
Быстрый вход

Используйте социальные сети для быстрой регистрации и авторизации.

Google
ВКонтакте
Яндекс
Mail.ru
Создать аккаунт / Регистрация
Авторизация

Я забыл свой пароль