Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function getEmojiDiscriminator(emoji) {
- if (emoji.id) {
- return `${emoji.name}:${emoji.id}`;
- } else {
- return emoji.name;
- }
- }
- module.exports = function(client, config) {
- client
- .on("messageReactionAdd", (messageReaction, user) => {
- if (user == client.user) return;
- var member = messageReaction.message.guild.members.get(user.id);
- var emojiDiscriminator = getEmojiDiscriminator(messageReaction.emoji);
- (async () => {
- for (var { channel, reactions, disjoint } of config) {
- if (channel != messageReaction.message.channel.id) continue;
- var rolesNew = [];
- for(var role of member.roles.keys()){
- rolesNew.push(role);
- }
- var rolesWhitelist = [];
- var rolesBlacklist = [];
- for (var { emoji, roles } of reactions) {
- if (emojiDiscriminator == emoji) {
- rolesWhitelist.push.apply(rolesWhitelist, roles); //Prototyping the push function, might be buggy
- }
- rolesBlacklist.push.apply(rolesBlacklist, roles);
- }
- if (disjoint) {
- rolesNew = rolesNew.filter((role) =>
- (!rolesBlacklist.includes(role))
- );
- }
- rolesNew.push.apply(rolesNew, rolesWhitelist);
- //Make sure none of the roles on the "add" list get removed again
- await member.setRoles(rolesNew)
- .catch(error => console.error(error));
- if (disjoint) await messageReaction.remove(user)
- .catch(error => console.error(error));
- }
- })();
- })
- .on("messageReactionRemove", (messageReaction, user) => {
- //Bot should not react to its own reactions.
- if (user == client.user) return;
- var member = messageReaction.message.guild.members.get(user.id);
- var emojiDiscriminator = getEmojiDiscriminator(messageReaction.emoji);
- (async () => {
- for (var { disjoint, channel, reactions } of config) {
- //Make sure we're not in "disjoint" mode
- if (disjoint) continue;
- if (channel != messageReaction.message.channel.id) continue;
- var rolesToKeep = [];
- var rolesToRemove = [];
- for (var { emoji, roles } of reactions) {
- if (emojiDiscriminator == emoji) {
- //Add to removal list
- rolesToRemove.push.apply(rolesToRemove, roles);
- } else {
- //List of all other roles that should be kept
- rolesToKeep.push.apply(rolesToKeep, roles);
- }
- (!rolesToKeep.includes(role)) &&
- (member.roles.get(role))
- );
- await member.removeRoles(rolesToRemove)
- .catch(error => console.error(error));
- }
- })();
- });
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement