加入一个还没有完成的测试性功能,我要先跑路了

This commit is contained in:
minecraft1024a
2025-09-07 14:02:28 +08:00
committed by Windpicker-owo
parent e374ed7166
commit 41d5152c57
3 changed files with 340 additions and 0 deletions

View File

@@ -0,0 +1,77 @@
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()
def _load_timestamps(self) -> 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()