@@ -39,7 +39,6 @@ class ChatObserver:
|
|||||||
stream_id: 聊天流ID
|
stream_id: 聊天流ID
|
||||||
"""
|
"""
|
||||||
self.last_check_time = None
|
self.last_check_time = None
|
||||||
self.last_check_time = None
|
|
||||||
self.last_bot_speak_time = None
|
self.last_bot_speak_time = None
|
||||||
self.last_user_speak_time = None
|
self.last_user_speak_time = None
|
||||||
if stream_id in self._instances:
|
if stream_id in self._instances:
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
from typing import List, Optional, Dict, Any, Set
|
from typing import List, Optional, Dict, Any, Set
|
||||||
from maim_message import UserInfo
|
from maim_message import UserInfo
|
||||||
import time
|
import time
|
||||||
from dataclasses import dataclass, field
|
|
||||||
from src.common.logger import get_module_logger
|
from src.common.logger import get_module_logger
|
||||||
from .chat_observer import ChatObserver
|
from .chat_observer import ChatObserver
|
||||||
from .chat_states import NotificationHandler, NotificationType, Notification
|
from .chat_states import NotificationHandler, NotificationType, Notification
|
||||||
@@ -121,51 +120,69 @@ class ObservationInfoHandler(NotificationHandler):
|
|||||||
logger.error(traceback.format_exc()) # 打印详细堆栈信息
|
logger.error(traceback.format_exc()) # 打印详细堆栈信息
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
# @dataclass <-- 这个,不需要了(递黄瓜)
|
||||||
class ObservationInfo:
|
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
|
def __init__(self, private_name: str):
|
||||||
chat_history: List[Dict[str, Any]] = field(default_factory=list) # 修改:明确类型为 Dict
|
"""
|
||||||
chat_history_str: str = ""
|
手动初始化 ObservationInfo 的所有实例变量。
|
||||||
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
|
self.private_name: str = private_name
|
||||||
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 # 缓存计算结果
|
|
||||||
|
|
||||||
# state
|
# data_list
|
||||||
is_typing: bool = False # 可能表示对方正在输入
|
self.chat_history: List[Dict[str, Any]] = []
|
||||||
# has_unread_messages: bool = False # 这个状态可以通过 new_messages_count > 0 判断
|
self.chat_history_str: str = ""
|
||||||
is_cold_chat: bool = False
|
self.unprocessed_messages: List[Dict[str, Any]] = []
|
||||||
changed: bool = False # 用于标记状态是否有变化,以便外部模块决定是否重新规划
|
self.active_users: Set[str] = set()
|
||||||
|
|
||||||
# #spec (暂时注释掉,如果不需要)
|
# data
|
||||||
# meta_plan_trigger: bool = False
|
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
|
||||||
|
|
||||||
# --- 修改:移除 __post_init__ 的参数 ---
|
# state
|
||||||
def __init__(self):
|
self.is_typing: bool = False
|
||||||
self.chat_observer = None
|
self.is_cold_chat: bool = False
|
||||||
self.chat_observer = None
|
self.changed: bool = False
|
||||||
|
|
||||||
def __post_init__(self):
|
# 关联对象
|
||||||
"""初始化后创建handler并进行必要的设置"""
|
self.chat_observer: Optional[ChatObserver] = None
|
||||||
self.chat_observer: Optional[ChatObserver] = None # 添加类型提示
|
|
||||||
self.handler = ObservationInfoHandler(self, self.private_name)
|
self.handler: ObservationInfoHandler = ObservationInfoHandler(self, self.private_name)
|
||||||
|
|
||||||
def bind_to_chat_observer(self, chat_observer: ChatObserver):
|
def bind_to_chat_observer(self, chat_observer: ChatObserver):
|
||||||
"""绑定到指定的chat_observer
|
"""绑定到指定的chat_observer
|
||||||
@@ -179,6 +196,11 @@ class ObservationInfo:
|
|||||||
|
|
||||||
self.chat_observer = chat_observer
|
self.chat_observer = chat_observer
|
||||||
try:
|
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(
|
self.chat_observer.notification_manager.register_handler(
|
||||||
target="observation_info", notification_type=NotificationType.NEW_MESSAGE, handler=self.handler
|
target="observation_info", notification_type=NotificationType.NEW_MESSAGE, handler=self.handler
|
||||||
@@ -197,7 +219,9 @@ class ObservationInfo:
|
|||||||
|
|
||||||
def unbind_from_chat_observer(self):
|
def unbind_from_chat_observer(self):
|
||||||
"""解除与chat_observer的绑定"""
|
"""解除与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:
|
try:
|
||||||
self.chat_observer.notification_manager.unregister_handler(
|
self.chat_observer.notification_manager.unregister_handler(
|
||||||
target="observation_info", notification_type=NotificationType.NEW_MESSAGE, handler=self.handler
|
target="observation_info", notification_type=NotificationType.NEW_MESSAGE, handler=self.handler
|
||||||
@@ -215,7 +239,7 @@ class ObservationInfo:
|
|||||||
finally: # 确保 chat_observer 被重置
|
finally: # 确保 chat_observer 被重置
|
||||||
self.chat_observer = None
|
self.chat_observer = None
|
||||||
else:
|
else:
|
||||||
logger.warning(f"[私聊][{self.private_name}]尝试解绑时 ChatObserver 不存在或无效")
|
logger.warning(f"[私聊][{self.private_name}]尝试解绑时 ChatObserver 不存在、无效或 handler 未设置")
|
||||||
|
|
||||||
# 修改:update_from_message 接收 UserInfo 对象
|
# 修改:update_from_message 接收 UserInfo 对象
|
||||||
async def update_from_message(self, message: Dict[str, Any], user_info: Optional[UserInfo]):
|
async def update_from_message(self, message: Dict[str, Any], user_info: Optional[UserInfo]):
|
||||||
|
|||||||
Reference in New Issue
Block a user