giftcord
Version:
Giveaway discord.js Package
60 lines (50 loc) • 2.67 kB
JavaScript
const scheduler = require('node-schedule');
const GiveawayModel = require('../models/Giveaway');
const { getWinner } = require('./getWinner.js')
const { endGiveaway } = require('./endGiveaway.js')
const { EmbedBuilder } = require("discord.js")
async function schedule(stuff, giveawayArray) {
for(let i = 0; i < giveawayArray.length; i++) {
let { messageId, channelId, endsOn, prize, winners , emoji } = giveawayArray[i];
scheduler.scheduleJob(`${messageId}`, endsOn, async () => {
const channel = stuff.client.channels.cache.get(channelId);
if (channel) {
const message = await channel.messages.fetch(messageId);
if (message) {
const { embeds, reactions } = message;
const reaction = reactions.cache.get(emoji);
const users = await reaction.users.fetch();
const entries = users.filter(user => !user.bot);
if (embeds.length === 1) {
const usersArray = Array.from(entries.values());
const winner = await getWinner(usersArray, winners);
let finalWinners;
if (!winner) {
finalWinners = 'Nobody Reacted';
}
else {
finalWinners = winner.map(user => user).join(', ');
}
let embed = new EmbedBuilder()
embed.setDescription(`🎖️ Winner(s): ${finalWinners}`);
embed.setFooter({text: stuff.client.user.username,iconURL: stuff.client.user.displayAvatarURL({ extension: 'png', size: 512 })});
await message.edit({ embeds: [embed] });
if (!winner) {
message.channel.send(`**Nobody reacted to the ${prize} giveaway.**`);
}
else {
message.channel.send(`**Congratulations ${finalWinners}, you won the ${prize}!**`);
const wins = winner
for (const win of wins) {
win.send(`### Congratulations ${win}, you won the ${prize}!\n **MSG LINK:**${message.url}`).catch(() => {})
}
}
const ended = await endGiveaway(messageId);
stuff.emit('giveawayEnd', ended);
}
}
}
});
}
}
module.exports = { schedule }