From 1e2eb977bbee74821990de7fc80fd0a250c6a877 Mon Sep 17 00:00:00 2001 From: minecraft1024a Date: Sun, 7 Sep 2025 12:28:15 +0800 Subject: [PATCH] =?UTF-8?q?refactor(sleep):=20=E8=A7=A3=E8=80=A6`SleepMana?= =?UTF-8?q?ger`=E4=B8=8E`ScheduleManager`=E7=9A=84=E4=BE=9D=E8=B5=96?= =?UTF-8?q?=E5=85=B3=E7=B3=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将日程表获取的逻辑从`SleepManager`转移到`TimeChecker`中,并使其直接从全局的`schedule_manager`实例获取日程,消除了`SleepManager`对日程表的直接管理责任。 这一重构简化了`SleepManager`的职责,使其更专注于睡眠状态的管理,同时提高了模块间的独立性。 - `SleepManager`不再持有`today_schedule`状态。 - `TimeChecker`现在直接从`schedule_manager`获取日程,不再依赖于`SleepManager`传递。 - 移除了`ScheduleManager`中对`sleep_manager`的引用和更新操作。 --- .../chat_loop/sleep_manager/sleep_manager.py | 11 +---------- .../chat_loop/sleep_manager/time_checker.py | 18 +++++++++++------- src/schedule/schedule_manager.py | 4 ---- 3 files changed, 12 insertions(+), 21 deletions(-) diff --git a/src/chat/chat_loop/sleep_manager/sleep_manager.py b/src/chat/chat_loop/sleep_manager/sleep_manager.py index 7eb1d3d61..3bf099be7 100644 --- a/src/chat/chat_loop/sleep_manager/sleep_manager.py +++ b/src/chat/chat_loop/sleep_manager/sleep_manager.py @@ -25,8 +25,7 @@ class SleepManager: """ 初始化睡眠管理器。 """ - self.time_checker = TimeChecker(self) # 时间检查器,用于判断当前是否处于理论睡眠时间 - self.today_schedule: Optional[List[Dict[str, Any]]] = None # 当天的日程安排 + self.time_checker = TimeChecker() # 时间检查器,用于判断当前是否处于理论睡眠时间 self.last_sleep_log_time = 0 # 上次记录睡眠日志的时间戳 self.sleep_log_interval = 35 # 睡眠日志记录间隔(秒) @@ -284,14 +283,6 @@ class SleepManager: logger.info(f"将在 {re_sleep_delay_minutes} 分钟后尝试重新入睡。") self._save_sleep_state() - def get_today_schedule(self) -> Optional[List[Dict[str, Any]]]: - """获取今天的日程安排。""" - return self.today_schedule - - def update_today_schedule(self, schedule: Optional[List[Dict[str, Any]]]): - """更新今天的日程安排。""" - self.today_schedule = schedule - def _save_sleep_state(self): """将当前所有睡眠相关的状态打包并保存到本地存储。""" state_data = { diff --git a/src/chat/chat_loop/sleep_manager/time_checker.py b/src/chat/chat_loop/sleep_manager/time_checker.py index 32521d408..cbe3d45e8 100644 --- a/src/chat/chat_loop/sleep_manager/time_checker.py +++ b/src/chat/chat_loop/sleep_manager/time_checker.py @@ -1,19 +1,19 @@ from datetime import datetime, time, timedelta -from typing import Optional +from typing import Optional, List, Dict, Any import random from src.common.logger import get_logger from src.config.config import global_config +from src.schedule.schedule_manager import schedule_manager logger = get_logger("time_checker") class TimeChecker: - def __init__(self, schedule_source): - self.schedule_source = schedule_source + def __init__(self): # 缓存当天的偏移量,确保一天内使用相同的偏移量 - self._daily_sleep_offset = None - self._daily_wake_offset = None + self._daily_sleep_offset: int = 0 + self._daily_wake_offset: int = 0 self._offset_date = None def _get_daily_offsets(self): @@ -34,9 +34,13 @@ class TimeChecker: return self._daily_sleep_offset, self._daily_wake_offset + def get_today_schedule(self) -> Optional[List[Dict[str, Any]]]: + """从全局 ScheduleManager 获取今天的日程安排。""" + return schedule_manager.today_schedule + def is_in_theoretical_sleep_time(self, now_time: time) -> tuple[bool, Optional[str]]: if global_config.sleep_system.sleep_by_schedule: - if self.schedule_source.get_today_schedule(): + if self.get_today_schedule(): return self._is_in_schedule_sleep_time(now_time) else: return self._is_in_sleep_time(now_time) @@ -46,7 +50,7 @@ class TimeChecker: def _is_in_schedule_sleep_time(self, now_time: time) -> tuple[bool, Optional[str]]: """检查当前时间是否落在日程表的任何一个睡眠活动中""" sleep_keywords = ["休眠", "睡觉", "梦乡"] - today_schedule = self.schedule_source.get_today_schedule() + today_schedule = self.get_today_schedule() if today_schedule: for event in today_schedule: try: diff --git a/src/schedule/schedule_manager.py b/src/schedule/schedule_manager.py index 491f106fa..f97d7c03c 100644 --- a/src/schedule/schedule_manager.py +++ b/src/schedule/schedule_manager.py @@ -7,7 +7,6 @@ from src.common.database.sqlalchemy_models import Schedule, get_db_session from src.config.config import global_config from src.common.logger import get_logger from src.manager.async_task_manager import AsyncTask, async_task_manager -from ..chat.chat_loop.sleep_manager.sleep_manager import SleepManager from .database import update_plan_usage from .llm_generator import ScheduleLLMGenerator from .plan_manager import PlanManager @@ -23,7 +22,6 @@ class ScheduleManager: self.plan_manager = PlanManager() self.daily_task_started = False self.schedule_generation_running = False - self.sleep_manager = SleepManager() async def start_daily_schedule_generation(self): if not self.daily_task_started: @@ -45,7 +43,6 @@ class ScheduleManager: schedule_data = self._load_schedule_from_db(today_str) if schedule_data: self.today_schedule = schedule_data - self.sleep_manager.update_today_schedule(self.today_schedule) self._log_loaded_schedule(today_str) return @@ -100,7 +97,6 @@ class ScheduleManager: if schedule_data: self._save_schedule_to_db(today_str, schedule_data) self.today_schedule = schedule_data - self.sleep_manager.update_today_schedule(self.today_schedule) self._log_generated_schedule(today_str, schedule_data) if sampled_plans: