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

Флаги

Флаги - это некие «маркеры» для обработчиков. Флаги могут быть добавлены в хендлер с помощью декораторов или фильтров.
Например, с помощью флагов можно пометить хэндлеры, не влезая в их внутреннюю структуру, чтобы затем что-то сделать в мидлварях.

С помощью декораторов

1
2
3
@flags.some_flag_name
async def my_handler(message: Message):
    ...
1
2
3
@flags.other_name(foo="bar", key=42)
async def my_handler(message: Message):
    ...

С помощью регистрации методов

@router.message(..., flags={"foo": "bar", "key": 42)

С помощью фильтров

1
2
3
4
5
6
class Command(Filter):
    ...

    def update_handler_flags(self, flags: dict[str, Any]) -> None:
        commands = flags.setdefault("commands", [])
        commands.append(self)

Синтаксис в мидлваре

class ProcessingMiddleware(BaseMiddleware):
    async def __call__(
        self,
        handler: Callable[[Message, dict[str, Any]], Awaitable[Any]],
        event: Message,
        data: dict[str, Any],
    ) -> Any:
        some_flag = get_flag(data, "some_flag_name")
        if some_flag:
            ...

        return await handler(event, data)