Команда броска/кубика?

Я пытаюсь сделать команду 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 });
}

NaN означает «не число».

Aleksey Tsalolikhin 23.12.2020 01:22

Вы не отправляете параметры для функции getRandomIntInclusive. Попробуйте отправить минимальное и максимальное значения, например .setDescription( getRandomIntInclusive(100, 1000)).

siddiq 23.12.2020 01:33

Если вы создаете функцию, которая принимает параметры, вы должны установить указанные параметры.

Elitezen 23.12.2020 01:56

Я пытаюсь сделать его настраиваемым для пользователя, если кто-то использует команду !random-number 1 5, то бот отправляет случайное число от 1 до 5, если кто-то вводит !random-number 1 10, то бот отправляет случайное число от 1 до 10 и т. д.

Zayren TV 23.12.2020 12:19
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
1 782
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Если вы создаете функцию, которая принимает параметры, вы должны использовать их.

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 и т. д.

Zayren TV 23.12.2020 12:18

@ZayrenTV Я отредактировал код выше. Я просто создал две переменные, в которых хранятся входные числа. Затем я передал эти два числа в созданную вами функцию, так как она принимает два параметра. Теперь пользователь может ввести 2 числа, и между ними будет создано случайное число.

Jannik Schmidtke 23.12.2020 13:52

Примечание для всех, кто хочет использовать этот код: вам нужно сделать argsminus8 и commandminus8 константами над командой следующим образом: const argsminus8 = message.content.slice(prefix.length).trim().split(/ +/g); const commandminus8 = argsminus8.shift().toLowerCase();

Zayren TV 23.12.2020 14:38

Самый быстрый ответ заключается в том, что в вашем 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 и т. д.

Zayren TV 23.12.2020 12:18

Другие вопросы по теме