- 即时通讯
- 开发工具
【免费下载链接】undiscord
Undiscord - Delete all messages in a Discord server / channel or DM (Easy and fast) Bulk delete
Author ID(Discord 用户 ID,即雪花 ID/Snowflake)是 Undiscord 定位"要删除谁的消息"的核心标识:脚本在搜索消息时以author_id作为关键过滤参数,只有填对了 Author ID,批量删除才能命中你本人发送的消息。本文围绕 Undiscord 官方帮助文档 help/authorId.md 展开,完整讲解两条获取路径——弹出窗口一键自动检测与手动复制头像 ID,并说明 Developer Mode 前置条件、DM 会话中删除他人消息会触发 Error 403 的限制,以及这些行为在 src/undiscord-core.js 与 src/utils/getIds.js 中的底层实现依据。
Author ID 在 Undiscord 中的作用
Undiscord 的删除引擎UndiscordCore在初始化时把authorId定义为"你要删除消息的作者 ID"(见 src/undiscord-core.js 的 options 定义):
options = { authToken: null, // Your authorization token authorId: null, // Author of the messages you want to delete guildId: null, // Server were the messages are located channelId: null, // Channel were the messages are located // ... };当脚本执行搜索时,search()方法会把authorId拼入 Discord 搜索 API 的查询参数:
resp = await fetch(API_SEARCH_URL + 'search?' + queryString([ ['author_id', this.options.authorId || undefined], // ...(见 src/undiscord-core.js)
也就是说,搜索接口会只返回"该作者"的消息,其余人的消息根本不会进入候选列表。因此填错或漏填 Author ID,要么删不到任何消息,要么脚本在确认阶段展示的待删消息预览与实际预期不符。这也是为什么官方文档把 Author ID 的获取放在了使用流程的最前面。
简易方式:点击 "Me" 按钮自动检测
官方文档提供了最快的一条路径:
在 Undiscord 弹出窗口的Author输入框旁,直接点击Me按钮,脚本会自动检测并填入你的 ID。
在界面模板中,Author ID 输入框与me按钮是一对组合(见 src/ui/undiscord.html):
<fieldset> <legend> Author ID <a href="{{WIKI}}/authorId" title="Help" target="_blank" rel="noopener noreferrer">help</a> </legend> <div class="multiInput"> <div class="input-wrapper"> <input class="input" id="authorId" type="text" priv> </div> <button id="getAuthor">me</button> </div> </fieldset>按钮的点击行为绑定在 src/undiscord-ui.js:
$('button#getAuthor').onclick = () => $('input#authorId').value = getAuthorId();其底层实现getAuthorId()位于 src/utils/getIds.js。它通过注入一个隐藏 iframe 读取 Discord 网页应用的localStorage,从中解析user_id_cache字段:
export function getAuthorId() { const LS = document.body.appendChild(document.createElement('iframe')).contentWindow.localStorage; return JSON.parse(LS.user_id_cache); }从源码结构可以推断,"自动检测"的本质是读取 Discord 缓存在本地存储里的当前登录用户 ID(user_id_cache),因此它永远返回的是你自己账号的 ID,这正是 Undiscord 批量删除自己消息的使用场景。需要说明的是:这个读取动作发生在浏览器内的 Discord 网页应用上下文中,脚本本身没有额外网络请求,也不会上传该 ID。
何时推荐使用此方式:清理自己账号在某个频道/DM 里的全部历史消息时,直接点me即可,无需任何手动操作;在导入 Discord 数据包(index.json)时脚本也会自动填充 Author ID(见 src/undiscord-ui.js)。
手动方式:右键头像复制 ID(不是消息!)
官方文档强调,如果不想用自动检测(例如需要精确确认 ID 来源),可以手动获取:
- 在聊天中发送一条消息,右键点击这条消息上的你的头像(avatar);
- 在右键菜单中选择Copy ID(复制 ID);
- 将复制到的数字 ID 粘贴回 Undiscord 窗口的Author ID输入框。
官方文档在此处特别用大写强调了一个高频踩坑点:
NOT THE MESSAGE THE AVATAR.(是头像,不是消息!)
右键"消息本体"复制到的 ID 是这条消息的 ID(message ID),而右键"头像"复制到的才是用户 ID(author ID)。两者都是 18 位左右的雪花 ID,但用途完全不同——把消息 ID 填进 Author ID 会导致搜索条件author_id匹配不到任何作者,最终一条消息都删不掉。关于消息 ID 的用途,可参考 help/messageId.md(用于"某条消息之后/之前"的区间限定)。
手动方式与自动方式的区别:自动方式恒等于当前登录账号;手动方式理论上可以填入任何人的 ID。但正如官方文档警告的,脚本删除他人消息会受 Discord 权限模型约束(详见下文"Error 403"部分),所以手动方式主要用于:确认 ID、排查自动检测失效、或在"请求数据包导入"等边缘场景下核对。
前置条件:右键菜单没有 "Copy ID"?
无论是复制头像 ID 还是消息 ID,右键菜单里的Copy ID选项都不是默认存在的。官方文档指出:
如果
Copy ID不显示,需要先启用Developer mode(开发者模式)。
开启步骤见 help/developerMode.md:
- 打开 Discord 的用户设置(Settings);
- 进入外观(Appearance)分类;
- 打开开发者模式(Developer mode)开关。
开启后刷新 Discord 页面,再右键头像即可看到Copy ID菜单项。该开关同样作用于频道 ID、服务器 ID、消息 ID 的复制(相关获取方法见 help/channelId.md),是使用 Undiscord 各项手动 ID 获取功能时的通用前置条件。
DM 场景限制:为什么删除他人消息会得到 Error 403
官方文档在手动方式一节中明确警告:
你不能删除他人在 DM(私聊)会话中发送的消息,否则会得到Error 403。
这条限制可以从两个层面理解:
(1)Discord 权限模型层面:DM 会话是双方私有空间,任何一方都没有"代删对方消息"的权限。Undiscord 以你自己的账号身份(Authorization Token)调用删除接口,删除他人消息时 Discord 服务端会直接以 403 Forbidden 拒绝。
(2)Undiscord 实现层面:删除请求由 src/undiscord-core.js 的deleteMessage()发出,走DELETE https://discord.com/api/v9/channels/{channel_id}/messages/{message_id}。当响应resp.ok为 false 时,脚本会记录failCount++并在日志区输出类似 "Error deleting message, API responded with status 403" 的信息(见 src/undiscord-core.js)。由于失败消息会进入failCount而非delCount,最终统计中"已删除/失败"的数量也会如实反映这一情况。
注意:在服务器(Server)频道中能否删除他人消息,取决于该服务器是否授予你"管理消息"权限;而 DM 场景下则是平台层面的硬限制,与权限配置无关。从 src/undiscord-core.js 的搜索逻辑可以看出,当
guildId为@me时脚本即按 DM 模式处理搜索请求。
另外值得补充的是:即使搜索阶段能通过author_id过滤到他人消息(例如你手动填入对方 ID),删除阶段依然会被 403 拦截,因此在 DM 中请始终使用自己的 Author ID,只删除自己发送的消息。
常见问题与排查清单
结合官方文档要点与源码实现,整理如下排查顺序:
| 现象 | 可能原因 | 处理方式 |
|---|---|---|
右键菜单没有Copy ID | 未开启 Developer mode | 按 help/developerMode.md 在 设置 → 外观 中开启开发者模式 |
点me按钮后输入框为空 | 浏览器环境未正确注入 iframe 读取 localStorage,或 Discord 网页应用未加载完成 | 刷新 Discord 页面后重试;仍失败可改用右键头像手动复制 |
| 填了 ID 却一条都搜不到 | 复制的是消息 ID 而非用户 ID(右键了消息而非头像) | 右键头像重新复制;可参考 help/messageId.md 区分两类 ID 的用途 |
| 删到一半大量 403 | 在 DM 中尝试删除他人消息,或服务器权限不足 | 确认 Author ID 为自己的 ID;服务器场景请确认拥有"管理消息"权限 |
| 确认弹窗中预览的消息作者都不是自己 | Author ID 被误填为他人 | 清除输入框,重新点击me自动填入 |
结语
Author ID 是 Undiscord 批量删除流程的"身份钥匙":me按钮从 src/utils/getIds.js 的getAuthorId()读取本地缓存的当前用户 ID 实现一键填充,手动方式则依赖 Developer mode 下的右键"复制 ID",二者互为补充。牢记两个关键点即可避开绝大多数坑:右键要复制的是头像(用户 ID)而不是消息本体,以及DM 会话中只能删除自己的消息,否则必遇 Error 403。本文依据的官方文档为 help/authorId.md,配套的 help/developerMode.md、help/channelId.md、help/messageId.md 可在仓库 help 目录下继续查阅。
- 即时通讯
- 开发工具
【免费下载链接】undiscord
Undiscord - Delete all messages in a Discord server / channel or DM (Easy and fast) Bulk delete
相关推荐
GET /users/:id 获取用户信息
GET /users/:id 获取用户信息 参数 | 名称 | 类型 | 描述 | | | | | | id | Number | 用户ID | 成功响应 |
开发工具文档API设计打造智能协作系统:GPTeam中Agent通信与事件管理详解
打造智能协作系统:GPTeam中Agent通信与事件管理详解 GPTeam是一个开源的多智能体模拟系统,它允许开发者创建和管理多个智能体(Agent),实现它们
Nacos鉴权配置与403错误排查指南
Nacos鉴权配置与403错误排查指南 引言 在使用Nacos作为服务注册中心和配置中心时,开启鉴权是保障系统安全的重要措施。然而,许多开发者在配置过程中会遇到
后端微服务配置中心服务注册发现云原生
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考