Роутинг и обработчики¶
Иерархия роутеров¶
Dispatcher — корневой роутер. Роутеры отдельных функций могут содержать обработчики и дочерние роутеры.
from pyromax import Dispatcher, Router
dispatcher = Dispatcher()
admin = Router(name="admin")
dispatcher.include_router(admin)
include_routers(*routers) подключает несколько роутеров. Нельзя повторно подключить роутер, подключить его к себе или создать цикл.
Наблюдатели событий¶
У каждого роутера есть observers:
message,edited_message,reply_to_message,forward_message,message_removed;message_reaction,message_added_reaction,message_deleted_reaction;error.
Обработчики проверяются в порядке регистрации. Первое совпадение поглощает событие, если обработчик явно не вызовет skip().
Регистрация обработчика¶
from pyromax.models import Message
@dispatcher.message(from_me=True)
async def echo(message: Message) -> None:
await message.reply(message.text or "")
По умолчанию message observer игнорирует сообщения текущего аккаунта. Для их обработки передайте from_me=True.
Внедрение зависимостей по типам¶
Каждый параметр обработчика должен иметь аннотацию. Resolver ищет значения среди данных dispatcher, filters, middleware, FSM и MaxApi.workflow_data.
from pyromax import MaxApi
from pyromax.models import Message
@dispatcher.message()
async def inspect(message: Message, api: MaxApi) -> None:
await api.set_presence(True)
Поддерживаются forward references. Глобальные зависимости можно передать при создании клиента:
class Database:
pass
api = await MaxApi(workflow_data={Database: Database()})
@dispatcher.message()
async def save(message: Message, database: Database) -> None:
...
Для зависимостей на время обработки события обычно лучше использовать middleware.