2019-12-27 20:27:15 +01:00
const { Listener } = require ( 'discord-akairo' ) ;
const fs = require ( 'fs' ) ;
let messageID = require ( '../../json/messageID.json' ) ; // Where reaction.message.id that entered a board will be stocked so it doesn't enter again
class messageReactionRemoveListener extends Listener {
constructor ( ) {
super ( 'messagereactionremove' , {
emitter : 'client' ,
event : 'messageReactionRemove'
} ) ;
}
2019-12-27 22:28:52 +01:00
async exec ( reaction ) {
if ( reaction . message . partial ) {
await reaction . message . fetch ( )
. catch ( ( ) => {
return ;
} ) ;
}
2019-12-27 20:27:15 +01:00
let starboardChannel , shameboardChannel ;
2019-12-27 22:29:48 +01:00
let reactionCount = reaction . count ;
// If one of the reaction removed is the author of the message add 1 to the reaction count
reaction . users . forEach ( user => {
if ( reaction . message . author == user ) reactionCount ++ ;
} ) ;
2019-12-27 20:27:15 +01:00
// 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
if ( this . client . util . resolveEmoji ( staremote , reaction . message . guild . emojis ) ) {
staremote = this . client . util . resolveEmoji ( staremote , reaction . message . guild . emojis ) . name ;
}
2019-12-27 22:29:48 +01:00
if ( messageID [ reaction . message . id ] && reaction . emoji . name == staremote && reactionCount < starcount ) {
2019-12-27 20:27:15 +01:00
let channel = this . client . channels . get ( starboardChannel . starboard ) ;
let message = await channel . messages . get ( messageID [ reaction . message . id ] ) ;
2019-12-27 22:04:37 +01:00
delete messageID [ reaction . message . id ] ;
2019-12-27 20:27:15 +01:00
message . delete ( ) ;
2019-12-27 22:29:48 +01:00
} else if ( reaction . emoji . name == staremote && reactionCount >= starcount ) {
2019-12-27 20:27:15 +01:00
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
if ( this . client . util . resolveEmoji ( shameemote , reaction . message . guild . emojis ) ) {
shameemote = this . client . util . resolveEmoji ( shameemote , reaction . message . guild . emojis ) . name ;
}
2019-12-27 22:29:48 +01:00
if ( messageID [ reaction . message . id ] && reaction . emoji . name == shameemote && reactionCount < shamecount ) {
2019-12-27 20:27:15 +01:00
let channel = this . client . channels . get ( shameboardChannel . shameboard ) ;
let message = await channel . messages . get ( messageID [ reaction . message . id ] ) ;
2019-12-27 22:04:37 +01:00
delete messageID [ reaction . message . id ] ;
2019-12-27 20:27:15 +01:00
message . delete ( ) ;
2019-12-27 22:29:48 +01:00
} else if ( reaction . emoji . name == shameemote && reactionCount >= shamecount ) {
2019-12-27 20:27:15 +01:00
return editEmbed ( 'shameboard' , shameemote , messageID [ reaction . message . id ] , this . client ) ;
}
}
async function editEmbed ( name , emote , boardID , client ) {
let channel ;
if ( name == 'starboard' ) {
channel = client . channels . get ( starboardChannel . starboard ) ;
} else {
channel = client . channels . get ( shameboardChannel . shameboard ) ;
}
let message = await channel . messages . get ( boardID ) ;
2019-12-31 12:12:35 +01:00
// If the original embed description is empty make this embed empty ( and not undefined )
2020-01-06 22:54:14 +01:00
let description = message . embeds [ 0 ] . description ;
if ( ! message . embeds [ 0 ] . description )
2019-12-31 12:12:35 +01:00
description = '' ;
2019-12-27 20:27:15 +01:00
let Embed = client . util . embed ( )
. setColor ( reaction . message . member . displayHexColor )
. setAuthor ( reaction . message . author . username , reaction . message . author . displayAvatarURL ( ) )
. addField ( 'Jump to' , ` [message](https://discordapp.com/channels/ ${ reaction . message . guild . id } / ${ reaction . message . channel . id } / ${ reaction . message . id } ) ` , true )
. addField ( 'Channel' , reaction . message . channel , true )
2019-12-31 12:12:35 +01:00
. setDescription ( description )
2019-12-27 22:29:48 +01:00
. setFooter ( reactionCount + ' ' + emote )
2019-12-27 20:27:15 +01:00
. setTimestamp ( ) ;
if ( reaction . message . guild . emojis . find ( emoji => emoji . name === emote ) ) {
2019-12-27 22:29:48 +01:00
Embed . setFooter ( reactionCount , reaction . message . guild . emojis . find ( emoji => emoji . name === emote ) . url ) ;
2019-12-27 20:27:15 +01:00
}
message . edit ( { embed : Embed } ) ;
}
}
}
module . exports = messageReactionRemoveListener ;