我正在尝试从人员列表中随机选择5个选项

时间:2020-01-09 17:30:24

标签: discord.js

这可能不像我想像的那么难,但是我正在尝试制作Discord.JS机器人命令,无论我有多少参数,它都将使用。例如:!randomize 1,2,3,4,5,6,7,8,9,10 然后,该机器人会做出如下回应:“我选择了:4、2、7、3、9!”有帮助吗?

当前尝试:不确定我在做什么。

function shuffleArray(array) {
    for (var i = array.length - 1; i > 0; i--) {
        var j = Math.floor(Math.random() * (i + 1));
        var temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
}`

`bot.on('message', async msg => {
    if(msg.content === "!add") {
        //message.member.user.tag
        var msgArray = msg.content.split(" ");
        var args = msgArray.slice(1);
        var user = args[1];
        //if(!args[1]) return msg.channel.send("Please specify an argument!");
        if(nameList.includes(user)) {
            msg.reply("You're already on the list.")
        } else {
            nameList.push(args[1]);
            msg.channel.send(`${args[1]} has been added to the list!\n Current List:` + nameList);
        }
    }

    if(msg.content === "!bonus") {
        if(nameList.length === 0) {
            msg.reply("Either the list is empty, or I'm not in the mood!");
        } else {
            shuffleArray(nameList);
            var chosenOne = nameList.pop();
            nameList = [];
            msg.reply(chosenOne + ' has been chosen! Good luck!');
        }
    }

    if(msg.content === "!list") {
        if(nameList.length === 0) {
            msg.channel.send("Either the list is empty, or I'm not in the mood!");
        } else {
            msg.channel.send('The current list:' + nameList);
        }
    });```

1 个答案:

答案 0 :(得分:1)

这是从数组中选择5个随机元素的一些简单步骤...

  1. 构造一个可能选择的数组。在此示例中,我使用了字母的前10个字母的名称。在您的代码中,它将是命令参数或预定义的nameList

  2. 创建一个新数组以保存拾取的元素。

    在#3之前的某个时候,您应该检查并确保用户提供的池足够大,可以进行5个选择(Array.length)。

  3. 使用for loop多次执行下一个代码。

  4. 生成一个表示所选元素索引的随机数(Math.random()Math.floor() / double NOT按位运算符)。

  5. Push将选择内容放入数组。

  6. 从原始池(Array.splice())中删除所选元素。

  7. 返回结果。

const pool = ['Albert', 'Bob', 'Charlie', 'David', 'Edward', 'Francis', 'George', 'Horacio', 'Ivan', 'Jim'];

const selected = [];
for (let i = 0; i < 5; i++) {
  const num = ~~(Math.random() * pool.length);

  selected.push(pool[num]);
  pool.splice(num, 1);
}

console.log(`I have chosen: ${selected.join(', ')}`);

以该示例为例,并在您的代码中对其进行操作以适合您的目的。