47 lines
2.0 KiB
Python
47 lines
2.0 KiB
Python
# /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"
|
|
|
|
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] |