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

Обработчики

Bot Framework использует два типа обработчиков: для callback-кнопок и для текстовых сообщений.

Callback handler

Обрабатывает нажатие inline-кнопки. Обязательно использует @check_roles:

from bot_framework import BotCallback, ICallbackAnswerer, check_roles
from bot_framework.domain.role_management.repos.protocols import IRoleRepo


class MyCallbackHandler:
    def __init__(
        self,
        callback_answerer: ICallbackAnswerer,
        role_repo: IRoleRepo,
    ) -> None:
        self.callback_answerer = callback_answerer
        self.role_repo = role_repo
        self.allowed_roles: set[str] = {"admin"}  # None = все

    @check_roles
    def handle(self, callback: BotCallback) -> None:
        self.callback_answerer.answer(callback_query_id=callback.id)
        # бизнес-логика

Message handler

Обрабатывает текстовое сообщение. Обязательно использует @check_message_roles:

from bot_framework import BotMessage, IMessageSender, check_message_roles
from bot_framework.domain.role_management.repos.protocols import IRoleRepo


class MyMessageHandler:
    def __init__(
        self,
        message_sender: IMessageSender,
        role_repo: IRoleRepo,
    ) -> None:
        self.message_sender = message_sender
        self.role_repo = role_repo
        self.allowed_roles: set[str] | None = None  # доступно всем

    @check_message_roles
    def handle(self, message: BotMessage) -> None:
        if not message.from_user:
            return
        # бизнес-логика

Null-проверка

Поля message.from_user, callback.from_user, message.contact могут быть None. Всегда проверяйте перед использованием.

Регистрация обработчиков

Обработчики регистрируются через реестры:

# Callback
app.callback_handler_registry.register(my_callback_handler)

# Message
app.core.message_handler_registry.register(my_message_handler)