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
相关产品推荐
相关产品推荐

