Перейти к содержимому

LongPoll

Альтернативный способ получения обновлений от Telegram API. Работает, прослушивая сервера Telegram, ожидая новых обновлений.

Области применения

Этот метод идеально подходит для:

  • Локальной разработки и тестирования бота без необходимости развертывать его на публичном сервере.
  • Случаев, когда у вас нет возможности использовать HTTPS или настраивать веб-сервер.

Подключение и инициализация

Скрипт с LongPoll должен запускаться из командной строки и работать непрерывно.

php
<?php
// Файл bot.php
require_once __DIR__ . '/vendor/autoload.php';

use ZenithGram\ZenithGram\LongPoll;
use ZenithGram\ZenithGram\ZG;
use ZenithGram\ZenithGram\Bot;

// 1. Создаем экземпляр LongPoll с токеном вашего бота
$lp = LongPoll::create(BOT_TOKEN);

// Для удобства используем конструктор Bot
$bot = new Bot();

// --- Описываем логику бота ---
$bot->onBotCommand('start', '/start')
    ->text('Привет! Я работаю через LongPoll.');

$bot->onText('time', 'время')
    ->text('Текущее время: ' . date('H:i:s'));

$bot->onDefault()
    ->text('Я не знаю такой команды.');

// 2. Запускаем прослушивание обновлений
$lp->listen(function(ZG $tg) use ($bot){
    // Эта функция будет вызываться для каждого нового обновления.
    // В $tg передается готовый к работе экземпляр ZG.
    
    // Передаем в класс Bot текущее обновление
    // Запускаем роутер для обработки текущего обновления
    $bot->zg($tg)->run();
});

Как запустить

  1. Сохраните код в файл, например, bot.php.
  2. Откройте терминал (командную строку) в директории с файлом.
  3. Выполните команду:
bash
php bot.php
  1. Процесс запустится и будет ожидать обновлений. Не закрывайте терминал.

Для работы в фоновом режиме

На сервере для непрерывной работы скрипта рекомендуется использовать утилиты вроде screen, tmux или менеджеры процессов, такие как supervisor.

Методы класса

create

Статический метод для создания экземпляра класса LongPoll.

#НазваниеТипОписание
1tokenstringТокен вашего Telegram бота, полученный от @BotFather.
2timeoutintВремя, которое будет держаться соединение с сервером Telegram. По умолчанию: 20
3baseUrlstringСсылка на сервер Telegram (Может быть как локально развернутый, так и стандартный). По умолчанию: https://api.telegram.org

Возвращает: LongPoll - экземпляр класса LongPoll.

listen

Запускает основной цикл "длинного опроса". Метод будет бесконечно получать обновления и передавать их в функцию-обработчик.

#НазваниеТипОписание
1handlercallableФункция (замыкание), которая будет вызвана для каждого полученного обновления. В нее передается экземпляр ZG.

Возвращает: void

allowedUpdates

Устанавливает типы обновлений, которые бот будет получать от телеграма

#НазваниеТипОписание
1updatesarrayМассив типов обновлений, которые вынесены в отдельный Enum. Возможные значения описаны в UpdateType
php
$lp = LongPoll::create(BOT_TOKEN)
    ->allowedUpdates([UpdateType::Message, UpdateType::EditedMessage]);

skipOldUpdates

Если использовать этот метод, при запуске опроса скрипт пропустит старые обновления и начнёт получать новые

php
$lp = LongPoll::create(BOT_TOKEN)
    ->skipOldUpdates(); // Пропускаем старые обновления

Опубликовано под лицензией MIT.