Middleware aiogram. Как сделать проверку на бан

Мне необходимо создать middleware который проверяет в бане пользователь или нет
Какие есть примеры Я не понимаю само строение Middleware.

Вот необходимые данные
core/utils/dbconnect.py

import asyncpg 
from core.utils.percent import pcent

class Request:
    def __init__(self, connector: asyncpg.pool.Pool) -> None:
        self.connector =  connector

    async def check_ban(self, user_id):
        query = f"SELECT ban_date, unban_date FROM banlist WHERE user_id = {user_id}"
        rows = await self.connector.fetch(query)
        data = [dict(row) for row in rows]
        data_d = {}
        data_d['unban_date'] = data[0]['unban_date']
        data_d['ban_date'] = data[0]['ban_date']
        
        return data_d

core/middleware/start_middleware.py

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

from core.utils.dbconnect import Request

from datetime import datetime

        
    
class CheckBanUser(BaseMiddleware):
    async def __call__(
        self,
        handler: Callable[[Message, Dict[str, Any]], Awaitable[Any]],
        event: TelegramObject,
        data: Dict[str, Any]
    ) -> Any:
        
        user = data['event_from_user']
        print(user.id)
        data['ban_data'] = 'Not Ban'
        datas = Request.check_ban(user_id=user.id)
        datas_unban = datas['unban_date']
        datas_ban = datas['ban_date']
        
        if datas_unban - datas_ban != 0:
            await event.answer(f'Вы заблокированы за нарушение правил!\nЕсли вы считает что произошла ошибка напишите сюда:\n')
            await event.answer(f'Блокировка закончится: {datas_unban}\nЧерез {datas_unban - datetime.now()}')
        else:
            await event.answer(f'Ok')
            return await handler(event, data)

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