onTextPreg
Метод создает маршрут, который срабатывает, если текст входящего сообщения соответствует заданному регулярному выражению (PCRE).
Это мощный инструмент для извлечения данных из текста произвольного формата, например, e-mail адресов, номеров телефонов, кодов заказов и т.д.
Параметры
| # | Название | Тип | Описание |
|---|---|---|---|
| 1 | id | string | Уникальный идентификатор для этого маршрута. |
| 2 | pattern | string|array | Регулярное выражение (или массив выражений), которому должен соответствовать текст. Если не указан, используется id. |
Возвращает
Action — экземпляр класса Action (Вспомогательный класс), на который можно навешивать дальнейшие действия (text, func и т.д.).
Обработка совпадений
Массив совпадений, полученный из функции preg_match, передается в качестве аргумента в обработчик func(). При этом:
- Первый элемент (
[0]) пропускается (он содержит полное совпадение, поэтому бесполезен), - Массив разворачивается с помощью оператора
....
Пример использования
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);
// Маршрут для извлечения email-адреса из текста
// Пользователь пишет: "Моя почта my.email@example.com"
$bot->onTextPreg('find_email', '/\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/')
->func(function(ZG $tg, string $email) {
$tg->msg("Спасибо! Я записал ваш email: {$email}")->send();
});
// Маршрут для извлечения суммы и валюты
// Пользователь пишет: "конвертируй 100 USD"
$bot->onTextPreg('converter', '^!конвертация\s+(\d+)\s+(RUB|EUR|USD)$')
->func(function(ZG $tg, int $amount, string $currency) {
// ... логика конвертации ...
$result = $amount * 90; // Пример
$tg->msg("{$amount} {$currency} это примерно {$result} RUB.")->send();
});
$bot->run();