Команда замедленного режима

#javascript #node.js #discord.js

#javascript #node.js #discord.js

Вопрос:

Когда я набираю ;sm текст, мой бот отвечает: «Вам нужно указать время в секундах» <- Все в порядке.

Но когда я печатаю ;sm [time] , он по-прежнему отвечает: «Вам нужно указать время в секундах»., Но он должен установить ограничение скорости и сообщить мне, что «Slowmode теперь равен [time] s».

Вот мой код:

 const Discord = require("discord.js");

module.exports.run = async (bot, message) => {
    if(message.author.bot) return;
    if(!message.member.hasPermission('MANAGE_MESSAGES')) 
        return message.channel.send("You need `MANAGE_MESSAGES` permission to execute this command.");
    const messageArray = message.content.split(' ');
    const args = messageArray.slice(1);

    if (!args[1] == null) {
        message.channel.setRateLimitPerUser(args[0])
        message.channel.send(`Slowmode is now ${args[0]}s`)
    }
    if (args[1] == null) {
        return message.channel.send("You need to specify time in seconds!")
    };
};

module.exports.config = {
    name: "sm",
    aliases: []
}
 

Ответ №1:

Во-первых, убедитесь, что вы понимаете, что такое ваши переменные. Если вы введете команду, подобную !sm 10 , ваш messageArray будет похож на массив ['!sm', '10'] , а ваш args будет похож на массив ['10'] .

Когда вы разрезаете массив ( messageArray.slice(1) ), вы удаляете первый элемент. Поэтому, если вы хотите проверить первый аргумент после команды, вы должны проверить args[0] , а не args[1] .

Во-вторых, когда вы проверяете !args[1] == null , что вы преобразуете args[1] в логическое значение. Если вы проверите, является ли логическое null значение, оно всегда будет возвращаться false , поэтому вы никогда не будете выполняться setRateLimitPerUser .

 console.log(true == null)  // => false
console.log(false == null) // => false 

Вместо этого вы можете проверить, является ли аргумент null . Если это так, вы можете вернуться раньше. Таким образом, вам не нужен другой оператор if или else if . Еще лучше, вы могли бы проверить, является ли аргумент не числом, используя isNaN .

 module.exports.run = async (bot, message) => {
  if (message.author.bot) return;
  if (!message.member.hasPermission('MANAGE_MESSAGES'))
    return message.channel.send(
      'You need `MANAGE_MESSAGES` permission to execute this command.',
    );
  const messageArray = message.content.split(' ');
  const args = messageArray.slice(1);
  const seconds = args[0];
  const MAX_SECONDS = 21600;

  if (isNaN(seconds)) {
    return message.channel.send('You need to specify time in seconds!');
  }

  if (seconds > MAX_SECONDS) {
    return message.channel.send(
      `The maximum number of seconds is ${MAX_SECONDS}.`,
    );
  }

  try {
    await message.channel.setRateLimitPerUser(seconds);
    message.channel.send(`Slowmode is now ${seconds}s`);
  } catch (error) {
    message.channel.send('Oops, there is a problem with that command');
    console.log(error);
  }
}
 

введите описание изображения здесь

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

1. Да, спасибо, это работает. У меня есть еще один вопрос. Можно ли установить максимальное число, которое может быть slowmode: 86400 или в основном один день? Спасибо.

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