generated from geekiot/python-template
Fix: fix unsupported database user locale
This commit is contained in:
parent
5de97f3ceb
commit
e19e444fd1
3 changed files with 26 additions and 7 deletions
|
|
@ -35,7 +35,7 @@ def connect_middlewares(
|
||||||
DatabaseSessionMiddleware(session_maker=session_maker)
|
DatabaseSessionMiddleware(session_maker=session_maker)
|
||||||
)
|
)
|
||||||
|
|
||||||
dispatcher.update.outer_middleware(TelegramUserMiddleware())
|
dispatcher.update.outer_middleware(TelegramUserMiddleware(i18n=i18n))
|
||||||
|
|
||||||
dispatcher.update.outer_middleware(RegistrationMiddleware())
|
dispatcher.update.outer_middleware(RegistrationMiddleware())
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ from typing import Any, Awaitable, Callable, Dict, Optional
|
||||||
from aiogram import BaseMiddleware
|
from aiogram import BaseMiddleware
|
||||||
from aiogram.types import TelegramObject
|
from aiogram.types import TelegramObject
|
||||||
from aiogram.types import User as AiogramUser
|
from aiogram.types import User as AiogramUser
|
||||||
|
from aiogram.utils.i18n import I18n
|
||||||
|
|
||||||
from bot.services import get_or_create_user
|
from bot.services import get_or_create_user
|
||||||
|
|
||||||
|
|
@ -15,6 +16,10 @@ from bot.services import get_or_create_user
|
||||||
class TelegramUserMiddleware(BaseMiddleware):
|
class TelegramUserMiddleware(BaseMiddleware):
|
||||||
"""Middleware for providing a telegram user object in handlers."""
|
"""Middleware for providing a telegram user object in handlers."""
|
||||||
|
|
||||||
|
def __init__(self, i18n: I18n):
|
||||||
|
self.supported_locales = tuple(i18n.locales.keys())
|
||||||
|
self.default_locale = i18n.default_locale
|
||||||
|
|
||||||
async def __call__(
|
async def __call__(
|
||||||
self,
|
self,
|
||||||
handler: Callable[
|
handler: Callable[
|
||||||
|
|
@ -44,7 +49,19 @@ class TelegramUserMiddleware(BaseMiddleware):
|
||||||
|
|
||||||
session = data["session"]
|
session = data["session"]
|
||||||
|
|
||||||
telegram_user = await get_or_create_user(session, aiogram_user)
|
if (
|
||||||
|
aiogram_user.language_code is not None
|
||||||
|
and aiogram_user.language_code in self.supported_locales
|
||||||
|
):
|
||||||
|
lang = aiogram_user.language_code
|
||||||
|
else:
|
||||||
|
lang = self.default_locale
|
||||||
|
|
||||||
|
telegram_user = await get_or_create_user(
|
||||||
|
session=session,
|
||||||
|
user_id=aiogram_user.id,
|
||||||
|
lang=lang,
|
||||||
|
)
|
||||||
|
|
||||||
data["telegram_user"] = telegram_user
|
data["telegram_user"] = telegram_user
|
||||||
return await handler(event, data)
|
return await handler(event, data)
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,8 @@ from database.models import TelegramUser
|
||||||
|
|
||||||
async def get_or_create_user(
|
async def get_or_create_user(
|
||||||
session: AsyncSession,
|
session: AsyncSession,
|
||||||
aiogram_user: AiogramUser,
|
user_id: int,
|
||||||
|
lang: str,
|
||||||
) -> TelegramUser:
|
) -> TelegramUser:
|
||||||
"""
|
"""
|
||||||
Gets a user from database by TG ID,
|
Gets a user from database by TG ID,
|
||||||
|
|
@ -19,19 +20,20 @@ async def get_or_create_user(
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
session (AsyncSession): Database session.
|
session (AsyncSession): Database session.
|
||||||
aiogram_user (AiogramUser): User object from Aiogram.
|
user_id (int): Telegram user id.
|
||||||
|
lang (str): Telegram user language code.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
TelegramUser: The SQLAlchemy model instance for the user.
|
TelegramUser: The SQLAlchemy model instance for the user.
|
||||||
"""
|
"""
|
||||||
user = await session.get(TelegramUser, aiogram_user.id)
|
user = await session.get(TelegramUser, user_id)
|
||||||
|
|
||||||
if user is not None:
|
if user is not None:
|
||||||
return user
|
return user
|
||||||
|
|
||||||
user = TelegramUser(
|
user = TelegramUser(
|
||||||
id=aiogram_user.id,
|
id=user_id,
|
||||||
lang=aiogram_user.language_code,
|
lang=lang,
|
||||||
)
|
)
|
||||||
session.add(user)
|
session.add(user)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue