Advertisement
MREgypt

Untitled

Nov 20th, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.50 KB | None | 0 0
  1. function getEmojiDiscriminator(emoji) {
  2. if (emoji.id) {
  3. return `${emoji.name}:${emoji.id}`;
  4. } else {
  5. return emoji.name;
  6. }
  7. }
  8. module.exports = function(client, config) {
  9.  
  10. client
  11.  
  12. .on("messageReactionAdd", (messageReaction, user) => {
  13. if (user == client.user) return;
  14. var member = messageReaction.message.guild.members.get(user.id);
  15. var emojiDiscriminator = getEmojiDiscriminator(messageReaction.emoji);
  16. (async () => {
  17. for (var { channel, reactions, disjoint } of config) {
  18. if (channel != messageReaction.message.channel.id) continue;
  19. var rolesNew = [];
  20. for(var role of member.roles.keys()){
  21. rolesNew.push(role);
  22. }
  23. var rolesWhitelist = [];
  24. var rolesBlacklist = [];
  25. for (var { emoji, roles } of reactions) {
  26. if (emojiDiscriminator == emoji) {
  27. rolesWhitelist.push.apply(rolesWhitelist, roles); //Prototyping the push function, might be buggy
  28. }
  29. rolesBlacklist.push.apply(rolesBlacklist, roles);
  30. }
  31. if (disjoint) {
  32. rolesNew = rolesNew.filter((role) =>
  33. (!rolesBlacklist.includes(role))
  34. );
  35. }
  36. rolesNew.push.apply(rolesNew, rolesWhitelist);
  37. //Make sure none of the roles on the "add" list get removed again
  38. await member.setRoles(rolesNew)
  39. .catch(error => console.error(error));
  40. if (disjoint) await messageReaction.remove(user)
  41. .catch(error => console.error(error));
  42. }
  43. })();
  44. })
  45.  
  46. .on("messageReactionRemove", (messageReaction, user) => {
  47. //Bot should not react to its own reactions.
  48. if (user == client.user) return;
  49. var member = messageReaction.message.guild.members.get(user.id);
  50. var emojiDiscriminator = getEmojiDiscriminator(messageReaction.emoji);
  51. (async () => {
  52. for (var { disjoint, channel, reactions } of config) {
  53. //Make sure we're not in "disjoint" mode
  54. if (disjoint) continue;
  55. if (channel != messageReaction.message.channel.id) continue;
  56. var rolesToKeep = [];
  57. var rolesToRemove = [];
  58. for (var { emoji, roles } of reactions) {
  59. if (emojiDiscriminator == emoji) {
  60. //Add to removal list
  61. rolesToRemove.push.apply(rolesToRemove, roles);
  62. } else {
  63. //List of all other roles that should be kept
  64. rolesToKeep.push.apply(rolesToKeep, roles);
  65. }
  66.  
  67. (!rolesToKeep.includes(role)) &&
  68. (member.roles.get(role))
  69. );
  70. await member.removeRoles(rolesToRemove)
  71. .catch(error => console.error(error));
  72. }
  73. })();
  74. });
  75.  
  76. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement