feat(channel): 消息契约加「她自己账号 id / 是否在叫她」结构化判据并接线 qq_obv11
契约(internal/channel/adapter):UnifiedMessage 新增三个字段 —— SelfID(她自己在该 平台的账号 id)、MentionAll(是否 @全体,design/26 §2.4 的 mention_all)、AddressedToMe (本条是否指向她本人);判据的唯一出处是新增的 MentionedSelf(结构化 id 精确比对, 空 selfID 一律 false)与 AddressedToSelf(私聊恒 true;群聊 = 点名她或 @全体; 平台未给 SelfID ⇒ fail-closed)。全程不匹配正文文本。 接线(plugins/channels/qq_obv11):新增 addressed.go,把事件里早已解出、此前只用于 debug 日志与 notice 判定的 self_id 接进 toUnified,并从 at 段解出 @全体(qq=all), 在 ChannelType 判定之后统一回写三个字段。 design/18 §2 触发① 的旧口径「Mentions 非空」= @谁不论(实测群 672432767 里 @别人两次 被回);本片让消费侧(light.go:142,归 M12)能改用 AddressedToMe || MentionAll。 既有字段 Mentions/ReplyToID/ReplyToText 语义与形状不变。 测试:qq_obv11 十种帧形态(私聊/@她/@别人/@全体/无@/CQ 形态/fail-closed/纯回复) 逐条断言;adapter 侧覆盖 MentionedSelf 与 AddressedToSelf。变异自证:判据改回 「Mentions 非空」⇒ group_mention_other 红;摘掉 selfId 接线 ⇒ group_mention_me 红。
This commit is contained in:
1 parent
1cd38514f3
commit
b26bc55a15
5 files changed
+382
-7
No files matched your search
@@ -117,6 +117,9 @@ func (a *Adapter) toUnified(ev *obEvent, raw []byte) adapter.UnifiedMessage {
|
||||
text, media, mentions, replyID, replyText, hasText := a.parseMessage(ev)
|
||||
|
||||
senderID := senderIDOf(ev)
|
||||
// selfID 是**她自己**在该平台的账号 id(OneBot 的 self_id),只用于
|
||||
// 「本条是否指向她」的结构化判定(见 applyAddressing),绝不参与判主。
|
||||
selfID := formatID(ev.SelfID)
|
||||
senderName := "unknown"
|
||||
role := adapter.RoleUnknown
|
||||
if ev.Sender != nil {
|
||||
@@ -169,6 +172,8 @@ func (a *Adapter) toUnified(ev *obEvent, raw []byte) adapter.UnifiedMessage {
|
||||
// 充当 SenderID 会让**任何群成员**都顶着群号去撞白名单——见 group 分支。
|
||||
msg.ChannelID = senderID
|
||||
}
|
||||
// 结构化「是否在叫她」接线必须在 ChannelType 判定之后(私聊恒 true)。
|
||||
applyAddressing(&msg, selfID, mentions)
|
||||
return msg
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user