news 2026/6/10 13:25:17

蓝易云 - 如何追踪discord.js中删除消息的用户?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
蓝易云 - 如何追踪discord.js中删除消息的用户?

在 discord.js 里想“追踪是谁删了消息”,本质要把两条线合并:
1)messageDelete告诉你“哪条消息没了”;2)审计日志(Audit Log)告诉你“谁执行了删除”。但必须先讲清边界:用户自己删除自己的消息,审计日志通常不会记录执行者;某些机器人/系统删除也可能不进审计日志,所以你要接受“有时只能判定为自删/未知”。(GitHub)


一、可落地的方案(企业审计思路)🙂

flowchart TD A[messageCreate 记录快照<br/>内容/作者/频道/附件] --> B[messageDelete 触发] B --> C{是否是服务器消息?} C -->|是| D[等待 1~2 秒<br/>审计日志异步落地] D --> E[fetchAuditLogs(MESSAGE_DELETE)] E --> F{是否匹配同频道+同作者+时间窗口} F -->|匹配| G[executor = 删除者] F -->|不匹配| H[标记:自删或未知] C -->|否| I[DM 无审计日志<br/>只能未知]

二、关键点对齐表(先定规则,后面才稳定)

你想拿到的字段来源是否稳定备注
被删消息的 作者、频道、IDmessageDelete(需缓存/partials)消息若不在缓存里,会拿不到完整内容(discordjs.guide)
被删消息的 内容只能靠你“事前缓存快照”低(不做缓存=拿不到)消息删了就无法再从 API 拉回内容(discordjs.guide)
真正执行删除的 操作者Audit LogMESSAGE_DELETEexecutor中-高需要ViewAuditLog权限;并处理“时间差/误匹配”(discordjs.guide)
自删判定Audit Log 不匹配 + 作者=删除主体自删常常无审计记录(GitHub)

三、discord.js v14 参考实现(含缓存 + 审计匹配)✅

前提:Bot 需要服务器权限 ViewAuditLog;若你要直接接收审计事件,还需GuildModerationintent。(discordjs.guide)

1)Client 初始化(意图 + Partials)

const { Client, GatewayIntentBits, Partials, AuditLogEvent, Events } = require('discord.js'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent, // 需要记录内容时才开(受限意图) GatewayIntentBits.GuildModeration, // 想用审计事件/更稳的审计链路时开 ], partials: [Partials.Message, Partials.Channel], });

解释:

  • GuildMessages:才能收到频道消息相关事件。

  • MessageContent:你要“记录内容快照”才有意义;不开就只能记录作者/ID/附件等。

  • partials:保证删消息事件在部分情况下仍能触发并拿到基本字段;但注意:删后不可再 fetch 回消息内容。(discordjs.guide)

2)建立“消息快照缓存”(解决删后无法取内容)

const cache = new Map(); // messageId -> snapshot const TTL_MS = 10 * 60 * 1000; // 10分钟窗口(按你需求调) client.on(Events.MessageCreate, (msg) => { if (!msg.guild || msg.author?.bot) return; cache.set(msg.id, { id: msg.id, guildId: msg.guild.id, channelId: msg.channel.id, authorId: msg.author.id, authorTag: msg.author.tag, content: msg.content ?? '', createdAt: msg.createdTimestamp, }); // 简单 TTL 清理(务实版) setTimeout(() => cache.delete(msg.id), TTL_MS).unref?.(); });

解释:

  • 这一步是“取证前置”:不提前存,删了就没内容可追。(discordjs.guide)

  • TTL 让内存可控,避免缓存无限增长。

3)删除事件里追踪“执行删除的人”(审计日志匹配)

client.on(Events.MessageDelete, async (msg) => { if (!msg.guild) return; const snap = cache.get(msg.id); // 可能为空:机器人重启/未缓存 const channelId = msg.channel?.id || snap?.channelId; // 审计日志写入有延迟,等一下更稳 await new Promise(r => setTimeout(r, 1200)); // 拉最近几条 MESSAGE_DELETE 记录 const logs = await msg.guild.fetchAuditLogs({ type: AuditLogEvent.MessageDelete, limit: 6 }); const now = Date.now(); // 注意:审计日志的 target 往往是“被删消息的作者用户”,不是 messageId const entry = logs.entries.find(e => { const within = now - e.createdTimestamp < 5000; // 5秒窗口,避免误匹配 const sameChannel = (e.extra?.channel?.id === channelId); const sameTarget = (snap?.authorId ? e.target?.id === snap.authorId : true); return within && sameChannel && sameTarget; }); const executor = entry?.executor; // 真正点了删除的人(若存在) const result = { messageId: msg.id, channelId, author: snap?.authorTag || msg.author?.tag || 'unknown', deleter: executor ? `${executor.tag}` : 'self/unknown', content: snap?.content || '(not cached)', }; console.log(result); });

解释:

  • fetchAuditLogs需要 ViewAuditLog 权限,否则拿不到审计链路。(Discord)

  • 用 “时间窗口 + 同频道 + 同作者” 三条件匹配,解决常见的“误把上一条删除记录当成这条”的问题。

  • deleter = self/unknown并不敷衍,是现实约束:自删通常没有审计记录,你只能给出合规的结论。(GitHub)


四、实战建议(降低误判与投诉成本)🙂

  1. 把 窗口 做成可配置:高频删帖群可用 3 秒;低频可 8 秒。

  2. 记录时输出“证据三件套”:频道、作者、执行者(以及内容是否缓存)。

  3. 如果你要“更实时更稳”,可以同时监听guildAuditLogEntryCreate做审计事件驱动(同样要求权限与 intent)。(discordjs.guide)

如果你告诉我你用的是 discord.js 的具体大版本(v14.x 还是更早)以及你想记录到哪里(文件/数据库/指定日志频道),我可以把上面代码收敛成一份“可直接上线”的模块化实现(含并发控制、去重、防刷与日志格式标准)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 11:21:30

显存不足跑不动大模型?万物识别镜像显存优化技巧

显存不足跑不动大模型&#xff1f;万物识别镜像显存优化技巧核心提示&#xff1a;本文基于阿里开源的「万物识别-中文-通用领域」模型&#xff0c;针对在PyTorch 2.5环境下因显存不足导致大模型推理失败的问题&#xff0c;系统性地提出一套可落地的显存优化方案。不仅适用于本地…

作者头像 李华
网站建设 2026/6/9 23:55:37

快速验证创意:用VueDraggable一小时打造看板原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 快速生成一个任务看板原型&#xff0c;功能包括&#xff1a;1. 三列看板&#xff08;待办/进行中/已完成&#xff09; 2. 使用VueDraggable实现跨列拖拽 3. 卡片拖拽时有视觉反馈 …

作者头像 李华
网站建设 2026/6/10 11:18:56

TensorRT加速尝试:进一步压缩推理延迟

TensorRT加速尝试&#xff1a;进一步压缩推理延迟 万物识别-中文-通用领域 在当前AI应用快速落地的背景下&#xff0c;模型推理效率已成为决定产品体验的关键瓶颈。尤其是在移动端、边缘设备或高并发服务场景中&#xff0c;毫秒级的延迟优化都可能带来用户体验的显著提升。本文…

作者头像 李华
网站建设 2026/6/10 11:30:10

实战案例:电商商品自动分类系统3天上线全记录

实战案例&#xff1a;电商商品自动分类系统3天上线全记录 在电商行业&#xff0c;商品数量庞大、品类繁杂&#xff0c;人工分类成本高、效率低&#xff0c;且容易出错。随着AI技术的发展&#xff0c;利用图像识别实现自动化商品分类已成为提升运营效率的关键路径。本文将带你完…

作者头像 李华
网站建设 2026/6/10 11:22:03

1小时打造智能远程启动管理原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 快速开发一个远程启动管理系统的概念验证原型。核心功能包括&#xff1a;1) 设备发现与列表展示 2) 单个设备远程启动/停止 3) 基本状态反馈 4) 简易日志记录。使用Python Flask框…

作者头像 李华