# /opt/trueconf_bot/utils/states.py import time import config.config as config user_states = {} tc_bot = None # Общая переменная для экземпляра бота # --- Константы состояний --- PHOTO_MODE = "PHOTO_MODE" SD_MODE = "SD_MODE" TRANSCRIPTION_MODE = "TRANSCRIPTION_MODE" SEARCH_MODE = "SEARCH_MODE" INSTRUCT_EMAIL_HISTORY = "INSTRUCT_EMAIL_HISTORY" def set_state(user_id, state): """Фиксирует новое состояние пользователя и обновляет метку времени активности""" user_states[user_id] = { "state": state, "last_active": time.time() } def get_state(user_id): """ Возвращает текущее состояние пользователя. Если время неактивности превысило лимит из config.py, сессия сбрасывается. """ if user_id in user_states: session = user_states[user_id] # Динамически забираем значение таймаута из конфига (дефолт — 1800 сек / 30 мин) session_timeout = getattr(config, 'SESSION_TIMEOUT', 1800) # Проверяем, сколько секунд прошло с момента последнего сообщения if time.time() - session["last_active"] > session_timeout: # Время вышло! Аппаратно сносим сессию навигации del user_states[user_id] return None # Если время не вышло, обновляем таймер (пользователь проявил активность) session["last_active"] = time.time() return session["state"] return None def clear_state(user_id): """Принудительно очищает состояние пользователя (выход в корень)""" if user_id in user_states: del user_states[user_id]