generated from geekiot/python-template
Add [localization]: connect i18n middleware to the bot
This commit is contained in:
parent
6b980d8017
commit
8320ab805e
4 changed files with 26 additions and 9 deletions
|
|
@ -1,8 +1,11 @@
|
|||
__all__ = ["start_bot"]
|
||||
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from aiogram import Bot, Dispatcher
|
||||
from aiogram.fsm.storage.redis import RedisStorage
|
||||
from aiogram.utils.i18n import I18n
|
||||
from loguru import logger as loguru_logger
|
||||
from redis.asyncio.client import Redis
|
||||
from sqlalchemy.ext.asyncio import async_sessionmaker
|
||||
|
|
@ -16,6 +19,7 @@ async def start_bot(
|
|||
bot_token: str,
|
||||
redis_protocol: Redis,
|
||||
session_maker: async_sessionmaker,
|
||||
i18n_domain: str,
|
||||
) -> None:
|
||||
"""
|
||||
Start Telegram bot.
|
||||
|
|
@ -24,6 +28,7 @@ async def start_bot(
|
|||
bot_token (str): Telegram API bot token.
|
||||
redis_client (Redis): async configured client for redis.
|
||||
session_maker (AsyncSession): async database session maker.
|
||||
i18n_domain (str): the bot locales domain.
|
||||
"""
|
||||
bot = Bot(bot_token)
|
||||
|
||||
|
|
@ -31,13 +36,15 @@ async def start_bot(
|
|||
storage=RedisStorage(redis=redis_protocol),
|
||||
)
|
||||
|
||||
locales_dir = Path(".") / "src" / "locales"
|
||||
i18n = I18n(path=locales_dir, default_locale="ru", domain=i18n_domain)
|
||||
|
||||
connect_middlewares(
|
||||
dispatcher=dispatcher,
|
||||
session_maker=session_maker,
|
||||
i18n=i18n,
|
||||
)
|
||||
loguru_logger.debug(
|
||||
"Middlewares have been successfully connected."
|
||||
)
|
||||
loguru_logger.debug("Middlewares have been successfully connected.")
|
||||
|
||||
include_routers(dispatcher)
|
||||
loguru_logger.debug("Routers have been successfully included.")
|
||||
|
|
|
|||
|
|
@ -2,9 +2,11 @@ __all__ = ["connect_middlewares"]
|
|||
|
||||
|
||||
from aiogram import Dispatcher
|
||||
from aiogram.utils.i18n import I18n
|
||||
from sqlalchemy.ext.asyncio import async_sessionmaker
|
||||
|
||||
from .database import DatabaseSessionMiddleware
|
||||
from .i18n import I18nMiddleware
|
||||
from .registration import RegistrationMiddleware
|
||||
from .telegram_user import TelegramUserMiddleware
|
||||
|
||||
|
|
@ -12,6 +14,7 @@ from .telegram_user import TelegramUserMiddleware
|
|||
def connect_middlewares(
|
||||
dispatcher: Dispatcher,
|
||||
session_maker: async_sessionmaker,
|
||||
i18n: I18n,
|
||||
) -> None:
|
||||
"""
|
||||
Connecting all middleware for the dispatcher.
|
||||
|
|
@ -19,10 +22,12 @@ def connect_middlewares(
|
|||
1. DatabaseSessionMiddleware (outer): provides a session.
|
||||
2. TelegramUserMiddleware (outer): uses session to get a user.
|
||||
3. RegistrationMiddleware (outer): uses user to check status.
|
||||
4. I18nMiddleware (inter): uses session to get user's locale code.
|
||||
|
||||
Args:
|
||||
dispatcher (Dispatcher): bot dispatcher.
|
||||
session_maker (async_sessionmaker): database sessionmaker.
|
||||
i18n (I18n): aiogram bot i18n object.
|
||||
"""
|
||||
dispatcher.update.outer_middleware(
|
||||
DatabaseSessionMiddleware(session_maker=session_maker)
|
||||
|
|
@ -31,3 +36,5 @@ def connect_middlewares(
|
|||
dispatcher.update.outer_middleware(TelegramUserMiddleware())
|
||||
|
||||
dispatcher.update.outer_middleware(RegistrationMiddleware())
|
||||
|
||||
dispatcher.update.middleware(I18nMiddleware(i18n=i18n))
|
||||
|
|
|
|||
|
|
@ -31,6 +31,10 @@ class Settings(BaseSettings):
|
|||
Enable SQLAlchemy engine echo.
|
||||
Defaults to True.
|
||||
|
||||
bot_i18n_domain (str):
|
||||
The bot locales i18n domain.
|
||||
Defaults to "messages".
|
||||
|
||||
redis_host (str):
|
||||
Redis host name.
|
||||
Defaults to "redis"
|
||||
|
|
@ -70,6 +74,8 @@ class Settings(BaseSettings):
|
|||
f"{self.postgres_port}/{self.postgres_name}"
|
||||
)
|
||||
|
||||
bot_i18n_domain: str = Field(frozen=True, default="messages")
|
||||
|
||||
redis_host: str = Field(frozen=True, default="redis")
|
||||
redis_port: int = Field(frozen=True, default=6379)
|
||||
|
||||
|
|
|
|||
|
|
@ -34,9 +34,7 @@ async def process_args() -> None:
|
|||
|
||||
args = parser.parse_args()
|
||||
|
||||
loguru_logger.debug(
|
||||
f"List of arguments passed to the program: {args}"
|
||||
)
|
||||
loguru_logger.debug(f"List of arguments passed to the program: {args}")
|
||||
|
||||
match args.db:
|
||||
case "create":
|
||||
|
|
@ -48,9 +46,7 @@ async def process_args() -> None:
|
|||
await drop_db(engine)
|
||||
exit(0)
|
||||
case "migrate":
|
||||
loguru_logger.debug(
|
||||
"Attempt to make database migrations..."
|
||||
)
|
||||
loguru_logger.debug("Attempt to make database migrations...")
|
||||
exit(0)
|
||||
|
||||
|
||||
|
|
@ -71,6 +67,7 @@ async def main() -> None:
|
|||
bot_token=settings.bot_token,
|
||||
redis_protocol=redis_protocol,
|
||||
session_maker=session_maker,
|
||||
i18n_domain=settings.bot_i18n_domain,
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue