Discord server

# Discord Mongodb-reaction-role A lightweight managing package to save/add/remove reaction roles and save them in a db. Intelligent saving ways to lower traffic up to 90% and prevent multipy fetches. This Package can be used for large bots too! **If you need help feel free to join our discord server. We will provied you all help ☺** # Download You can download it from npm: ```cli npm i mongodb-reaction-role npm i mongoose // when u did not installed it ``` # Setting Up First we include the module into the project (into your main bot file). **Intent must me enabled. See more [here](https://cdn.discordapp.com/attachments/736254990619770981/797536603798634556/unknown.png)** ```js const react = require("mongodb-reaction-role"); const client = new Discord.Client({ autoReconnect: true, partials: ["MESSAGE", "CHANNEL", "GUILD_MEMBER", "REACTION", "MESSAGE", "USER"] }); // this is required to get the messages of the reaction roles client.react = new Map(); // do not rename here something, or else Dx // save all msg id, role id client.fetchforguild = new Map() //it will be saved, if the reaction roles were fetched from db ``` After that, you have to provide a valid mongodb url and set the default prefix. ```js react.setURL("mongodb://..."); //builts a connection with the db ``` # Fetching Reaction Roles/ Add Role *Following examples assume that your `Discord.Client` is called `client`.* ```js client.on('messageReactionAdd',async (reaction , user ) => { if (user.partial) await user.fetch(); if (reaction.partial) await reaction.fetch(); if (reaction.message.partial) await reaction.message.fetch(); let rolefetch = await react.fetchrr(client, reaction.message.guild.id ,reaction.message.id , reaction.emoji.name); if(!rolefetch) return; let member = await reaction.message.guild.members.cache.get(user.id) if(!member.roles.cache.has(rolefetch.roleid)){ await member.roles.add(rolefetch.roleid) console.log(`Role on ${reaction.emoji.name} has been given`) } }); ``` # Remove Role ```js client.on('messageReactionRemove',async (reaction, user) => { if (user.partial) await user.fetch(); if (reaction.partial) await reaction.fetch(); if (reaction.message.partial) await reaction.message.fetch(); let rolefetch = await react.fetchrr(client, reaction.message.guild.id ,reaction.message.id , reaction.emoji.name); if(!rolefetch) return; let member = await reaction.message.guild.members.cache.get(user.id) if(member.roles.cache.has(rolefetch.roleid)){ await member.roles.remove(rolefetch.roleid) console.log(`Role on ${reaction.emoji.name} has been given`) } }); ``` # Create/Delete a Reaction Role ```js if(command === "createrr"){ /// you can use your command handler to, but look that you overgive the parameters client, message ///await react.createrr(client, message.guild.id ,"message.id" , "roleid" , "emoji"); /// !createrr if(!args[0] || !args[1] || !args[2]) return message.channel.send("Pls provide the arguments. ex: `!createrr `") await react.createrr(client, message.guild.id ,args[0] , args[1] , args[2], "false"); //the last field is : if the person should be dm message.channel.send("Successfully created the reaction role!") } ``` ```js if(command === "deleterr"){ /// await react.deleterr(client, message.guild.id ,"message.id" , "emoji"); /// !deleterr if(!args[0] || !args[1]) return message.channel.send("Pls provide the arguments. ex: `!deleterr `") await react.deleterr(client, message.guild.id ,args[0] , args[1]); message.channel.send("Successfully deleted the reaction role!") } ``` ```js if(command === "editrr"){ ///await react.createrr(client, message.guild.id ,"message.id" , "roleid" , "emoji"); /// !editrr if(!args[0] || !args[1] || !args[2]) return message.channel.send("Pls provide the arguments. ex: `!editrr `") await react.editrr(client, message.guild.id ,args[0] , args[1] , args[2]); message.channel.send("Successfully edited the reaction role!") } ``` # Whole Code ```js const Discord = require('discord.js'); const { prefix, token , url } = require('./config.json'); const react = require("mongodb-reaction-role"); const client = new Discord.Client({ autoReconnect: true, partials: ["MESSAGE", "CHANNEL", "GUILD_MEMBER", "REACTION", "MESSAGE", "USER"] }); // this is required to get the messages of the reaction roles client.react = new Map(); // do not rename here something, or else Dx // save all msg id, role id client.fetchforguild = new Map() // it will be saved, if the reaction roles were fetched from db //// Add this react.setURL(url); client.once('ready', () => { console.log('Ready!'); }); client.on('messageReactionAdd',async (reaction , user ) => { if (user.partial) await user.fetch(); if (reaction.partial) await reaction.fetch(); if (reaction.message.partial) await reaction.message.fetch(); let rolefetch = await react.fetchrr(client, reaction.message.guild.id ,reaction.message.id , reaction.emoji.name); if(!rolefetch) return; let member = await reaction.message.guild.members.cache.get(user.id) if(!member.roles.cache.has(rolefetch.roleid)){ await member.roles.add(rolefetch.roleid) console.log(`Role on ${reaction.emoji.name} has been given`) } }); client.on('messageReactionRemove',async (reaction, user) => { if (user.partial) await user.fetch(); if (reaction.partial) await reaction.fetch(); if (reaction.message.partial) await reaction.message.fetch(); let rolefetch = await react.fetchrr(client, reaction.message.guild.id ,reaction.message.id , reaction.emoji.name); if(!rolefetch) return; let member = await reaction.message.guild.members.cache.get(user.id) if(member.roles.cache.has(rolefetch.roleid)){ await member.roles.remove(rolefetch.roleid) console.log(`Role on ${reaction.emoji.name} has been given`) } }); client.on('message', async message => { if (message.author.bot) return; //add this /// add this if (!message.content.startsWith(prefix)) return; const args = message.content.slice(prefix.length).trim().split(/ +/); const command = args.shift().toLowerCase(); if(command === "createrr"){ /// you can use your command handler to, but look that you overgive the parameters client, message ///await react.createrr(client, message.guild.id ,"message.id" , "roleid" , "emoji"); /// !createrr if(!args[0] || !args[1] || !args[2]) return message.channel.send("Pls provide the arguments. ex: `!createrr `") await react.createrr(client, message.guild.id ,args[0] , args[1] , args[2], "false"); /// the last field is : if the person should be dm message.channel.send("Successfully created the reaction role!") } if(command === "deleterr"){ /// await react.deleterr(client, message.guild.id ,"message.id" , "emoji"); /// !deleterr if(!args[0] || !args[1]) return message.channel.send("Pls provide the arguments. ex: `!deleterr `") await react.deleterr(client, message.guild.id ,args[0] , args[1]); message.channel.send("Successfully deleted the reaction role!") } if(command === "editrr"){ ///await react.createrr(client, message.guild.id ,"message.id" , "roleid" , "emoji"); /// !editrr if(!args[0] || !args[1] || !args[2]) return message.channel.send("Pls provide the arguments. ex: `!editrr `") await react.editrr(client, message.guild.id ,args[0] , args[1] , args[2]); message.channel.send("Successfully edited the reaction role!") } if(command === "rrstats"){ const stats = new Discord.MessageEmbed() .setTitle("Reaction roles stats") .addField("Reaction roles found:" , "```" + client.react.size + " reaction roles" + "```") .addField("Fetched Server:" , "```" + client.fetchforguild.size + "```") .setColor("YELLOW") return message.channel.send(stats) } }); client.login(token); ``` *Is time for you to use the code creative..* # Methods **See if the reaction on the message id exist as reaction role or when not fetched in the db** ```js let fetch = await react.fetchrr(client, reaction.message.guild.id ,reaction.message.id , reaction.emoji.name); //undefined || or gives a map entry ==> fetch.roleid, fetch.messageid , fetch.reaction, fetch.guildid , fetch.dm ``` **Fetch all reaction roles and save them in a map (just use this for stats not for the reaction event)** ```js await react.fetchallrr(client); ``` **Have fun and feel free to contribute/suggest or contact me on my discord server or per dm on Meister#9667** # Bugs, Glitches and Issues If you encounter any problems fell free to open an issue in our github repository or join the discord server..