Ошибка при попытке удалить 100 или более сообщений

#javascript #discord.js

#javascript #discord.js

Вопрос:

У меня есть команда очистки в моем боте Discord с помощью Discord.js версия 12.2.0 и я продолжаю получать ошибку, но я не могу понять, почему. Ошибка возникает только тогда, когда я удаляю 100 сообщений или больше, все, что ниже, работает нормально.

Вот мой код:

 module.exports = {
    name: 'purge',
    description: "Purge messages.",
    usage: '[amount]',
    aliases: ['prune'],
    execute(client, Discord, message, args, prefix, wrongchannelpublic, wrongchannelstaff, talkingserverbump, disabledcommand, nopermission, noarguments, colour, footer1, footer2) {
        if (!message.member.roles.cache.some(role => role.id === '703316042965057546')) { return message.delete({ timeout: 100 }), message.channel.send(nopermission).then(sentMessage => sentMessage.delete({ timeout: 7000})) }
        if (!args[0] || isNaN(args[0])) { return message.delete({ timeout: 100 }), message.channel.send(noarguments).then(sentMessage => sentMessage.delete({ timeout: 7000})) }
        if (args[0] < 1 || args[0] > 1000) { return message.delete({ timeout: 100 }), message.channel.send(`Please provide a number between 1 and 100, ${message.author}!`).then(sentMessage => sentMessage.delete({ timeout: 7000})) }
        message.delete({ timeout: 100 })
        .then(() => {
            let remainder = args[0] % 100;
            let numOfTimes = (args[0]-remainder)/100;
            try {
                for (i = 0; i < numOfTimes; i  ) {
                    message.channel.bulkDelete(100);
                }
                message.channel.bulkDelete(remainder);
            } catch (err) {
                const purgeerror = new Discord.MessageEmbed()
                  .setDescription(`**Execution error**nThe `purge` command ran by ${message.author} in ${message.channel} failed to execute.nError: `${err}``)
                  .setColor('#ff0000')
                  .setTimestamp();
                message.channel.send(`<:cross:740242485728772137> Error: `${err}``);
                client.channels.cache.get('740251593382821920').send(purgeerror);
                console.log(`The purge command ran by ${message.author.tag} in #${message.channel.name} failed to execute. Error: ${err}`);
            }
        if (args[0] === "1") {
            setTimeout(()=>{ message.channel.send(`<:tick:740242485908996128> Purged ${args[0]} message.`).then(sentMessage => sentMessage.delete({ timeout: 4000})) }, 1000)
        } else {
            setTimeout(()=>{ message.channel.send(`<:tick:740242485908996128> Purged ${args[0]} messages.`).then(sentMessage => sentMessage.delete({ timeout: 4000})) }, 1000)
        }
        })
    }
}
  

И вот ошибка:

 DiscordAPIError: Invalid Form Body
limit: int value should be greater than or equal to 1.
    at RequestHandler.execute (/root/o-bot/node_modules/discord.js/src/rest/RequestHandler.js:170:25)
    at processTicksAndRejections (internal/process/task_queues.js:88:5) {
  name: 'DiscordAPIError',
  message: 'Invalid Form Bodynlimit: int value should be greater than or equal to 1.',
  method: 'get',
  path: '/channels/736996028787589201/messages?limit=0',
  code: 50035,
  httpStatus: 400
}
  

Любая помощь была бы действительно оценена. Спасибо!

Комментарии:

1. Кажется, какой-то написанный вами код создан, path: '/channels/736996028787589201/messages?limit=0', когда он должен быть path: '/channels/736996028787589201/messages?limit=1', — запуск debug покажет, какой — я бы предположил, message.channel.bulkDelete(remainder); где остаток равен 0

Ответ №1:

Когда пользователь вводит значение, кратное 100 для удаления, remainder будет равно нулю, и message.channel.bulkDelete(0) выдается ошибка, потому что отправка запроса ничего не делать недопустима.

Просто добавьте условие.

 if(remainder > 0) message.channel.bulkDelete(remainder);
  

Комментарии:

1. Я полагаю, что я уже опубликовал это в качестве комментария. Разве мы не можем просто закрыть это?

2. @mplungjan Я писал ответ, когда вы редактировали свой комментарий, приписывая его остальным. Вы можете проголосовать за закрытие, если считаете, что вопрос следует закрыть, я просто не подумал, что есть веская причина или дубликат для его закрытия.