94 lines
3.0 KiB
Python
94 lines
3.0 KiB
Python
"""
|
|
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')
|
|
router = Router()
|
|
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")
|