mirror of https://github.com/Mai-with-u/MaiBot.git
commit
b3f805fcbb
|
|
@ -19,7 +19,7 @@ from src.chat.utils.chat_message_builder import build_readable_messages
|
|||
from ..chat_observer import ChatObserver
|
||||
from ..message_sender import DirectMessageSender
|
||||
from src.chat.message_receive.chat_stream import ChatStream, chat_manager
|
||||
from maim_message import UserInfo
|
||||
from maim_message import UserInfo, Seg
|
||||
from ..pfc_relationship import PfcRepationshipTranslator
|
||||
from rich.traceback import install
|
||||
|
||||
|
|
@ -534,8 +534,11 @@ class IdleChat:
|
|||
|
||||
# 发送消息
|
||||
try:
|
||||
segments = Seg(type="seglist", data=[Seg(type="text", data=content)])
|
||||
logger.debug(f"[私聊][{self.private_name}]准备发送主动聊天消息: {content}")
|
||||
await self.message_sender.send_message(chat_stream=chat_stream, content=content, reply_to_message=None)
|
||||
await self.message_sender.send_message(
|
||||
chat_stream=chat_stream, segments=segments, reply_to_message=None, content=content
|
||||
)
|
||||
logger.info(f"[私聊][{self.private_name}]成功主动发起聊天: {content}")
|
||||
except Exception as e:
|
||||
logger.error(f"[私聊][{self.private_name}]发送主动聊天消息失败: {str(e)}")
|
||||
|
|
|
|||
|
|
@ -0,0 +1,66 @@
|
|||
from abc import ABC, abstractmethod
|
||||
from typing import Type, TYPE_CHECKING
|
||||
|
||||
# 从 action_handlers.py 导入具体的处理器类
|
||||
from .action_handlers import ( # 调整导入路径
|
||||
ActionHandler,
|
||||
DirectReplyHandler,
|
||||
SendNewMessageHandler,
|
||||
SayGoodbyeHandler,
|
||||
SendMemesHandler,
|
||||
RethinkGoalHandler,
|
||||
ListeningHandler,
|
||||
EndConversationHandler,
|
||||
BlockAndIgnoreHandler,
|
||||
WaitHandler,
|
||||
UnknownActionHandler,
|
||||
)
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from PFC.conversation import Conversation # 调整导入路径
|
||||
|
||||
|
||||
class AbstractActionFactory(ABC):
|
||||
"""抽象动作工厂接口。"""
|
||||
|
||||
@abstractmethod
|
||||
def create_action_handler(self, action_type: str, conversation: "Conversation") -> ActionHandler:
|
||||
"""
|
||||
根据动作类型创建并返回相应的动作处理器。
|
||||
|
||||
参数:
|
||||
action_type (str): 动作的类型字符串。
|
||||
conversation (Conversation): 当前对话实例。
|
||||
|
||||
返回:
|
||||
ActionHandler: 对应动作类型的处理器实例。
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
class StandardActionFactory(AbstractActionFactory):
|
||||
"""标准的动作工厂实现。"""
|
||||
|
||||
def create_action_handler(self, action_type: str, conversation: "Conversation") -> ActionHandler:
|
||||
"""
|
||||
根据动作类型创建并返回具体的动作处理器实例。
|
||||
"""
|
||||
# 动作类型到处理器类的映射
|
||||
handler_map: dict[str, Type[ActionHandler]] = {
|
||||
"direct_reply": DirectReplyHandler,
|
||||
"send_new_message": SendNewMessageHandler,
|
||||
"say_goodbye": SayGoodbyeHandler,
|
||||
"send_memes": SendMemesHandler,
|
||||
"rethink_goal": RethinkGoalHandler,
|
||||
"listening": ListeningHandler,
|
||||
"end_conversation": EndConversationHandler,
|
||||
"block_and_ignore": BlockAndIgnoreHandler,
|
||||
"wait": WaitHandler,
|
||||
}
|
||||
handler_class = handler_map.get(action_type) # 获取对应的处理器类
|
||||
# 如果找到对应的处理器类
|
||||
if handler_class:
|
||||
return handler_class(conversation) # 创建并返回处理器实例
|
||||
else:
|
||||
# 如果未找到,返回处理未知动作的默认处理器
|
||||
return UnknownActionHandler(conversation)
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -24,8 +24,10 @@ class DirectMessageSender:
|
|||
async def send_message(
|
||||
self,
|
||||
chat_stream: ChatStream,
|
||||
content: str,
|
||||
segments: Seg,
|
||||
reply_to_message: Optional[Message] = None,
|
||||
is_emoji: Optional[bool] = False,
|
||||
content: str = None,
|
||||
) -> None:
|
||||
"""发送消息到聊天流
|
||||
|
||||
|
|
@ -35,9 +37,6 @@ class DirectMessageSender:
|
|||
reply_to_message: 要回复的消息(可选)
|
||||
"""
|
||||
try:
|
||||
# 创建消息内容
|
||||
segments = Seg(type="seglist", data=[Seg(type="text", data=content)])
|
||||
|
||||
# 获取麦麦的信息
|
||||
bot_user_info = UserInfo(
|
||||
user_id=global_config.BOT_QQ,
|
||||
|
|
@ -57,7 +56,7 @@ class DirectMessageSender:
|
|||
message_segment=segments,
|
||||
reply=reply_to_message,
|
||||
is_head=True,
|
||||
is_emoji=False,
|
||||
is_emoji=is_emoji,
|
||||
thinking_start_time=time.time(),
|
||||
)
|
||||
|
||||
|
|
@ -71,7 +70,10 @@ class DirectMessageSender:
|
|||
message_set = MessageSet(chat_stream, message_id)
|
||||
message_set.add_message(message)
|
||||
await message_manager.add_message(message_set)
|
||||
logger.info(f"[私聊][{self.private_name}]PFC消息已发送: {content}")
|
||||
if is_emoji:
|
||||
logger.info(f"[私聊][{self.private_name}]PFC表情消息已发送: {content}")
|
||||
else:
|
||||
logger.info(f"[私聊][{self.private_name}]PFC消息已发送: {content}")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"[私聊][{self.private_name}]PFC消息发送失败: {str(e)}")
|
||||
|
|
|
|||
Loading…
Reference in New Issue