fix(core): 🐛 实现管理员删除消息功能
在管理员群组逻辑中添加了对 `/del` 命令的支持。当管理员对某条消息回复 `/del` 时,将触发 `handleAdminDelete` 函数,同时优化了管理员回复逻辑的判定结构。 - 新增 `handleAdminDelete` 处理函数用于处理消息删除指令 - 优化管理员群组内的条件分支判定 - 改进 handleAdminEdit 函数以主动通知用户消息变更内容
This commit is contained in:
@@ -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: `🗑️ <b>用户已删除消息</b>`,
|
||||
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: "ℹ️ <b>帮助</b>\n• 回复消息即对话\n• /start 打开面板", parse_mode: "HTML" });
|
||||
if (text === "/help" && isAdm) return api(env.BOT_TOKEN, "sendMessage", { chat_id: id, text: "ℹ️ <b>帮助</b>\n• 回复消息即对话\n• /start 打开面板\n• /del 删除消息", parse_mode: "HTML" });
|
||||
if (text === "/del" && !isAdm) return handleUserDelete(msg, u, env);
|
||||
|
||||
// 2. 封禁拦截层
|
||||
if (u.is_blocked) {
|
||||
|
||||
Reference in New Issue
Block a user