Advertisement
Guest User

NODEJS reaction role

a guest
Sep 16th, 2019
744
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const {bot} = require(`../index`)
  2. const discord = require("discord.js");
  3. const botconfig = require("../botconfig.json");
  4. const fs = require("fs");
  5. const active = new Map();
  6. const giveaways = require("discord-giveaways");
  7.  
  8.  
  9.  
  10.     var botEmbed2 = new discord.RichEmbed()
  11.  
  12.  
  13.         .setDescription("Welkom in onze discord server! Speel jij Minetopia? Ga dan naar beneden in dit bericht. Dan krijg je nog veel meer channels te zien! ")
  14.         .addBlankField()
  15.         .addField("Wilt u het help menu over de status van de winkels bekijken?", "Doe dan `?help winkels`")
  16.         .addField("Wilt u alle fun commands bekijken?", " Doe dan `?help fun`")
  17.         .addField("Wilt u alle informatie over DahRealBot weten?", "Doe dan `?help bot`")
  18.         .addField("Wilt u de overige help pagina bekijken?", " Doe dan `?help overig`")
  19.         .addField("Wilt u de regels bekijken?", " Doe dan `?help regels`")
  20.         .addBlankField()
  21.         .addField("De regels van de DahRealCompany discord kunt u hieronder lezen:", "**Regel 1**\nHeb respect voor elkaar\n**Regel 2**\nGeen 18+ content\n**Regel 3**\nHoud het taalgebruik een beetje normaal\n**Regel 4**\nMaak gebruik van de channels waarvoor ze zijn\n**Regel 5**\nGeen reclame maken. Dit geldt ook voor pm reclame\n**Regel 6**\nGeen onnodige tags")
  22.         .addBlankField()
  23.         .addField("Ik heb een vraag?", "Vraag gerust een medewerker of iemand anders om hulp!")
  24.         .addField("Rankjes", ":house: - Minetopia speler\n            \n :video_game: - Extra channels zoals akinator en coinmaster.\n            \n:loudspeaker: - Tags krijgen bij Discord meldingen.\n            \n:exclamation: - Tags krijgen bij Minetopia meldingen.")
  25.         .setColor("#56f442")
  26.         .setImage("https://i.imgur.com/Uhq5ysn.png")
  27.         .setTimestamp()
  28.         .setFooter(`DahRealCompany`, "https://i.imgur.com/yxwWfOv.png");
  29.     const yourID = "440521349278990336"; //Instructions on how to get this: https://redd.it/40zgse
  30.     const setupCMD = "!createrolemessage";
  31.     const initialMessage = `**React to the messages below to receive the associated role. If you would like to remove the role, simply remove your reaction!**`;
  32.     const embedMessage = `
  33.         Welkom in onze discord server! Speel jij Minetopia? Ga dan naar beneden in dit bericht. Dan krijg je nog veel meer channels te zien!
  34.         `;
  35.     const embedFooter = (`DahRealCompany`, "https://i.imgur.com/yxwWfOv.png"); // Must set this if "embed" is set to true
  36. const roles = ["🏠 Minetopia", "☺ Fun Bots", "📣Discord Notification", "📣Minetopia Notification", "☺ Fun Chats", "🗯Extra Chats"];
  37. const rolesn = ["Druk om het 🏠 als jij minetopia speelt", "Druk op het 🎮 als jij toegang wil tot de fun channels!", "Druk op de 📣 als jij tags wil ontvangen bij medelingen over de discord!", "Druk op de ❗ als jij tags wil ontvangen bij medelingen over minetopia!"];
  38. const reactions = ["🏠", "🤖", "📣", "❗", "☺", "🗯"]; // For custom emojis, provide the name of the emoji
  39. const embed = true; // Set to "true" if you want all roles to be in a single embed
  40. const embedColor = "#56f442"; // Set the embed color if the "embed" variable is set to true
  41. const embedThumbnail = false; // Set to "true" if you want to set a thumbnail in the embed
  42. const embedThumbnailLink = "https://i.imgur.com/P8PD7DD.png"; // The link for the embed thumbnail
  43.     /**
  44.  * You'll have to set this up yourself! Read more below:
  45.  *
  46.  * https://github.com/reactiflux/discord-irc/wiki/Creating-a-discord-bot-&-getting-a-token
  47.  */
  48.  
  49. // Import constructords and login the client
  50.  
  51. // If there isn't a reaction for every role, scold the user!
  52. if (roles.length !== reactions.length) throw "Roles list and reactions list are not the same length!";
  53.  
  54. // Function to generate the role messages, based on your settings
  55. function generateMessages() {
  56.     let messages = [];
  57.     for (const role of roles) messages.push({ role, message: `React below to get the **"${f.role}"** role!` }); //DONT CHANGE THIS
  58.     return messages;
  59. }
  60.  
  61. // Function to generate the embed fields, based on your settings and if you set "const embed = true;"
  62. function generateEmbedFields() {
  63.     return roles.map((r, e) => {
  64.         return {
  65.             emoji: reactions[e],
  66.             role: r,
  67.             hoi: rolesn[e]
  68.         };
  69.     });
  70. }
  71.  
  72. function checkRole(guild, role) {
  73.     const checkRole = guild.roles.find(r => r.name === role);
  74.     if (checkRole) return true;
  75.     else return false;
  76. }
  77.  
  78. // bot events to let you know if the bot is online and to handle any Discord.js errors
  79. bot.on("ready", () => console.log("Bot is online!"));
  80. bot.on('error', console.error);
  81.  
  82. // Handles the creation of the role reactions. Will either send the role messages separately or in an embed
  83. bot.on("message", message => {
  84.     if (message.author.id == yourID && message.content.toLowerCase() == setupCMD) {
  85.  
  86.         if (!embed) {
  87.             if (!initialMessage) throw "The 'initialMessage' property is not set. Please do this!";
  88.  
  89.             message.channel.send(initialMessage);
  90.  
  91.             const messages = generateMessages();
  92.             messages.forEach((obj, react) => {
  93.                 if (!checkRole(message.guild, obj.role)) throw `The role '${obj.role}' does not exist!`;
  94.  
  95.                 message.channel.send(obj.message).then(async m => {
  96.                     const emoji = reactions[react];
  97.                     const customEmote = bot.emojis.find(e => e.name === emoji);
  98.                    
  99.                     if (!customEmote) await m.react(emoji);
  100.                     else await m.react(customEmote.id);
  101.                 });
  102.             });
  103.         } else {
  104.             if (!embedMessage) throw "The 'embedMessage' property is not set. Please do this!";
  105.             if (!embedFooter) throw "The 'embedFooter' property is not set. Please do this!";
  106.  
  107.             const roleEmbed = new discord.RichEmbed()
  108.             .setTitle("Welkom in de discord server van DahRealCompany & More")
  109.             .setDescription("Welkom in onze discord server! Speel jij Minetopia? Ga dan naar beneden in dit bericht. Dan krijg je nog veel meer channels te zien! ")
  110.             .addBlankField()
  111.             .addField("Wilt u het help menu over de status van de winkels bekijken?", "Doe dan `?help winkels`")
  112.             .addField("Wilt u alle fun commands bekijken?", " Doe dan `?help fun`")
  113.             .addField("Wilt u alle informatie over DahRealBot weten?", "Doe dan `?help bot`")
  114.             .addField("Wilt u de overige help pagina bekijken?", " Doe dan `?help overig`")
  115.             .addField("Wilt u de regels bekijken?", " Doe dan `?help regels`")
  116.             .addBlankField()
  117.             .addField("De regels van de DahRealCompany discord kunt u hieronder lezen:", "**Regel 1**\nHeb respect voor elkaar\n**Regel 2**\nGeen 18+ content\n**Regel 3**\nHoud het taalgebruik een beetje normaal\n**Regel 4**\nMaak gebruik van de channels waarvoor ze zijn\n**Regel 5**\nGeen reclame maken. Dit geldt ook voor pm reclame\n**Regel 6**\nGeen onnodige tags")
  118.             .addBlankField()
  119.             .addField("Ik heb een vraag?", "Vraag gerust een medewerker of iemand anders om hulp!")
  120.             .addBlankField()
  121.             .setColor("#56f442")
  122.             .setImage("https://i.imgur.com/Uhq5ysn.png")
  123.             .setTimestamp()
  124.             .setFooter(`DahRealCompany`, "https://i.imgur.com/yxwWfOv.png");
  125.  
  126.             if (embedColor) roleEmbed.setColor(embedColor);
  127.             if (embedThumbnail) roleEmbed.setThumbnail(embedThumbnailLink);
  128.  
  129.             const fields = generateEmbedFields();
  130.             if (fields.length >= 25) throw "That maximum roles that can be set for an embed is 25!";
  131.  
  132.             for (const f of fields) {
  133.                 if (!checkRole(message.guild, f.role)) throw `The role '${f.role}' does not exist!`;
  134.  
  135.                 const emoji = f.emoji;
  136.                 const customEmote = bot.emojis.find(e => e.name === emoji);
  137.                
  138.                 if (!customEmote) roleEmbed.addField("Druk op " + emoji + " om de volgende rank te ontvangen:", f.role, true);
  139.                 else roleEmbed.addField(customEmote, f.role, true);
  140.             }
  141.  
  142.             message.channel.send(roleEmbed).then(async m => {
  143.                 for (const r of reactions) {
  144.                     const emoji = r;
  145.                     const customEmote = bot.emojis.find(e => e.name === emoji);
  146.                    
  147.                     if (!customEmote) await m.react(emoji);
  148.                     else await m.react(customEmote.id);
  149.                 }
  150.             });
  151.         }
  152.     }
  153. });
  154.  
  155. // This makes the events used a bit more readable
  156. const events = {
  157.     MESSAGE_REACTION_ADD: 'messageReactionAdd',
  158.     MESSAGE_REACTION_REMOVE: 'messageReactionRemove',
  159. };
  160.  
  161. // This event handles adding/removing users from the role(s) they chose
  162. bot.on('raw', async event => {
  163.  
  164.     if (!events.hasOwnProperty(event.t)) return;
  165.  
  166.     const { d: data } = event;
  167.     const user = bot.users.get(data.user_id);
  168.     const channel = bot.channels.get(data.channel_id);
  169.  
  170.     const message = await channel.fetchMessage(data.message_id);
  171.     const member = message.guild.members.get(user.id);
  172.  
  173.     const emojiKey = (data.emoji.id) ? `${data.emoji.name}:${data.emoji.id}` : data.emoji.name;
  174.     let reaction = message.reactions.get(emojiKey);
  175.  
  176.     if (!reaction) {
  177.         // Create an object that can be passed through the event like normal
  178.         const emoji = new Emoji(bot.guilds.get(data.guild_id), data.emoji);
  179.         reaction = new MessageReaction(message, emoji, 1, data.user_id === bot.user.id);
  180.     }
  181.  
  182.     let embedFooterText;
  183.     if (message.embeds[0]) embedFooterText = message.embeds[0].footer.text;
  184.  
  185.     if (message.author.id === bot.user.id && (message.content !== initialMessage || (message.embeds[0] && (embedFooterText !== embedFooter)))) {
  186.  
  187.         if (!embed) {
  188.             const re = `\\*\\*"(.+)?(?="\\*\\*)`;
  189.             const role = message.content.match(re)[1];
  190.  
  191.             if (member.id !== bot.user.id) {
  192.                 const roleObj = message.guild.roles.find(r => r.name === role);
  193.  
  194.                 if (event.t === "MESSAGE_REACTION_ADD") {
  195.                     member.addRole(roleObj.id);
  196.                 } else {
  197.                     member.removeRole(roleObj.id);
  198.                 }
  199.             }
  200.         } else {
  201.             const fields = message.embeds[0].fields;
  202.  
  203.             for (let i = 0; i < fields.length; i++) {
  204.                 if (member.id !== bot.user.id) {
  205.                     const role = message.guild.roles.find(r => r.name === fields[i].value);
  206.  
  207.                     if ((fields[i].name === "Druk op " + reaction.emoji.name + " om de volgende rank te ontvangen:") || (fields[i].name === reaction.emoji.toString())) {
  208.                         if (event.t === "MESSAGE_REACTION_ADD") {
  209.                             member.addRole(role.id);
  210.                             break;
  211.                         } else {
  212.                             member.removeRole(role.id);
  213.                             break;
  214.                         }
  215.                     }
  216.                 }
  217.             }
  218.         }
  219.     }
  220. });
  221.  
  222. process.on('unhandledRejection', err => {
  223.     let msg = err.stack.replace(new RegExp(`${__dirname}/`, 'g'), './');
  224.     console.error(`Unhandled Rejection: \n ${msg}`);
  225. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement