Примеры ботов
Минимальный Callback
Бот отвечает на любое сообщение
php
<?php
require_once __DIR__ . '/vendor/autoload.php';
use ZenithGram\ZenithGram\ZG;
$tg = ZG::create(BOT_TOKEN);
$tg->msg('Привет, Мир!')->send();Простой Callback – (Эхо-бот)
Бот копирует любое сообщение
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->onMessage()->func(function(ZG $tg) {
$tg->copyMsg();
});
$bot->run(); // Запускаем обработку событияПростой LongPoll – (Эхо-бот)
php
require_once __DIR__ . '/vendor/autoload.php';
use ZenithGram\ZenithGram\LongPoll;
use ZenithGram\ZenithGram\ZG;
use ZenithGram\ZenithGram\Bot;
$lp = LongPoll::create(BOT_TOKEN);
$bot = new Bot(); // Создаем экземпляр бота без основного класса
$bot->onMessage()->func(function(ZG $tg) {
$tg->copyMsg();
});
$lp->listen(function(ZG $tg) {
$bot->zg($tg)->run(); // Пробрасываем класс и запускаем обработку события
});Бот с командой (Callback)
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('img', '!картинка')
->img('cat.jpg')
->text('Вот твой кот');
$bot->run(); // Запускаем обработку событияБот с командой (LongPoll)
php
<?php
require_once __DIR__ . '/vendor/autoload.php';
use ZenithGram\ZenithGram\LongPoll;
use ZenithGram\ZenithGram\ZG;
use ZenithGram\ZenithGram\Bot;
$lp = LongPoll::create(BOT_TOKEN);
$bot = new Bot(); // Создаем экземпляр бота без основного класса
$bot->onCommand('img', '!картинка')
->img('cat.jpg')
->text('Вот твой кот');
$lp->listen(function (ZG $tg) {
$bot->zg($tg)->run(); // Пробрасываем класс и запускаем обработку события
});Бот с обработкой команд на конструкторе (Callback)
php
<?php
require_once __DIR__ . '/vendor/autoload.php';
use ZenithGram\ZenithGram\ZG;
use ZenithGram\ZenithGram\Bot;
use ZenithGram\ZenithGram\Button;
$tg = ZG::create(BOT_TOKEN);
$bot = new Bot($tg); // Создаем экземпляр бота
// Обработка команды бота
$bot->onBotCommand('img', '/img')
->img('cat.jpg')
->text('Изображение с котиком');
// Обработка команды с параметрами
$bot->onCommand('sum', '!посчитай {number1} + {number2}')
->func(function (ZG $tg, $number1, $number2) {
$tg->msg($number1 + $number2)->send();
});
// Обработка полного совпадения текста
$bot->onText('help', "помощь")->func(function (ZG $tg) {
$tg->msg("Никто тебе не поможет")->send();
});
// Обработка команды по регулярному выражению
$bot->onTextPreg('more_word', '/^!напиши\s+(.*)/iu')
->func(function (ZG $tg, $match) {
$tg->msg("Ваше предложение: " . $match)->send();
});
// Обработка неизвестного текста
$bot->onDefault()->func(function (ZG $tg) {
$tg->msg("Я не понимаю твоего текста")->send();
});
$bot->run();Бот с обработкой текстовых кнопок на конструкторе (Callback)
php
<?php
require_once __DIR__ . '/vendor/autoload.php';
use ZenithGram\ZenithGram\ZG;
use ZenithGram\ZenithGram\Bot;
use ZenithGram\ZenithGram\Button;
$tg = ZG::create(BOT_TOKEN);
$bot = new Bot($tg); // Создаем экземпляр бота
$bot->onStart()
->text('Выберите животное:')
->kbd([['fish', 'cat']]);
// Создаем кнопки с помощью класса Bot и сразу задаем их обработчики
$bot->btn('fish', 'Рыбка')->text('Вы выбрали Рыбку!')->img('fish.jpg');
$bot->btn('cat', 'Котик')->text('Вы выбрали Котика!')->img('cat.jpg');
// Создаем кнопки вручную с помощью класса Button
$bot->onBotCommand('/help')
->text('Выбери, чья помощь тебе нужна')
->kbd([[
Button::text('Человека'),
Button::text('Бота'),
]]);
// Создаем обработчики для кнопок с помощью полного совпадения текста
$bot->onText('Человека')->text('Делать нам нечего, время на тебя тратить');
$bot->onText('Бота')->text('Он много электричества потребляет');
$bot->run();Бот с обработкой Inline-Кнопок на конструкторе (Callback)
php
<?php
require_once 'vendor/autoload.php';
use ZenithGram\ZenithGram\ZG;
use ZenithGram\ZenithGram\Bot;
use ZenithGram\ZenithGram\Button;
$tg = ZG::create(BOT_TOKEN);
$bot = new Bot($tg);
$bot->onBotCommand('/vote')
->text('Нравится ли тебе этот бот?')
->inlineKbd([['like', 'dislike']]);
// Создаем кнопки с помощью класса Bot и сразу задаем их обработчики
$bot->btn('like', '👍')->text('Спасибо за лайк!')->query('Спасибо за оценку!');
$bot->btn('dislike', '👎')->text('Жаль, что не понравилось...')->query('Спасибо за оценку!');
// Создаем кнопки вручную с помощью класса Button
$bot->onBotCommand('/grade')
->text('Оцени бота от 0 до 1')
->inlineKbd([[
Button::cb('0', 'grade_0'),
Button::cb('1', 'grade_1')
]]);
// Создаем обработчики для кнопок с помощью callback_data
$bot->onCallback('grade_0')->text('Придется от тебя избавится')->query('Оценка неправильная');
$bot->onCallback('grade_1')->text('Спасибо за непредвзятую оценку!')->query('Оценка отличная!');
$bot->run();Бот с пагинацией (Catalog Bot)
php
<?php
require_once __DIR__ . '/vendor/autoload.php';
use ZenithGram\ZenithGram\ZG;
use ZenithGram\ZenithGram\Bot;
use ZenithGram\ZenithGram\Button;
$tg = ZG::create(BOT_TOKEN);
$bot = new Bot($tg);
// Функция для генерации клавиатуры
// В реальном проекте будет использоваться база данных и т.д.
function getCatalogKeyboard(ZG $tg, int $page): array {
$items = [];
for ($i = 1; $i <= 50; $i++) {
$items[] = Button::cb("Товар #$i", "buy_item_$i");
}
return $tg->pagination()
->setItems($items)
->setPerPage(6) // 6 товаров на странице
->setColumns(2) // 2 колонки
->setPage($page)
->setPrefix('catalog_page_') // Префикс для навигации
->addReturnBtn('🔙 Закрыть', 'close_menu')
->create();
}
// 1. Команда открытия каталога
$bot->onBotCommand('shop', '/shop')
->func(function(ZG $tg) {
$tg->msg("📦 Каталог товаров (Стр. 1):")
->inlineKbd(getCatalogKeyboard($tg, 1))
->send();
});
// 2. Обработка переключения страниц (ловится паттерн catalog_page_ЧИСЛО)
$bot->onCallbackPreg('shop_nav', '/^catalog_page_(\d+)$/')
->func(function(ZG $tg, $page) {
$tg->answerCallbackQuery($tg->getQueryId());
$tg->msg("📦 Каталог товаров (Стр. $page):")
->inlineKbd(getCatalogKeyboard($tg, (int)$page))
->editText();
});
// 3. Обработка покупки товара (ловится buy_item_ЧИСЛО)
$bot->onCallbackPreg('buy_item', '/^buy_item_(\d+)$/')
->func(function(ZG $tg, $itemId) {
$tg->answerCallbackQuery(
$tg->getQueryId(),
['text' => "Товар #$itemId добавлен в корзину! ✅"]
);
});
// 4. Закрытие меню
$bot->onCallback('close', 'close_menu')
->text('Каталог закрыт.')
->editText();
$bot->run();Админ-панель с Middleware
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);
$admins = [123456789, 987654321]; // ID администраторов
$bot->onBotCommand('start', '/start')->text('Привет! Я бот.');
// Группа админских команд
$bot->onBotCommand('admin', '/admin')
->middleware(function(ZG $tg, callable $next) use ($admins) {
// Проверяем права доступа
if (in_array($tg->getUserId(), $admins)) {
$next(); // Пропускаем дальше, если админ
} else {
$tg->msg("⛔ Доступ запрещен!")->send();
}
})
->func(function(ZG $tg) {
$tg->msg("Добро пожаловать в панель администратора!")
->inlineKbd([
['stats_admin'],
['broadcast_admin']
])
->send();
});
// Действия кнопок админки
$bot->btn('stats_admin', '📊 Статистика')->query('Всего пользователей: 100500');
$bot->btn('broadcast_admin', '📢 Рассылка')->text('Введите текст рассылки...');
$bot->run();Бот-анкета (Диалоги / FSM)
Пример бота, который проводит опрос пользователя, сохраняет данные между шагами и поддерживает кнопку "Отмена".
php
<?php
require_once __DIR__ . '/vendor/autoload.php';
use ZenithGram\ZenithGram\ZG;
use ZenithGram\ZenithGram\Bot;
use ZenithGram\ZenithGram\Storage\FileStorage;
use ZenithGram\ZenithGram\Button;
$tg = ZG::create(BOT_TOKEN);
$bot = new Bot($tg);
// 1. Подключаем хранилище (обязательно для FSM)
$bot->setStorage(new FileStorage());
// 2. Команда отмены (доступна всегда)
// Если пользователь в состоянии диалога, это выведет его оттуда
$bot->onBotCommand('cancel', '/cancel')
->func(function(ZG $tg) {
$tg->msg("Диалог отменен.")->send();
$tg->endStep(); // Сброс состояния
});
// 3. Старт анкеты
$bot->onBotCommand('survey', '/survey')
->func(function(ZG $tg) {
$tg->msg("Оцените наш сервис от 1 до 5:")
->inlineKbd([
[Button::cb('1', '1'), Button::cb('2', '2'), Button::cb('3', '3'), Button::cb('4', '4'), Button::cb('5', '5')]
])
->send();
// Переходим в состояние ожидания оценки
$tg->step('wait_rating');
});
// 4. Обработка оценки (Ожидаем нажатие кнопки или текст)
$bot->onState('wait_rating')
->func(function(ZG $tg, string $input) {
// Если это callback (нажатие кнопки), ответим на него
if ($tg->getType() === 'callback_query') {
$tg->answerCallbackQuery($tg->getQueryId());
}
// Проверяем ввод
if (!in_array($input, ['1', '2', '3', '4', '5'])) {
$tg->msg("Пожалуйста, нажмите на кнопку от 1 до 5.")->send();
return;
}
// Сохраняем оценку
$tg->session(['rating' => $input]);
$tg->msg("Спасибо! Теперь напишите краткий отзыв (или отправьте /skip, чтобы пропустить):")
->removeKbd() // Убираем старые клавиатуры если были
->send();
$tg->step('wait_feedback');
});
// 5. Обработка текста отзыва
$bot->onState('wait_feedback')
->func(function(ZG $tg, string $text) {
$data = $tg->session(); // Получаем сохраненную ранее оценку
$rating = $data['rating'];
$review = ($text === '/skip') ? 'Без отзыва' : $text;
// Формируем отчет
$report = "📝 <b>Новый отзыв!</b>\n" .
"⭐ Оценка: {$rating}/5\n" .
"💬 Текст: " . htmlspecialchars($review);
// Отправляем пользователю подтверждение
$tg->msg("Ваш отзыв принят!\n\n$report")
->parseMode(\ZenithGram\ZenithGram\Enums\MessageParseMode::HTML)
->send();
// (Опционально) Отправка админу
// $tg->sendMessage(ADMIN_ID, $report);
// Завершаем диалог
$tg->endStep();
});
$bot->run();Больше примеров
В документации для каждого метода есть примеры его использования.