From 7093f7452d2c5104eef789c96d44fc188817d256 Mon Sep 17 00:00:00 2001 From: Sergey Elpashev Date: Thu, 2 Jan 2025 22:01:05 +0300 Subject: [PATCH] Feat: added user middleware --- nwxraybot/bot.py | 3 +++ nwxraybot/middlewares/__init__.py | 1 + nwxraybot/middlewares/user.py | 22 ++++++++++++++++++++++ 3 files changed, 26 insertions(+) create mode 100644 nwxraybot/middlewares/__init__.py create mode 100644 nwxraybot/middlewares/user.py diff --git a/nwxraybot/bot.py b/nwxraybot/bot.py index 173b319..8fcc426 100644 --- a/nwxraybot/bot.py +++ b/nwxraybot/bot.py @@ -1,5 +1,7 @@ from aiogram import Bot, Dispatcher, Router +from nwxraybot.middlewares import UserMiddleware + from .meta import Handler @@ -7,6 +9,7 @@ class NwXrayBot: def __init__(self, token: str) -> None: self.bot = Bot(token=token) self.dp = Dispatcher() + self.dp.message.middleware(UserMiddleware()) def include_routers(self, *routers: Handler): for router in routers: diff --git a/nwxraybot/middlewares/__init__.py b/nwxraybot/middlewares/__init__.py new file mode 100644 index 0000000..beb9792 --- /dev/null +++ b/nwxraybot/middlewares/__init__.py @@ -0,0 +1 @@ +from nwxraybot.middlewares.user import UserMiddleware diff --git a/nwxraybot/middlewares/user.py b/nwxraybot/middlewares/user.py new file mode 100644 index 0000000..f6e39e7 --- /dev/null +++ b/nwxraybot/middlewares/user.py @@ -0,0 +1,22 @@ +from typing import Any, Awaitable, Callable, Dict, Optional + +from aiogram import BaseMiddleware +from aiogram.enums import ChatType +from aiogram.types import Message + +from nwxraybot.models import User + + +class UserMiddleware(BaseMiddleware): + def __init__(self) -> None: + pass + + async def __call__(self, handler: Callable[[Message, Dict[str, Any]], Awaitable[Any]], event: Message, data: Dict[str, Any]) -> Any: + if event.chat.type != ChatType.PRIVATE: + return None + user: Optional[User] = User.select().where( + User.id == event.from_user.id).first() + if user is None: + await event.answer("Вы не зарегистрированы в системе, обратитесь к админам за доступом!") + return None + return await handler(event, data)