71 lines
2.4 KiB
Python
71 lines
2.4 KiB
Python
from typing import TYPE_CHECKING
|
|
from src.common.logger import get_module_logger
|
|
from .chat_states import NotificationHandler, Notification, NotificationType
|
|
|
|
if TYPE_CHECKING:
|
|
from .conversation import Conversation
|
|
|
|
logger = get_module_logger("notification_handler")
|
|
|
|
class PFCNotificationHandler(NotificationHandler):
|
|
"""PFC通知处理器"""
|
|
|
|
def __init__(self, conversation: 'Conversation'):
|
|
"""初始化PFC通知处理器
|
|
|
|
Args:
|
|
conversation: 对话实例
|
|
"""
|
|
self.conversation = conversation
|
|
|
|
async def handle_notification(self, notification: Notification):
|
|
"""处理通知
|
|
|
|
Args:
|
|
notification: 通知对象
|
|
"""
|
|
logger.debug(f"收到通知: {notification.type.name}, 数据: {notification.data}")
|
|
|
|
# 根据通知类型执行不同的处理
|
|
if notification.type == NotificationType.NEW_MESSAGE:
|
|
# 新消息通知
|
|
await self._handle_new_message(notification)
|
|
elif notification.type == NotificationType.COLD_CHAT:
|
|
# 冷聊天通知
|
|
await self._handle_cold_chat(notification)
|
|
elif notification.type == NotificationType.COMMAND:
|
|
# 命令通知
|
|
await self._handle_command(notification)
|
|
else:
|
|
logger.warning(f"未知的通知类型: {notification.type.name}")
|
|
|
|
async def _handle_new_message(self, notification: Notification):
|
|
"""处理新消息通知
|
|
|
|
Args:
|
|
notification: 通知对象
|
|
"""
|
|
|
|
# 更新决策信息
|
|
observation_info = self.conversation.observation_info
|
|
observation_info.last_message_time = notification.data.get("time", 0)
|
|
observation_info.add_unprocessed_message(notification.data)
|
|
|
|
# 手动触发观察器更新
|
|
self.conversation.chat_observer.trigger_update()
|
|
|
|
async def _handle_cold_chat(self, notification: Notification):
|
|
"""处理冷聊天通知
|
|
|
|
Args:
|
|
notification: 通知对象
|
|
"""
|
|
# 获取冷聊天信息
|
|
cold_duration = notification.data.get("duration", 0)
|
|
|
|
# 更新决策信息
|
|
observation_info = self.conversation.observation_info
|
|
observation_info.conversation_cold_duration = cold_duration
|
|
|
|
logger.info(f"对话已冷: {cold_duration}秒")
|
|
|