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 aiogram.types import Message
|
||||||
|
|
||||||
from bot.handlers import registry
|
from bot.handlers import registry
|
||||||
from bot.services.database import check_telegram_user
|
|
||||||
from bot.utils.types import ChatType
|
from bot.utils.types import ChatType
|
||||||
|
from database import TelegramUser
|
||||||
|
|
||||||
|
|
||||||
@registry.register(
|
@registry.register(
|
||||||
|
|
@ -10,12 +10,7 @@ from bot.utils.types import ChatType
|
||||||
chat_types=ChatType.PRIVATE,
|
chat_types=ChatType.PRIVATE,
|
||||||
description="Help Command Function Description",
|
description="Help Command Function Description",
|
||||||
)
|
)
|
||||||
async def cmd_help(message: Message, session) -> None:
|
async def cmd_help(message: Message, user: TelegramUser) -> None:
|
||||||
if message.from_user is None:
|
|
||||||
return
|
|
||||||
|
|
||||||
user = await check_telegram_user(session, message.from_user.id)
|
|
||||||
|
|
||||||
await message.answer(
|
await message.answer(
|
||||||
"Help Command Function Answer Text. "
|
"Help Command Function Answer Text. "
|
||||||
f"Your locale is {user.lang}"
|
f"Your locale is {user.lang}"
|
||||||
|
|
|
||||||
|
|
@ -5,12 +5,14 @@ from aiogram import Dispatcher
|
||||||
from sqlalchemy.ext.asyncio import async_sessionmaker
|
from sqlalchemy.ext.asyncio import async_sessionmaker
|
||||||
|
|
||||||
from .database import DatabaseSessionMiddleware
|
from .database import DatabaseSessionMiddleware
|
||||||
|
from .telegram_user import TelegramUserMiddleware
|
||||||
|
|
||||||
|
|
||||||
def connect_middlewares(
|
def connect_middlewares(
|
||||||
dispatcher: Dispatcher,
|
dispatcher: Dispatcher,
|
||||||
session_maker: async_sessionmaker,
|
session_maker: async_sessionmaker,
|
||||||
) -> None:
|
) -> None:
|
||||||
database_middleware = DatabaseSessionMiddleware(session_maker)
|
dispatcher.update.middleware(
|
||||||
|
DatabaseSessionMiddleware(session_maker),
|
||||||
dispatcher.update.middleware(database_middleware)
|
)
|
||||||
|
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