# adapter/telegram/handlers/auth.py from __future__ import annotations from aiogram import Router from aiogram.filters import CommandStart from aiogram.fsm.context import FSMContext from aiogram.types import Message from adapter.telegram import db from adapter.telegram.states import ChatState from core.handler import EventDispatcher from core.protocol import IncomingCommand router = Router(name="auth") @router.message(CommandStart()) async def cmd_start( message: Message, state: FSMContext, dispatcher: EventDispatcher, ) -> None: tg_id = message.from_user.id display_name = message.from_user.full_name # Ensure user exists in platform (mock) from sdk.mock import MockPlatformClient # platform is available via dispatcher._platform platform = dispatcher._platform user = await platform.get_or_create_user( external_id=str(tg_id), platform="telegram", display_name=display_name, ) platform_user_id = user.user_id # Upsert in local DB db.get_or_create_tg_user(tg_id, platform_user_id, display_name) last_chat = db.get_last_chat(tg_id) if last_chat is None: # New user — create first chat chat_name = "Чат #1" chat_id = db.create_chat(tg_id, chat_name) await state.update_data(active_chat_id=chat_id, active_chat_name=chat_name) await state.set_state(ChatState.idle) await message.answer( f"Привет, {message.from_user.first_name}! 👋\n" f"Я создал тебе первый чат. Просто пиши.\n\n" f"Команды: /new — новый чат, /chats — список чатов" ) else: chat_id = last_chat["chat_id"] chat_name = last_chat["name"] await state.update_data(active_chat_id=chat_id, active_chat_name=chat_name) await state.set_state(ChatState.idle) await message.answer(f"С возвращением! Продолжаем [{chat_name}]") # Register auth in core event = IncomingCommand( user_id=platform_user_id, platform="telegram", chat_id=chat_id, command="start", ) await dispatcher.dispatch(event)