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

Discord机器人删除历史消息速度过慢,求性能优化方案

优化方案

  • 优先调用bulkDelete处理符合时限的消息
    官方提供的bulkDelete单次最多可删除100条14天内的消息,处理效率远高于单条删除。你可以先将拉取到的消息按发布时间拆分,符合时限的先走批量删除接口,剩下的超期消息再单独处理,能减少80%以上的单删请求量。
  • 控制并发请求数避免触发限流
    你原来的代码是同时发起所有单删请求,Discord API有严格的速率限制,大量并发请求会被强制阻塞甚至返回错误。可以将待删除的超期消息拆分成小批次,每批次并发处理5-10个删除请求,批次间加1s左右的等待,既提高效率又不会触发限流。
  • 改写异步逻辑避免回调地狱
    用async/await替代嵌套的.then回调,逻辑更清晰,也方便统计删除进度和处理异常。

优化后代码示例

// 14天对应的毫秒数
const TWO_WEEKS = 14 * 24 * 60 * 60 * 1000;
let numDeleted = 0;

async function deleteMessages() {
  try {
    const chan = await bot.channels.fetch(message.channel.id);
    const msgs = await chan.messages.fetch({ limit: args[0] });
    const validMsgs = msgs.filter(msg => !msg.deleted);
    message.send(`Deleting ${validMsgs.size} messages (lesser of request or existing message history)`);

    // 拆分可批量删除的14天内消息
    const bulkDeletable = validMsgs.filter(msg => Date.now() - msg.createdTimestamp < TWO_WEEKS);
    const needSingleDelete = validMsgs.filter(msg => Date.now() - msg.createdTimestamp >= TWO_WEEKS);

    // 批量处理符合要求的消息
    if (bulkDeletable.size > 0) {
      const deleted = await chan.bulkDelete(bulkDeletable, true);
      numDeleted += deleted.size;
    }

    // 批次处理超期消息的单删,每批处理10条
    const batchSize = 10;
    const msgArr = Array.from(needSingleDelete.values());
    for (let i = 0; i < msgArr.length; i += batchSize) {
      const batch = msgArr.slice(i, i + batchSize);
      // 并发处理当前批次
      await Promise.allSettled(
        batch.map(msg => 
          msg.delete()
            .then(() => numDeleted++)
            .catch(err => console.error(err))
        )
      );
      // 批次间等待1s避免触发限流
      await new Promise(resolve => setTimeout(resolve, 1000));
    }
  } catch (err) {
    console.error(err);
  }
}

deleteMessages();

如果需要进一步提速,可以适当调大批次大小(最高不要超过20),同时缩短批次间隔,注意监控API返回的429限流错误,根据返回的retry_after参数动态调整等待时间即可。

内容的提问来源于stack exchange,提问作者G-Force

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:18:04