使用GitHub JS代码删除Discord私信时遇TypeError错误求助
解决Discord私信删除代码的执行错误
先处理无关错误:CSS Source Map 403
- 这个错误是Discord自身的资源加载问题,和你的删除代码完全无关,直接无视就行,不用管它。
核心错误:Uncaught (in promise) TypeError: messages.map is not a function
这个错误的原因是代码里尝试用map方法处理的messages不是数组——map是数组专属方法,只有数组才能调用。下面给你一套修正后的可直接运行代码,按步骤操作即可:
- 打开Firefox登录Discord,打开和目标用户的私信对话框
- 按
F12打开开发者工具,切换到「控制台」标签 - 复制以下代码,替换其中的
YOUR_USER_ID和YOUR_AUTH_TOKEN(注意保留引号):
const TARGET_USER_ID = "YOUR_USER_ID"; const AUTH_TOKEN = "YOUR_AUTH_TOKEN"; const DELETE_DELAY = 1000; // 每次删除间隔1秒,避免被Discord限制 async function deleteDirectMessages() { try { // 获取和目标用户的私信会话ID const channelResponse = await fetch(`https://discord.com/api/v9/users/@me/channels`, { headers: { "Authorization": AUTH_TOKEN, "Content-Type": "application/json" } }); const channels = await channelResponse.json(); const dmChannel = channels.find(channel => channel.recipients.some(recipient => recipient.id === TARGET_USER_ID)); if (!dmChannel) { console.log("找不到和目标用户的私信会话"); return; } const channelId = dmChannel.id; let hasMoreMessages = true; let lastMessageId = null; while (hasMoreMessages) { // 批量获取消息,每次最多100条 const messagesResponse = await fetch(`https://discord.com/api/v9/channels/${channelId}/messages?limit=100${lastMessageId ? `&before=${lastMessageId}` : ""}`, { headers: { "Authorization": AUTH_TOKEN } }); if (!messagesResponse.ok) { console.log(`获取消息失败,状态码:${messagesResponse.status}`); break; } const messages = await messagesResponse.json(); // 检查messages是否为有效数组 if (!Array.isArray(messages) || messages.length === 0) { hasMoreMessages = false; console.log("没有更多消息可删除"); break; } // 遍历删除自己发送的消息 for (const message of messages) { const currentUser = await fetch(`https://discord.com/api/v9/users/@me`, {headers: {"Authorization": AUTH_TOKEN}}).then(res => res.json()); if (message.author.id === currentUser.id) { const deleteResponse = await fetch(`https://discord.com/api/v9/channels/${channelId}/messages/${message.id}`, { method: "DELETE", headers: { "Authorization": AUTH_TOKEN } }); if (deleteResponse.ok) { console.log(`已删除消息ID:${message.id}`); } else { console.log(`删除消息失败ID:${message.id},状态码:${deleteResponse.status}`); } // 间隔等待,规避Discord API限制 await new Promise(resolve => setTimeout(resolve, DELETE_DELAY)); } } lastMessageId = messages[messages.length - 1].id; } console.log("私信删除完成"); } catch (error) { console.log("执行出错:", error); } } // 启动删除函数 deleteDirectMessages();
- 按回车运行,控制台会实时输出删除进度
关键替换说明
YOUR_USER_ID:打开目标用户的Discord资料,右键点击用户头像选择「复制用户ID」(需先在Discord设置→高级里开启「开发者模式」)YOUR_AUTH_TOKEN:在Discord浏览器页面按F12打开「网络」标签,随便找一个请求,查看请求头里的Authorization字段值,直接复制即可
注意事项
- 代码只会删除你发送的消息,不会删除对方发送的内容
- 不要修改
DELETE_DELAY的数值(1000=1秒),改太小会触发Discord的API封禁限制 - 如果中途报错停止,等待几分钟后重新运行即可
内容的提问来源于stack exchange,提问作者user21491324
相关产品推荐
相关产品推荐

