Команды

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

Важной особенностью является тот факт, что можно задать любой путь к тексту от пользователя, будь то обычное сообщение, либо вовсе комментарий. Например, путь к тексту обычного сообщения (событие message_new) будет object.message.text (значение по умолчанию).

use Fastik1\VkBot\Commands\ExampleCommand;

$bot->setPrefix('/'); // установка префикса команды, по умолчанию: '!'

$bot->message(function ($event, $command, $argument1, $argument2) { // обработка команды /hello с двумя аргументами, которые приходят в функцию.
    // do something
})->command('hello');

$bot->message(function ($event, $command, $argument1, $argument2) { // обработка команды /hello с двумя аргументами в событии 'message_new'.
    // do something
})->command('hello', 'object.message.text', new ExampleBaseCommand);

$bot->message(function ($event, $command, $argument1, $argument2) { //  обработка команды /hello с двумя аргументами в событии 'wall_post_new' (как видим, в событии 'wall_post_new' необходимый для обработки текст находится в другом месте, поэтому мы указываем путь к нему)
    // do something
})->command('hello', 'object.text', new ExampleBaseCommand)

Класс для команды

Что такое класс команды? Это класс, который будет пре-валидировать команду (да-да, что-то схожнее с Rule, но другое).

Указание класса команды не обязательно.

Реализация класса для команды представлена ниже. Вместо события MessageNew может быть любое другое - это необходимо для типизации в IDE.

namespace Fastik1\Vkfast\Bot\Commands; // используйте свой namespace при создании собственных правил

class ExampleBaseCommand extends BaseCommand
{
    public function validate(MessageNew|Event $event, string $command, array $arguments): bool|array
    {
        return ['command' => $command, 'arguments' => $arguments];
    }
}

Класс команды должен возвращать либо массив с ключами "command" и "arguments", при необходимости изменяя их, либо false - для того, чтобы прекратить обработку команды и не попасть в обработчик.

Например, вы можете изменить какие-то аргументы команды (они приходят как массив), которые после попадут в обработчик

Last updated