【问题标题】:Discord.js Randomiser Command Ignoring Minimum and Maximum ValuesDiscord.js Randomiser 命令忽略最小值和最大值
【发布时间】:2022-01-19 05:27:27
【问题描述】:

我有这个 Discord 机器人,它包含一个随机命令 - /random(使用 new SlashCommandBuilder 构建) - 并包含两个必需的字符串选项 - minmax 值。

这段代码...

run: async (bot, interaction, args) => {
        const min = interaction.options.getString('min').replace(/[^\d.-]/g, '')
        const max = interaction.options.getString('max').replace(/[^\d.-]/g, '')

        parseFloat(min, parseFloat(max))

        random = Math.floor(Math.random() * (max - min) + min)

        console.log(min, max)

        interaction.followUp({ content: `${random}` })
        
    }

...从用户交互中提取字符串并将它们解析为浮点数。预期结果由min 值和max 值之间的随机数组成。

但是,随机发生器不使用 minmax 值,而是打印一个随机数,无论用户输入什么。

我预测这是一种非常低效的随机化命令方法。我恳请您提供帮助,如果有任何帮助,我们将不胜感激!

注意:命令执行不会出错。

【问题讨论】:

  • 问题是替换函数中的正则表达式,我已经对其进行了测试here,当我删除“^”时它似乎工作正常(显然 ^ 使得正则表达式选择除了元素之外的所有内容为您提供(此处为数字)与您想要的完全相反)
  • 我记录了 minmax 值,它们似乎都可以很好地提取数字。我不明白这个问题。

标签: javascript node.js discord discord.js


【解决方案1】:

您应该在命令处理程序中使用interaction.options.getNumber();这样它就已经是一个数字了:

let min = interaction.options.getNumber('min');
let max = interaction.options.getNumber('max');

function randomInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1) + min);
}

await interaction.reply(`Your random number is: ${randomInt(min, max)}`);

确保在deploy-commands.js 文件中添加带有addNumberOption() 的选项(或您命名的任何名称:

new SlashCommandBuilder()
  .setName('random')
  .setDescription('Generates a random number!')
  .addNumberOption((option) =>
    option
      .setName('min')
      .setDescription('Enter the minimum number')
      .setRequired(true),
  )
  .addNumberOption((option) =>
    option
      .setName('max')
      .setDescription('Enter the maximum number')
      .setRequired(true),
  )

【讨论】:

  • 这样一个简单的解决方案。亲切的问候!
猜你喜欢
  • 2021-12-23
  • 2021-08-12
  • 1970-01-01
  • 2021-08-24
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2014-11-13
相关资源
最近更新 更多