Система бана aiogram 3.x

У меня есть фун-ия для проверки бана и куча хендлеров, которые отвечают за своё действие. Я попытался сделать проверку на бан, но код дальше проверки не работает, хендлер просто ловит сообщение и ничего больше. Как мне реализовать мою задумку?

@admin_router.message()
async def gg(message: Message):
    if str(db.block_exist(message.from_user.id)) == "1":
        return await message.answer("Вы в бане:)")

и дальше все другие хендлеры.


Ответы (1 шт):

Автор решения: Samikague

Для такой задачи вам лучше использовать Middleware. Вот пример:

from typing import Callable, Dict, Any, Awaitable
from aiogram import BaseMiddleware
from aiogram.types import TelegramObject, Message
from ? import db

class CheckBanMiddleware(BaseMiddleware):
    async def __call__(
        self,
        handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]],
        event: TelegramObject,
        data: Dict[str, Any]
    ) -> Any:
        if str(db.block_exist(event.from_user.id)) == '1':
            await event.answer('Вы в бане')
→ Ссылка