Add [database]: add telegram user middleware #10

Merged
geekiot merged 1 commit from feature/database into develop 2025-11-01 16:02:43 +05:00
3 changed files with 40 additions and 10 deletions
Showing only changes of commit 11a48cd629 - Show all commits

View file

@ -1,8 +1,8 @@
from aiogram.types import Message
from bot.handlers import registry
from bot.services.database import check_telegram_user
from bot.utils.types import ChatType
from database import TelegramUser
@registry.register(
@ -10,12 +10,7 @@ from bot.utils.types import ChatType
chat_types=ChatType.PRIVATE,
description="Help Command Function Description",
)
async def cmd_help(message: Message, session) -> None:
if message.from_user is None:
return
user = await check_telegram_user(session, message.from_user.id)
async def cmd_help(message: Message, user: TelegramUser) -> None:
await message.answer(
"Help Command Function Answer Text. "
f"Your locale is {user.lang}"

View file

@ -5,12 +5,14 @@ from aiogram import Dispatcher
from sqlalchemy.ext.asyncio import async_sessionmaker
from .database import DatabaseSessionMiddleware
from .telegram_user import TelegramUserMiddleware
def connect_middlewares(
dispatcher: Dispatcher,
session_maker: async_sessionmaker,
) -> None:
database_middleware = DatabaseSessionMiddleware(session_maker)
dispatcher.update.middleware(database_middleware)
dispatcher.update.middleware(
DatabaseSessionMiddleware(session_maker),
)
dispatcher.update.middleware(TelegramUserMiddleware())

View file

@ -0,0 +1,33 @@
from typing import Any, Awaitable, Callable, Dict, Optional
from aiogram import BaseMiddleware
from aiogram.types import TelegramObject
from aiogram.types import User as AiogramUser
from bot.services import check_telegram_user
class TelegramUserMiddleware(BaseMiddleware):
async def __call__(
self,
handler: Callable[
[TelegramObject, Dict[str, Any]], Awaitable[Any]
],
event: TelegramObject,
data: Dict[str, Any],
) -> Any:
aiogram_user: Optional[AiogramUser] = data.get(
"event_from_user",
)
if aiogram_user is None or aiogram_user.is_bot:
return await handler(event, data)
session = data["session"]
telegram_user = await check_telegram_user(
session, aiogram_user.id
)
data["user"] = telegram_user
return await handler(event, data)