Closed linepro6 closed 1 year ago
版本号
你可以在代码编辑器中前几行找到, 它们分别是BUILD_TIMESTAMP和BUILD_VERSION, 这俩个数据对于我们定位问题非常重要] ts: 1678945730 sha: 9e23846
你可以在代码编辑器中前几行找到, 它们分别是BUILD_TIMESTAMP和BUILD_VERSION, 这俩个数据对于我们定位问题非常重要]
BUILD_TIMESTAMP
BUILD_VERSION
1678945730
9e23846
描述问题 ChatGPT 生成的文本中包含 Markdown 或者 HTML 中规定的特殊字符时会导致 Telegram API 调用失败,进而导致消息发送失败。
来自 api.telegram.org 的参考失败响应如下: {"ok":false,"error_code":400,"description":"Bad Request: can't parse entities: Can't find end of the entity starting at byte offset 23"}
来自 api.telegram.org 的参考失败响应如下:
{"ok":false,"error_code":400,"description":"Bad Request: can't parse entities: Can't find end of the entity starting at byte offset 23"}
复现问题 重现问题的步骤:
_
预期行为
但这样做又会导致真正的 Markdown 格式文本被误杀,可能需要想办法识别区分,或者仅在发送失败时进行转义操作。 参考转义代码(此代码会丢失所有的 Markdown 格式,仅供参考) // https://github.com/kemitchell/markdown-escape.js/blob/main/index.js function escapeMarkdown(string, skips) { const replacements = [ [/\*/g, '\\*', 'asterisks'], [/#/g, '\\#', 'number signs'], [/\//g, '\\/', 'slashes'], [/\(/g, '\\(', 'parentheses'], [/\)/g, '\\)', 'parentheses'], [/\[/g, '\\[', 'square brackets'], [/\]/g, '\\]', 'square brackets'], [/</g, '<', 'angle brackets'], [/>/g, '>', 'angle brackets'], [/_/g, '\\_', 'underscores'], [/`/g, '\\`', 'codeblocks'] ]; skips = skips || [] return replacements.reduce(function (string, replacement) { var name = replacement[2] return name && skips.indexOf(name) !== -1 ? string : string.replace(replacement[0], replacement[1]) }, string) }
但这样做又会导致真正的 Markdown 格式文本被误杀,可能需要想办法识别区分,或者仅在发送失败时进行转义操作。 参考转义代码(此代码会丢失所有的 Markdown 格式,仅供参考)
// https://github.com/kemitchell/markdown-escape.js/blob/main/index.js function escapeMarkdown(string, skips) { const replacements = [ [/\*/g, '\\*', 'asterisks'], [/#/g, '\\#', 'number signs'], [/\//g, '\\/', 'slashes'], [/\(/g, '\\(', 'parentheses'], [/\)/g, '\\)', 'parentheses'], [/\[/g, '\\[', 'square brackets'], [/\]/g, '\\]', 'square brackets'], [/</g, '<', 'angle brackets'], [/>/g, '>', 'angle brackets'], [/_/g, '\\_', 'underscores'], [/`/g, '\\`', 'codeblocks'] ]; skips = skips || [] return replacements.reduce(function (string, replacement) { var name = replacement[2] return name && skips.indexOf(name) !== -1 ? string : string.replace(replacement[0], replacement[1]) }, string) }
// https://stackoverflow.com/questions/6234773/can-i-escape-html-special-chars-in-javascript function escapeHtml(unsafe) { return unsafe.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>').replaceAll('"', '"').replaceAll("'", '''); }
async function sendMessageToTelegram(message, token, context) { console.log("\u53D1\u9001\u6D88\u606F:\n", message); const botToken = token || SHARE_CONTEXT.currentBotToken; const chatContext = context || CURRENT_CHAT_CONTEXT; if (message.length <= 4096) { return await sendMessage(escapeMarkdown(message), botToken, chatContext); } console.log("\u6D88\u606F\u5C06\u5206\u6BB5\u53D1\u9001"); const limit = 4e3; chatContext.parse_mode = "HTML"; for (let i = 0; i < message.length; i += limit) { const msg = message.slice(i, i + limit); await sendMessage(<pre> ${escapeHtml(msg)} </pre>, botToken, chatContext); } return new Response("MESSAGE BATCH SEND", { status: 200 }); }
<pre> ${escapeHtml(msg)} </pre>
**截图** 无 **其他信息** 无
THANKS,稍后在dev分支中尝试修复
dev分支添加了,markdown格式发送失败尝试使用HTML格式发送,你可以尝试一下
版本号
描述问题 ChatGPT 生成的文本中包含 Markdown 或者 HTML 中规定的特殊字符时会导致 Telegram API 调用失败,进而导致消息发送失败。
复现问题 重现问题的步骤:
_
的文本预期行为
// https://stackoverflow.com/questions/6234773/can-i-escape-html-special-chars-in-javascript function escapeHtml(unsafe) { return unsafe.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>').replaceAll('"', '"').replaceAll("'", '''); }
async function sendMessageToTelegram(message, token, context) { console.log("\u53D1\u9001\u6D88\u606F:\n", message); const botToken = token || SHARE_CONTEXT.currentBotToken; const chatContext = context || CURRENT_CHAT_CONTEXT; if (message.length <= 4096) { return await sendMessage(escapeMarkdown(message), botToken, chatContext); } console.log("\u6D88\u606F\u5C06\u5206\u6BB5\u53D1\u9001"); const limit = 4e3; chatContext.parse_mode = "HTML"; for (let i = 0; i < message.length; i += limit) { const msg = message.slice(i, i + limit); await sendMessage(
<pre> ${escapeHtml(msg)} </pre>
, botToken, chatContext); } return new Response("MESSAGE BATCH SEND", { status: 200 }); }