From d0d91589944284ecf22f3629d66c186f19f26e81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B5=D0=BD=D0=B8=D1=81=20=D0=9A=D1=80=D0=B8=D0=B2?= =?UTF-8?q?=D0=BE=D1=87=D0=B5=D0=BD=D0=BA=D0=BE?= Date: Tue, 21 Jul 2026 16:02:20 +0700 Subject: [PATCH] =?UTF-8?q?fix:=20INSTRUCT=5FMAIN=5FMENU=5FTEXT=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=B7=D1=8B=D0=B2=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D0=B1?= =?UTF-8?q?=D0=B5=D0=B7=20EMOJI=5FDIGITS=20=D0=B0=D1=80=D0=B3=D1=83=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Заменено INSTRUCT_MAIN_MENU_TEXT = instruct_main_menu_text на INSTRUCT_MAIN_MENU_TEXT = instruct_main_menu_text(EMOJI_DIGITS) - Функция instruct_main_menu_text(emojis: dict) требует обязательный параметр emojis - Без вызова функции переменная содержит имя функции, а не строку текста - TrueConf dispatcher выдаёт "str object is not callable" при попытке вызвать фильтр - Также исправлено: меню теперь видят пользователи --- instruct/handlers.py | 38 +++++++------------------------------- 1 file changed, 7 insertions(+), 31 deletions(-) diff --git a/instruct/handlers.py b/instruct/handlers.py index 11db0cb..3cae6bd 100644 --- a/instruct/handlers.py +++ b/instruct/handlers.py @@ -14,7 +14,7 @@ from utils.texts import ( ) from utils.menu import MENU_TEXT -INSTRUCT_MAIN_MENU_TEXT = instruct_main_menu_text +INSTRUCT_MAIN_MENU_TEXT = instruct_main_menu_text(EMOJI_DIGITS) # ======================================== @@ -48,7 +48,7 @@ instruct_sessions = {} # ОБРАБОТЧИКИ # ======================================== -@router.message("0") +@router.message() async def instruct_main_handler(msg: Message): """Обработчик главного меню модуля Instruct.""" user_id = msg.from_user.id @@ -57,18 +57,10 @@ async def instruct_main_handler(msg: Message): return # Цифра 0 — возврат в главное меню - clear_state(user_id) - setattr(msg, "handled", True) - await msg.answer(MENU_TEXT, parse_mode="html") - instruct_logger.info(f"User {user_id} returned to main menu via 0") - return - -@router.message() -async def instruct_main_menu_handler(msg: Message): - """Обработчик открытия меню инструкций.""" - user_id = msg.from_user.id - - if get_state(user_id) != "INSTRUCT_MODE": + if msg.text and msg.text.strip() == "0": + clear_state(user_id) + await msg.answer(MENU_TEXT, parse_mode="html") + instruct_logger.info(f"User {user_id} returned to main menu via 0") return # Очистка состояния @@ -85,6 +77,7 @@ async def instruct_main_menu_handler(msg: Message): await msg.answer(instruct_main_menu_text(EMOJI_DIGITS), parse_mode="html") instruct_logger.info(f"Instruct main menu shown for user {user_id}") + @router.message() async def instruct_tc_handler(msg: Message): """Обработчик выбора: Приложение TrueConf.""" @@ -102,23 +95,6 @@ async def instruct_tc_handler(msg: Message): await msg.answer(instruct_tc_text(), parse_mode="html") instruct_logger.info(f"User {user_id} selected TrueConf instructions") -@router.message() -async def instruct_back_to_main_handler(msg: Message): - """Обработчик возврата в главное меню.""" - user_id = msg.from_user.id - - if get_state(user_id) != "INSTRUCT_MODE": - return - - # Очистка состояния - clear_state(user_id) - - # Убираем обработанность, чтобы сообщение не дублировалось - setattr(msg, "handled", True) - - await msg.answer(MENU_TEXT, parse_mode="html") - instruct_logger.info(f"User {user_id} returned to main menu") - @router.message() async def instruct_email_handler(msg: Message): """Обработчик выбора: Почта на мобильном устройстве."""