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
или другого ивента)