调整自动回复逻辑

This commit is contained in:
liuwei
2025-05-21 16:33:11 +08:00
parent 95db155077
commit 1d9946c1bf

View File

@@ -47,9 +47,24 @@ class InterventionBot:
def is_morning_window(self, timestamp):
"""检查是否在早晨签到时间窗口"""
try:
message_time = datetime.strptime(timestamp, "%Y-%m-%d %H:%M:%S").time()
# 处理不同类型的时间戳
if isinstance(timestamp, float):
message_datetime = datetime.fromtimestamp(timestamp)
message_time = message_datetime.time()
elif isinstance(timestamp, str):
try:
message_time = datetime.strptime(timestamp, "%Y-%m-%d %H:%M:%S").time()
except ValueError:
try:
message_time = datetime.fromtimestamp(float(timestamp)).time()
except:
return False
else:
return False
return self.morning_window[0] <= message_time <= self.morning_window[1]
except ValueError:
except Exception as e:
print(f"[早晨窗口检测] 错误: {e}")
return False
def detect_topic(self, message):
@@ -102,31 +117,62 @@ class InterventionBot:
def rule_high_reply_rate(self, timestamp, chat_log):
"""规则8高回复频率每分钟消息数超过阈值"""
try:
# 解析当前时间
current_time = datetime.strptime(timestamp, "%Y-%m-%d %H:%M:%S")
# 检查timestamp类型并转换
if isinstance(timestamp, float):
# 如果是浮点数Unix时间戳转换为datetime对象
current_time = datetime.fromtimestamp(timestamp)
elif isinstance(timestamp, str):
# 如果是字符串,尝试解析
try:
current_time = datetime.strptime(timestamp, "%Y-%m-%d %H:%M:%S")
except ValueError:
# 如果字符串格式不匹配,尝试将其转换为浮点数再处理
try:
current_time = datetime.fromtimestamp(float(timestamp))
except:
# 如果转换失败,使用当前时间
current_time = datetime.now()
else:
# 其他类型,使用当前时间
current_time = datetime.now()
window_start = current_time - timedelta(minutes=self.analysis_window_minutes)
# 计算时间窗口内的消息数
recent_messages = []
for msg in chat_log:
try:
msg_time = datetime.strptime(msg["timestamp"], "%Y-%m-%d %H:%M:%S")
# 同样处理消息时间戳
msg_timestamp = msg.get("timestamp")
if isinstance(msg_timestamp, float):
msg_time = datetime.fromtimestamp(msg_timestamp)
elif isinstance(msg_timestamp, str):
try:
msg_time = datetime.strptime(msg_timestamp, "%Y-%m-%d %H:%M:%S")
except ValueError:
try:
msg_time = datetime.fromtimestamp(float(msg_timestamp))
except:
continue
else:
continue
if window_start <= msg_time <= current_time:
recent_messages.append(msg)
except (ValueError, KeyError, TypeError):
continue
# 如果消息太少,不触发
if len(recent_messages) < self.messages_per_minute_threshold:
return False
# 计算消息频率
messages_per_minute = len(recent_messages) / self.analysis_window_minutes
# 记录日志,便于调试
if messages_per_minute >= self.messages_per_minute_threshold:
print(f"[高频率检测] 当前消息频率: {messages_per_minute:.2f}/分钟,阈值: {self.messages_per_minute_threshold}/分钟")
return messages_per_minute >= self.messages_per_minute_threshold
except Exception as e:
print(f"[高频率检测] 错误: {e}")