From 3cd76722ef7303eaf6045f8d20956d0af49833f0 Mon Sep 17 00:00:00 2001 From: Orion Date: Mon, 4 May 2026 02:45:04 +0800 Subject: [PATCH] =?UTF-8?q?fix(core):=20:loud=5Fsound:=20=E5=A2=9E?= =?UTF-8?q?=E5=BC=BA=E7=94=B5=E6=8A=A5=E6=9C=BA=E5=99=A8=E4=BA=BA=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E8=AF=B7=E6=B1=82=E7=9A=84=E6=97=A5=E5=BF=97=E8=AE=B0?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在 tg-bot.js 中添加了详细的控制台日志,用于记录用户 ID 和目标消息 ID。当消息映射未找到时,新增了调试提示,以便更好地追踪转发失败或数据库记录缺失的问题。 --- telegram/tg-bot.js | 53 +++++++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/telegram/tg-bot.js b/telegram/tg-bot.js index ab924b1..b3ad5f5 100644 --- a/telegram/tg-bot.js +++ b/telegram/tg-bot.js @@ -247,12 +247,14 @@ async function handleUserDelete(msg, u, env) { } const targetMsgId = msg.reply_to_message.message_id.toString(); + console.log(`Delete request: user=${u.user_id}, target_msg=${targetMsgId}`); // 查询对应的管理员侧消息ID 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}`); + console.log(`Tip: Check if the message was forwarded successfully and exists in database`); return api(env.BOT_TOKEN, "sendMessage", { chat_id: u.user_id, text: "❌ 未找到对应的消息记录,可能该消息未被转发或已被删除", @@ -260,18 +262,20 @@ async function handleUserDelete(msg, u, env) { }); } + console.log(`Delete success: Found mapping topic_msg=${ref.topic_message_id}`); + try { // 1. 删除被回复的目标消息(先删目标,再删命令) await api(env.BOT_TOKEN, "deleteMessage", { chat_id: u.user_id, message_id: parseInt(targetMsgId) - }).catch(() => {}); + }).catch((e) => console.log("Failed to delete target msg:", e.message)); // 2. 删除用户侧的 /del 命令消息 await api(env.BOT_TOKEN, "deleteMessage", { chat_id: u.user_id, message_id: msg.message_id - }).catch(() => {}); + }).catch((e) => console.log("Failed to delete /del cmd:", e.message)); // 3. 通知管理员(引用原消息) await api(env.BOT_TOKEN, "sendMessage", { @@ -280,10 +284,11 @@ async function handleUserDelete(msg, u, env) { text: `🗑️ 用户已删除消息`, parse_mode: "HTML", reply_to_message_id: parseInt(ref.topic_message_id) - }).catch(() => {}); + }).catch((e) => console.log("Failed to notify admin:", e.message)); // 4. 清理数据库记录 await sql(env, "DELETE FROM messages WHERE user_id=? AND message_id=?", [u.user_id, targetMsgId]); + console.log(`Delete completed: Cleaned up database record`); } catch (e) { console.error("User Delete Failed:", e); @@ -583,7 +588,12 @@ 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 = parseInt(ref.topic_message_id); + if (ref?.topic_message_id) { + topicReplyToMsgId = parseInt(ref.topic_message_id); + console.log(`Found reply mapping: user_msg=${msg.reply_to_message.message_id} -> topic_msg=${topicReplyToMsgId}`); + } else { + console.log(`No reply mapping found for user_msg=${msg.reply_to_message.message_id}`); + } } // 特殊引用语法降级渲染支持 @@ -601,28 +611,27 @@ async function relayToTopic(msg, u, env) { reply_to_message_id: topicReplyToMsgId }); } else { - // 标准转发处理尝试,若触碰受限隐私配置则回退到原生复制 + // 标准转发处理:统一使用 copyMessage 以支持引用关系 try { + const copyParams = { + chat_id: env.ADMIN_GROUP_ID, + from_chat_id: uid, + message_id: msg.message_id, + message_thread_id: tid + }; 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 - }); + copyParams.reply_to_message_id = topicReplyToMsgId; } + forwardedMsg = await api(env.BOT_TOKEN, "copyMessage", copyParams); } catch(fwdErr) { - 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 - }); - } + console.log("copyMessage failed, trying forwardMessage:", fwdErr.message); + // forwardMessage 不支持 reply_to_message_id,只能作为备选 + 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 + }); } }