generated from geekiot/python-template
Merge pull request 'Add [database]: add telegram user middleware' (#10) from feature/database into develop
Reviewed-on: #10
This commit is contained in:
commit
8e35f456f9
3 changed files with 40 additions and 10 deletions
|
|
@ -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}"
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
33
src/bot/middlewares/telegram_user.py
Normal file
33
src/bot/middlewares/telegram_user.py
Normal 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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue