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

Миддлварь

Миддлварь - это обработчик события, который запускается перед прогоном события по хендлерам. Она позволяет забраковать событие по какому-либо признаку без необходимости писать один и тот же фильтр в каждом хендлере.

Создание миддлвари

Любая миддлварь должна возвращать MiddlewareResult со значением True или False.

Если миддлварь возвращает MiddlewareResult(False), обработка события останавливается и не идёт дальше по хендлерам

Объектно-ориентированный способ

  • Можно передать дополнительные аргументы
  • Можно запускать миддлварь и до поиска подходящего хендлера (pre_process_event, должен быть обязательно) и после (post_process_event)
from vkwave.bots import SimpleLongPollBot, MiddlewareResult, BaseMiddleware


class UserShouldNotLoveDogs(BaseMiddleware):
    async def pre_process_event(self, event: BotEvent) -> MiddlewareResult:
        if event.object.object.message.text == "dog":
            print(f"{event.object.object.message.from_id} loves dogs")
            return MiddlewareResult(False)
        return MiddlewareResult(True)

Функциональный способ

  • Не может передавать дополнительные аргументы (кроме события) в миддлварь
  • Нельзя создать post_process_event
from vkwave.bots import SimpleLongPollBot, MiddlewareResult

@bot.middleware()
async def check(event: BotEvent) -> MiddlewareResult:
    if event.object.object.message.text == "dog":
        print(f"{event.object.object.message.from_id} loves dogs")
        return MiddlewareResult(False)
    return MiddlewareResult(True)