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:
minecraft1024a
2025-10-24 21:26:24 +08:00
committed by Windpicker-owo
parent 6b3c4d50c6
commit e7f431392a
7 changed files with 198 additions and 108 deletions

View File

@@ -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 # 直接返回,不处理消息