diff --git a/telegram/tg-bot.js b/telegram/tg-bot.js
index 772d73d..ca341bc 100644
--- a/telegram/tg-bot.js
+++ b/telegram/tg-bot.js
@@ -212,7 +212,14 @@ async function handleUpdate(update, env, ctx) {
// 会话路由
if (msg.chat.type === "private") await handlePrivate(msg, env, ctx);
- else if (msg.chat.id.toString() === env.ADMIN_GROUP_ID) await handleAdminReply(msg, env);
+ else if (msg.chat.id.toString() === env.ADMIN_GROUP_ID) {
+ // 检查是否是管理员的 /del 命令
+ if ((msg.text === "/del" || msg.caption === "/del") && msg.reply_to_message) {
+ await handleAdminDelete(msg, env);
+ } else {
+ await handleAdminReply(msg, env);
+ }
+ }
}
// 管理员编辑群组内消息时的逻辑,主动通知用户变更内容
@@ -229,6 +236,120 @@ async function handleAdminEdit(msg, env) {
});
}
+// 用户侧删除消息处理
+async function handleUserDelete(msg, u, env) {
+ if (!msg.reply_to_message) {
+ return api(env.BOT_TOKEN, "sendMessage", {
+ chat_id: u.user_id,
+ text: "⚠️ 请回复要删除的消息后使用 /del 命令",
+ reply_to_message_id: msg.message_id
+ });
+ }
+
+ const targetMsgId = msg.reply_to_message.message_id.toString();
+
+ // 查询对应的管理员侧消息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) {
+ return api(env.BOT_TOKEN, "sendMessage", {
+ chat_id: u.user_id,
+ 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. 删除被回复的目标消息
+ await api(env.BOT_TOKEN, "deleteMessage", {
+ chat_id: u.user_id,
+ message_id: parseInt(targetMsgId)
+ });
+
+ // 3. 通知管理员(引用原消息)
+ await api(env.BOT_TOKEN, "sendMessage", {
+ chat_id: env.ADMIN_GROUP_ID,
+ message_thread_id: u.topic_id,
+ text: `🗑️ 用户已删除消息`,
+ parse_mode: "HTML",
+ reply_to_message_id: parseInt(ref.topic_message_id)
+ });
+
+ // 4. 清理数据库记录
+ await sql(env, "DELETE FROM messages WHERE user_id=? AND message_id=?", [u.user_id, targetMsgId]);
+
+ } catch (e) {
+ console.error("User Delete Failed:", e);
+ await api(env.BOT_TOKEN, "sendMessage", {
+ chat_id: u.user_id,
+ text: "❌ 删除失败,请稍后重试",
+ reply_to_message_id: msg.message_id
+ });
+ }
+}
+
+// 管理员侧删除消息处理
+async function handleAdminDelete(msg, env) {
+ if (!msg.message_thread_id || !(await isAuthAdmin(msg.from.id, env))) return;
+
+ if (!msg.reply_to_message) {
+ return api(env.BOT_TOKEN, "sendMessage", {
+ chat_id: msg.chat.id,
+ message_thread_id: msg.message_thread_id,
+ text: "⚠️ 请回复要删除的消息后使用 /del 命令"
+ });
+ }
+
+ const targetTopicMsgId = msg.reply_to_message.message_id;
+
+ // 查询对应的用户侧消息ID
+ const ref = await sql(env, "SELECT user_id, message_id FROM messages WHERE topic_message_id=?", targetTopicMsgId.toString(), 'first');
+
+ if (!ref) {
+ return api(env.BOT_TOKEN, "sendMessage", {
+ chat_id: msg.chat.id,
+ message_thread_id: msg.message_thread_id,
+ text: "❌ 未找到对应的消息记录"
+ });
+ }
+
+ try {
+ // 1. 删除管理员侧消息(包括 /del 命令本身和被回复的消息)
+ await api(env.BOT_TOKEN, "deleteMessage", {
+ chat_id: msg.chat.id,
+ message_id: msg.message_id
+ }).catch(() => {});
+
+ await api(env.BOT_TOKEN, "deleteMessage", {
+ chat_id: msg.chat.id,
+ message_id: targetTopicMsgId
+ }).catch(() => {});
+
+ // 2. 删除用户侧消息
+ await api(env.BOT_TOKEN, "deleteMessage", {
+ chat_id: ref.user_id,
+ message_id: parseInt(ref.message_id)
+ }).catch(() => {});
+
+ // 3. 清理数据库记录
+ await sql(env, "DELETE FROM messages WHERE user_id=? AND message_id=?", [ref.user_id, ref.message_id]);
+
+ } catch (e) {
+ console.error("Admin Delete Failed:", e);
+ await api(env.BOT_TOKEN, "sendMessage", {
+ chat_id: msg.chat.id,
+ message_thread_id: msg.message_thread_id,
+ text: "❌ 删除失败,请稍后重试"
+ });
+ }
+}
+
// 私聊消息处理总线 (用户侧逻辑入口)
async function handlePrivate(msg, env, ctx) {
const id = msg.chat.id.toString();
@@ -264,7 +385,8 @@ async function handlePrivate(msg, env, ctx) {
}
return isAdm ? handleAdminConfig(id, null, 'menu', null, null, env) : sendStart(id, msg, env);
}
- if (text === "/help" && isAdm) return api(env.BOT_TOKEN, "sendMessage", { chat_id: id, text: "ℹ️ 帮助\n• 回复消息即对话\n• /start 打开面板", parse_mode: "HTML" });
+ if (text === "/help" && isAdm) return api(env.BOT_TOKEN, "sendMessage", { chat_id: id, text: "ℹ️ 帮助\n• 回复消息即对话\n• /start 打开面板\n• /del 删除消息", parse_mode: "HTML" });
+ if (text === "/del" && !isAdm) return handleUserDelete(msg, u, env);
// 2. 封禁拦截层
if (u.is_blocked) {