#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 секунд.