From a58319f594c113ef3e332e1d72af5380cc5ad86a Mon Sep 17 00:00:00 2001 From: LIghtJUNction Date: Sat, 21 Mar 2026 14:26:22 +0800 Subject: [PATCH] Fix: Discord adapter not adding At component when bot is mentioned, causing group messages to not wake the bot --- .../sources/discord/discord_platform_adapter.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/astrbot/core/platform/sources/discord/discord_platform_adapter.py b/astrbot/core/platform/sources/discord/discord_platform_adapter.py index 75f17d391..6015b79f5 100644 --- a/astrbot/core/platform/sources/discord/discord_platform_adapter.py +++ b/astrbot/core/platform/sources/discord/discord_platform_adapter.py @@ -10,7 +10,7 @@ from discord.errors import HTTPException from astrbot import logger from astrbot.api.event import MessageChain -from astrbot.api.message_components import File, Image, Plain +from astrbot.api.message_components import At, File, Image, Plain from astrbot.api.platform import ( AstrBotMessage, MessageMember, @@ -194,13 +194,16 @@ class DiscordPlatformAdapter(Platform): # 如果机器人被@,移除@部分 # 剥离 User Mention (<@id>, <@!id>) + bot_was_mentioned = False if self.client and self.client.user: mention_str = f"<@{self.client.user.id}>" mention_str_nickname = f"<@!{self.client.user.id}>" if content.startswith(mention_str): content = content[len(mention_str) :].lstrip() + bot_was_mentioned = True elif content.startswith(mention_str_nickname): content = content[len(mention_str_nickname) :].lstrip() + bot_was_mentioned = True # 剥离 Role Mention(bot 拥有的任一角色被提及,<@&role_id>) if ( @@ -229,6 +232,11 @@ class DiscordPlatformAdapter(Platform): nickname=message.author.display_name, ) message_chain = [] + # 如果机器人被 @,在 message_chain 开头添加 At 组件 + if bot_was_mentioned: + message_chain.insert( + 0, At(qq=str(self.client.user.id), name=self.client.user.name) + ) if abm.message_str: message_chain.append(Plain(text=abm.message_str)) if message.attachments: