"""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 not update.message or not update.effective_user: return lines = [ "Доступные команды:", "/start — Начать", "/help — Показать эту справку", ] if config.is_admin(update.effective_user.username or ""): lines.append("/import_duty_schedule — Импорт расписания дежурств (JSON)") await update.message.reply_text("\n".join(lines)) start_handler = CommandHandler("start", start) help_handler = CommandHandler("help", help_cmd)