from aiogram import Router from aiogram.filters import CommandStart from aiogram.fsm.context import FSMContext from aiogram.types import Message from logging import getLogger from sqlmodel.ext.asyncio.session import AsyncSession from ...main import QBotApp from ...model.settings import Settings from ...model.language import LanguageBase from .navigation import clear_state logger = getLogger(__name__) router = Router() @router.message(CommandStart()) async def start(message: Message, db_session: AsyncSession, app: QBotApp, state: FSMContext): await clear_state(state = state, clear_nav = True) User = app.user_class user = await User.get(session = db_session, id = message.from_user.id) if not user: msg_text = (await Settings.get(Settings.APP_STRINGS_WELCOME_P_NAME)).format(name = message.from_user.full_name) try: if message.from_user.language_code in [item.value for item in LanguageBase.all_members.values()]: lang = LanguageBase(message.from_user.language_code) user = await User.create(session = db_session, obj_in = User( id = message.from_user.id, name = message.from_user.full_name, lang = lang, is_active = True), commit = True) except Exception as e: logger.error("Error creating user", exc_info = True) message.answer((await Settings.get(Settings.APP_STRINGS_INTERNAL_ERROR_P_ERROR)).format(error = str(e))) return else: if user.is_active: msg_text = (await Settings.get(Settings.APP_STRINGS_GREETING_P_NAME)).format(name = user.name) else: msg_text = (await Settings.get(Settings.APP_STRINGS_USER_BLOCKED_P_NAME)).format(name = user.name) await message.answer(msg_text)