启用message_sender.py

This commit is contained in:
Bakadax
2025-04-28 20:44:56 +08:00
parent 79a70e0202
commit fdcb82b25e
3 changed files with 92 additions and 69 deletions

View File

@@ -9,7 +9,8 @@ from src.plugins.utils.chat_message_builder import build_readable_messages, get_
from typing import Dict, Any, Optional from typing import Dict, Any, Optional
from ..chat.message import Message from ..chat.message import Message
from .pfc_types import ConversationState from .pfc_types import ConversationState
from .pfc import ChatObserver, GoalAnalyzer, DirectMessageSender from .pfc import ChatObserver, GoalAnalyzer
from .message_sender import DirectMessageSender
from src.common.logger_manager import get_logger from src.common.logger_manager import get_logger
from .action_planner import ActionPlanner from .action_planner import ActionPlanner
from .observation_info import ObservationInfo from .observation_info import ObservationInfo

View File

@@ -1,10 +1,14 @@
import time
from typing import Optional from typing import Optional
from src.common.logger import get_module_logger from src.common.logger import get_module_logger
from ..chat.chat_stream import ChatStream from ..chat.chat_stream import ChatStream
from ..chat.message import Message from ..chat.message import Message
from maim_message import Seg from maim_message import UserInfo, Seg
from src.plugins.chat.message import MessageSending, MessageSet from src.plugins.chat.message import MessageSending, MessageSet
from src.plugins.chat.message_sender import message_manager from src.plugins.chat.message_sender import message_manager
from ..storage.storage import MessageStorage
from ...config.config import global_config
logger = get_module_logger("message_sender") logger = get_module_logger("message_sender")
@@ -12,14 +16,14 @@ logger = get_module_logger("message_sender")
class DirectMessageSender: class DirectMessageSender:
"""直接消息发送器""" """直接消息发送器"""
def __init__(self): def __init__(self, private_name: str):
pass self.private_name = private_name
self.storage = MessageStorage()
async def send_message( async def send_message(
self, self,
chat_stream: ChatStream, chat_stream: ChatStream,
content: str, content: str,
private_name: str,
reply_to_message: Optional[Message] = None, reply_to_message: Optional[Message] = None,
) -> None: ) -> None:
"""发送消息到聊天流 """发送消息到聊天流
@@ -31,21 +35,39 @@ class DirectMessageSender:
""" """
try: try:
# 创建消息内容 # 创建消息内容
segments = [Seg(type="text", data={"text": content})] segments = Seg(type="seglist", data=[Seg(type="text", data=content)])
bot_user_info = UserInfo(
user_id=global_config.BOT_QQ,
user_nickname=global_config.BOT_NICKNAME,
platform=chat_stream.platform,
)
# 检查是否需要引用回复 message_id=f"dm{round(time.time(), 2)}"
if reply_to_message:
reply_id = reply_to_message.message_id message = MessageSending(
message_sending = MessageSending(segments=segments, reply_to_id=reply_id) message_id=message_id,
else: chat_stream=chat_stream,
message_sending = MessageSending(segments=segments) bot_user_info=bot_user_info,
sender_info=reply_to_message.message_info.user_info if reply_to_message else None,
message_segment=segments,
reply=reply_to_message,
is_head=True,
is_emoji=False,
thinking_start_time=time.time(),
)
# 处理消息
await message.process()
_message_json = message.to_dict()
# 发送消息 # 发送消息
message_set = MessageSet(chat_stream, message_sending.message_id) message_set = MessageSet(chat_stream, message_id)
message_set.add_message(message_sending) message_set.add_message(message)
message_manager.add_message(message_set) await message_manager.add_message(message_set)
logger.info(f"[私聊][{private_name}]PFC消息已发送: {content}") await self.storage.store_message(message, chat_stream)
logger.info(f"[私聊][{self.private_name}]PFC消息已发送: {content}")
except Exception as e: except Exception as e:
logger.error(f"[私聊][{private_name}]PFC消息发送失败: {str(e)}") logger.error(f"[私聊][{self.private_name}]PFC消息发送失败: {str(e)}")
raise raise

View File

@@ -318,63 +318,63 @@ class GoalAnalyzer:
logger.error(f"[私聊][{self.private_name}]分析对话状态时出错: {str(e)}") logger.error(f"[私聊][{self.private_name}]分析对话状态时出错: {str(e)}")
return False, False, f"分析出错: {str(e)}" return False, False, f"分析出错: {str(e)}"
# 先注释掉,万一以后出问题了还能开回来(((
# class DirectMessageSender:
# """直接发送消息到平台的发送器"""
class DirectMessageSender: # def __init__(self, private_name: str):
"""直接发送消息到平台的发送器""" # self.logger = get_module_logger("direct_sender")
# self.storage = MessageStorage()
# self.private_name = private_name
def __init__(self, private_name: str): # async def send_via_ws(self, message: MessageSending) -> None:
self.logger = get_module_logger("direct_sender") # try:
self.storage = MessageStorage() # await global_api.send_message(message)
self.private_name = private_name # except Exception as e:
# raise ValueError(f"未找到平台:{message.message_info.platform} 的url配置请检查配置文件") from e
async def send_via_ws(self, message: MessageSending) -> None: # async def send_message(
try: # self,
await global_api.send_message(message) # chat_stream: ChatStream,
except Exception as e: # content: str,
raise ValueError(f"未找到平台:{message.message_info.platform} 的url配置请检查配置文件") from e # reply_to_message: Optional[Message] = None,
# ) -> None:
# """直接发送消息到平台
async def send_message( # Args:
self, # chat_stream: 聊天流
chat_stream: ChatStream, # content: 消息内容
content: str, # reply_to_message: 要回复的消息
reply_to_message: Optional[Message] = None, # """
) -> None: # # 构建消息对象
"""直接发送消息到平台 # message_segment = Seg(type="text", data=content)
# bot_user_info = UserInfo(
# user_id=global_config.BOT_QQ,
# user_nickname=global_config.BOT_NICKNAME,
# platform=chat_stream.platform,
# )
Args: # message = MessageSending(
chat_stream: 聊天流 # message_id=f"dm{round(time.time(), 2)}",
content: 消息内容 # chat_stream=chat_stream,
reply_to_message: 要回复的消息 # bot_user_info=bot_user_info,
""" # sender_info=reply_to_message.message_info.user_info if reply_to_message else None,
# 构建消息对象 # message_segment=message_segment,
message_segment = Seg(type="text", data=content) # reply=reply_to_message,
bot_user_info = UserInfo( # is_head=True,
user_id=global_config.BOT_QQ, # is_emoji=False,
user_nickname=global_config.BOT_NICKNAME, # thinking_start_time=time.time(),
platform=chat_stream.platform, # )
)
message = MessageSending( # # 处理消息
message_id=f"dm{round(time.time(), 2)}", # await message.process()
chat_stream=chat_stream,
bot_user_info=bot_user_info,
sender_info=reply_to_message.message_info.user_info if reply_to_message else None,
message_segment=message_segment,
reply=reply_to_message,
is_head=True,
is_emoji=False,
thinking_start_time=time.time(),
)
# 处理消息 # _message_json = message.to_dict()
await message.process()
_message_json = message.to_dict() # # 发送消息
# try:
# 发送消息 # await self.send_via_ws(message)
try: # await self.storage.store_message(message, chat_stream)
await self.send_via_ws(message) # logger.success(f"[私聊][{self.private_name}]PFC消息已发送: {content}")
await self.storage.store_message(message, chat_stream) # except Exception as e:
logger.success(f"[私聊][{self.private_name}]PFC消息发送: {content}") # logger.error(f"[私聊][{self.private_name}]PFC消息发送失败: {str(e)}")
except Exception as e:
logger.error(f"[私聊][{self.private_name}]PFC消息发送失败: {str(e)}")