diff --git a/pkg/pipeline/resprule/rules/atbot.py b/pkg/pipeline/resprule/rules/atbot.py index cf31cc31..b35fb5e4 100644 --- a/pkg/pipeline/resprule/rules/atbot.py +++ b/pkg/pipeline/resprule/rules/atbot.py @@ -16,17 +16,26 @@ class AtBotRule(rule_model.GroupRespondRule): rule_dict: dict, query: pipeline_query.Query, ) -> entities.RuleJudgeResult: - if message_chain.has(platform_message.At(query.adapter.bot_account_id)) and rule_dict['at']: - message_chain.remove(platform_message.At(query.adapter.bot_account_id)) + def remove_at(message_chain: platform_message.MessageChain): + for component in message_chain.root: + if isinstance(component, platform_message.At) and component.target == query.adapter.bot_account_id: + message_chain.remove(component) + break - if message_chain.has( - platform_message.At(query.adapter.bot_account_id) - ): # 回复消息时会at两次,检查并删除重复的 - message_chain.remove(platform_message.At(query.adapter.bot_account_id)) + remove_at(message_chain) + remove_at(message_chain) # 回复消息时会at两次,检查并删除重复的 - return entities.RuleJudgeResult( - matching=True, - replacement=message_chain, - ) + # if message_chain.has(platform_message.At(query.adapter.bot_account_id)) and rule_dict['at']: + # message_chain.remove(platform_message.At(query.adapter.bot_account_id)) + + # if message_chain.has( + # platform_message.At(query.adapter.bot_account_id) + # ): # 回复消息时会at两次,检查并删除重复的 + # message_chain.remove(platform_message.At(query.adapter.bot_account_id)) + + # return entities.RuleJudgeResult( + # matching=True, + # replacement=message_chain, + # ) return entities.RuleJudgeResult(matching=False, replacement=message_chain) diff --git a/pkg/platform/sources/discord.py b/pkg/platform/sources/discord.py index 75ad287e..933961de 100644 --- a/pkg/platform/sources/discord.py +++ b/pkg/platform/sources/discord.py @@ -1034,7 +1034,14 @@ class DiscordAdapter(abstract_platform_adapter.AbstractMessagePlatformAdapter): if quote_origin: args['reference'] = message_source.source_platform_object - if message.has(platform_message.At): + has_at = False + + for component in message.root: + if isinstance(component, platform_message.At): + has_at = True + break + + if has_at: args['mention_author'] = True await message_source.source_platform_object.channel.send(**args)