首页 > 解决方案 > 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 还很陌生,我的一位朋友帮助我做到了这一点。我试图向他们寻求帮助,但他们也想不通。

标签: 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);
}

推荐阅读