Перейти к содержанию

Роутер

aliceio.dispatcher.router.Router

Обработчики могут быть добавлены в наблюдатель двумя способами:

  • Через метод: router.<event_type>.register(handler, <filters, ...>)
  • Через декоратор: @router.<event_type>(<filters, ...>)

__init__(*, name: Optional[str] = None) -> None

Параметры:

  • name (Optional[str], None ) –

    Имя роутера, может быть полезно для отладки.

include_router(router: Router) -> Router

Подключение другого роутера.

Параметры:

  • router (Router) –

    Роутер.

Возвращает:

  • Router

    Этот же роутер.

include_routers(*routers: Router) -> None

Подключение нескольких роутеров.

Параметры:

  • routers (Router, () ) –

    Роутеры.

Наблюдатели

Важно

Все хэндлеры всегда должны быть асинхронными. Имя функции-обработчика не имеет значения.
Имя аргумента события (первого аргумента) также не важно, но рекомендуется не перекрывать имя контекстными данными, поскольку функция не может принимать два аргумента с одинаковым именем.

Вот список всех доступных наблюдателей и примеры регистрации хэндлеров.

В этих примерах используется только регистрация через декоратор, но вы всегда можете использовать метод <router>.<event_type>.register(...)

Сообщение (SimpleUtterance)

@router.message()
async def message_handler(message: Message) -> Any: pass

Нажатие на кнопку

@router.button_pressed()
async def button_pressed_handler(button: ButtonPressed) -> Any: pass

Аудиоплеер

@router.audio_player()
async def audio_player_handler(audio_player: AudioPlayer) -> Any: pass

Покупка

@router.purchase()
async def purchase_handler(purchase: Purchase) -> Any: pass

Показ шоу

@router.show_pull()
async def show_pull_handler(pull: ShowPull) -> Any: pass

Вложенные роутеры

Событие будет распространять по роутерам и хэндлерам согласно порядку их добавления.

Важно

Роутеры могут быть включены в другие роутеры с некоторыми ограничениями:

  1. Роутер не может подключить сам себя.
  2. Роутеры не могут составлять цикл (р1 содержит р2, р2 содержит р3, р3 содерит р1).

Update

@dispatcher.update()
async def update_handler(update: Update) -> Any: pass

Важно

Только диспетчер может обрабатывать события с типом Update.

Примечание

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

Источники