Files
Mofox-Core/src/chat/frequency_analyzer/tracker.py
2025-11-19 23:07:30 +08:00

79 lines
2.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import orjson
import time
from typing import Dict, List, Optional
from pathlib import Path
from src.common.logger import get_logger
# 数据存储路径
DATA_DIR = Path("data/frequency_analyzer")
DATA_DIR.mkdir(parents=True, exist_ok=True)
TRACKER_FILE = DATA_DIR / "chat_timestamps.json"
logger = get_logger("ChatFrequencyTracker")
class ChatFrequencyTracker:
"""
负责跟踪和存储用户聊天启动时间戳。
"""
def __init__(self):
self._timestamps: Dict[str, List[float]] = self._load_timestamps()
@staticmethod
def _load_timestamps() -> Dict[str, List[float]]:
"""从本地文件加载时间戳数据。"""
if not TRACKER_FILE.exists():
return {}
try:
with open(TRACKER_FILE, "rb") as f:
data = orjson.loads(f.read())
logger.info(f"成功从 {TRACKER_FILE} 加载了聊天时间戳数据。")
return data
except orjson.JSONDecodeError:
logger.warning(f"无法解析 {TRACKER_FILE},将创建一个新的空数据文件。")
return {}
except Exception as e:
logger.error(f"加载聊天时间戳数据时发生未知错误: {e}")
return {}
def _save_timestamps(self):
"""将当前的时间戳数据保存到本地文件。"""
try:
with open(TRACKER_FILE, "wb") as f:
f.write(orjson.dumps(self._timestamps))
except Exception as e:
logger.error(f"保存聊天时间戳数据到 {TRACKER_FILE} 时失败: {e}")
def record_chat_start(self, chat_id: str):
"""
记录一次聊天会话的开始。
Args:
chat_id (str): 唯一的聊天标识符 (例如用户ID)。
"""
now = time.time()
if chat_id not in self._timestamps:
self._timestamps[chat_id] = []
self._timestamps[chat_id].append(now)
logger.debug(f"为 chat_id '{chat_id}' 记录了新的聊天时间: {now}")
self._save_timestamps()
def get_timestamps_for_chat(self, chat_id: str) -> Optional[List[float]]:
"""
获取指定聊天的所有时间戳记录。
Args:
chat_id (str): 聊天标识符。
Returns:
Optional[List[float]]: 时间戳列表,如果不存在则返回 None。
"""
return self._timestamps.get(chat_id)
# 创建一个全局单例
chat_frequency_tracker = ChatFrequencyTracker()