surfaces/adapter/telegram/handlers/auth.py

67 lines
2.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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)