Сообщение очищено сообщение не отправляется при очистке только одного сообщения

#discord #discord.js

Вопрос:

Вот мои сообщения, успешно очищенные сообщения. Первый работает нормально, и я могу получить встроенное, но когда я пытаюсь очистить только одно сообщение, сообщение удаляется нормально, но я не получаю сообщение об успешном выполнении. Заранее спасибо.

 await message.channel.messages
.fetch({ limit: parseInt(args[0])   1 })
.then((messages) => {
    message.channel
        .bulkDelete(parseInt(args[0])   1)
        .then(() => {
            if (args[0] > 1) { 
                let clearMessages = new Discord.MessageEmbed()
            .addField("Success:",`Cleared ${args[0]} messages.`)
            .setColor("#000000")
            message.channel.send(
                clearMessages
            ).then(msg => {
                msg.delete({ timeout: 3000 })
              })
              .catch
                            
            } if (args[0] === 1) {
                let oneMessage = new Discord.MessageEmbed()
            .addField("Success:",`Cleared ${args[0]} message.`)
            .setColor("#000000")
            message.channel.send(
                oneMessage
            ).then(msg => {
                msg.delete({ timeout: 3000 })
              })
              .catch
            }
        })
 

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

1. Это не связано с проблемой, с которой вы столкнулись: рассмотрите возможность использования тернарного оператора для проверки значения args[0] и добавления » s » в «сообщение», чтобы сделать ваш код более читаемым и чистым.

Ответ №1:

Использование === для сравнения args[0] (строки) с 1 (числом) всегда будет иметь значение false. Оберните args[0] , parseInt чтобы получить номер args[0] .

Кроме того, для более читабельного кода я предлагаю проверить, равно ли args[0] 1 или больше 1 с помощью тернарного оператора внутри поля встраивания сообщения.

 `Cleared ${args[0]} message${parseInt(args[0]) === 1 ? '' : 's'}.`
 

гораздо более читабелен, чем исходный код, опубликованный выше.

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

1. Или вы могли бы просто оценить строку "1" … или использовать обычное сравнение (==)

Ответ №2:

При сравнении аргументов необходимо использовать обе строки или оба числа.

 if(parseInt(args[0]) > 1) {
//...
}
 

И для строгого сравнения ( === )

 if(args[0] === '1') {
//
}
//also works with (args[0] == 1) and (parseInt(args[0]) === 1)
 

Оператор строгого равенства (===) проверяет, равны ли два его операнда, возвращая логический результат. В отличие от оператора равенства, оператор строгого равенства всегда рассматривает операнды разных типов как разные.
-MDN