Я пытаюсь сделать команду roll, которая генерирует случайное число на основе пользовательского ввода.
Например:
пользователь:
!roll 1d100
бот:Your output is 65
(или любое другое случайное число)
Я пробовал несколько разных вещей, но ни одна из них не сработала, вывод был «NaN».
Мой ближайший код был:
const argsminus8 = message.content.slice(prefix.length).trim().split(/ +/g);
const commandminus8 = argsminus8.shift().toLowerCase();
if (message.content.startsWith (prefix + `random-number`)) {
function getRandomIntInclusive(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
if (!argsminus8.length) {
return message.channel.send(`What roll am I supposed to make?`);
}
const embed = new MessageEmbed()
.setTitle('Number:')
.setDescription( getRandomIntInclusive())
.setColor(0x0099ff)
.setTimestamp()
message.channel.send({ embed });
}
Вы не отправляете параметры для функции getRandomIntInclusive. Попробуйте отправить минимальное и максимальное значения, например .setDescription( getRandomIntInclusive(100, 1000))
.
Если вы создаете функцию, которая принимает параметры, вы должны установить указанные параметры.
Я пытаюсь сделать его настраиваемым для пользователя, если кто-то использует команду !random-number 1 5, то бот отправляет случайное число от 1 до 5, если кто-то вводит !random-number 1 10, то бот отправляет случайное число от 1 до 10 и т. д.
Если вы создаете функцию, которая принимает параметры, вы должны использовать их.
function getRandomIntInclusive(min, max) {
min = Math.min(min, max);
max = Math.max(max, min);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
let num1 = argsminus8[0];
let num2 = argsminus8[1];
if (!num1) return message.reply("Please enter a first number");
if (!num2) return message.reply("Please enter a second number");
const embed = new MessageEmbed()
.setTitle('Number:')
.setDescription(getRandomIntInclusive(num1, num2))
.setColor(0x0099ff)
.setTimestamp()
message.channel.send({ embed });
Реализуйте это внутри if (message.content.startsWith (prefix + 'random-number'))
.
Это создаст случайные числа от 1 до 100, потому что для параметра min
я сказал 1, а для параметра max
я сказал 100.
Вы можете изменить цифры на любые, которые вам нравятся.
Да, но я пытаюсь сделать его настраиваемым для пользователя, если кто-то использует команду !random-number 1 5, то бот отправляет случайное число от 1 до 5, если кто-то вводит !random-number 1 10, то бот отправляет случайное число от 1 до 10 и т. д.
@ZayrenTV Я отредактировал код выше. Я просто создал две переменные, в которых хранятся входные числа. Затем я передал эти два числа в созданную вами функцию, так как она принимает два параметра. Теперь пользователь может ввести 2 числа, и между ними будет создано случайное число.
Примечание для всех, кто хочет использовать этот код: вам нужно сделать argsminus8 и commandminus8 константами над командой следующим образом: const argsminus8 = message.content.slice(prefix.length).trim().split(/ +/g); const commandminus8 = argsminus8.shift().toLowerCase();
Самый быстрый ответ заключается в том, что в вашем getRandomIntInclusive
переменные min
и max
имеют значение undefined
. В JavaScript каждая арифметическая операция с нечисловым значением (NaN) приводит к NaN
.
Почему undefined
? Поскольку ваша функция ожидает эти два параметра (min
и max
) при использовании:
// Wrong
getRandomIntInclusive();
// Correct
getRandomIntInclusive(1, 100)
Кроме того, если вы вызываете свою функцию Int
(из Integer), нет необходимости в .ceil()
или .floor()
, поскольку оба метода округляют дробную часть до ближайшего целого числа, и, насколько я знаю, вам не нужно случайное число между 0,97 и 99.01.
Если ваша единственная проблема заключается в том, что результат NaN
, вы можете значительно упростить свой код, воспользовавшись советом, который я вам дал, и, возможно, используя более распространенный кубик (случайное число от 1 до 6).
/**
* Simplified randomizer method
*/
const getRandomIntInclusive = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;
console.info(getRandomIntInclusive(1,6));
Да, но я пытаюсь сделать его настраиваемым для пользователя, если кто-то использует команду !random-number 1 5, то бот отправляет случайное число от 1 до 5, если кто-то вводит !random-number 1 10, то бот отправляет случайное число от 1 до 10 и т. д.
NaN означает «не число».