View difference between Paste ID: XUWVFiAm and vXgf5zeE
SHOW: | | - or go back to the newest paste.
1
//Start of the file
2
3
module.exports = {
4
    name: 'randomwinner',
5
    description: "This is a random winner command. Pull a random winner from the reactions!",
6
7
    execute(message, args, Discord, client) {
8
        //This command only to be used with role named 'Moderator'
9
        if (message.member.roles.cache.some(role => role.name === 'Management')) {
10
            if (!args.length) {
11
                return message.channel.send(`You didn't provide any arguments, ${message.author}!`);
12
            }
13
            numWinners = args[0];
14
            //console.log('This is the number of Winners:');
15
            //console.log(numWinners);
16
            //console.log('------------------------------');
17
            //console.log('This is the emojicode pre-fix : ' + args[1])
18
            var emojiCode = args[1].split(':')[2];
19
            //console.log('This is the emoji code after the first split : ' + emojiCode);
20
            emojiCode = emojiCode.replace('>', '');
21
            //console.log('This is the emoji code for the emoji you will track');
22
            //console.log(emojiCode);
23
24
            message.channel.messages.fetch().then(async messages => {
25
                for (const msg of messages.array()) {
26
                    resultIndex = msg.reactions.cache.map((value, index) => index);
27
                    resultCount = msg.reactions.cache.map((value, index) => value.count);
28
                    var selIndex = -1;
29
                    var numVotes = 0;
30
                    for (var i = 0; i < resultIndex.length; i++) {
31
                        if (resultIndex[i] == emojiCode) {
32
                            selIndex = i;
33
                            break;
34
                        }
35
                    }
36
                    if (selIndex != -1) {
37
                        numVotes = resultCount[selIndex];
38
                        //console.log("number of reactions: " + numVotes);
39
                        msg.reactions.resolve(emojiCode).users.fetch().then(x => {
40
                            userList = x.map((value, index) => value);
41
                            //console.log(userList[0].username);
42
                            //console.log('----------');
43
                            //console.log(userList.length);
44
                            //console.log(userList)
45
46
                            const newWinnerEmbed = new Discord.MessageEmbed()
47
                                .setColor('#304281')
48
                                .setTitle("Contest Entries")
49
                                .setDescription('These are the winners of the contest! Congratulations!')
50
                                .setFooter('Work for this command has been done by [EB]EternalFragment#5420 and AmeiLotus')
51
52
                            var d = [];
53
                            for (z = 0; z < numWinners; z++) {
54
                                generateUniqueRandom(numWinners);
55
                            }
56
                            //console.log('Unique random numbers:' , haveIt);
57
58
                            for (z = 0; z < numWinners; z++) {
59
                                newWinnerEmbed.addFields({ name: "Winner #" + (z + 1) + " - ", value: '<@' + userList[haveIt[z]] + '>' })
60
                            }
61
62
                            message.channel.send(newWinnerEmbed);
63
64
                            //resets the haveIt array for new commands.
65
                            haveIt = [];
66
                        });
67
                    }
68
69
                }
70
            }); //finish messages fetch .then
71
        } else {
72
            message.channel.send("You don't have the role");
73
        }
74
75
    } //end of execute function
76
}// end of module.export
77
78
// START UNIQUE NUMBER GENERATOR. 
79
// MAKE SURE TO CLEAR IT AFTER YOUR COMMAND IS OVER USING `haveIt = [];`
80
let haveIt = [];
81
82
function generateUniqueRandom(maxNr) {
83
    //Generate random number
84
    let random = (Math.random() * (maxNr - 1)).toFixed();
85
86
    //Coerce to number by boxing
87
    random = Number(random);
88
89
    if (!haveIt.includes(random)) {
90
        haveIt.push(random);
91
        return random;
92
    } else {
93
        if (haveIt.length < maxNr) {
94
            //Recursively generate number
95
            return generateUniqueRandom(maxNr);
96
        } else {
97
            console.log('No more numbers available.')
98
            return false;
99
        }
100
    }
101
}