From dcdf28c7c158f9b578a628b8ad4f2f97d2fc5eec Mon Sep 17 00:00:00 2001 From: Bakadax Date: Thu, 1 May 2025 20:21:49 +0800 Subject: [PATCH 1/4] =?UTF-8?q?PFC=20=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/PFC/chat_observer.py | 1 - src/plugins/PFC/observation_info.py | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/plugins/PFC/chat_observer.py b/src/plugins/PFC/chat_observer.py index e66824a28..1a17db907 100644 --- a/src/plugins/PFC/chat_observer.py +++ b/src/plugins/PFC/chat_observer.py @@ -39,7 +39,6 @@ class ChatObserver: stream_id: 聊天流ID """ self.last_check_time = None - self.last_check_time = None self.last_bot_speak_time = None self.last_user_speak_time = None if stream_id in self._instances: diff --git a/src/plugins/PFC/observation_info.py b/src/plugins/PFC/observation_info.py index af7f537bc..fb4f27e95 100644 --- a/src/plugins/PFC/observation_info.py +++ b/src/plugins/PFC/observation_info.py @@ -157,10 +157,10 @@ class ObservationInfo: # #spec (暂时注释掉,如果不需要) # meta_plan_trigger: bool = False - # --- 修改:移除 __post_init__ 的参数 --- - def __init__(self): - self.chat_observer = None - self.chat_observer = None + # 加了会炸,给它注释掉 + # def __init__(self): + # self.chat_observer = None + # self.chat_observer = None def __post_init__(self): """初始化后创建handler并进行必要的设置""" From b9db604d931ec1c0296b3964d7f7ab73043dc0e1 Mon Sep 17 00:00:00 2001 From: Bakadax Date: Thu, 1 May 2025 20:53:06 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=89=8B=E5=8A=A8init?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/PFC/observation_info.py | 102 +++++++++++++++++----------- 1 file changed, 63 insertions(+), 39 deletions(-) diff --git a/src/plugins/PFC/observation_info.py b/src/plugins/PFC/observation_info.py index fb4f27e95..b684367e7 100644 --- a/src/plugins/PFC/observation_info.py +++ b/src/plugins/PFC/observation_info.py @@ -121,51 +121,70 @@ class ObservationInfoHandler(NotificationHandler): logger.error(traceback.format_exc()) # 打印详细堆栈信息 -@dataclass +# @dataclass <-- 这个,不需要了(递黄瓜) class ObservationInfo: - """决策信息类,用于收集和管理来自chat_observer的通知信息""" + """决策信息类,用于收集和管理来自chat_observer的通知信息 (手动实现 __init__)""" - # --- 修改:添加 private_name 字段 --- - private_name: str = field(init=True) # 让 dataclass 的 __init__ 接收 private_name + # 类型提示保留,可用于文档和静态分析 + private_name: str + chat_history: List[Dict[str, Any]] + chat_history_str: str + unprocessed_messages: List[Dict[str, Any]] + active_users: Set[str] + last_bot_speak_time: Optional[float] + last_user_speak_time: Optional[float] + last_message_time: Optional[float] + last_message_id: Optional[str] + last_message_content: str + last_message_sender: Optional[str] + bot_id: Optional[str] + chat_history_count: int + new_messages_count: int + cold_chat_start_time: Optional[float] + cold_chat_duration: float + is_typing: bool + is_cold_chat: bool + changed: bool + chat_observer: Optional[ChatObserver] + handler: Optional[ObservationInfoHandler] - # data_list - chat_history: List[Dict[str, Any]] = field(default_factory=list) # 修改:明确类型为 Dict - chat_history_str: str = "" - unprocessed_messages: List[Dict[str, Any]] = field(default_factory=list) # 修改:明确类型为 Dict - active_users: Set[str] = field(default_factory=set) - # data - last_bot_speak_time: Optional[float] = None - last_user_speak_time: Optional[float] = None - last_message_time: Optional[float] = None - # 添加 last_message_id - last_message_id: Optional[str] = None - last_message_content: str = "" - last_message_sender: Optional[str] = None - bot_id: Optional[str] = None - chat_history_count: int = 0 - new_messages_count: int = 0 - cold_chat_start_time: Optional[float] = None # 用于计算冷场持续时间 - cold_chat_duration: float = 0.0 # 缓存计算结果 + def __init__(self, private_name: str): + """ + 手动初始化 ObservationInfo 的所有实例变量。 + """ - # state - is_typing: bool = False # 可能表示对方正在输入 - # has_unread_messages: bool = False # 这个状态可以通过 new_messages_count > 0 判断 - is_cold_chat: bool = False - changed: bool = False # 用于标记状态是否有变化,以便外部模块决定是否重新规划 + # 接收的参数 + self.private_name: str = private_name - # #spec (暂时注释掉,如果不需要) - # meta_plan_trigger: bool = False + # data_list + self.chat_history: List[Dict[str, Any]] = [] + self.chat_history_str: str = "" + self.unprocessed_messages: List[Dict[str, Any]] = [] + self.active_users: Set[str] = set() - # 加了会炸,给它注释掉 - # def __init__(self): - # self.chat_observer = None - # self.chat_observer = None + # data + self.last_bot_speak_time: Optional[float] = None + self.last_user_speak_time: Optional[float] = None + self.last_message_time: Optional[float] = None + self.last_message_id: Optional[str] = None + self.last_message_content: str = "" + self.last_message_sender: Optional[str] = None + self.bot_id: Optional[str] = None + self.chat_history_count: int = 0 + self.new_messages_count: int = 0 + self.cold_chat_start_time: Optional[float] = None + self.cold_chat_duration: float = 0.0 - def __post_init__(self): - """初始化后创建handler并进行必要的设置""" - self.chat_observer: Optional[ChatObserver] = None # 添加类型提示 - self.handler = ObservationInfoHandler(self, self.private_name) + # state + self.is_typing: bool = False + self.is_cold_chat: bool = False + self.changed: bool = False + + # 关联对象 + self.chat_observer: Optional[ChatObserver] = None + + self.handler: ObservationInfoHandler = ObservationInfoHandler(self, self.private_name) def bind_to_chat_observer(self, chat_observer: ChatObserver): """绑定到指定的chat_observer @@ -179,6 +198,11 @@ class ObservationInfo: self.chat_observer = chat_observer try: + if not self.handler: # 确保 handler 已经被创建 + logger.error(f"[私聊][{self.private_name}] 尝试绑定时 handler 未初始化!") + self.chat_observer = None # 重置,防止后续错误 + return + # 注册关心的通知类型 self.chat_observer.notification_manager.register_handler( target="observation_info", notification_type=NotificationType.NEW_MESSAGE, handler=self.handler @@ -197,7 +221,7 @@ class ObservationInfo: def unbind_from_chat_observer(self): """解除与chat_observer的绑定""" - if self.chat_observer and hasattr(self.chat_observer, "notification_manager"): # 增加检查 + if self.chat_observer and hasattr(self.chat_observer, "notification_manager") and self.handler: # 增加 handler 检查 try: self.chat_observer.notification_manager.unregister_handler( target="observation_info", notification_type=NotificationType.NEW_MESSAGE, handler=self.handler @@ -215,7 +239,7 @@ class ObservationInfo: finally: # 确保 chat_observer 被重置 self.chat_observer = None else: - logger.warning(f"[私聊][{self.private_name}]尝试解绑时 ChatObserver 不存在或无效") + logger.warning(f"[私聊][{self.private_name}]尝试解绑时 ChatObserver 不存在、无效或 handler 未设置") # 修改:update_from_message 接收 UserInfo 对象 async def update_from_message(self, message: Dict[str, Any], user_info: Optional[UserInfo]): From 9888d879bb1837596e1363c941b3908752fe2efe Mon Sep 17 00:00:00 2001 From: Bakadax Date: Thu, 1 May 2025 20:57:15 +0800 Subject: [PATCH 3/4] ruff --- src/plugins/PFC/observation_info.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/PFC/observation_info.py b/src/plugins/PFC/observation_info.py index b684367e7..ae62c54c7 100644 --- a/src/plugins/PFC/observation_info.py +++ b/src/plugins/PFC/observation_info.py @@ -1,7 +1,6 @@ from typing import List, Optional, Dict, Any, Set from maim_message import UserInfo import time -from dataclasses import dataclass, field from src.common.logger import get_module_logger from .chat_observer import ChatObserver from .chat_states import NotificationHandler, NotificationType, Notification From aace21983e2d4883f288934f0cb101e8ac38df36 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 1 May 2025 12:57:37 +0000 Subject: [PATCH 4/4] =?UTF-8?q?=F0=9F=A4=96=20=E8=87=AA=E5=8A=A8=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=8C=96=E4=BB=A3=E7=A0=81=20[skip=20ci]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/plugins/PFC/observation_info.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/plugins/PFC/observation_info.py b/src/plugins/PFC/observation_info.py index ae62c54c7..c75729553 100644 --- a/src/plugins/PFC/observation_info.py +++ b/src/plugins/PFC/observation_info.py @@ -147,7 +147,6 @@ class ObservationInfo: chat_observer: Optional[ChatObserver] handler: Optional[ObservationInfoHandler] - def __init__(self, private_name: str): """ 手动初始化 ObservationInfo 的所有实例变量。 @@ -197,9 +196,9 @@ class ObservationInfo: self.chat_observer = chat_observer try: - if not self.handler: # 确保 handler 已经被创建 + if not self.handler: # 确保 handler 已经被创建 logger.error(f"[私聊][{self.private_name}] 尝试绑定时 handler 未初始化!") - self.chat_observer = None # 重置,防止后续错误 + self.chat_observer = None # 重置,防止后续错误 return # 注册关心的通知类型 @@ -220,7 +219,9 @@ class ObservationInfo: def unbind_from_chat_observer(self): """解除与chat_observer的绑定""" - if self.chat_observer and hasattr(self.chat_observer, "notification_manager") and self.handler: # 增加 handler 检查 + if ( + self.chat_observer and hasattr(self.chat_observer, "notification_manager") and self.handler + ): # 增加 handler 检查 try: self.chat_observer.notification_manager.unregister_handler( target="observation_info", notification_type=NotificationType.NEW_MESSAGE, handler=self.handler