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 ..chat_observer import ChatObserver
|
||||||
from ..message_sender import DirectMessageSender
|
from ..message_sender import DirectMessageSender
|
||||||
from src.chat.message_receive.chat_stream import ChatStream, chat_manager
|
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 ..pfc_relationship import PfcRepationshipTranslator
|
||||||
from rich.traceback import install
|
from rich.traceback import install
|
||||||
|
|
||||||
|
|
@ -534,8 +534,11 @@ class IdleChat:
|
||||||
|
|
||||||
# 发送消息
|
# 发送消息
|
||||||
try:
|
try:
|
||||||
|
segments = Seg(type="seglist", data=[Seg(type="text", data=content)])
|
||||||
logger.debug(f"[私聊][{self.private_name}]准备发送主动聊天消息: {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}")
|
logger.info(f"[私聊][{self.private_name}]成功主动发起聊天: {content}")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"[私聊][{self.private_name}]发送主动聊天消息失败: {str(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(
|
async def send_message(
|
||||||
self,
|
self,
|
||||||
chat_stream: ChatStream,
|
chat_stream: ChatStream,
|
||||||
content: str,
|
segments: Seg,
|
||||||
reply_to_message: Optional[Message] = None,
|
reply_to_message: Optional[Message] = None,
|
||||||
|
is_emoji: Optional[bool] = False,
|
||||||
|
content: str = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""发送消息到聊天流
|
"""发送消息到聊天流
|
||||||
|
|
||||||
|
|
@ -35,9 +37,6 @@ class DirectMessageSender:
|
||||||
reply_to_message: 要回复的消息(可选)
|
reply_to_message: 要回复的消息(可选)
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
# 创建消息内容
|
|
||||||
segments = Seg(type="seglist", data=[Seg(type="text", data=content)])
|
|
||||||
|
|
||||||
# 获取麦麦的信息
|
# 获取麦麦的信息
|
||||||
bot_user_info = UserInfo(
|
bot_user_info = UserInfo(
|
||||||
user_id=global_config.BOT_QQ,
|
user_id=global_config.BOT_QQ,
|
||||||
|
|
@ -57,7 +56,7 @@ class DirectMessageSender:
|
||||||
message_segment=segments,
|
message_segment=segments,
|
||||||
reply=reply_to_message,
|
reply=reply_to_message,
|
||||||
is_head=True,
|
is_head=True,
|
||||||
is_emoji=False,
|
is_emoji=is_emoji,
|
||||||
thinking_start_time=time.time(),
|
thinking_start_time=time.time(),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -71,7 +70,10 @@ class DirectMessageSender:
|
||||||
message_set = MessageSet(chat_stream, message_id)
|
message_set = MessageSet(chat_stream, message_id)
|
||||||
message_set.add_message(message)
|
message_set.add_message(message)
|
||||||
await message_manager.add_message(message_set)
|
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:
|
except Exception as e:
|
||||||
logger.error(f"[私聊][{self.private_name}]PFC消息发送失败: {str(e)}")
|
logger.error(f"[私聊][{self.private_name}]PFC消息发送失败: {str(e)}")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue