refactor(sleep): 解耦ScheduleManager与SleepManager,引入桥接模式
为了降低模块间的耦合度并提升代码的可维护性,对睡眠管理系统进行了重构。 引入了`schedule_sleep_bridge`作为`ScheduleManager`和`SleepManager`之间的桥梁。`ScheduleManager`不再直接持有`SleepManager`的实例,而是通过桥接器更新其日程数据。`SleepManager`则通过桥接器获取所需的日程信息,实现了二者的解耦。 - **`ScheduleManager`**: 移除了所有与`SleepManager`直接交互的代码,现在只负责生成日程并通过桥接器发布。 - **`SleepManager`**: 构造函数和内部逻辑修改为依赖桥接器接口,而不是`ScheduleManager`实例。 - **`HeartFChatting`**: 更新了所有对睡眠状态管理的调用,使其通过新的`schedule_sleep_bridge`进行。 - **`DefaultReplyer`**: 采用了延迟导入的方式获取`schedule_manager`,减少了不必要的模块加载。
This commit is contained in:
committed by
Windpicker-owo
parent
31d30605b7
commit
7f2b965128
@@ -9,7 +9,8 @@ from src.common.logger import get_logger
|
||||
from src.config.config import global_config
|
||||
from src.person_info.relationship_builder_manager import relationship_builder_manager
|
||||
from src.chat.express.expression_learner import expression_learner_manager
|
||||
from src.schedule.schedule_manager import schedule_manager, SleepState
|
||||
from src.chat.chat_loop.sleep_manager.schedule_bridge import schedule_sleep_bridge
|
||||
from src.chat.chat_loop.sleep_manager.sleep_manager import SleepState
|
||||
from src.plugin_system.apis import message_api
|
||||
|
||||
from .hfc_context import HfcContext
|
||||
@@ -351,8 +352,8 @@ class HeartFChatting:
|
||||
- NORMAL模式:检查进入FOCUS模式的条件,并通过normal_mode_handler处理消息
|
||||
"""
|
||||
# --- 核心状态更新 ---
|
||||
await schedule_manager.update_sleep_state(self.wakeup_manager)
|
||||
current_sleep_state = schedule_manager.get_current_sleep_state()
|
||||
await schedule_sleep_bridge.update_sleep_state(self.wakeup_manager)
|
||||
current_sleep_state = schedule_sleep_bridge.get_current_sleep_state()
|
||||
is_sleeping = current_sleep_state == SleepState.SLEEPING
|
||||
is_in_insomnia = current_sleep_state == SleepState.INSOMNIA
|
||||
|
||||
@@ -382,7 +383,7 @@ class HeartFChatting:
|
||||
self._handle_wakeup_messages(recent_messages)
|
||||
|
||||
# 再次获取最新状态,因为 handle_wakeup 可能导致状态变为 WOKEN_UP
|
||||
current_sleep_state = schedule_manager.get_current_sleep_state()
|
||||
current_sleep_state = schedule_sleep_bridge.get_current_sleep_state()
|
||||
|
||||
if current_sleep_state == SleepState.SLEEPING:
|
||||
# 只有在纯粹的 SLEEPING 状态下才跳过消息处理
|
||||
@@ -428,14 +429,14 @@ class HeartFChatting:
|
||||
|
||||
# --- 重新入睡逻辑 ---
|
||||
# 如果被吵醒了,并且在一定时间内没有新消息,则尝试重新入睡
|
||||
if schedule_manager.get_current_sleep_state() == SleepState.WOKEN_UP and not has_new_messages:
|
||||
if schedule_sleep_bridge.get_current_sleep_state() == SleepState.WOKEN_UP and not has_new_messages:
|
||||
re_sleep_delay = global_config.sleep_system.re_sleep_delay_minutes * 60
|
||||
# 使用 last_message_time 来判断空闲时间
|
||||
if time.time() - self.context.last_message_time > re_sleep_delay:
|
||||
logger.info(
|
||||
f"{self.context.log_prefix} 已被唤醒且超过 {re_sleep_delay / 60} 分钟无新消息,尝试重新入睡。"
|
||||
)
|
||||
schedule_manager.reset_sleep_state_after_wakeup()
|
||||
schedule_sleep_bridge.reset_sleep_state_after_wakeup()
|
||||
|
||||
# 保存HFC上下文状态
|
||||
self.context.save_context_state()
|
||||
|
||||
Reference in New Issue
Block a user