如何批量删除 Discord 机器人
Posted
技术标签:
【中文标题】如何批量删除 Discord 机器人【英文标题】:How to delete in bulk for a Discord bot 【发布时间】:2021-11-23 14:28:30 【问题描述】:import DiscordJS, Channel, Intents, Message 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', (message) =>
if(message.content.toLowerCase().startsWith(prefix + 'clearall'))
async function clear()
message.delete();
const fetched = await message.channel.fetchMessages(limit: 99);
message.channel.bulkDelete(fetched);
message.channel.send('Deleted 99 messages')
clear();
)
client.login(process.env.TOKEN)
我正在尝试为 Discord 机器人批量删除频道中的消息,但我的 clear() 函数、fetchMessages 和 bulkDelete 出现错误。
【问题讨论】:
对于你的第一个错误,你为什么要创建一个命名的内部函数?您可以创建一个 IIFE,也可以只使源函数异步。 根据文档here,您似乎无法批量删除 DM 频道中的消息(至少不能使用名为bulkDelete
的函数,该函数不存在)跨度>
【参考方案1】:
面向 ES3 或 ES5 时,不允许在块内声明函数;
您可以编辑您的tsconfig.json
并将compilerOptions.target
选项设置为最近的选项,例如ES2017
甚至esnext
。这是一个有趣的变化,因为针对旧版 JS 版本可能会出现更多错误。
如果您的项目中仍然没有 tsconfig,请在项目的根目录中创建一个名为 tsconfig.json
的文件,内容如下:
"compilerOptions":
"target": "ES2017",
"strict": true,
"esModuleInterop": true
由于您的代码将在最新的 JS 版本(在 node.js 内)上运行,因此无需针对旧的 JS 版本。
额外:去除不必要的功能
您也不需要在那里创建 clear()
函数。你可以直接运行它的内部代码。
删除该函数将触发关于异步等待的警告,您可以通过更改此行来解决:
client.on('messageCreate', async (message) => // add "async" there
x 不存在
channel
对象没有fetchMessages()
函数。您可以查看文档或按住 CTRL 并单击以浏览类型定义并尝试找到所需的函数。
乍一看,fetchMessages()
似乎位于内部 messages
对象中,因此 message.channel.messages.fetchMessages(...)
可能就是您要查找的内容。
【讨论】:
对于 .bulkDelete() 函数,你有什么线索吗?我正在阅读 discord.js 的 TextChannel 文档,我认为它应该可以工作,但它一直说“基于文本的通道不存在属性 bulkDelete”以上是关于如何批量删除 Discord 机器人的主要内容,如果未能解决你的问题,请参考以下文章
如果用户在 discord.js 中提供了 20 条消息(超过 14 天)进行批量删除,我如何仅删除 10 条消息