From 69a4d6ac8322dfb83e44e293f8064c9a7dee3407 Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Sat, 14 Dec 2024 20:50:21 +0800 Subject: [PATCH] perf: more simple api --- astrbot/core/platform/astr_message_event.py | 102 ++++++++++++++------ 1 file changed, 71 insertions(+), 31 deletions(-) diff --git a/astrbot/core/platform/astr_message_event.py b/astrbot/core/platform/astr_message_event.py index 2b9366497..87b8071ba 100644 --- a/astrbot/core/platform/astr_message_event.py +++ b/astrbot/core/platform/astr_message_event.py @@ -127,6 +127,51 @@ class AstrMessageEvent(abc.ABC): ''' return self.message_obj.sender.nickname + def set_extra(self, key, value): + ''' + 设置额外的信息。 + ''' + self._extras[key] = value + + def get_extra(self, key = None): + ''' + 获取额外的信息。 + ''' + if key is None: + return self._extras + return self._extras.get(key, None) + + def clear_extra(self): + ''' + 清除额外的信息。 + ''' + self._extras.clear() + + def is_private_chat(self) -> bool: + ''' + 是否是私聊。 + ''' + return self.message_obj.type.value == (MessageType.FRIEND_MESSAGE).value + + def is_wake_up(self) -> bool: + ''' + 是否是唤醒机器人的事件。 + ''' + return self.is_wake + + def is_admin(self) -> bool: + ''' + 是否是管理员。 + ''' + return self.role == "admin" + + async def send(self, message: MessageChain): + ''' + 发送消息到消息平台。 + ''' + await Metric.upload(msg_event_tick = 1, adapter_name = self.platform_meta.name) + self._has_send_oper = True + def set_result(self, result: Union[MessageEventResult, str]): '''设置消息事件的结果。 @@ -188,47 +233,42 @@ class AstrMessageEvent(abc.ABC): ''' self._result = None - def set_extra(self, key, value): + def make_result(self) -> MessageEventResult: ''' - 设置额外的信息。 - ''' - self._extras[key] = value + 创建一个空的消息事件结果。 - def get_extra(self, key = None): - ''' - 获取额外的信息。 - ''' - if key is None: - return self._extras - return self._extras.get(key, None) - - def clear_extra(self): - ''' - 清除额外的信息。 - ''' - self._extras.clear() + Example: - def is_private_chat(self) -> bool: + ```python + # 纯文本回复 + yield event.make_result().message("Hi") + # 发送图片 + yield event.make_result().url_image("https://example.com/image.jpg") + yield event.make_result().file_image("image.jpg") + ``` ''' - 是否是私聊。 - ''' - return self.message_obj.type.value == (MessageType.FRIEND_MESSAGE).value + return MessageEventResult() - def is_wake_up(self) -> bool: + def plain_result(self, text: str) -> MessageEventResult: ''' - 是否是唤醒机器人的事件。 + 创建一个空的消息事件结果,只包含一条文本消息。 ''' - return self.is_wake + return MessageEventResult().message(text) - def is_admin(self) -> bool: + def image_result(self, url_or_path: str) -> MessageEventResult: ''' - 是否是管理员。 + 创建一个空的消息事件结果,只包含一条图片消息。 + + 根据开头是否包含 http 来判断是网络图片还是本地图片。 ''' - return self.role == "admin" + if url_or_path.startswith("http"): + return MessageEventResult().url_image(url_or_path) + return MessageEventResult().file_image(url_or_path) - async def send(self, message: MessageChain): + def chain_result(self, chain: List[BaseMessageComponent]) -> MessageEventResult: ''' - 发送消息到消息平台。 + 创建一个空的消息事件结果,包含指定的消息链。 ''' - await Metric.upload(msg_event_tick = 1, adapter_name = self.platform_meta.name) - self._has_send_oper = True \ No newline at end of file + mer = MessageEventResult() + mer.chain = chain + return mer \ No newline at end of file