feat: добавить модуль instruct — Инструкции TrueConf и почта
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
"""
|
||||
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")
|
||||
Reference in New Issue
Block a user