From 4ebdac42a1634ad0e7eb4995b4cda866befd8940 Mon Sep 17 00:00:00 2001 From: AskaEth Date: Sun, 5 Jul 2026 14:18:39 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E3=80=90=E4=B8=8D=E5=8F=91=E9=80=81?= =?UTF-8?q?=E3=80=91=E6=A0=87=E7=AD=BE=E5=9C=A8sendProactive=E8=B7=AF?= =?UTF-8?q?=E5=BE=84=E5=A4=B1=E6=95=88=20+=20=E7=BE=A4=E8=81=8A=E9=95=BF?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=88=AA=E6=96=AD=E9=98=B2=E5=B0=81=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - sendProactive端点新增【不发送】过滤(之前只有主回复路径有) - sendProactive和主回复路径均增加群聊500字截断+最多2条限制 - 防止第三方平台适配器因过长消息触发封控 Co-Authored-By: Claude --- backend/platform-bridge/cmd/main.go | 9 ++++++- .../internal/handler/bridge_handler.go | 27 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/backend/platform-bridge/cmd/main.go b/backend/platform-bridge/cmd/main.go index 2e30506..465d445 100644 --- a/backend/platform-bridge/cmd/main.go +++ b/backend/platform-bridge/cmd/main.go @@ -484,7 +484,7 @@ func startOBv11Readers(router *bridge.PlatformRouter) { if interval <= 0 { interval = 2 * time.Second } - // 群聊用更长间隔避免刷屏,且限制最多2条消息 + // 群聊用更长间隔避免刷屏,限制最多2条消息,单条不超过500字防封控 if messageType == "group" { minGroupInterval := 3 * time.Second if interval < minGroupInterval { @@ -493,6 +493,13 @@ func startOBv11Readers(router *bridge.PlatformRouter) { if len(toSend) > 2 { toSend = toSend[:2] } + const maxRunes = 500 + for i := range toSend { + runes := []rune(toSend[i].Content) + if len(runes) > maxRunes { + toSend[i].Content = string(runes[:maxRunes]) + "\n…(内容过长已截断)" + } + } } for i, rm := range toSend { if i > 0 && interval > 0 { diff --git a/backend/platform-bridge/internal/handler/bridge_handler.go b/backend/platform-bridge/internal/handler/bridge_handler.go index 42f29a1..1260012 100644 --- a/backend/platform-bridge/internal/handler/bridge_handler.go +++ b/backend/platform-bridge/internal/handler/bridge_handler.go @@ -214,9 +214,36 @@ func (h *BridgeHandler) sendProactive(w http.ResponseWriter, r *http.Request) { content := filterActions(req.Content) content = convertMarkdownPlain(content) + // 过滤 【不发送】 自我审查标签 + if strings.Contains(content, "【不发送】") { + trimmed := content + if len([]rune(trimmed)) > 80 { + trimmed = string([]rune(trimmed)[:80]) + "..." + } + log.Printf("[send-proactive] 昔涟自我审查,跳过发送: %s", trimmed) + writeJSON(w, http.StatusOK, map[string]string{"status": "self_censored"}) + return + } + // 按 \n\n 和 ♪ 拆分为多条消息 messages := splitProactiveContent(content) + // 群聊长消息截断:超过 500 字的单条消息截断,防止封控 + if msgType == "group" { + const maxLen = 500 + for i, msg := range messages { + runes := []rune(msg) + if len(runes) > maxLen { + messages[i] = string(runes[:maxLen]) + "\n…(内容过长已截断)" + log.Printf("[send-proactive] 群聊消息过长截断: %d→%d 字", len(runes), maxLen) + } + } + // 群聊最多2条 + if len(messages) > 2 { + messages = messages[:2] + } + } + // Prepend CQ @mention tag if at_user_id is specified atPrefix := "" if req.AtUserID != "" {