Returns a randomized list of members in specified role. Needs slash command with role option
// authenticates you with the API standard library
// type `await lib.` to display API autocomplete
const lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN});
let role = context.params.event.data.options[0].value;
let guild = context.params.event.guild_id;
let users = await lib.discord.guilds['@0.2.4'].members.list({
guild_id: `${guild}`,
limit: 100, //update for larger servers
});
let rolenames = await lib.discord.guilds['@0.2.4'].roles.list({
guild_id: `${context.params.event.guild_id}`,
});
var result = new Array(); //gets list of users in role
for (let i = 0; i < users.length; i++) {
if (users[i].roles.includes(role)) {
if (users[i].nick === null) {
result.push(`${users[i].user.username}`);
} else {
result.push(`${users[i].nick}`);
}
}
}
var result2 = new Array(); //gets name of role
for (let i = 0; i < rolenames.length; i++) {
if (rolenames[i].id == `${role}`) {
result2.push(`${rolenames[i].name}`);
}
}
console.log(`Mentioned Role: ${role}`); //role id
console.log(`Members in Role: ${result}`); //list of nicknames/usernames in role
console.log(`Rolename: ${result2}`); //role name
function shuffle(result) {
let currentIndex = result.length,
randomIndex;
while (currentIndex != 0) {
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex--;
[result[currentIndex], result[randomIndex]] = [
result[randomIndex],
result[currentIndex],
];
}
return result;
}
let randomized = shuffle(result); //shuffles the names in the role
await lib.discord.channels['@0.0.6'].messages.create({
channel_id: `${context.params.event.channel_id}`, //sends message in same channel as command
content: `**${result2} Members List:** \n${randomized.join('\n')}`, //message to post in discord
});