from __future__ import annotations import structlog from aiogram import Router from aiogram.filters import Command from aiogram.types import Message from adapter.telegram import db from adapter.telegram.keyboards.settings import settings_main_keyboard logger = structlog.get_logger(__name__) router = Router(name="commands") @router.message(Command("new")) async def cmd_new(message: Message) -> None: """Create a new topic and register it as a new chat.""" user_id = message.from_user.id chat_id = message.chat.id n = db.count_active_chats(user_id) + 1 new_name = f"Чат #{n}" topic = await message.bot.create_forum_topic(chat_id=chat_id, name=new_name) thread_id = topic.message_thread_id db.create_chat(user_id=user_id, thread_id=thread_id, chat_name=new_name) await message.bot.send_message( chat_id=chat_id, message_thread_id=thread_id, text=f"Создан {new_name}. Напиши что-нибудь.", ) logger.info("cmd_new", user_id=user_id, thread_id=thread_id, name=new_name) @router.message(Command("archive")) async def cmd_archive(message: Message) -> None: """Archive the current topic.""" user_id = message.from_user.id thread_id = message.message_thread_id chat = db.get_chat(user_id=user_id, thread_id=thread_id) if chat is None or chat["archived_at"] is not None: await message.answer("Этот чат не найден или уже архивирован.") return await message.bot.close_forum_topic(chat_id=message.chat.id, message_thread_id=thread_id) db.archive_chat(user_id=user_id, thread_id=thread_id) logger.info("cmd_archive", user_id=user_id, thread_id=thread_id) @router.message(Command("rename")) async def cmd_rename(message: Message) -> None: """Rename the current topic. Usage: /rename New Name""" user_id = message.from_user.id thread_id = message.message_thread_id parts = (message.text or "").split(maxsplit=1) new_name = parts[1].strip() if len(parts) > 1 else "" if not new_name: await message.answer("Использование: /rename Новое название") return chat = db.get_chat(user_id=user_id, thread_id=thread_id) if chat is None: await message.answer("Этот чат не найден.") return await message.bot.edit_forum_topic( chat_id=message.chat.id, message_thread_id=thread_id, name=new_name[:128], ) db.rename_chat(user_id=user_id, thread_id=thread_id, new_name=new_name[:128]) logger.info("cmd_rename", user_id=user_id, thread_id=thread_id, new_name=new_name) @router.message(Command("settings")) async def cmd_settings(message: Message) -> None: """Open settings menu.""" await message.answer("⚙️ Настройки", reply_markup=settings_main_keyboard())