onCommand
Метод создает маршрут для текстовых команд, которые не начинаются со слеша (/). Он идеально подходит для создания команд с аргументами, таких как !ban user123, курс доллара.
Правила парсинга плейсхолдеров (Regex Logic)
Плейсхолдер {name} преобразуется в паттерн \S+ (любой непробельный символ). Суть: Аргументом считается всё до ближайшего пробела. Разделитель: Между словами команды ожидается один или несколько пробелов (\s+).
Параметры
| # | Название | Тип | Описание |
|---|---|---|---|
| 1 | id | string | Уникальный идентификатор для этого маршрута. |
| 2 | command | string|array | Шаблон команды или массив шаблонов. Если не указан, используется id. |
Возвращает
Action — экземпляр класса Action (Вспомогательный класс), на который можно навешивать дальнейшие действия (text, func и т.д.).
Шаблоны и аргументы
onCommand поддерживает синтаксис в стиле Laravel для захвата переменных из текста команд. Вы можете использовать плейсхолдеры в фигурных скобках {name}, чтобы передать часть сообщения как аргумент в вашу функцию-обработчик. Значения, соответствующие этим плейсхолдерам, будут переданы в качестве аргументов в вашу функцию-обработчик func().
Если плейсхолдеров не задано, в обработчик будут переданы все аргументы команды (слова через пробел).
Жадный захват
Плейсхолдеры используют завхват
Пример использования
<?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();