From b5549ff81f60a32d165f53646aae541e1f91d650 Mon Sep 17 00:00:00 2001 From: minecraft1024a Date: Fri, 17 Oct 2025 20:04:12 +0800 Subject: [PATCH] =?UTF-8?q?fix(chat):=20=E4=BF=AE=E5=A4=8D=E7=9D=A1?= =?UTF-8?q?=E7=9C=A0=E5=92=8C=E6=83=85=E7=BB=AA=E7=B3=BB=E7=BB=9F=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E7=A9=BA=E5=80=BC=E5=92=8C=E9=80=BB=E8=BE=91=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复了两个问题: 1. 在睡眠状态下,如果没有设置起床时间,且当天也无法从日程中获取新的起床时间,程序会错误地继续执行后续的唤醒判断逻辑,而不是直接返回并继续睡眠。 2. 在更新情绪状态时,如果消息的`interest_value`为`None`,会导致类型错误。已增加空值检查,将其默认处理为 0.0。 --- .../sleep_system/sleep_logic.py | 25 ++++++++++--------- src/chat/message_receive/bot.py | 2 ++ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/chat/message_manager/sleep_system/sleep_logic.py b/src/chat/message_manager/sleep_system/sleep_logic.py index 7a77f0cb9..82291f082 100644 --- a/src/chat/message_manager/sleep_system/sleep_logic.py +++ b/src/chat/message_manager/sleep_system/sleep_logic.py @@ -58,20 +58,21 @@ class SleepLogic: # 核心逻辑:两段式检测 # 如果 state_manager 中还没有起床时间,说明是昨晚入睡,需要等待今天凌晨的新日程。 sleep_start_time = sleep_state_manager.get_sleep_start_time() - if not wake_up_time and sleep_start_time and now.date() > sleep_start_time.date(): - logger.debug("当前为睡眠状态但无起床时间,尝试从新日程中解析...") - _, new_wake_up_time = self._get_wakeup_times_from_schedule(now) + if not wake_up_time: + if sleep_start_time and now.date() > sleep_start_time.date(): + logger.debug("当前为睡眠状态但无起床时间,尝试从新日程中解析...") + _, new_wake_up_time = self._get_wakeup_times_from_schedule(now) - if new_wake_up_time: - logger.info(f"成功从新日程获取到起床时间: {new_wake_up_time.strftime('%H:%M')}") - sleep_state_manager.set_wake_up_time(new_wake_up_time) - wake_up_time = new_wake_up_time + if new_wake_up_time: + logger.info(f"成功从新日程获取到起床时间: {new_wake_up_time.strftime('%H:%M')}") + sleep_state_manager.set_wake_up_time(new_wake_up_time) + wake_up_time = new_wake_up_time + else: + logger.debug("未能获取到新的起床时间,继续睡眠。") + return else: - logger.debug("未能获取到新的起床时间,继续睡眠。") - return - else: - logger.info("还没有到达第二天,继续睡眠。") - + logger.info("还没有到达第二天,继续睡眠。") + logger.info(f"尚未到苏醒时间,苏醒时间在{wake_up_time}") if wake_up_time and now >= wake_up_time: logger.info(f"当前时间 {now.strftime('%H:%M')} 已到达或超过预定起床时间 {wake_up_time.strftime('%H:%M')}。") sleep_state_manager.set_state(SleepState.AWAKE) diff --git a/src/chat/message_receive/bot.py b/src/chat/message_receive/bot.py index 584941ecc..9006c388f 100644 --- a/src/chat/message_receive/bot.py +++ b/src/chat/message_receive/bot.py @@ -588,6 +588,8 @@ class ChatBot: if global_config.mood.enable_mood: # 获取兴趣度用于情绪更新 interest_rate = getattr(message, "interest_value", 0.0) + if interest_rate is None: + interest_rate = 0.0 logger.debug(f"开始更新情绪状态,兴趣度: {interest_rate:.2f}") # 获取当前聊天的情绪对象并更新情绪状态