Обработка ошибок (Error Handling)
В ZenithGram встроен мощный инструмент ErrorHandler, который полностью изолирован от основной логики бота. Это позволяет ловить ошибки даже тогда, когда сама библиотека не успела инициализироваться (например, при ошибках в composer.json или глобальных конфигах).
Как это работает?
ErrorHandler работает как отдельный сервис:
- Вы создаете его с токеном бота.
- Настраиваете (куда слать отчеты, как фильтровать пути).
- Вызываете
register(), чтобы "взять под контроль" все ошибки PHP.
Быстрый старт
Рекомендуется инициализировать дебаггер в самом верху вашего главного файла (index.php или worker.php).
<?php
require_once __DIR__ . '/vendor/autoload.php';
use ZenithGram\ZenithGram\ErrorHandler;
use ZenithGram\ZenithGram\ZG;
// 1. Настройка
$debugger = (new ErrorHandler(BOT_TOKEN))
->setSendIds(123456789) // ID админа для логов
->shortTrace(true) // Скрыть лишнее из vendor
->register(); // Включить глобально
// 2. Обычный запуск бота
$tg = ZG::create(BOT_TOKEN);
// Любая ошибка ниже будет поймана и отправлена админу автоматическиИспользование с Long Polling
При использовании LongPoll дебаггер автоматически перехватывает ошибки внутри цикла обработки событий. Если в логике вашего бота (внутри func()) произойдет сбой, бот не "умрет", а просто отправит отчет и перейдет к следующему сообщению.
$lp = LongPoll::create(BOT_TOKEN);
// Конфигурируем дебаггер
(new ErrorHandler(BOT_TOKEN))
->setSendIds(123456789)
->register();
$lp->listen(function (ZG $tg) {
$bot = new Bot($tg);
// ... логика ...
});Свой обработчик (setHandler)
Если вы хотите не просто получать сообщения, но и выполнять свою логику (например, записывать в файл или уведомлять внешнюю систему мониторинга):
$debugger->setHandler(function (ZG $tg, Throwable $e) {
// Сообщение пользователю
$tg->reply("⚠️ Извините, на сервере произошла ошибка.");
// Запись в системный лог
MyLogger::error($e->getMessage());
});Контекст в кастомном хендлере
Если ошибка произошла во время обработки апдейта, объект $tg будет содержать данные пользователя (вы сможете сделать reply). Если ошибка глобальная (например, упал сам скрипт), объект $tg будет "пустым", но через него всё равно можно будет отправлять сообщения в API, используя явные ID чатов.
Скриншоты отчетов
В Telegram (HTML-форматирование)

В Терминале (CLI-раскраска)
