fix(core): 🐛 修复 Telegram 机器人消息删除逻辑
优化消息删除流程,将原本删除命令消息改为优先删除被回复的目标消息。同时增加了更详细的错误日志输出,并更新了未找到记录时的用户提示语,使反馈更加清晰。 - 优先删除目标转发消息而非命令消息 - 增加对 targetMsgId 的类型转换处理 - 捕获并忽略删除失败的异常以提高稳定性 - 丰富了控制台调试日志和用户侧错误提示内容
This commit is contained in:
@@ -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');
|
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) {
|
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", {
|
return api(env.BOT_TOKEN, "sendMessage", {
|
||||||
chat_id: u.user_id,
|
chat_id: u.user_id,
|
||||||
text: "❌ 未找到对应的消息记录",
|
text: "❌ 未找到对应的消息记录,可能该消息未被转发或已被删除",
|
||||||
reply_to_message_id: msg.message_id
|
reply_to_message_id: msg.message_id
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 1. 删除用户侧消息
|
// 1. 删除被回复的目标消息(先删目标,再删命令)
|
||||||
await api(env.BOT_TOKEN, "deleteMessage", {
|
|
||||||
chat_id: u.user_id,
|
|
||||||
message_id: msg.message_id
|
|
||||||
});
|
|
||||||
|
|
||||||
// 2. 删除被回复的目标消息
|
|
||||||
await api(env.BOT_TOKEN, "deleteMessage", {
|
await api(env.BOT_TOKEN, "deleteMessage", {
|
||||||
chat_id: u.user_id,
|
chat_id: u.user_id,
|
||||||
message_id: parseInt(targetMsgId)
|
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. 通知管理员(引用原消息)
|
// 3. 通知管理员(引用原消息)
|
||||||
await api(env.BOT_TOKEN, "sendMessage", {
|
await api(env.BOT_TOKEN, "sendMessage", {
|
||||||
@@ -279,7 +280,7 @@ async function handleUserDelete(msg, u, env) {
|
|||||||
text: `🗑️ <b>用户已删除消息</b>`,
|
text: `🗑️ <b>用户已删除消息</b>`,
|
||||||
parse_mode: "HTML",
|
parse_mode: "HTML",
|
||||||
reply_to_message_id: parseInt(ref.topic_message_id)
|
reply_to_message_id: parseInt(ref.topic_message_id)
|
||||||
});
|
}).catch(() => {});
|
||||||
|
|
||||||
// 4. 清理数据库记录
|
// 4. 清理数据库记录
|
||||||
await sql(env, "DELETE FROM messages WHERE user_id=? AND message_id=?", [u.user_id, targetMsgId]);
|
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;
|
let topicReplyToMsgId = undefined;
|
||||||
if (msg.reply_to_message) {
|
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');
|
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 {
|
} else {
|
||||||
// 标准转发处理尝试,若触碰受限隐私配置则回退到原生复制
|
// 标准转发处理尝试,若触碰受限隐私配置则回退到原生复制
|
||||||
if (topicReplyToMsgId) {
|
try {
|
||||||
forwardedMsg = await api(env.BOT_TOKEN, "copyMessage", {
|
if (topicReplyToMsgId) {
|
||||||
chat_id: env.ADMIN_GROUP_ID, from_chat_id: uid, message_id: msg.message_id, message_thread_id: tid, reply_to_message_id: 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", {
|
} else {
|
||||||
chat_id: env.ADMIN_GROUP_ID, from_chat_id: uid, message_id: msg.message_id, message_thread_id: tid
|
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) {
|
} catch(fwdErr) {
|
||||||
forwardedMsg = await api(env.BOT_TOKEN, "copyMessage", {
|
console.log("Forward failed, trying copyMessage:", fwdErr.message);
|
||||||
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, "copyMessage", {
|
||||||
|
chat_id: env.ADMIN_GROUP_ID, from_chat_id: uid, message_id: msg.message_id, message_thread_id: tid
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user