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 + }); + } } }