From 1eb22f5d06207dac94a4436e732cf8746c57d55c Mon Sep 17 00:00:00 2001 From: AskaEth Date: Tue, 23 Jun 2026 19:53:23 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20blocklist=E6=8F=90=E5=89=8D=E5=88=B0?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E5=A4=84=E7=90=86=E6=9C=80=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=20=E2=80=94=20=E6=8B=A6=E6=88=AA=E6=B6=88=E6=81=AF=E4=B8=8D?= =?UTF-8?q?=E6=B5=AA=E8=B4=B9=E4=BB=BB=E4=BD=95=E8=B5=84=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移到 logging/enrichment/routing 之前 - 被拦截消息只记一条 [blocked] 日志,不调ai-core - 时间戳/群名/昵称等富化处理不再对blocked消息执行 Co-Authored-By: Claude --- backend/platform-bridge/cmd/main.go | 49 +++++++++++++++-------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/backend/platform-bridge/cmd/main.go b/backend/platform-bridge/cmd/main.go index 9805b02..b788a0e 100644 --- a/backend/platform-bridge/cmd/main.go +++ b/backend/platform-bridge/cmd/main.go @@ -71,7 +71,32 @@ func main() { // Set message handler with logging. router.SetMessageHandler(func(msg *bridge.UnifiedMessage) (*bridge.UnifiedResponse, error) { - // Log incoming. + // Routing decisions. + isAdmin := mapper.IsAdmin(msg.Platform, msg.OriginalSenderUID) + + // Blocklist check — MUST run first, before logging/enrichment, + // to avoid wasting resources on blocked users/groups. + if blocked := blocklistStore.IsBlocked(msg.ChannelType, msg.ChannelID, msg.OriginalSenderUID, isAdmin); blocked { + msgLogger.Log(logging.LogEntry{ + Timestamp: time.Now(), + Direction: "incoming", + Platform: msg.Platform, + ChannelID: msg.ChannelID, + SenderID: msg.OriginalSenderUID, + SenderName: msg.OriginalSenderName, + GroupName: msg.GroupName, + Content: "[blocked]", + Success: true, + }) + return &bridge.UnifiedResponse{ + Messages: []bridge.ResponseMessage{ + {DisplayType: "silent", Content: "", FormatMode: "plain"}, + }, + Platform: msg.Platform, + }, nil + } + + // Log incoming (only non-blocked messages). msgLogger.Log(logging.LogEntry{ Timestamp: time.Now(), Direction: "incoming", @@ -85,9 +110,6 @@ func main() { MessageID: msg.MessageID, Success: true, }) - - // Routing decisions. - isAdmin := mapper.IsAdmin(msg.Platform, msg.OriginalSenderUID) adminNick := cfg.AdminNickname if isAdmin { if id := mapper.ResolveOrNil(msg.Platform, msg.OriginalSenderUID); id != nil && id.Nickname != "" { @@ -138,25 +160,6 @@ func main() { msg.Content = fmt.Sprintf("【私聊 %s】%s/%s (%s):\n%s", msg.Platform, adminNick, msg.OriginalSenderName, msg.OriginalSenderUID, msg.Content) } - // Blocklist/whitelist check (admin always bypasses). - if blocked := blocklistStore.IsBlocked(msg.ChannelType, msg.ChannelID, msg.OriginalSenderUID, isAdmin); blocked { - msgLogger.Log(logging.LogEntry{ - Timestamp: time.Now(), - Direction: "outgoing", - Platform: msg.Platform, - ChannelID: msg.ChannelID, - SenderID: msg.OriginalSenderUID, - SenderName: "Cyrene", - Content: "[blocked]", - Success: true, - }) - return &bridge.UnifiedResponse{ - Messages: []bridge.ResponseMessage{ - {DisplayType: "silent", Content: "", FormatMode: "plain"}, - }, - Platform: msg.Platform, - }, nil - } var response *bridge.UnifiedResponse var routeErr error