diff options
| author | Tolmachev Igor <me@igorek.dev> | 2026-03-23 00:21:18 +0300 |
|---|---|---|
| committer | Tolmachev Igor <me@igorek.dev> | 2026-03-23 00:21:18 +0300 |
| commit | ffee163d8206f0fb1315015e4c60248b68d459bc (patch) | |
| tree | e95f4eb2bb330f2223d00c80fa9e123263657a8e /handlers/middleware.py | |
| parent | bc7f486aa7b543a934f4cf23dc80a95f44afcb64 (diff) | |
| download | vpn_manager_bot-ffee163d8206f0fb1315015e4c60248b68d459bc.tar.gz vpn_manager_bot-ffee163d8206f0fb1315015e4c60248b68d459bc.zip | |
Add start, help and vpn_link commands
Diffstat (limited to 'handlers/middleware.py')
| -rw-r--r-- | handlers/middleware.py | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/handlers/middleware.py b/handlers/middleware.py new file mode 100644 index 0000000..87a117a --- /dev/null +++ b/handlers/middleware.py | |||
| @@ -0,0 +1,56 @@ | |||
| 1 | from typing import Any, Awaitable, Callable | ||
| 2 | |||
| 3 | from aiogram import BaseMiddleware | ||
| 4 | from aiogram.types import CallbackQuery, Message, TelegramObject | ||
| 5 | from sqlalchemy.ext.asyncio import AsyncSession | ||
| 6 | |||
| 7 | from database import sessions | ||
| 8 | from models import User | ||
| 9 | |||
| 10 | |||
| 11 | class InjectSessionMiddleware(BaseMiddleware): | ||
| 12 | async def __call__[T]( | ||
| 13 | self, | ||
| 14 | handler: Callable[[TelegramObject, dict[str, Any]], Awaitable[Any]], | ||
| 15 | event: TelegramObject, | ||
| 16 | data: dict[str, Any], | ||
| 17 | ) -> Any: | ||
| 18 | async with sessions.begin() as session: | ||
| 19 | data["session"] = session | ||
| 20 | handler_result = await handler(event, data) | ||
| 21 | return handler_result | ||
| 22 | |||
| 23 | |||
| 24 | class UserAccessMiddleware(BaseMiddleware): | ||
| 25 | async def __call__( | ||
| 26 | self, | ||
| 27 | handler: Callable[[TelegramObject, dict[str, Any]], Awaitable[Any]], | ||
| 28 | event: TelegramObject, | ||
| 29 | data: dict[str, Any], | ||
| 30 | ) -> Any: | ||
| 31 | if not isinstance(event, (Message, CallbackQuery)): | ||
| 32 | raise TypeError( | ||
| 33 | f"UserAccessMiddleware doesn't support event with type: {type(event).__name__}", | ||
| 34 | event, | ||
| 35 | ) | ||
| 36 | |||
| 37 | if isinstance(event, Message): | ||
| 38 | user_id = event.chat.id | ||
| 39 | else: | ||
| 40 | user_id = event.from_user.id | ||
| 41 | |||
| 42 | session: AsyncSession = data["session"] | ||
| 43 | user = await session.get(User, user_id) | ||
| 44 | if user is None: | ||
| 45 | error_text = "Вы не добавлены в список пользователей VPN" | ||
| 46 | |||
| 47 | if isinstance(event, Message): | ||
| 48 | await event.answer(error_text) | ||
| 49 | else: | ||
| 50 | await event.answer(error_text) | ||
| 51 | |||
| 52 | return | ||
| 53 | |||
| 54 | data["user"] = user | ||
| 55 | |||
| 56 | return await handler(event, data) | ||
