diff --git a/astrbot/core/platform/sources/aiocqhttp/aiocqhttp_message_event.py b/astrbot/core/platform/sources/aiocqhttp/aiocqhttp_message_event.py index 57c46cd33..b8bb723d5 100644 --- a/astrbot/core/platform/sources/aiocqhttp/aiocqhttp_message_event.py +++ b/astrbot/core/platform/sources/aiocqhttp/aiocqhttp_message_event.py @@ -67,12 +67,19 @@ class AiocqhttpMessageEvent(AstrMessageEvent): session_id: str, messages: list[dict], ): - if event: - await bot.send(event=event, message=messages) - elif is_group: + # session_id 必须是纯数字字符串 + session_id = int(session_id) if session_id.isdigit() else None + + if is_group and isinstance(session_id, int): await bot.send_group_msg(group_id=session_id, message=messages) - else: + elif not is_group and isinstance(session_id, int): await bot.send_private_msg(user_id=session_id, message=messages) + elif isinstance(event, Event): # 最后兜底 + await bot.send(event=event, message=messages) + else: + raise ValueError( + f"无法发送消息:缺少有效的数字 session_id({session_id}) 或 event({event})" + ) @classmethod async def send_message( @@ -83,7 +90,15 @@ class AiocqhttpMessageEvent(AstrMessageEvent): is_group: bool = False, session_id: str = None, ): - """发送消息""" + """发送消息至 QQ 协议端(aiocqhttp)。 + + Args: + bot (CQHttp): aiocqhttp 机器人实例 + message_chain (MessageChain): 要发送的消息链 + event (Event | None, optional): aiocqhttp 事件对象. + is_group (bool, optional): 是否为群消息. + session_id (str | None, optional): 会话 ID(群号或 QQ 号 + """ # 转发消息、文件消息不能和普通消息混在一起发送 send_one_by_one = any( @@ -122,18 +137,15 @@ class AiocqhttpMessageEvent(AstrMessageEvent): async def send(self, message: MessageChain): """发送消息""" - event = self.message_obj.raw_message - assert isinstance(event, Event), "Event must be an instance of aiocqhttp.Event" - is_group = False - if self.get_group_id(): - is_group = True - session_id = self.get_group_id() - else: - session_id = self.get_sender_id() + event = getattr(self.message_obj, "raw_message", None) + + is_group = bool(self.get_group_id()) + session_id = self.get_group_id() if is_group else self.get_sender_id() + await self.send_message( bot=self.bot, message_chain=message, - event=event, + event=event, # 不强制要求一定是 Event is_group=is_group, session_id=session_id, )