refactor(sleep_system): 重构睡眠系统为单例模式并优化启动逻辑
将睡眠系统的核心组件 `SleepStateManager` 从全局变量实例化改为通过 `get_sleep_state_manager()` 函数获取的单例模式。这一改变解决了模块间的循环导入问题,并提升了代码的组织性和可维护性。 主要变更: - 引入 `get_sleep_state_manager` 函数以惰性加载方式创建和返回 `SleepStateManager` 单例。 - 将 `sleep_logic.py` 中重复的作息时间计算逻辑提取到新的 `utils.py` 模块中,以实现代码复用。 - 在 `SleepStateManager` 初始化时增加 `_refresh_sleep_state` 方法,用于在程序启动时校准睡眠状态,确保状态与当前时间一致,防止因程序重启导致的状态错乱。 - 更新所有调用点,使用新的 `get_sleep_state_manager()` 函数来访问状态管理器。
This commit is contained in:
committed by
Windpicker-owo
parent
6b3c4d50c6
commit
e7f431392a
@@ -20,7 +20,7 @@ from src.plugin_system.apis.chat_api import get_chat_manager
|
||||
|
||||
from .distribution_manager import stream_loop_manager
|
||||
from .global_notice_manager import NoticeScope, global_notice_manager
|
||||
from .sleep_system.state_manager import SleepState, sleep_state_manager
|
||||
from .sleep_system.state_manager import SleepState, get_sleep_state_manager
|
||||
|
||||
if TYPE_CHECKING:
|
||||
pass
|
||||
@@ -150,7 +150,7 @@ class MessageManager:
|
||||
"""添加消息到指定聊天流"""
|
||||
# 在消息处理的最前端检查睡眠状态
|
||||
if global_config.sleep_system.enable:
|
||||
current_sleep_state = sleep_state_manager.get_current_state()
|
||||
current_sleep_state = get_sleep_state_manager().get_current_state()
|
||||
if current_sleep_state == SleepState.SLEEPING:
|
||||
logger.info(f"处于 {current_sleep_state.name} 状态,消息被拦截。")
|
||||
return # 直接返回,不处理消息
|
||||
|
||||
Reference in New Issue
Block a user