From 8267466ee69b95a153e49f599f2f8022cfa68aec Mon Sep 17 00:00:00 2001 From: dddennnisss Date: Wed, 15 Jul 2026 13:03:59 +0700 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=B2=D0=BE=D1=81=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=B8=D1=82=D1=8C=20=D0=B2=D1=8B=D0=B1=D0=BE?= =?UTF-8?q?=D1=80=20=D1=88=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD=D0=B0=20=D0=BF?= =?UTF-8?q?=D0=BE=D1=81=D0=BB=D0=B5=20SD=5FMAIN=5FMENU=5FTEXT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- service_desk/handlers.py | 49 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/service_desk/handlers.py b/service_desk/handlers.py index 2638b8f..3d1e0ed 100644 --- a/service_desk/handlers.py +++ b/service_desk/handlers.py @@ -336,6 +336,28 @@ async def sd_module_handler(msg: Message): return + # Инициализация шаблонов при входе в SD_MODE + if user_id not in sd_sessions: + sd_sessions[user_id] = {"step": "choose_template", "files_queue": [], "post_create_queue": [], "templates": [], "template_names": {}, "template_menu_text": ""} + # Загружаем шаблоны если их ещё нет + if not sd_sessions[user_id].get("templates"): + templates = await get_sd_templates() + if templates: + sd_sessions[user_id]["templates"] = templates + sd_sessions[user_id]["template_names"] = {str(i+1): str(t["id"]) for i, t in enumerate(templates)} + template_menu_text = "" + for idx, t in enumerate(templates): + num = idx + 1 + digit = f"{num}⃣" if num <= 9 else "0⃣" if num == 10 else str(num) + template_menu_text += f"{digit} - {t['name']}\n" + sd_sessions[user_id]["template_menu_text"] = template_menu_text.strip() + sd_workflow_logger.info(f"[Template] Loaded {len(templates)} templates for user {user_id}") + await msg.answer( + f"Выберите нужный шаблон:\n\n" + f"{template_menu_text}", + parse_mode="html" + ) + return msg_text = _extract_text_from_content(msg.content) is_attachment = hasattr(msg.type, "name") and msg.type.name == "ATTACHMENT" inline_attachments = _extract_attachments_from_content(msg.content, is_attachment) @@ -365,8 +387,35 @@ async def sd_module_handler(msg: Message): session = sd_sessions[user_id] + # --- ШАГ 0: ВЫБОР ШАБЛОНА --- + if session["step"] == "choose_template": + if cmd in ["skip", "пропустить", "без шаблона"]: + sd_workflow_logger.info("[Template] User skipped template selection") + session["step"] = "need_text" + await msg.answer(SD_MAIN_MENU_TEXT, parse_mode="html") + return + if cmd in session.get("template_names", {}): + template_id = session["template_names"][cmd] + template_name = next((t["name"] for t in session.get("templates", []) if str(t["id"]) == str(template_id)), "Неизвестно") + sd_workflow_logger.info(f"[Template] User selected: {template_id} ({template_name})") + session["template_id"] = template_id + session["step"] = "need_text" + await msg.answer(SD_MAIN_MENU_TEXT, parse_mode="html") + return + else: + await msg.answer( + f"Неверный номер. Выберите из списка:\n\n" + f"{session.get('template_menu_text', '')}", + parse_mode="html" + ) + return + # --- ШАГ 1: ОЖИДАНИЕ ТЕКСТА --- if session["step"] == "need_text": + # Пользователь только что вошёл в SD_MODE — показываем меню + if len(msg_text.strip()) == 0 and not inline_attachments: + await msg.answer(SD_MAIN_MENU_TEXT, parse_mode="html") + return if not msg_text.strip() and not inline_attachments: await msg.answer(SD_UNKNOWN_CMD_TEXT, parse_mode="html") return