From f6c08013527d6f5a10b0473b4cbd8f780914bd7b Mon Sep 17 00:00:00 2001 From: Orion Date: Mon, 4 May 2026 02:39:09 +0800 Subject: [PATCH] =?UTF-8?q?fix(core):=20:bug:=20=E4=BF=AE=E5=A4=8D=20Teleg?= =?UTF-8?q?ram=20=E6=9C=BA=E5=99=A8=E4=BA=BA=E6=B6=88=E6=81=AF=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化消息删除流程,将原本删除命令消息改为优先删除被回复的目标消息。同时增加了更详细的错误日志输出,并更新了未找到记录时的用户提示语,使反馈更加清晰。 - 优先删除目标转发消息而非命令消息 - 增加对 targetMsgId 的类型转换处理 - 捕获并忽略删除失败的异常以提高稳定性 - 丰富了控制台调试日志和用户侧错误提示内容 --- telegram/tg-bot.js | 54 +++++++++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/telegram/tg-bot.js b/telegram/tg-bot.js index ca341bc..ab924b1 100644 --- a/telegram/tg-bot.js +++ b/telegram/tg-bot.js @@ -252,25 +252,26 @@ async function handleUserDelete(msg, u, env) { const ref = await sql(env, "SELECT topic_message_id FROM messages WHERE user_id=? AND message_id=?", [u.user_id, targetMsgId], 'first'); if (!ref || !ref.topic_message_id) { + console.log(`Delete failed: No mapping found for user=${u.user_id}, msg=${targetMsgId}`); return api(env.BOT_TOKEN, "sendMessage", { chat_id: u.user_id, - text: "❌ 未找到对应的消息记录", + text: "❌ 未找到对应的消息记录,可能该消息未被转发或已被删除", reply_to_message_id: msg.message_id }); } try { - // 1. 删除用户侧消息 - await api(env.BOT_TOKEN, "deleteMessage", { - chat_id: u.user_id, - message_id: msg.message_id - }); - - // 2. 删除被回复的目标消息 + // 1. 删除被回复的目标消息(先删目标,再删命令) await api(env.BOT_TOKEN, "deleteMessage", { chat_id: u.user_id, message_id: parseInt(targetMsgId) - }); + }).catch(() => {}); + + // 2. 删除用户侧的 /del 命令消息 + await api(env.BOT_TOKEN, "deleteMessage", { + chat_id: u.user_id, + message_id: msg.message_id + }).catch(() => {}); // 3. 通知管理员(引用原消息) await api(env.BOT_TOKEN, "sendMessage", { @@ -279,7 +280,7 @@ async function handleUserDelete(msg, u, env) { text: `🗑️ 用户已删除消息`, parse_mode: "HTML", reply_to_message_id: parseInt(ref.topic_message_id) - }); + }).catch(() => {}); // 4. 清理数据库记录 await sql(env, "DELETE FROM messages WHERE user_id=? AND message_id=?", [u.user_id, targetMsgId]); @@ -582,7 +583,7 @@ async function relayToTopic(msg, u, env) { let topicReplyToMsgId = undefined; if (msg.reply_to_message) { const ref = await sql(env, "SELECT topic_message_id FROM messages WHERE user_id=? AND message_id=?", [uid, msg.reply_to_message.message_id.toString()], 'first'); - if (ref?.topic_message_id) topicReplyToMsgId = ref.topic_message_id; + if (ref?.topic_message_id) topicReplyToMsgId = parseInt(ref.topic_message_id); } // 特殊引用语法降级渲染支持 @@ -601,18 +602,27 @@ async function relayToTopic(msg, u, env) { }); } else { // 标准转发处理尝试,若触碰受限隐私配置则回退到原生复制 - if (topicReplyToMsgId) { - forwardedMsg = await api(env.BOT_TOKEN, "copyMessage", { - chat_id: env.ADMIN_GROUP_ID, from_chat_id: uid, message_id: msg.message_id, message_thread_id: tid, reply_to_message_id: topicReplyToMsgId - }); - } else try { - forwardedMsg = await api(env.BOT_TOKEN, "forwardMessage", { - chat_id: env.ADMIN_GROUP_ID, from_chat_id: uid, message_id: msg.message_id, message_thread_id: tid - }); + try { + if (topicReplyToMsgId) { + forwardedMsg = await api(env.BOT_TOKEN, "copyMessage", { + chat_id: env.ADMIN_GROUP_ID, from_chat_id: uid, message_id: msg.message_id, message_thread_id: tid, reply_to_message_id: topicReplyToMsgId + }); + } else { + forwardedMsg = await api(env.BOT_TOKEN, "forwardMessage", { + chat_id: env.ADMIN_GROUP_ID, from_chat_id: uid, message_id: msg.message_id, message_thread_id: tid + }); + } } catch(fwdErr) { - forwardedMsg = await api(env.BOT_TOKEN, "copyMessage", { - chat_id: env.ADMIN_GROUP_ID, from_chat_id: uid, message_id: msg.message_id, message_thread_id: tid - }); + console.log("Forward failed, trying copyMessage:", fwdErr.message); + if (topicReplyToMsgId) { + forwardedMsg = await api(env.BOT_TOKEN, "copyMessage", { + chat_id: env.ADMIN_GROUP_ID, from_chat_id: uid, message_id: msg.message_id, message_thread_id: tid, reply_to_message_id: topicReplyToMsgId + }); + } else { + forwardedMsg = await api(env.BOT_TOKEN, "copyMessage", { + chat_id: env.ADMIN_GROUP_ID, from_chat_id: uid, message_id: msg.message_id, message_thread_id: tid + }); + } } }