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)