fix(kook): 丢弃自我回声消息,防 bot 把自己的回复当入站用户消息
CI / Backend (build / vet / test / cross-compile) (push) Has been cancelled
CI / Frontend (tsc + vite build) (push) Has been cancelled

KOOK 网关会把 bot 自己发的消息又推回给 bot(author_id=bot uid),导致 bot 把自己的
回复当成入站用户消息处理(循环/浪费token)。toUnifiedMessage 计算 senderID 后调用
isSelf(senderID) 比对 a.botID(user/me 解析出的 bot 账号 id),命中即返回 ok=false 丢弃。
- identity.go: 新增 isSelf(并发安全,botMu)
- message.go: self-echo 丢弃 + debug 日志
- message_test.go: TestToUnified_DropsSelfEcho
验收: go build/vet/test ./... 全绿
This commit is contained in:
Aska committed 2026-09-07 18:38:15 +08:00
1 parent 2c4ade5f28
commit db8465f68b
3 files changed
+34

No files matched your search

+6
View File
@@ -82,6 +82,12 @@ func (a *Adapter) toUnifiedMessage(data json.RawMessage, frame []byte) (adapter.
_ = json.Unmarshal(ev.Extra, &ex)
senderID, senderName := senderOf(&ev, &ex)
// Self-echo: KOOK pushes the bot's own channel messages back to it via the gateway.
// Drop them so the bridge never treats the bot's replies as inbound user messages.
if a.isSelf(senderID) {
a.log.Debug("self message dropped (echo)", "sender_id", senderID, "channel", ev.TargetID)
return adapter.UnifiedMessage{}, false
}
ct, media := messageKind(ev.Type, content)
group := channelIsGroup(ev.ChannelType)