Merge pull request #13 from Dax233/G-Test

重构 action,PFC 表情包功能完善
pull/937/head
未來星織 2025-05-16 13:56:46 +09:00 committed by GitHub
commit b3f805fcbb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 1230 additions and 920 deletions

View File

@ -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)}")

View File

@ -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

View File

@ -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)}")