Диспетчер

Диспетчер — это корневой маршрутизатор, и в коде диспетчер может использоваться непосредственно для маршрутизации событий или подключения других маршрутизаторов к диспетчеру.

Здесь приведена только базовая информация о диспетчере. Все о написании обработчиков, фильтров и т.д. вы можете найти на следующих страницах:

class litegram.dispatcher.dispatcher.Dispatcher(*, storage: BaseStorage | None = None, fsm_strategy: FSMStrategy = FSMStrategy.USER_IN_CHAT, events_isolation: BaseEventIsolation | None = None, disable_fsm: bool = False, name: str | None = None, **kwargs: Any)[исходный код]

Корневой маршрутизатор

__init__(*, storage: BaseStorage | None = None, fsm_strategy: FSMStrategy = FSMStrategy.USER_IN_CHAT, events_isolation: BaseEventIsolation | None = None, disable_fsm: bool = False, name: str | None = None, **kwargs: Any) None[исходный код]

Корневой маршрутизатор

Параметры:
  • storage – Хранилище для конечного автомата (FSM)

  • fsm_strategy – Стратегия конечного автомата

  • events_isolation – Изоляция событий

  • disable_fsm – Отключение конечного автомата, заметьте, что при выключенном конечном автомате вам не следует использовать хранилище и изоляцию событий

  • kwargs – Другие аргументы будут переданы обработчикам как именованные аргументы

async feed_raw_update(bot: Bot, update: dict[str, Any], **kwargs: Any) Any[исходный код]

Основная точка входа для событий с автоматической сериализацией Dict->Update

Параметры:
  • bot

  • update

  • kwargs

async feed_update(bot: Bot, update: Update, **kwargs: Any) Any[исходный код]

Основная точка входа для событий. Ответ этого метода может быть использован для ответа в Webhook

Параметры:
  • bot

  • update

run_polling(*bots: Bot, polling_timeout: int = 10, handle_as_tasks: bool = True, backoff_config: BackoffConfig = BackoffConfig(min_delay=1.0, max_delay=5.0, factor=1.3, jitter=0.1), allowed_updates: list[str] | UNSET_TYPE | None = sentinel.UNSET, handle_signals: bool = True, close_bot_session: bool = True, tasks_concurrency_limit: int | None = None, **kwargs: Any) None[исходный код]

Запуск нескольких ботов с использованием опроса

Параметры:
  • bots – Экземпляры ботов (один или несколько)

  • polling_timeout – Время ожидания при долгом опросе

  • handle_as_tasks – Запуск задачи для кажкго события без ожидания результатов

  • backoff_config – конфигурация повторов с задержкой

  • allowed_updates – Список типов обновлений, которые должен получать ваш бот

  • handle_signals – обработка сигналов (SIGINT/SIGTERM)

  • close_bot_session – закрывать сессии бота при завершении работы

  • tasks_concurrency_limit – Maximum number of concurrent updates to process (None = no limit), used only if handle_as_tasks is True

  • kwargs – контекстные данные

Результат:

async start_polling(*bots: Bot, polling_timeout: int = 10, handle_as_tasks: bool = True, backoff_config: BackoffConfig = BackoffConfig(min_delay=1.0, max_delay=5.0, factor=1.3, jitter=0.1), allowed_updates: list[str] | UNSET_TYPE | None = sentinel.UNSET, handle_signals: bool = True, close_bot_session: bool = True, tasks_concurrency_limit: int | None = None, **kwargs: Any) None[исходный код]

Запуск исполнителя опроса

Параметры:
  • bots – Экземпляры ботов (один или несколько)

  • polling_timeout – Время ожидания при долгом опросе

  • handle_as_tasks – Запуск задачи для кажкго события без ожидания результатов

  • backoff_config – конфигурация повторов с задержкой

  • allowed_updates – Список типов обновлений, которые должен получать ваш бот. По умолчанию включены все используемые типы обновлений (определяются по обработчикам)

  • handle_signals – обработка сигналов (SIGINT/SIGTERM)

  • close_bot_session – закрывать сессии бота при завершении работы

  • tasks_concurrency_limit – Maximum number of concurrent updates to process (None = no limit), used only if handle_as_tasks is True

  • kwargs – контекстные данные

Результат:

async stop_polling() None[исходный код]

Используйте этот метод, если хотите остановить опрос программно

Результат:

Простое использование

Пример:

dp = Dispatcher()

@dp.message()
async def message_handler(message: types.Message) -> None:
    await SendMessage(chat_id=message.from_user.id, text=message.text)

Подключение роутеров

Пример:

dp = Dispatcher()
router1 = Router()
dp.include_router(router1)

Обработка обновлений

Все обновления могут быть переданы диспетчеру через метод feed_update():

from litegram import Bot, Dispatcher

async def update_handler(update: Update, bot: Bot, dispatcher: Dispatcher):
  result = await dp.feed_update(bot, update)

Также вы можете передать сырой объект обновления (словарь) диспетчеру через метод feed_raw_update():

from litegram import Bot, Dispatcher

async def update_handler(raw_update: dict[str, Any], bot: Bot, dispatcher: Dispatcher):
  result = await dp.feed_raw_update(bot, raw_update)