onCommand
Метод onCommand
создает маршрут для текстовых команд, которые не начинаются со слеша (/
). Он идеально подходит для создания команд с аргументами, таких как !ban user123
, курс доллара
.
Параметры
# | Название | Тип | Описание |
---|---|---|---|
1 | id | string | Уникальный идентификатор для этого маршрута. |
2 | command | string |array | Шаблон команды или массив шаблонов. Если не указан, используется id . |
Возвращает
Action
— экземпляр класса Action
(Вспомогательный класс), на который можно навешивать дальнейшие действия (text
, func
и т.д.).
Шаблоны и аргументы
onCommand
поддерживает специальные плейсхолдеры для извлечения аргументов:
%w
(word) — одно слово (любая последовательность символов без пробелов).%n
(number) — одно число (последовательность цифр).%s
(string) — вся оставшаяся часть строки.
Значения, соответствующие этим плейсхолдерам, будут переданы в качестве аргументов в вашу функцию-обработчик func()
.
Пример использования
php
<?php
require_once __DIR__ . 'vendor/autoload.php';
use ZhenyaGR\TGZ\TGZ;
use ZhenyaGR\TGZ\Bot;
$tg = TGZ::create('ТОКЕН');
$bot = new Bot($tg);
// Простая команда без аргументов
$bot->onCommand('price', 'цена')
->text('Цена товара: 100 руб.');
// Команда с числовым аргументом
// Пользователь пишет: погода 12345
$bot->onCommand('weather', 'погода %n')
->func(function(int $cityId) use ($tg) {
// Логика получения погоды по ID города...
$tg->msg("Погода для города с ID {$cityId}: солнечно.")->send();
});
// Команда с несколькими аргументами
// Пользователь пишет: !kick @user_nickname флуд в чате
$bot->onCommand('kick', '!kick %w %s')
->func(function(string $username, string $reason) use ($tg) {
$tg->msg("Пользователь {$username} исключен. Причина: {$reason}.")->send();
});
// Команда без плейсхолдеров, но с аргументами (работает для простых случаев)
// Пользователь пишет: +additem молоко 2шт
$bot->onCommand('add_item', '+additem')
->func(function(string ...$args) use ($tg) {
$item = implode(' ', $args);
$tg->msg("Предмет '{$item}' добавлен в список.")->send();
});
$bot->run();