feat(sleep): 引入休眠阶段消息唤醒机制与愤怒情绪模式

- 扩展日程休眠逻辑,支持在睡眠时段通过@/私聊唤醒
- 新增 WakeUpManager 持续追踪唤醒阈值并触发愤怒状态
- MoodManager 中追加“被吵醒”情绪标识与愤怒提示模板
- HeartFChat 主循环集成唤醒处理管线,兼容原逻辑
- 配置中心开放阈值、衰减、持续时间等可调参数

此举允许机器人即便在“睡觉”时也能被重要消息强行“闹醒”,并以生气口吻做出回应,提升拟人化交互体验。
This commit is contained in:
minecraft1024a
2025-08-21 16:19:34 +08:00
parent 74ec33580a
commit 4f7836ae0c
9 changed files with 609 additions and 11 deletions

View File

@@ -57,6 +57,7 @@ class ChatMood:
self.log_prefix = f"[{self.chat_stream.group_info.group_name if self.chat_stream.group_info else self.chat_stream.user_info.user_nickname}]"
self.mood_state: str = "感觉很平静"
self.is_angry_from_wakeup: bool = False # 是否因被吵醒而愤怒
self.regression_count: int = 0
@@ -241,9 +242,33 @@ class MoodManager:
if mood.chat_id == chat_id:
mood.mood_state = "感觉很平静"
mood.regression_count = 0
mood.is_angry_from_wakeup = False
return
self.mood_list.append(ChatMood(chat_id))
def set_angry_from_wakeup(self, chat_id: str):
"""设置因被吵醒而愤怒的状态"""
mood = self.get_mood_by_chat_id(chat_id)
mood.is_angry_from_wakeup = True
mood.mood_state = "被人吵醒了非常生气"
mood.last_change_time = time.time()
logger.info(f"{mood.log_prefix} 因被吵醒设置为愤怒状态")
def clear_angry_from_wakeup(self, chat_id: str):
"""清除因被吵醒而愤怒的状态"""
mood = self.get_mood_by_chat_id(chat_id)
if mood.is_angry_from_wakeup:
mood.is_angry_from_wakeup = False
mood.mood_state = "感觉很平静"
logger.info(f"{mood.log_prefix} 清除被吵醒的愤怒状态")
def get_angry_prompt_addition(self, chat_id: str) -> str:
"""获取愤怒状态下的提示词补充"""
mood = self.get_mood_by_chat_id(chat_id)
if mood.is_angry_from_wakeup:
return "你被人吵醒了非常生气,说话带着怒气"
return ""
init_prompt()