### 功能描述 目前 `waking_check` 阶段里,**只要任意插件的 handler filter 通过**,就会把 `is_wake` 置为 `True`。建议拆成两个字段: ```python event.matched_handlers = activated_handlers # 插件匹配 event.is_wake = <仅由 @ / 唤醒词 / 私聊决定> # 用户意图 ``` 需要「handler 匹配即唤醒」的旧行为,可以由具体 handler 自己声明(例如 filter 上加参数)。 ### 使用场景 我写了一个插件注册 `@filter.event_message_type(EventMessageType.ALL)`(监听所有消息,很常见的写法),结果群里**每一句正常聊天**都会被置为 `is_wake = True`,后果: 1. bot 把群友之间的闲聊全推进了 LLM 回复链路。本地模型上每条烧 15 秒,还占显存。 2. 插件里所有 `event.is_wake_up()` 判断全部失真。我只能自己在插件里重新判断"消息里有没有指向自己的 At 段",绕过框架提供的字段。 复现方式(10 行最小插件,与具体插件无关): ```python @filter.event_message_type(filter.EventMessageType.ALL) async def on_msg(self, event: AstrMessageEvent): logger.info(f"wake={event.is_wake_up()} text={event.get_message_str()}") ``` 群里两人正常聊天,日志: ``` wake=True text='今天中午吃什么' wake=True text='这游戏今天更新了' ``` 都不是 @,也不是私聊。 **参考位置** `astrbot/core/pipeline/waking_check/stage.py` 第 215-216 行(v4.29.1): ```python if passed: ... is_wake = True event.is_wake = True ``` 这里判断的是 handler 的 `event_filters` 是否通过,通过就把 `is_wake` 顶成 `True`。 ### 检查清单 - [x] 我已在 [Issue 列表](https://github.com/AstrBotDevs/AstrBot/issues)中搜索过相关功能,确认该功能想法从未被提出过。 - [x] 我建议的功能与 AstrBot 本体相关,而非在建议某一插件的功能。 - [x] 我已阅读并同意本项目的[贡献者行为准则](https://github.com/AstrBotDevs/AstrBot/blob/master/CODE_OF_CONDUCT_zh.md)。 - [ ] (可选)我愿意提交 PR 以帮助实现该功能。
Activity