You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GitHub JS代码删除Discord私信时遇TypeError错误求助

解决Discord私信删除代码的执行错误

先处理无关错误:CSS Source Map 403

  • 这个错误是Discord自身的资源加载问题,和你的删除代码完全无关,直接无视就行,不用管它。

核心错误:Uncaught (in promise) TypeError: messages.map is not a function

这个错误的原因是代码里尝试用map方法处理的messages不是数组——map是数组专属方法,只有数组才能调用。下面给你一套修正后的可直接运行代码,按步骤操作即可:

  1. 打开Firefox登录Discord,打开和目标用户的私信对话框
  2. 按F12打开开发者工具,切换到「控制台」标签
  3. 复制以下代码,替换其中的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();
  1. 按回车运行,控制台会实时输出删除进度

关键替换说明

  • YOUR_USER_ID:打开目标用户的Discord资料,右键点击用户头像选择「复制用户ID」(需先在Discord设置→高级里开启「开发者模式」)
  • YOUR_AUTH_TOKEN:在Discord浏览器页面按F12打开「网络」标签,随便找一个请求,查看请求头里的Authorization字段值,直接复制即可

注意事项

  • 代码只会删除你发送的消息,不会删除对方发送的内容
  • 不要修改DELETE_DELAY的数值(1000=1秒),改太小会触发Discord的API封禁限制
  • 如果中途报错停止,等待几分钟后重新运行即可

内容的提问来源于stack exchange,提问作者user21491324

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 18:32:48