From 422160debd3eab58c99449059d7ba0c36521ba94 Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Tue, 10 Jun 2025 23:55:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E5=BF=BD=E7=95=A5@=E5=85=A8=E4=BD=93?= =?UTF-8?q?=E6=88=90=E5=91=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fixes: #292 --- astrbot/core/config/default.py | 6 ++++++ astrbot/core/pipeline/waking_check/stage.py | 10 ++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/astrbot/core/config/default.py b/astrbot/core/config/default.py index a1cb36e9e..32dd1b454 100644 --- a/astrbot/core/config/default.py +++ b/astrbot/core/config/default.py @@ -43,6 +43,7 @@ DEFAULT_CONFIG = { "empty_mention_waiting_need_reply": True, "friend_message_needs_wake_prefix": False, "ignore_bot_self_message": False, + "ignore_at_all": False, }, "provider": [], "provider_settings": { @@ -377,6 +378,11 @@ CONFIG_METADATA_2 = { "type": "bool", "hint": "某些平台如 gewechat 会将自身账号在其他 APP 端发送的消息也当做消息事件下发导致给自己发消息时唤醒机器人", }, + "ignore_at_all": { + "description": "是否忽略 @ 全体成员", + "type": "bool", + "hint": "启用后,机器人会忽略 @ 全体成员 的消息事件。", + }, "segmented_reply": { "description": "分段回复", "type": "object", diff --git a/astrbot/core/pipeline/waking_check/stage.py b/astrbot/core/pipeline/waking_check/stage.py index e654d07ce..6fb3378ca 100644 --- a/astrbot/core/pipeline/waking_check/stage.py +++ b/astrbot/core/pipeline/waking_check/stage.py @@ -4,7 +4,7 @@ from astrbot import logger from typing import Union, AsyncGenerator from astrbot.core.platform.astr_message_event import AstrMessageEvent from astrbot.core.message.message_event_result import MessageEventResult, MessageChain -from astrbot.core.message.components import At +from astrbot.core.message.components import At, AtAll from astrbot.core.star.star_handler import star_handlers_registry, EventType from astrbot.core.star.star import star_map from astrbot.core.star.filter.permission import PermissionTypeFilter @@ -39,6 +39,9 @@ class WakingCheckStage(Stage): self.ignore_bot_self_message = self.ctx.astrbot_config["platform_settings"].get( "ignore_bot_self_message", False ) + self.ignore_at_all = self.ctx.astrbot_config["platform_settings"].get( + "ignore_at_all", False + ) async def process( self, event: AstrMessageEvent @@ -79,10 +82,9 @@ class WakingCheckStage(Stage): if not is_wake: # 检查是否有 at 消息 for message in messages: - if isinstance(message, At) and ( + if (isinstance(message, At) and ( str(message.qq) == str(event.get_self_id()) - or str(message.qq) == "all" - ): + )) or (isinstance(message, AtAll) and not self.ignore_at_all): is_wake = True event.is_wake = True wake_prefix = ""