这可能不像我想像的那么难,但是我正在尝试制作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);
}
});```
答案 0 :(得分:1)
这是从数组中选择5个随机元素的一些简单步骤...
构造一个可能选择的数组。在此示例中,我使用了字母的前10个字母的名称。在您的代码中,它将是命令参数或预定义的nameList
。
创建一个新数组以保存拾取的元素。
在#3之前的某个时候,您应该检查并确保用户提供的池足够大,可以进行5个选择(Array.length
)。
使用for
loop多次执行下一个代码。
生成一个表示所选元素索引的随机数(Math.random()
,Math.floor()
/ double NOT按位运算符)。
Push将选择内容放入数组。
从原始池(Array.splice()
)中删除所选元素。
返回结果。
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(', ')}`);
以该示例为例,并在您的代码中对其进行操作以适合您的目的。