"""Command handlers: /start, /help; /start registers user.""" import asyncio import config from telegram import Update from telegram.ext import CommandHandler, ContextTypes from db.session import get_session from db.repository import get_or_create_user async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: if not update.message: return user = update.effective_user if not user: return full_name = ( " ".join(filter(None, [user.first_name or "", user.last_name or ""])).strip() or "User" ) telegram_user_id = user.id username = user.username first_name = user.first_name last_name = user.last_name def do_get_or_create() -> None: session = get_session(config.DATABASE_URL) try: get_or_create_user( session, telegram_user_id=telegram_user_id, full_name=full_name, username=username, first_name=first_name, last_name=last_name, ) finally: session.close() await asyncio.get_running_loop().run_in_executor(None, do_get_or_create) text = "Привет! Я бот календаря дежурств. Используй /help для списка команд." await update.message.reply_text(text) async def help_cmd(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: if update.message: await update.message.reply_text( "Доступные команды:\n/start — Начать\n/help — Показать эту справку" ) start_handler = CommandHandler("start", start) help_handler = CommandHandler("help", help_cmd)