UNPKG

tritan-starboards

Version:
71 lines (63 loc) 2.41 kB
const { MessageEmbed } = require("discord.js"); module.exports = async (manager, emoji, message, user) => { const data = manager.starboards.find( (channelData) => channelData.guildID === message.guild.id && channelData.options.emoji === emoji ); if (!data) return; const starChannel = manager.client.channels.cache.get(data.channelID); if (!starChannel) return; if (emoji !== data.options.emoji || user.bot) return; manager.emit("starboardReactionRemove", emoji, message, user); const reaction = message.reactions.cache.get(emoji); const fetchedMessages = await starChannel.messages.fetch({ limit: 100 }); const starMessage = fetchedMessages.find( (m) => m.embeds[0] && m.embeds[0].footer && m.embeds[0].footer.text.startsWith(data.options.emoji) && m.embeds[0].footer.text.endsWith(message.id) ); if (starMessage) { const regex = new RegExp( `^${data.options.emoji}\\s([0-9]{1,3})\\s\\|\\s([0-9]{17,20})` ); const stars = regex.exec(starMessage.embeds[0].footer.text); const foundStar = starMessage.embeds[0]; const image = (foundStar.image && foundStar.image.url) || ""; const starEmbed = new MessageEmbed() .setColor( getColor(data.options.color, parseInt(stars[1]) - 1) || foundStar.color ) .setDescription(foundStar.description || "") .setAuthor(message.author.tag, message.author.displayAvatarURL()) .setTimestamp() .setFooter( `${data.options.emoji} ${parseInt(stars[1]) - 1} | ${message.channel.name} | ${message.id}` ) .setImage(image); const starMsg = await starChannel.messages.fetch(starMessage.id); // eslint-disable-next-line no-empty-function await starMsg.edit({ embed: starEmbed }).catch(() => {}); // eslint-disable-next-line no-empty-function if ( parseInt(stars[1]) - 1 == 0 || (reaction && reaction.count < data.options.threshold) ) return starMsg.delete({ timeout: 1000 }).catch(() => {}); } }; function getColor(color, stars = 1) { if (typeof color === "string") return color; else if (typeof color === "object" && color.colors && color.max) { const indice = Math.max( Math.min( Math.floor(stars - (1 / color.max) * color.colors.length), color.colors.length - 1 ), 0 ); return color.colors[indice]; } else return null; }