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

Discord bot如何实现批量删除消息,fetchMessages、bulkDelete报错如何解决

问题原因

你使用的是discord.js v13及以上的新版本,代码中调用的fetchMessages等方法是v12版本的旧语法,新版本已经废弃/替换了相关API,因此触发报错。

修复方案

直接替换messageCreate事件内的逻辑即可,修改后的完整代码如下:

import DiscordJS, { Intents, TextChannel } from 'discord.js'
import dotenv from 'dotenv'
dotenv.config()
const prefix = '~';

const client = new DiscordJS.Client({
  intents: [
    Intents.FLAGS.GUILDS,
    Intents.FLAGS.GUILD_MESSAGES,
    Intents.FLAGS.GUILD_MESSAGE_REACTIONS
  ]
})

client.on('ready', () => {
  console.log('The bot is ready')
})

client.on('messageCreate', async (message) => {
  // 排除机器人自己发的消息
  if (message.author.bot) return
  if(message.content.toLowerCase().startsWith(prefix + 'clearall')) {
    // 先判断当前频道是文本频道,且机器人有管理消息权限
    if (!(message.channel instanceof TextChannel) || !message.guild?.members.me?.permissions.has('ManageMessages')) {
      return message.reply('没有权限删除当前频道的消息')
    }
    try {
      // 先删除触发命令的消息
      await message.delete()
      // 直接调用bulkDelete删99条消息,自动过滤14天以上的消息
      const deletedMessages = await message.channel.bulkDelete(99, true)
      await message.channel.send(`成功删除 ${deletedMessages.size} 条消息`)
    } catch (err) {
      console.error('删除消息失败:', err)
      await message.channel.send('删除消息失败,可能部分消息超过14天无法批量删除')
    }
  }
})

client.login(process.env.TOKEN)

注意事项

  • bulkDelete 单次最多删除100条、发送时间不超过14天的消息,超过14天的消息无法通过该接口批量删除
  • 必须给机器人授予管理消息权限,否则会触发权限报错
  • 代码中新增了机器人自身消息过滤逻辑,避免机器人响应自己发送的消息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:57:02