fix: восстановить выбор шаблона после SD_MAIN_MENU_TEXT
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user