Files
trueconf_bot/instruct/handlers.py
T
2026-07-20 18:11:20 +07:00

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")