""" Module: Instruct (Инструкции TrueConf и почта) """ import logging import os from logging.handlers import RotatingFileHandler from trueconf import Router, Message from utils.states import set_state, get_state, clear_state from utils.texts import ( instruct_main_menu_text, instruct_tc_text, instruct_email_text, ) # ======================================== # SETUP # ======================================== log_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs') os.makedirs(log_dir, exist_ok=True) instruct_logger = logging.getLogger('instruct') instruct_logger.setLevel(logging.INFO) if not instruct_logger.handlers: handler = RotatingFileHandler(os.path.join(log_dir, 'instruct.log'), maxBytes=10*1024*1024, backupCount=5) formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) instruct_logger.addHandler(handler) # ======================================== # БИЗНЕС-ЛОГИКА # ======================================== instruct_sessions = {} # ======================================== # ОБРАБОТЧИКИ # ======================================== @router.message() async def instruct_main_handler(msg: Message): """Обработчик главного меню модуля Instruct.""" user_id = msg.from_user.id if get_state(user_id) != "INSTRUCT_MODE": return # Очистка состояния clear_state(user_id) user_menu_shown = getattr(msg, "handled", False) if user_menu_shown: return # Инициализация сессии if user_id not in instruct_sessions: instruct_sessions[user_id] = {"step": "choose_option", "selected": None} await msg.answer(instruct_main_menu_text(), 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.""" 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(instruct_tc_text(), parse_mode="html") instruct_logger.info(f"User {user_id} selected TrueConf instructions") @router.message() async def instruct_email_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(instruct_email_text(), parse_mode="html") instruct_logger.info(f"User {user_id} selected email instructions")