51 lines
1.6 KiB
Python
51 lines
1.6 KiB
Python
from typing import Optional
|
|
from src.common.logger import get_module_logger
|
|
from ..chat.chat_stream import ChatStream
|
|
from ..chat.message import Message
|
|
from ..message.message_base import Seg
|
|
from src.plugins.chat.message import MessageSending, MessageSet
|
|
from src.plugins.chat.message_sender import message_manager
|
|
|
|
logger = get_module_logger("message_sender")
|
|
|
|
|
|
class DirectMessageSender:
|
|
"""直接消息发送器"""
|
|
|
|
def __init__(self):
|
|
pass
|
|
|
|
async def send_message(
|
|
self,
|
|
chat_stream: ChatStream,
|
|
content: str,
|
|
reply_to_message: Optional[Message] = None,
|
|
) -> None:
|
|
"""发送消息到聊天流
|
|
|
|
Args:
|
|
chat_stream: 聊天流
|
|
content: 消息内容
|
|
reply_to_message: 要回复的消息(可选)
|
|
"""
|
|
try:
|
|
# 创建消息内容
|
|
segments = [Seg(type="text", data={"text": content})]
|
|
|
|
# 检查是否需要引用回复
|
|
if reply_to_message:
|
|
reply_id = reply_to_message.message_id
|
|
message_sending = MessageSending(segments=segments, reply_to_id=reply_id)
|
|
else:
|
|
message_sending = MessageSending(segments=segments)
|
|
|
|
# 发送消息
|
|
message_set = MessageSet(chat_stream, message_sending.message_id)
|
|
message_set.add_message(message_sending)
|
|
message_manager.add_message(message_set)
|
|
logger.info(f"PFC消息已发送: {content}")
|
|
|
|
except Exception as e:
|
|
logger.error(f"PFC消息发送失败: {str(e)}")
|
|
raise
|