Перейти к содержимому

onCommand

Метод создает маршрут для текстовых команд, которые не начинаются со слеша (/). Он идеально подходит для создания команд с аргументами, таких как !ban user123, курс доллара.

Правила парсинга плейсхолдеров (Regex Logic)

Плейсхолдер {name} преобразуется в паттерн \S+ (любой непробельный символ). Суть: Аргументом считается всё до ближайшего пробела. Разделитель: Между словами команды ожидается один или несколько пробелов (\s+).

Параметры

#НазваниеТипОписание
1idstringУникальный идентификатор для этого маршрута.
2commandstring|arrayШаблон команды или массив шаблонов. Если не указан, используется id.

Возвращает

Action — экземпляр класса Action (Вспомогательный класс), на который можно навешивать дальнейшие действия (text, func и т.д.).

Шаблоны и аргументы

onCommand поддерживает синтаксис в стиле Laravel для захвата переменных из текста команд. Вы можете использовать плейсхолдеры в фигурных скобках {name}, чтобы передать часть сообщения как аргумент в вашу функцию-обработчик. Значения, соответствующие этим плейсхолдерам, будут переданы в качестве аргументов в вашу функцию-обработчик func().
Если плейсхолдеров не задано, в обработчик будут переданы все аргументы команды (слова через пробел).

Жадный захват

Плейсхолдеры используют завхват

Пример использования

php
<?php
require_once __DIR__ . '/vendor/autoload.php';
use ZenithGram\ZenithGram\ZG;
use ZenithGram\ZenithGram\Bot;

$tg = ZG::create(BOT_TOKEN);
$bot = new Bot($tg);

// Простая команда без аргументов
$bot->onCommand('price', 'цена')
    ->text('Цена товара: 100 руб.');

// Команда с числовым аргументом
// Пользователь пишет: погода 12345
$bot->onCommand('weather', 'погода {city_id}')
    ->func(function(ZG $tg, string $city_id) {
        // Логика получения погоды по ID города...
        $tg->msg("Погода для города с ID {$city_id}: солнечно.")->send();
    });

// Команда с несколькими аргументами
// Пользователь пишет: !kick @user_nickname флуд в чате
$bot->onCommand('kick', '!kick {username} {reason}')
    ->func(function(ZG $tg, string $username, string $reason) {
        $tg->msg("Пользователь {$username} исключен. Причина: {$reason}.")->send();
    });

// Команда без плейсхолдеров, но с аргументами (работает для простых случаев)
// Пользователь пишет: +additem молоко 2шт
$bot->onCommand('add_item', '+additem')
    ->func(function(ZG $tg, string ...$args) {
        $item = implode(' ', $args);
        $tg->msg("Предмет '{$item}' добавлен в список.")->send();
    });

$bot->run();

Опубликовано под лицензией MIT.