feat: 添加白名单/黑名单检查以增强主动思考功能的安全性

This commit is contained in:
Windpicker-owo
2025-11-01 18:27:56 +08:00
parent fcb82e1a74
commit 9a0c22efd5
2 changed files with 36 additions and 0 deletions

View File

@@ -59,6 +59,20 @@ class ProactiveThinkingReplyHandler(BaseEventHandler):
logger.debug("[主动思考事件] reply_reset_enabled 为 False跳过重置")
return HandlerResult(success=True, continue_process=True, message=None)
# 检查白名单/黑名单(获取 stream_config 进行验证)
try:
from src.chat.message_receive.chat_stream import get_chat_manager
chat_manager = get_chat_manager()
chat_stream = await chat_manager.get_stream(stream_id)
if chat_stream:
stream_config = chat_stream.get_raw_id()
if not proactive_thinking_scheduler._check_whitelist_blacklist(stream_config):
logger.debug(f"[主动思考事件] 聊天流 {stream_id} ({stream_config}) 不在白名单中,跳过重置")
return HandlerResult(success=True, continue_process=True, message=None)
except Exception as e:
logger.warning(f"[主动思考事件] 白名单检查时出错: {e}")
# 检查是否被暂停
was_paused = await proactive_thinking_scheduler.is_paused(stream_id)
logger.debug(f"[主动思考事件] 聊天流 {stream_id} 暂停状态: {was_paused}")

View File

@@ -611,10 +611,32 @@ async def execute_proactive_thinking(stream_id: str):
try:
# 0. 前置检查
# 0.1 检查白名单/黑名单
# 从 stream_id 获取 stream_config 字符串进行验证
try:
from src.chat.message_receive.chat_stream import get_chat_manager
chat_manager = get_chat_manager()
chat_stream = await chat_manager.get_stream(stream_id)
if chat_stream:
# 使用 ChatStream 的 get_raw_id() 方法获取配置字符串
stream_config = chat_stream.get_raw_id()
# 执行白名单/黑名单检查
if not proactive_thinking_scheduler._check_whitelist_blacklist(stream_config):
logger.debug(f"聊天流 {stream_id} ({stream_config}) 未通过白名单/黑名单检查,跳过主动思考")
return
else:
logger.warning(f"无法获取聊天流 {stream_id} 的信息,跳过白名单检查")
except Exception as e:
logger.warning(f"白名单检查时出错: {e},继续执行")
# 0.2 检查安静时段
if proactive_thinking_scheduler._is_in_quiet_hours():
logger.debug("安静时段,跳过")
return
# 0.3 检查每日限制
if not proactive_thinking_scheduler._check_daily_limit(stream_id):
logger.debug("今日发言达上限")
return