UNPKG

giftcord

Version:

Giveaway discord.js Package

60 lines (50 loc) 2.67 kB
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 }