Диспетчер¶
Диспетчер — это корневой маршрутизатор, и в коде диспетчер может использоваться непосредственно для маршрутизации событий или подключения других маршрутизаторов к диспетчеру.
Здесь приведена только базовая информация о диспетчере. Все о написании обработчиков, фильтров и т.д. вы можете найти на следующих страницах:
Фильтрация событий
- 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)