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

Handling-Handler

Хендлеры это конечная точка в обработке событий. Хендлеры могут быть блокирующими (если нашелся подходящий хендлер другие уже не проверяются и не выполняются) и не блокирующими (в таком случае количество выполняемых хендлеров не ограничено и зависит от того какие пройдут). По умолчанию все хендлеры являются блокирующими

Хендлеры помечаются (лейблируются) с помощью декораторов. За это отвечает Labeler high-level инстанса с которым вы работаете. Пример с ботом:

from vkbottle.bot import Bot, Message

bot = Bot("token")

@bot.on.message()
async def any_message(message: Message):
    await message.answer("Привет я бот")

bot.run_forever()

Хендлеры ботов

message

Этот хендлер показан в примере выше

Хендлер на все сообщения (и из чата, и из личных сообщений)

chat_message

Хендлер на сообщения из чатов

private_message

Хендлер на сообщения из личных диалогов


Типы хендлеров выше не делают ничего необычного а просто оперируют предустановленным правилом PeerRule. В message он не предустанавливается, в chat_message - PeerRule(True) в private_message - PeerRule(False)


Декоратор принимает в качестве аргументов инстансы правил (ABCRule) в качестве kwargs он принимает значение из custom_rules (которое можно кастомизировать в Labeler.custom_rules) уравненное со значением которым это правило будет инициализировано, исключением является VBMLRule, которое под именем text дополняется Patcher'ом в специальном генераторе, генератор тоже находится в Labeler'e

Если при проверке хендлер фильтр (ABCHandler.filter) возвращает словарь, то этот словарь впоследствии будет распакован при вызове хендлера (добавлен в его непозиционные аргументы вместе с позиционным объектом класса Message или другого ивента)