feat(chat): 引入睡眠系统,在睡眠状态下拦截消息

在消息处理的最前端 (`MessageManager`) 增加了对睡眠状态的检查。当系统处于 `SLEEPING` 状态时,将直接拦截所有新消息,不再进行后续处理。

同时,为了配合睡眠系统的正常运作:
- 将睡眠系统的定时任务初始化移至 `main.py`,确保其在应用启动时正确加载。
- 在主动思维插件 (`proactive_thinker`) 的定时任务(冷启动和日常唤醒)中增加了睡眠状态检查,避免在睡眠期间触发主动行为。
This commit is contained in:
minecraft1024a
2025-10-17 19:55:11 +08:00
committed by Windpicker-owo
parent 1cee641a8f
commit 73a40ad830
6 changed files with 456 additions and 0 deletions

View File

@@ -19,6 +19,8 @@ from src.config.config import global_config
from src.plugin_system.apis.chat_api import get_chat_manager
from .distribution_manager import stream_loop_manager
from .sleep_system.state_manager import SleepState, sleep_state_manager
if TYPE_CHECKING:
pass
@@ -88,6 +90,7 @@ class MessageManager:
logger.error(f"启动自适应流管理器失败: {e}")
# 启动睡眠和唤醒管理器
# 睡眠系统的定时任务启动移至 main.py
# 启动流循环管理器并设置chatter_manager
await stream_loop_manager.start()
@@ -142,6 +145,14 @@ class MessageManager:
async def add_message(self, stream_id: str, message: DatabaseMessages):
"""添加消息到指定聊天流"""
# 在消息处理的最前端检查睡眠状态
current_sleep_state = sleep_state_manager.get_current_state()
if current_sleep_state == SleepState.SLEEPING:
logger.info(f"处于 {current_sleep_state.name} 状态,消息被拦截。")
return # 直接返回,不处理消息
# TODO: 在这里为 WOKEN_UP_ANGRY 等未来状态添加特殊处理逻辑
try:
chat_manager = get_chat_manager()
chat_stream = await chat_manager.get_stream(stream_id)