From 00389b326d4c63306fe00b78ac4bff0efdaffeb4 Mon Sep 17 00:00:00 2001 From: loicbersier Date: Wed, 17 Jun 2020 15:42:46 +0200 Subject: [PATCH] Actually fix partial messages --- event/listeners/message.js | 440 +++++++++++------------ event/listeners/messageReactionAdd.js | 88 +++-- event/listeners/messageReactionRemove.js | 106 +++--- 3 files changed, 315 insertions(+), 319 deletions(-) diff --git a/event/listeners/message.js b/event/listeners/message.js index 3608a4b..37ff07c 100644 --- a/event/listeners/message.js +++ b/event/listeners/message.js @@ -31,263 +31,263 @@ class messageListener extends Listener { return console.error(err); }); } else { - return; - } + if (message.author.bot) return; - if (message.author.bot) return; + /* Banned words section + * + * This section contains code about the banned words features + * + */ - /* Banned words section - * - * This section contains code about the banned words features - * - */ + // Banned words + const bannedWords = await BannedWords.findAll({where: {word: Sequelize.where(Sequelize.fn('LOCATE', Sequelize.col('word'), message.content.replace(/\u200B/g, '').replace(/[\u0250-\ue007]/g, '')), Sequelize.Op.ne, 0), serverID: message.guild.id}}); + const whitelistWord = await WhitelistWord.findAll({where: {word: Sequelize.where(Sequelize.fn('LOCATE', Sequelize.col('word'), message.content.replace(/\u200B/g, '').replace(/[\u0250-\ue007]/g, '')), Sequelize.Op.ne, 0), serverID: message.guild.id}}); - // Banned words - const bannedWords = await BannedWords.findAll({where: {word: Sequelize.where(Sequelize.fn('LOCATE', Sequelize.col('word'), message.content.replace(/\u200B/g, '').replace(/[\u0250-\ue007]/g, '')), Sequelize.Op.ne, 0), serverID: message.guild.id}}); - const whitelistWord = await WhitelistWord.findAll({where: {word: Sequelize.where(Sequelize.fn('LOCATE', Sequelize.col('word'), message.content.replace(/\u200B/g, '').replace(/[\u0250-\ue007]/g, '')), Sequelize.Op.ne, 0), serverID: message.guild.id}}); - - if (whitelistWord[0]) { - return; // If word is whitelisted just return - } - - if (bannedWords[0]) { - // Remove accent - let censoredMessage = message.content.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, ''); - // Remove zero width space character - censoredMessage = censoredMessage.replace(/\u200B/g, ''); - // Remove non latin character - censoredMessage = censoredMessage.replace(/[\u0250-\ue007]/g, ''); - - for (let i = 0; i < bannedWords.length; i++) { - if (!safe(bannedWords[i].get('word'))) return; - let regex = new RegExp(bannedWords[i].get('word'), 'g'); - censoredMessage = censoredMessage.replace(regex, '█'.repeat(bannedWords[i].get('word').length)); + if (whitelistWord[0]) { + return; // If word is whitelisted just return } - let Embed = this.client.util.embed() - .setColor(message.member.displayHexColor) - .setAuthor(message.author.username, message.author.displayAvatarURL()) - .setDescription(censoredMessage); - message.channel.send(Embed); - return message.delete({reason: `Deleted message: ${message.content}`}); + if (bannedWords[0]) { + // Remove accent + let censoredMessage = message.content.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, ''); + // Remove zero width space character + censoredMessage = censoredMessage.replace(/\u200B/g, ''); + // Remove non latin character + censoredMessage = censoredMessage.replace(/[\u0250-\ue007]/g, ''); - } else { - /* Autoresponse feature & tag - * - * This section contains autoresponse and tag feature - * - */ - - // auto responses - const autoresponseStat = await autoResponseStat.findOne({where: {serverID: message.guild.id, stat: 'enable'}}); - if (autoresponseStat) { - // Infinit haha very yes - if (message.content.toLowerCase().startsWith('haha very') && message.content.toLowerCase().endsWith('yes')) { - let yes = message.content.toLowerCase().replace('haha', ''); - yes = yes.replace('yes', ''); - yes += 'very'; - return message.channel.send(`haha${yes} yes`); - } else if (message.content.toLowerCase() == 'haha yes') { - return message.channel.send('haha very yes'); + for (let i = 0; i < bannedWords.length; i++) { + if (!safe(bannedWords[i].get('word'))) return; + let regex = new RegExp(bannedWords[i].get('word'), 'g'); + censoredMessage = censoredMessage.replace(regex, '█'.repeat(bannedWords[i].get('word').length)); } + let Embed = this.client.util.embed() + .setColor(message.member.displayHexColor) + .setAuthor(message.author.username, message.author.displayAvatarURL()) + .setDescription(censoredMessage); - // Reply with images as attachement - const autoresponse = await autoResponse.findOne({where: {trigger: message.content.toLowerCase()}}); - - if (autoresponse) { - autoResponse.findOne({where: {trigger: message.content.toLowerCase()}}); - let trigger = autoresponse.get('trigger'); - let type = autoresponse.get('type'); - let content = autoresponse.get('response'); - - if (trigger == message.content.toLowerCase() && type == 'text') { - return message.channel.send(content); - } else if (trigger == message.content.toLowerCase() && type == 'react') { - return message.react(content); - } else if (trigger == message.content.toLowerCase() && type == 'image') { - return message.channel.send({files: [content]}); + message.channel.send(Embed); + return message.delete({reason: `Deleted message: ${message.content}`}); + + } else { + /* Autoresponse feature & tag + * + * This section contains autoresponse and tag feature + * + */ + + // auto responses + const autoresponseStat = await autoResponseStat.findOne({where: {serverID: message.guild.id, stat: 'enable'}}); + if (autoresponseStat) { + // Infinit haha very yes + if (message.content.toLowerCase().startsWith('haha very') && message.content.toLowerCase().endsWith('yes')) { + let yes = message.content.toLowerCase().replace('haha', ''); + yes = yes.replace('yes', ''); + yes += 'very'; + return message.channel.send(`haha${yes} yes`); + } else if (message.content.toLowerCase() == 'haha yes') { + return message.channel.send('haha very yes'); } - } - } - // User autoresponse - const tag = await Tag.findOne({where: {trigger: message.content.toLowerCase(), serverID: message.guild.id}}); - if (tag) { - Tag.findOne({where: {trigger: message.content.toLowerCase(), serverID: message.guild.id}}); - let text = tag.get('response'); - if (text.includes('[ban]')) { - message.member.ban('Tag ban :^)'); - } else if (text.includes('[kick]')) { - message.member.kick('Tag kick :^)'); - } else if (text.includes('[delete]')) { - message.delete(); - } - - text = rand.random(text, message); - - let attach = ''; - - if (text.includes('[attach:')) { - attach = text.split(/(\[attach:.*?])/); - for (let i = 0, l = attach.length; i < l; i++) { - if (attach[i].includes('[attach:')) { - attach = attach[i].replace('[attach:', '').slice(0, -1); - i = attach.length; + // Reply with images as attachement + const autoresponse = await autoResponse.findOne({where: {trigger: message.content.toLowerCase()}}); + + if (autoresponse) { + autoResponse.findOne({where: {trigger: message.content.toLowerCase()}}); + let trigger = autoresponse.get('trigger'); + let type = autoresponse.get('type'); + let content = autoresponse.get('response'); + + if (trigger == message.content.toLowerCase() && type == 'text') { + return message.channel.send(content); + } else if (trigger == message.content.toLowerCase() && type == 'react') { + return message.react(content); + } else if (trigger == message.content.toLowerCase() && type == 'image') { + return message.channel.send({files: [content]}); } } - text = text.replace(/(\[attach:.*?])/, ''); } - - // THIS SECTION IS VERY VERY BAD MUST CHANGE - if (text.includes('[embed]')) { - text = text.replace(/\[embed\]/, ' '); - - let title = ''; - let desc = ''; - let image; - let thumbnail; - let footer = ''; - let color; - - if (text.includes('[embedImage:')) { - image = text.split(/(\[embedImage:.*?])/); - - for (let i = 0, l = image.length; i < l; i++) { - if (image[i].includes('[embedImage:')) { - image = image[i].replace('[embedImage:', '').slice(0, -1); - text = text.replace(/(\[embedimage:.*?])/g, ''); - i = image.length; + + // User autoresponse + const tag = await Tag.findOne({where: {trigger: message.content.toLowerCase(), serverID: message.guild.id}}); + if (tag) { + Tag.findOne({where: {trigger: message.content.toLowerCase(), serverID: message.guild.id}}); + let text = tag.get('response'); + if (text.includes('[ban]')) { + message.member.ban('Tag ban :^)'); + } else if (text.includes('[kick]')) { + message.member.kick('Tag kick :^)'); + } else if (text.includes('[delete]')) { + message.delete(); + } + + text = rand.random(text, message); + + let attach = ''; + + if (text.includes('[attach:')) { + attach = text.split(/(\[attach:.*?])/); + for (let i = 0, l = attach.length; i < l; i++) { + if (attach[i].includes('[attach:')) { + attach = attach[i].replace('[attach:', '').slice(0, -1); + i = attach.length; } } + text = text.replace(/(\[attach:.*?])/, ''); } - - if (text.includes('[embedThumbnail:')) { - thumbnail = text.split(/(\[embedThumbnail:.*?])/); - - for (let i = 0, l = thumbnail.length; i < l; i++) { - if (thumbnail[i].includes('[embedThumbnail:')) { - thumbnail = thumbnail[i].replace('[embedThumbnail:', '').slice(0, -1); - text = text.replace(/(\[embedThumbnail:.*?])/g, ''); - i = thumbnail.length; + + // THIS SECTION IS VERY VERY BAD MUST CHANGE + if (text.includes('[embed]')) { + text = text.replace(/\[embed\]/, ' '); + + let title = ''; + let desc = ''; + let image; + let thumbnail; + let footer = ''; + let color; + + if (text.includes('[embedImage:')) { + image = text.split(/(\[embedImage:.*?])/); + + for (let i = 0, l = image.length; i < l; i++) { + if (image[i].includes('[embedImage:')) { + image = image[i].replace('[embedImage:', '').slice(0, -1); + text = text.replace(/(\[embedimage:.*?])/g, ''); + i = image.length; + } } } - } - - if (text.includes('[embedColor:')) { - color = text.split(/(\[embedColor:.*?])/); - for (let i = 0, l = color.length; i < l; i++) { - if (color[i].includes('[embedColor:')) { - color = color[i].replace('[embedColor:', '').slice(0, -1); - text = text.replace(/(\[embedColor:.*?])/g, ''); - i = color.length; + + if (text.includes('[embedThumbnail:')) { + thumbnail = text.split(/(\[embedThumbnail:.*?])/); + + for (let i = 0, l = thumbnail.length; i < l; i++) { + if (thumbnail[i].includes('[embedThumbnail:')) { + thumbnail = thumbnail[i].replace('[embedThumbnail:', '').slice(0, -1); + text = text.replace(/(\[embedThumbnail:.*?])/g, ''); + i = thumbnail.length; + } } } - } - - - if (text.includes('[embedTitle:')) { - title = text.split(/(\[embedTitle:.*?])/); - for (let i = 0, l = title.length; i < l; i++) { - if (title[i].includes('[embedTitle:')) { - title = title[i].replace('[embedTitle:', '').slice(0, -1); - text = text.replace(/(\[embedTitle:.*?])/g, ''); - i = title.length; + + if (text.includes('[embedColor:')) { + color = text.split(/(\[embedColor:.*?])/); + for (let i = 0, l = color.length; i < l; i++) { + if (color[i].includes('[embedColor:')) { + color = color[i].replace('[embedColor:', '').slice(0, -1); + text = text.replace(/(\[embedColor:.*?])/g, ''); + i = color.length; + } } } - } - - if (text.includes('[embedFooter:')) { - footer = text.split(/(\[embedFooter:.*?])/); - for (let i = 0, l = footer.length; i < l; i++) { - if (footer[i].includes('[embedFooter:')) { - footer = footer[i].replace('[embedFooter:', '').slice(0, -1); - text = text.replace(/(\[embedFooter:.*?])/g, ''); - i = footer.length; + + + if (text.includes('[embedTitle:')) { + title = text.split(/(\[embedTitle:.*?])/); + for (let i = 0, l = title.length; i < l; i++) { + if (title[i].includes('[embedTitle:')) { + title = title[i].replace('[embedTitle:', '').slice(0, -1); + text = text.replace(/(\[embedTitle:.*?])/g, ''); + i = title.length; + } } } - } - - if (text.includes('[embedDesc:')) { - desc = text.split(/(\[embedDesc:.*?])/); - for (let i = 0, l = desc.length; i < l; i++) { - if (desc[i].includes('[embedDesc:')) { - desc = desc[i].replace('[embedDesc:', '').slice(0, -1); - i = desc.length; + + if (text.includes('[embedFooter:')) { + footer = text.split(/(\[embedFooter:.*?])/); + for (let i = 0, l = footer.length; i < l; i++) { + if (footer[i].includes('[embedFooter:')) { + footer = footer[i].replace('[embedFooter:', '').slice(0, -1); + text = text.replace(/(\[embedFooter:.*?])/g, ''); + i = footer.length; + } + } + } + + if (text.includes('[embedDesc:')) { + desc = text.split(/(\[embedDesc:.*?])/); + for (let i = 0, l = desc.length; i < l; i++) { + if (desc[i].includes('[embedDesc:')) { + desc = desc[i].replace('[embedDesc:', '').slice(0, -1); + i = desc.length; + } } } + + const embed = this.client.util.embed() + .setColor(color) + .setTitle(title) + .setImage(image) + .setThumbnail(thumbnail) + .setDescription(desc) + .setFooter(footer) + .setTimestamp(); + + + if (attach) { + return message.channel.send(embed, {files: [attach]}); + } else { + return message.channel.send(embed); + + } + } - - const embed = this.client.util.embed() - .setColor(color) - .setTitle(title) - .setImage(image) - .setThumbnail(thumbnail) - .setDescription(desc) - .setFooter(footer) - .setTimestamp(); - - if (attach) { - return message.channel.send(embed, {files: [attach]}); + return message.channel.send(text, {files: [attach]}); } else { - return message.channel.send(embed); - + return message.channel.send(text); } } - if (attach) { - return message.channel.send(text, {files: [attach]}); - } else { - return message.channel.send(text); - } - } + /* Quotation feature + * + * This section will contain the code for the quotation feature, it will detect link for it and send it as embed + * + */ + const quotationstat = await quotationStat.findOne({where: {serverID: message.guild.id, stat: 'enable'}}); - /* Quotation feature - * - * This section will contain the code for the quotation feature, it will detect link for it and send it as embed - * - */ - const quotationstat = await quotationStat.findOne({where: {serverID: message.guild.id, stat: 'enable'}}); - - if (quotationstat && message.content.includes('discordapp.com/channels/')) { - let url = message.content.split('/'); - let guildID = url[4]; - let channelID = url[5]; - let messageID = url[6].split(' ')[0]; - - - // Verify if the guild, channel and message exist - let guild = this.client.guilds.resolve(guildID); - if (!guild) return; - let channel = this.client.channels.resolve(channelID); - if (!channel) return; - let quote = await channel.messages.fetch(messageID) - .catch(() => { - return; - }); - if (!quote) return; + if (quotationstat && message.content.includes('discordapp.com/channels/')) { + let url = message.content.split('/'); + let guildID = url[4]; + let channelID = url[5]; + let messageID = url[6].split(' ')[0]; - let Embed = this.client.util.embed() - .setAuthor(quote.author.username, quote.author.displayAvatarURL()) - .setColor(message.member ? message.member.displayHexColor : 'NAVY') - .addField('Jump to', `[message](https://discordapp.com/channels/${message.guild.id}/${channelID}/${messageID})`, true) - .addField('In channel', quote.channel.name, true) - .addField('Quoted by', message.author, true) - .setDescription(quote.content) - .setTimestamp(quote.createdTimestamp); - - if (quote.member) Embed.setAuthor(`${quote.author.username}#${quote.author.discriminator}`, quote.author.displayAvatarURL()); - - if (quote.author.bot) Embed.setAuthor(`${quote.author.username}#${quote.author.discriminator} (bot)`, quote.author.displayAvatarURL()); - - if (guild.id != message.guild.id) Embed.addField('In guild', guild.name, true); - let Attachment = (quote.attachments).array(); - if (Attachment[0]) Embed.setImage(Attachment[0].url); - - return message.channel.send(Embed); + + // Verify if the guild, channel and message exist + let guild = this.client.guilds.resolve(guildID); + if (!guild) return; + let channel = this.client.channels.resolve(channelID); + if (!channel) return; + let quote = await channel.messages.fetch(messageID) + .catch(() => { + return; + }); + if (!quote) return; + + let Embed = this.client.util.embed() + .setAuthor(quote.author.username, quote.author.displayAvatarURL()) + .setColor(message.member ? message.member.displayHexColor : 'NAVY') + .addField('Jump to', `[message](https://discordapp.com/channels/${message.guild.id}/${channelID}/${messageID})`, true) + .addField('In channel', quote.channel.name, true) + .addField('Quoted by', message.author, true) + .setDescription(quote.content) + .setTimestamp(quote.createdTimestamp); + + if (quote.member) Embed.setAuthor(`${quote.author.username}#${quote.author.discriminator}`, quote.author.displayAvatarURL()); + + if (quote.author.bot) Embed.setAuthor(`${quote.author.username}#${quote.author.discriminator} (bot)`, quote.author.displayAvatarURL()); + + if (guild.id != message.guild.id) Embed.addField('In guild', guild.name, true); + let Attachment = (quote.attachments).array(); + if (Attachment[0]) Embed.setImage(Attachment[0].url); + + return message.channel.send(Embed); + } } } + + } } diff --git a/event/listeners/messageReactionAdd.js b/event/listeners/messageReactionAdd.js index 6743668..2ee8ebd 100644 --- a/event/listeners/messageReactionAdd.js +++ b/event/listeners/messageReactionAdd.js @@ -12,61 +12,59 @@ class MessageReactionAddListener extends Listener { } async exec(reaction) { + let starboardChannel, shameboardChannel; + let reactionCount = reaction.count; + if (reaction.message.partial) { await reaction.message.fetch() .catch(err => { return console.error(err); }); } else { - return; - } - - let starboardChannel, shameboardChannel; - let reactionCount = reaction.count; - - // If one of the reaction is the author of the message remove 1 to the reaction count - reaction.users.cache.forEach(user => { - if (reaction.message.author == user) reactionCount--; - }); - - // Starboard - if (fs.existsSync(`./board/star${reaction.message.guild.id}.json`)) { - starboardChannel = require(`../../board/star${reaction.message.guild.id}.json`); - let staremote = starboardChannel.emote; - let starcount = starboardChannel.count; - delete require.cache[require.resolve(`../../board/star${reaction.message.guild.id}.json`)]; // Delete the boardChannel cache so it can reload it next time - - // Get name of the custom emoji - if (reaction.message.guild.emojis.resolve(staremote.replace(/\D/g,''))) { - staremote = reaction.message.guild.emojis.resolve(staremote.replace(/\D/g,'')); - } + // If one of the reaction is the author of the message remove 1 to the reaction count + reaction.users.cache.forEach(user => { + if (reaction.message.author == user) reactionCount--; + }); + + // Starboard + if (fs.existsSync(`./board/star${reaction.message.guild.id}.json`)) { + starboardChannel = require(`../../board/star${reaction.message.guild.id}.json`); + let staremote = starboardChannel.emote; + let starcount = starboardChannel.count; + delete require.cache[require.resolve(`../../board/star${reaction.message.guild.id}.json`)]; // Delete the boardChannel cache so it can reload it next time + + // Get name of the custom emoji + if (reaction.message.guild.emojis.resolve(staremote.replace(/\D/g,''))) { + staremote = reaction.message.guild.emojis.resolve(staremote.replace(/\D/g,'')); + } - if (reaction.emoji == staremote || reaction.emoji.name == staremote) { - if (messageID[reaction.message.id] && reactionCount > starcount) { - return editEmbed('starboard', staremote, messageID[reaction.message.id], this.client); - } else if (reactionCount == starcount) { - return sendEmbed('starboard', staremote, this.client); + if (reaction.emoji == staremote || reaction.emoji.name == staremote) { + if (messageID[reaction.message.id] && reactionCount > starcount) { + return editEmbed('starboard', staremote, messageID[reaction.message.id], this.client); + } else if (reactionCount == starcount) { + return sendEmbed('starboard', staremote, this.client); + } } } - } - //Shameboard - if (fs.existsSync(`./board/shame${reaction.message.guild.id}.json`)) { - shameboardChannel = require(`../../board/shame${reaction.message.guild.id}.json`); - let shameemote = shameboardChannel.emote; - let shamecount = shameboardChannel.count; - delete require.cache[require.resolve(`../../board/shame${reaction.message.guild.id}.json`)]; // Delete the boardChannel cache so it can reload it next time - - // Get name of the custom emoji - if (reaction.message.guild.emojis.resolve(shameemote.replace(/\D/g,''))) { - shameemote = reaction.message.guild.emojis.resolve(shameemote.replace(/\D/g,'')); - } + //Shameboard + if (fs.existsSync(`./board/shame${reaction.message.guild.id}.json`)) { + shameboardChannel = require(`../../board/shame${reaction.message.guild.id}.json`); + let shameemote = shameboardChannel.emote; + let shamecount = shameboardChannel.count; + delete require.cache[require.resolve(`../../board/shame${reaction.message.guild.id}.json`)]; // Delete the boardChannel cache so it can reload it next time + + // Get name of the custom emoji + if (reaction.message.guild.emojis.resolve(shameemote.replace(/\D/g,''))) { + shameemote = reaction.message.guild.emojis.resolve(shameemote.replace(/\D/g,'')); + } - if (reaction.emoji == shameemote || reaction.emoji.name == shameemote) { - if (messageID[reaction.message.id] && reactionCount > shamecount) { - return editEmbed('shameboard', shameemote, messageID[reaction.message.id], this.client); - } else if (reactionCount == shamecount) { - return sendEmbed('shameboard', shameemote, this.client); + if (reaction.emoji == shameemote || reaction.emoji.name == shameemote) { + if (messageID[reaction.message.id] && reactionCount > shamecount) { + return editEmbed('shameboard', shameemote, messageID[reaction.message.id], this.client); + } else if (reactionCount == shamecount) { + return sendEmbed('shameboard', shameemote, this.client); + } } } } @@ -86,7 +84,7 @@ class MessageReactionAddListener extends Listener { // If the original embed description is empty make this embed empty ( and not undefined ) let description = message.embeds[0].description; - if (!message.embeds[0].description || message.embeds[0].description == undefined) + if (!message.embeds[0].description || message.embeds[0].description == undefined) description = ''; let Embed = client.util.embed() diff --git a/event/listeners/messageReactionRemove.js b/event/listeners/messageReactionRemove.js index b2196cc..8350478 100644 --- a/event/listeners/messageReactionRemove.js +++ b/event/listeners/messageReactionRemove.js @@ -11,67 +11,65 @@ class messageReactionRemoveListener extends Listener { } async exec(reaction) { + let starboardChannel, shameboardChannel; + let reactionCount = reaction.count; + if (reaction.message.partial) { await reaction.message.fetch() .catch(err => { return console.error(err); }); } else { - return; - } - - let starboardChannel, shameboardChannel; - let reactionCount = reaction.count; - - // If one of the reaction removed is the author of the message add 1 to the reaction count - reaction.users.cache.forEach(user => { - if (reaction.message.author == user) reactionCount++; - }); - - // Starboard - if (fs.existsSync(`./board/star${reaction.message.guild.id}.json`)) { - starboardChannel = require(`../../board/star${reaction.message.guild.id}.json`); - let staremote = starboardChannel.emote; - let starcount = starboardChannel.count; - delete require.cache[require.resolve(`../../board/star${reaction.message.guild.id}.json`)]; // Delete the boardChannel cache so it can reload it next time - - // Get name of the custom emoji - if (reaction.message.guild.emojis.resolve(staremote.replace(/\D/g,''))) { - staremote = reaction.message.guild.emojis.resolve(staremote.replace(/\D/g,'')); - } - - if (messageID[reaction.message.id] && (reaction.emoji == staremote || reaction.emoji.name == staremote) && reactionCount < starcount) { - let channel = this.client.channels.resolve(starboardChannel.starboard); - let message = await channel.messages.resolve(messageID[reaction.message.id]); - delete messageID[reaction.message.id]; - // If it didn't find any message don't do anything - if (!message) return; - - message.delete(); - } else if ((reaction.emoji == staremote || reaction.emoji.name == staremote) && reactionCount >= starcount) { - return editEmbed('starboard', staremote, messageID[reaction.message.id], this.client); - } - } - - //Shameboard - if (fs.existsSync(`./board/shame${reaction.message.guild.id}.json`)) { - shameboardChannel = require(`../../board/shame${reaction.message.guild.id}.json`); - let shameemote = shameboardChannel.emote; - let shamecount = shameboardChannel.count; - delete require.cache[require.resolve(`../../board/shame${reaction.message.guild.id}.json`)]; // Delete the boardChannel cache so it can reload it next time - - // Get name of the custom emoji - if (reaction.message.guild.emojis.resolve(shameemote.replace(/\D/g,''))) { - shameemote = reaction.message.guild.emojis.resolve(shameemote.replace(/\D/g,'')); + // If one of the reaction removed is the author of the message add 1 to the reaction count + reaction.users.cache.forEach(user => { + if (reaction.message.author == user) reactionCount++; + }); + + // Starboard + if (fs.existsSync(`./board/star${reaction.message.guild.id}.json`)) { + starboardChannel = require(`../../board/star${reaction.message.guild.id}.json`); + let staremote = starboardChannel.emote; + let starcount = starboardChannel.count; + delete require.cache[require.resolve(`../../board/star${reaction.message.guild.id}.json`)]; // Delete the boardChannel cache so it can reload it next time + + // Get name of the custom emoji + if (reaction.message.guild.emojis.resolve(staremote.replace(/\D/g,''))) { + staremote = reaction.message.guild.emojis.resolve(staremote.replace(/\D/g,'')); + } + + if (messageID[reaction.message.id] && (reaction.emoji == staremote || reaction.emoji.name == staremote) && reactionCount < starcount) { + let channel = this.client.channels.resolve(starboardChannel.starboard); + let message = await channel.messages.resolve(messageID[reaction.message.id]); + delete messageID[reaction.message.id]; + // If it didn't find any message don't do anything + if (!message) return; + + message.delete(); + } else if ((reaction.emoji == staremote || reaction.emoji.name == staremote) && reactionCount >= starcount) { + return editEmbed('starboard', staremote, messageID[reaction.message.id], this.client); + } } - if (messageID[reaction.message.id] && (reaction.emoji == shameemote || reaction.emoji.name == shameemote) && reactionCount < shamecount) { - let channel = this.client.channels.resolve(shameboardChannel.shameboard); - let message = await channel.messages.resolve(messageID[reaction.message.id]); - delete messageID[reaction.message.id]; - message.delete(); - } else if ((reaction.emoji == shameemote || reaction.emoji.name == shameemote) && reactionCount >= shamecount) { - return editEmbed('shameboard', shameemote, messageID[reaction.message.id], this.client); + //Shameboard + if (fs.existsSync(`./board/shame${reaction.message.guild.id}.json`)) { + shameboardChannel = require(`../../board/shame${reaction.message.guild.id}.json`); + let shameemote = shameboardChannel.emote; + let shamecount = shameboardChannel.count; + delete require.cache[require.resolve(`../../board/shame${reaction.message.guild.id}.json`)]; // Delete the boardChannel cache so it can reload it next time + + // Get name of the custom emoji + if (reaction.message.guild.emojis.resolve(shameemote.replace(/\D/g,''))) { + shameemote = reaction.message.guild.emojis.resolve(shameemote.replace(/\D/g,'')); + } + + if (messageID[reaction.message.id] && (reaction.emoji == shameemote || reaction.emoji.name == shameemote) && reactionCount < shamecount) { + let channel = this.client.channels.resolve(shameboardChannel.shameboard); + let message = await channel.messages.resolve(messageID[reaction.message.id]); + delete messageID[reaction.message.id]; + message.delete(); + } else if ((reaction.emoji == shameemote || reaction.emoji.name == shameemote) && reactionCount >= shamecount) { + return editEmbed('shameboard', shameemote, messageID[reaction.message.id], this.client); + } } } @@ -90,7 +88,7 @@ class messageReactionRemoveListener extends Listener { // If the original embed description is empty make this embed empty ( and not undefined ) let description = message.embeds[0].description; - if (!message.embeds[0].description || message.embeds[0].description == undefined) + if (!message.embeds[0].description || message.embeds[0].description == undefined) description = ''; let Embed = client.util.embed()