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

discord.js purge命令修改实现不删除频道置顶消息的方法

解决方案

核心修改逻辑

  • Discord消息对象的pinned属性为true时代表是置顶消息,我们只需要在执行批量删除前过滤掉这类消息即可实现需求
  • 原有代码直接传入数量调用bulkDelete会无差别删除所有消息,调整为先拉取指定数量的消息,过滤掉置顶内容后再执行删除,同时可以把提示文本修改为实际删除的消息数,避免出现输入50但实际只删了48(有2条置顶)的误导情况

修改后的完整代码

if(message.content.toLowerCase().startsWith("s!purge")) {
  let arg = message.content.split(" ")
  message.delete() 
  let clear = arg[1];
  if(!clear) return message.channel.send(`:x: | \`命令使用错误,你需要指定需要清理的消息数量\` 
**示例:** \`s!purge 50\` `)
  if(isNaN(clear)) return message.channel.send(":x: | ``请输入有效的消息数量``")
  if(clear > 100) return message.channel.send(":x: | ``单次最多只能清理100条消息``")
  if(clear < 1) return message.channel.send(":x: | ``最少需要清理1条消息``")
  // 替换原有批量删除逻辑,新增置顶过滤
  message.channel.messages.fetch({ limit: Number(clear) }).then(messages => {
    // 过滤所有非置顶消息
    const toDelete = messages.filter(msg => !msg.pinned);
    // 第二个参数true表示自动跳过14天以上无法批量删除的消息,避免报错
    message.channel.bulkDelete(toDelete, true).then(deleted => {
      message.channel.send(`:white_check_mark: | \`成功清理${deleted.size}条消息,已自动跳过置顶消息\` `)
      .then(msg => setTimeout(()=> msg.delete(), 2000))
    })
  })
}

注意事项

  • 代码写法兼容discord.js v12及以上的主流版本,如果你使用的是更早的版本,需要调整messages.fetch的调用参数
  • 实际删除的数量可能会小于你输入的数量,属于正常情况,差值就是被跳过的置顶消息+超过14天无法批量删除的消息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:18:02