discord.js - Discord.js 机器人未清除消息,但仍发送 x 条消息已被删除消息
问题描述
我试图从我在同一台服务器上使用不同命令名称制作的先前机器人复制这段代码,现在它没有删除消息,我不知道为什么不删除。
bot.on('message', msg =>{
if(!msg.author.bot && msg.content.startsWith(PREFIX))
{
let args = msg.content.substring(PREFIX.length).split(" ");
switch(args[0])
{
case 'ClearMessages':
if (msg.member.roles.cache.some(r=>["RNGesus"].includes(r.name)))
{
msg.channel.bulkDelete(args[1], true).catch(err=> {
console.error(err)
msg.channel.send("An error has occured while trying to delete messages")
});
msg.channel.send(`${args[1]} messages have been deleted`)
.then(msg =>{
msg.delete({timeout: 3000})
})
.catch(console.error)
}
break;
当机器人应该删除消息时,它也不会在控制台中提供任何错误消息。如果有人可以提供帮助,我将不胜感激,我对 discord.js 还很陌生,我的一位朋友帮助我做到了这一点。我试图向他们寻求帮助,但他们也想不通。
解决方案
的第一个参数TextChannel.bulkDelete()
应该是消息的数组/集合或要删除的消息数。显然,您正在尝试提供许多要删除的消息,但实际上您提供的是string。
您需要先使用一元加号运算符 ( )args[0]
将其转换为数字,然后使用(或使用双位非运算符 ( )如果您想花哨且更高效)将其舍入为整数。作为建议,您还应该检查以确保该号码有效。+
Math.floor()
~
if (msg.member.roles.cache.some((r) => ['RNGesus'].includes(r.name))) {
if (+args[1] < 2 || +args[1] > 100)
return message.channel.send('The number must be at least 2 and at most 100');
msg.channel.bulkDelete(Math.floor(+args[1]), true).catch((err) => {
console.error(err);
msg.channel.send('An error has occured while trying to delete messages');
});
msg.channel
.send(`${args[1]} messages have been deleted`)
.then((msg) => {
msg.delete({ timeout: 3000 });
})
.catch(console.error);
}
推荐阅读
- java - 使用两个线程会导致 JavaFX 崩溃
- c++ - 递归链表和 C++ 中的分段错误
- javascript - 为什么 React Hook useEffect 警告缺少依赖项:'props'?
- micronaut - 无法通过发布请求反序列化枚举值
- java - 如何在 URL 中使用动态 ID 处理 Chrome 浏览器中的身份验证弹出窗口
- python - 在 Pandas 中修复一列 RPT 文件
- javascript - 什么是查询:使用 nodeJS 的 url.parse() 中的 [Object: null prototype]
- excel - `excel.application` 的 PowerShell 文档在哪里?
- javascript - 使用带有可变 ID 的数据目标
- swiftui - SwiftUI - 如何从 SwiftUI 访问 UIHostingController