From f02731055ee30d042d05ef5e13794b798d0a34b7 Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Sat, 10 Aug 2024 03:24:53 -0400 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E5=90=AF=E7=94=A8=E5=BF=BD=E7=95=A5=E5=89=8D=E7=BC=80=E4=B9=8B?= =?UTF-8?q?=E5=90=8E=E5=8F=AF=E8=83=BD=E7=9A=84=E9=80=BB=E8=BE=91=E5=86=B2?= =?UTF-8?q?=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- astrbot/message/handler.py | 9 +++++++-- model/platform/qq_aiocqhttp.py | 17 ++++++++++------- model/platform/qq_nakuru.py | 16 +++++++++------- type/message_event.py | 11 ++++++++--- 4 files changed, 34 insertions(+), 19 deletions(-) diff --git a/astrbot/message/handler.py b/astrbot/message/handler.py index 12cd57419..49d8be400 100644 --- a/astrbot/message/handler.py +++ b/astrbot/message/handler.py @@ -134,8 +134,8 @@ class MessageHandler(): self.persist_manager.record_message(message.platform.platform_name, message.session_id) # TODO: this should be configurable - if not message.message_str: - return MessageResult("Hi~") + # if not message.message_str: + # return MessageResult("Hi~") # check the rate limit if not self.rate_limit_helper.check_frequency(message.message_obj.sender.user_id): @@ -158,6 +158,11 @@ class MessageHandler(): use_t2i=cmd_res.is_use_t2i ) + # next is the LLM part + + if message.only_command: + return + # check if the message is a llm-wake-up command if self.llm_wake_prefix and not msg_plain.startswith(self.llm_wake_prefix): logger.debug(f"消息 `{msg_plain}` 没有以 LLM 唤醒前缀 `{self.llm_wake_prefix}` 开头,忽略。") diff --git a/model/platform/qq_aiocqhttp.py b/model/platform/qq_aiocqhttp.py index 9fc73ee52..89a699f69 100644 --- a/model/platform/qq_aiocqhttp.py +++ b/model/platform/qq_aiocqhttp.py @@ -106,23 +106,24 @@ class AIOCQHTTP(Platform): # if message chain contains Plain components or # At components which points to self_id, return True if message.type == MessageType.FRIEND_MESSAGE: - return True + return True, "friend" for comp in message.message: if isinstance(comp, At) and str(comp.qq) == message.self_id: - return True + return True, "at" # check commands which ignore prefix if self.context.command_manager.check_command_ignore_prefix(message.message_str): - return True + return True, "command" # check nicks if self.check_nick(message.message_str): - return True - return False + return True, "nick" + return False, "none" async def handle_msg(self, message: AstrBotMessage): logger.info( f"{message.sender.nickname}/{message.sender.user_id} -> {self.parse_message_outline(message)}") - if not self.pre_check(message): + ok, reason = self.pre_check(message) + if not ok: return # 解析 role @@ -148,7 +149,9 @@ class AIOCQHTTP(Platform): self.context, "aiocqhttp", message.session_id, - role, unified_msg_origin) + role, + unified_msg_origin, + reason == "command") # only_command # transfer control to message handler message_result = await self.message_handler.handle(ame) diff --git a/model/platform/qq_nakuru.py b/model/platform/qq_nakuru.py index f3311a8b7..a40cb987c 100644 --- a/model/platform/qq_nakuru.py +++ b/model/platform/qq_nakuru.py @@ -74,17 +74,17 @@ class QQGOCQ(Platform): def pre_check(self, message: AstrBotMessage) -> bool: # if message chain contains Plain components or At components which points to self_id, return True if message.type == MessageType.FRIEND_MESSAGE: - return True + return True, "friend" for comp in message.message: if isinstance(comp, At) and str(comp.qq) == message.self_id: - return True + return True, "at" # check commands which ignore prefix if self.context.command_manager.check_command_ignore_prefix(message.message_str): - return True + return True, "command" # check nicks if self.check_nick(message.message_str): - return True - return False + return True, "nick" + return False, "none" def run(self): coro = self.client._run() @@ -98,7 +98,8 @@ class QQGOCQ(Platform): (GroupMessage, FriendMessage, GuildMessage)) # 判断是否响应消息 - if not self.pre_check(message): + ok, reason = self.pre_check(message) + if not ok: return # 解析 session_id @@ -142,7 +143,8 @@ class QQGOCQ(Platform): "nakuru", session_id, role, - unified_msg_origin) + unified_msg_origin, + reason == 'command') # only_command # transfer control to message handler message_result = await self.message_handler.handle(ame) diff --git a/type/message_event.py b/type/message_event.py index 5ff8a7007..dc0221897 100644 --- a/type/message_event.py +++ b/type/message_event.py @@ -20,7 +20,8 @@ class AstrMessageEvent(): role: str, context: Context, session_id: str = None, - unified_msg_origin: str = None): + unified_msg_origin: str = None, + only_command: bool = False): ''' AstrBot 消息事件。 @@ -31,6 +32,7 @@ class AstrMessageEvent(): `context`: 全局对象 `session_id`: 会话id `unified_msg_origin`: 统一消息来源 + `only_command`: 是否只处理指令,而不使用 LLM 回复 ''' self.context = context self.message_str = message_str @@ -39,13 +41,15 @@ class AstrMessageEvent(): self.role = role self.session_id = session_id self.unified_msg_origin = unified_msg_origin + self.only_command = only_command def from_astrbot_message(message: AstrBotMessage, context: Context, platform_name: str, session_id: str, role: str = "member", - unified_msg_origin: str = None): + unified_msg_origin: str = None, + only_command: bool = False): ame = AstrMessageEvent(message.message_str, message, @@ -53,6 +57,7 @@ class AstrMessageEvent(): role, context, session_id, - unified_msg_origin) + unified_msg_origin, + only_command=only_command) return ame