From d09cd592ce1a50843e1c2f16916e0eea6be4533d Mon Sep 17 00:00:00 2001 From: leoqlin Date: Sat, 31 Jan 2026 20:16:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=A7=BB=E9=99=A4url=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++---- src/gateway.ts | 30 ++++++------------------------ 2 files changed, 8 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 7cc6cde..5035885 100644 --- a/README.md +++ b/README.md @@ -139,10 +139,8 @@ clawdbot onboard ## 注意事项 -1. **消息回复限制**:QQ 官方 API 限制每条消息最多回复 5 次,超时 60 分钟 -2. **URL 限制**:QQ 平台不允许消息中包含 URL,插件已内置提示词限制 -3. **群消息**:需要在群内 @机器人 才能触发回复 -4. **沙箱模式**:新创建的机器人默认在沙箱模式,需要添加测试用户 +1. **群消息**:需要在群内 @机器人 才能触发回复 +2. **沙箱模式**:新创建的机器人默认在沙箱模式,需要添加测试用户 ## 升级 diff --git a/src/gateway.ts b/src/gateway.ts index 45cb46c..cfe5560 100644 --- a/src/gateway.ts +++ b/src/gateway.ts @@ -242,7 +242,7 @@ export async function startGateway(ctx: GatewayContext): Promise { const envelopeOptions = pluginRuntime.channel.reply.resolveEnvelopeFormatOptions(cfg); // 组装消息体,添加系统提示词 - let builtinPrompt = "由于平台限制,你的回复中不可以包含任何URL。"; + let builtinPrompt = ""; // 只有配置了图床公网地址,才告诉 AI 可以发送图片 if (imageServerBaseUrl) { @@ -518,24 +518,6 @@ export async function startGateway(ctx: GatewayContext): Promise { } } - // 从文本中移除图片 URL,避免被 QQ 拦截 - let textWithoutImages = replyText; - for (const match of urlMatches) { - textWithoutImages = textWithoutImages.replace(match[0], "").trim(); - } - - // 处理剩余文本中的 URL 点号(只有在没有图片的情况下才替换,避免误伤) - const hasImages = imageUrls.length > 0; - let hasReplacement = false; - if (!hasImages) { - const originalText = textWithoutImages; - textWithoutImages = textWithoutImages.replace(/([a-zA-Z0-9])\.([a-zA-Z0-9])/g, "$1_$2"); - hasReplacement = textWithoutImages !== originalText; - if (hasReplacement && textWithoutImages.trim()) { - textWithoutImages += "\n\n(由于平台限制,回复中的部分符号已被替换)"; - } - } - try { // 先发送图片(如果有) for (const imageUrl of imageUrls) { @@ -553,19 +535,19 @@ export async function startGateway(ctx: GatewayContext): Promise { log?.error(`[qqbot:${account.accountId}] Failed to send image: ${imgErr}`); // 图片发送失败时,显示错误信息而不是 URL const errMsg = String(imgErr).slice(0, 200); - textWithoutImages = `[图片发送失败: ${errMsg}]\n${textWithoutImages}`; + replyText = `[图片发送失败: ${errMsg}]\n${replyText}`; } } // 再发送文本(如果有) - if (textWithoutImages.trim()) { + if (replyText.trim()) { await sendWithTokenRetry(async (token) => { if (event.type === "c2c") { - await sendC2CMessage(token, event.senderId, textWithoutImages, event.messageId); + await sendC2CMessage(token, event.senderId, replyText, event.messageId); } else if (event.type === "group" && event.groupOpenid) { - await sendGroupMessage(token, event.groupOpenid, textWithoutImages, event.messageId); + await sendGroupMessage(token, event.groupOpenid, replyText, event.messageId); } else if (event.channelId) { - await sendChannelMessage(token, event.channelId, textWithoutImages, event.messageId); + await sendChannelMessage(token, event.channelId, replyText, event.messageId); } }); log?.info(`[qqbot:${account.accountId}] Sent text reply`);