aboutsummaryrefslogtreecommitdiff
path: root/handlers/middleware.py
diff options
context:
space:
mode:
authorTolmachev Igor <me@igorek.dev>2026-03-23 00:21:18 +0300
committerTolmachev Igor <me@igorek.dev>2026-03-23 00:21:18 +0300
commitffee163d8206f0fb1315015e4c60248b68d459bc (patch)
treee95f4eb2bb330f2223d00c80fa9e123263657a8e /handlers/middleware.py
parentbc7f486aa7b543a934f4cf23dc80a95f44afcb64 (diff)
downloadvpn_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.py56
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 @@
1from typing import Any, Awaitable, Callable
2
3from aiogram import BaseMiddleware
4from aiogram.types import CallbackQuery, Message, TelegramObject
5from sqlalchemy.ext.asyncio import AsyncSession
6
7from database import sessions
8from models import User
9
10
11class 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
24class 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)