├── README.md ├── bot.js ├── config.json ├── package-lock.json └── package.json /README.md: -------------------------------------------------------------------------------- 1 |

2 | 👮Mod Bot⚙ 3 |

4 | 5 | --- 6 | ## 🔱 » Menu 7 | 8 | - [☄・Deploys](#deploys) 9 | - [🔰・Features](#features) 10 | - [🌌・Discord](https://discord.gg/zM6ZN9UfRs) 11 | - [🎉・Setting up](#setup) 12 | - [⚙・Config](#config) 13 | ## ☄ » Deploys 14 | > [Deploy with REPLIT](https://replit.com/github/Nekros-dsc/Mod-Bot) 15 | 16 | ## 🛠 » Features 17 | 18 | 19 | ## 📁 » Setting up 20 | 21 | 1. Install [Nodejs](https://nodejs.org/) 22 | 2. Open up [config.json](https://discord.gg/zM6ZN9UfRs) with notepad or some other editor 23 | 24 | # ⚙ » Config 25 | 26 | If you want to change the config, open up [config.json](https://discord.gg/zM6ZN9UfRs) and locate it at the top. There you can configure the following: 27 | 28 | ```js 29 | { 30 | "token": "Put-Token-Here", 31 | "prefix": "Prefix" 32 | } 33 | ``` 34 | 35 | --- -------------------------------------------------------------------------------- /bot.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js") 2 | const bot = new Discord.Client({disableMentions: 'everyone'}) 3 | const config = require("./config.json") 4 | 5 | 6 | bot.on("ready", () => { 7 | console.log("Bot !") 8 | }); 9 | 10 | bot.on("message", message => { 11 | if (message.author.bot) return; 12 | if (message.content.indexOf(config.prefix) !== 0) return; 13 | 14 | const args = message.content.slice(config.prefix.length).trim().split(/ +/g); 15 | const command = args.shift().toLowerCase() 16 | 17 | if (command === "help") { 18 | const helpEmbed = new Discord.MessageEmbed() 19 | .setTitle(`${bot.user.username}' commandrs`) 20 | .setDescription(`**Prefix:** ${config.prefix}`) 21 | .addField(`\`ping\``, `Voir le ping du bot`) 22 | .addField(`\`kick\``, `Utilisation: **${config.prefix}kick [@User]**\n**${config.prefix}kick [@User][Raison]**`) 23 | .addField(`\`ban\``, `Utilisation: **${config.prefix}ban [@User]**\n**${config.prefix}ban [@User][Raison]**`) 24 | .addField(`\`add\``, `Ajouter le rôle d'un membre \nUtilisation: **${config.prefix}add [@User] [Role]**`) 25 | .addField(`\`remove\``, `Supprimer le rôle d'un membre \nUtilisation: **${config.prefix}remove [@User] [Role]**`) 26 | .addField(`\`purge\``, `Supprimer un nombre de message \nUtilisation: **${config.prefix}purge [nombre]**`) 27 | .addField(`\`say\``, `Dire quelque chose à travers le bot`) 28 | message.channel.send(helpEmbed) 29 | } 30 | 31 | if (command === "ping") { 32 | message.channel.send(`Pong **(${Date.now() - message.createdTimestamp}ms)**`) 33 | } 34 | 35 | if (command === "kick") { 36 | if (!message.member.hasPermission('KICK_MEMBERS')) 37 | return message.channel.send("(Permission: `Kick members`)").then(msg => { 38 | msg.delete({ timeout: 30000 }) 39 | }) 40 | const member = message.mentions.members.first(); 41 | if (!member) 42 | return message.channel.send("YTu n'as pas mentionné une personne").then(msg => { 43 | msg.delete({ timeout: 30000 }) 44 | }) 45 | if (!member.kickable) 46 | return message.channel.send("Il est inkickable").then(msg => { 47 | msg.delete({ timeout: 30000 }) 48 | }) 49 | const reason = args.slice(1).join(" ") 50 | if (member) { 51 | if (!reason) return member.kick().then(member => { 52 | message.channel.send(`${member.user.tag} a été kick`); 53 | }) 54 | 55 | if (reason) return member.kick().then(member => { 56 | message.channel.send(`${member.user.tag} a été kick pour ${reason}`); 57 | }) 58 | } 59 | } 60 | 61 | if (command === "ban") { 62 | if (!message.member.hasPermission('BAN_MEMBERS')) 63 | return message.channel.send("Permission `Ban members`").then(msg => { 64 | msg.delete({ timeout: 30000 }) 65 | }) 66 | const member = message.mentions.members.first(); 67 | if (!member) 68 | return message.channel.send("YTu n'as pas mentionné une personne").then(msg => { 69 | msg.delete({ timeout: 30000 }) 70 | }) 71 | if (!member.bannable) 72 | return message.channel.send("L'utilisateur ne peut pas être ban").then(msg => { 73 | msg.delete({ timeout: 30000 }) 74 | }) 75 | const reason = args.slice(1).join(" ") 76 | if (member) { 77 | if (!reason) return member.ban().then(member => { 78 | message.channel.send(`${member.user.tag} a été banni`); 79 | }) 80 | 81 | if (reason) return member.ban(reason).then(member => { 82 | message.channel.send(`${member.user.tag}a été banni pour ${reason}`); 83 | }) 84 | } 85 | } 86 | 87 | if (command === "add") { 88 | if (!message.member.hasPermission('MANAGE_ROLES')) 89 | return message.channel.send("Permission `Manage roles`").then(msg => { 90 | msg.delete({ timeout: 30000 }) 91 | }) 92 | const member = message.mentions.members.first() 93 | if (!member) 94 | return message.channel.send("Tu n'as pas mentionné une personne").then(msg => { 95 | msg.delete({ timeout: 30000 }) 96 | }) 97 | const add = args.slice(1).join(" ") 98 | if (!add) 99 | return message.channel.send("Tu dois spécifier un rôle").then(msg => { 100 | msg.delete({ timeout: 30000 }) 101 | }) 102 | const roleAdd = message.guild.roles.cache.find(role => role.name === add) 103 | if (!roleAdd) 104 | return message.channel.send("Le rôle n'existe pas").then(msg => { 105 | msg.delete({ timeout: 30000 }) 106 | }) 107 | if (member.roles.cache.get(roleAdd.id)) 108 | return message.channel.send(`L'utilisateur a déjà ${add}`).then(msg => { 109 | msg.delete({ timeout: 30000 }) 110 | }) 111 | member.roles.add(roleAdd.id).then((member) => { 112 | message.channel.send(`${add} a été ajouté à ${member.displayName}`) 113 | }) 114 | } 115 | 116 | if (command === "remove") { 117 | if (!message.member.hasPermission('MANAGE_ROLES')) 118 | return message.channel.send("Permission `Manage roles`").then(msg => { 119 | msg.delete({ timeout: 30000 }) 120 | }) 121 | const member = message.mentions.members.first() 122 | if (!member) 123 | return message.channel.send("Tu n'as pas mentionné une personne").then(msg => { 124 | msg.delete({ timeout: 30000 }) 125 | }) 126 | const remove = args.slice(1).join(" ") 127 | if (!remove) 128 | return message.channel.send("Tu dois spécifier un rôle").then(msg => { 129 | msg.delete({ timeout: 30000 }) 130 | }) 131 | const roleRemove = message.guild.roles.cache.find(role => role.name === remove) 132 | if (!roleRemove) 133 | return message.channel.send("Le rôle n'existe pas").then(msg => { 134 | msg.delete({ timeout: 30000 }) 135 | }) 136 | if (!member.roles.cache.get(roleRemove.id)) 137 | return message.channel.send(`L'utilisateur n'a pas ce role ${remove} `).then(msg => { 138 | msg.delete({ timeout: 30000 }) 139 | }) 140 | member.roles.remove(roleRemove.id).then((member) => { 141 | message.channel.send(`${remove} a été retiré de ${member.displayName}`) 142 | }) 143 | } 144 | 145 | if (command === "say") { 146 | const text = args.join(" ") 147 | if(!text) return message.channel.send("Tu dois dire quelque chose").then(msg => { 148 | msg.delete({ timeout: 30000 }) 149 | }) 150 | message.channel.send(text) 151 | 152 | } 153 | 154 | if (command === "purge") { 155 | if(!message.member.hasPermission('MANAGE_MESSAGES')) return message.channel.send("Permission `Manage messages`)").then(msg => { 156 | msg.delete({ timeout: 30000 }) 157 | }) 158 | const number = args.join(" ") 159 | if(!number) return message.channel.send("Tu n'as pas spécifier un nombre !").then(msg => { 160 | msg.delete({ timeout: 30000 }) 161 | }) 162 | message.channel.bulkDelete(number).catch(console.error) 163 | 164 | } 165 | 166 | 167 | 168 | }); 169 | 170 | bot.login(config.token) 171 | -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "token": "Put-Token-Here", 3 | "prefix": "Prefix" 4 | } -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "discordjs-moderation-bot", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "discordjs-moderation-bot", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "discord.js": "^12.5.3" 13 | } 14 | }, 15 | "node_modules/@discordjs/collection": { 16 | "version": "0.1.6", 17 | "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.6.tgz", 18 | "integrity": "sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ==", 19 | "deprecated": "no longer supported" 20 | }, 21 | "node_modules/@discordjs/form-data": { 22 | "version": "3.0.1", 23 | "resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz", 24 | "integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==", 25 | "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", 26 | "dependencies": { 27 | "asynckit": "^0.4.0", 28 | "combined-stream": "^1.0.8", 29 | "mime-types": "^2.1.12" 30 | }, 31 | "engines": { 32 | "node": ">= 6" 33 | } 34 | }, 35 | "node_modules/abort-controller": { 36 | "version": "3.0.0", 37 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 38 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 39 | "dependencies": { 40 | "event-target-shim": "^5.0.0" 41 | }, 42 | "engines": { 43 | "node": ">=6.5" 44 | } 45 | }, 46 | "node_modules/asynckit": { 47 | "version": "0.4.0", 48 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 49 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" 50 | }, 51 | "node_modules/combined-stream": { 52 | "version": "1.0.8", 53 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 54 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 55 | "dependencies": { 56 | "delayed-stream": "~1.0.0" 57 | }, 58 | "engines": { 59 | "node": ">= 0.8" 60 | } 61 | }, 62 | "node_modules/delayed-stream": { 63 | "version": "1.0.0", 64 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 65 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 66 | "engines": { 67 | "node": ">=0.4.0" 68 | } 69 | }, 70 | "node_modules/discord.js": { 71 | "version": "12.5.3", 72 | "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz", 73 | "integrity": "sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw==", 74 | "deprecated": "no longer supported", 75 | "dependencies": { 76 | "@discordjs/collection": "^0.1.6", 77 | "@discordjs/form-data": "^3.0.1", 78 | "abort-controller": "^3.0.0", 79 | "node-fetch": "^2.6.1", 80 | "prism-media": "^1.2.9", 81 | "setimmediate": "^1.0.5", 82 | "tweetnacl": "^1.0.3", 83 | "ws": "^7.4.4" 84 | }, 85 | "engines": { 86 | "node": ">=12.0.0" 87 | } 88 | }, 89 | "node_modules/event-target-shim": { 90 | "version": "5.0.1", 91 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 92 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", 93 | "engines": { 94 | "node": ">=6" 95 | } 96 | }, 97 | "node_modules/mime-db": { 98 | "version": "1.52.0", 99 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 100 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 101 | "engines": { 102 | "node": ">= 0.6" 103 | } 104 | }, 105 | "node_modules/mime-types": { 106 | "version": "2.1.35", 107 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 108 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 109 | "dependencies": { 110 | "mime-db": "1.52.0" 111 | }, 112 | "engines": { 113 | "node": ">= 0.6" 114 | } 115 | }, 116 | "node_modules/node-fetch": { 117 | "version": "2.6.9", 118 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", 119 | "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", 120 | "dependencies": { 121 | "whatwg-url": "^5.0.0" 122 | }, 123 | "engines": { 124 | "node": "4.x || >=6.0.0" 125 | }, 126 | "peerDependencies": { 127 | "encoding": "^0.1.0" 128 | }, 129 | "peerDependenciesMeta": { 130 | "encoding": { 131 | "optional": true 132 | } 133 | } 134 | }, 135 | "node_modules/prism-media": { 136 | "version": "1.3.5", 137 | "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.5.tgz", 138 | "integrity": "sha512-IQdl0Q01m4LrkN1EGIE9lphov5Hy7WWlH6ulf5QdGePLlPas9p2mhgddTEHrlaXYjjFToM1/rWuwF37VF4taaA==", 139 | "peerDependencies": { 140 | "@discordjs/opus": ">=0.8.0 <1.0.0", 141 | "ffmpeg-static": "^5.0.2 || ^4.2.7 || ^3.0.0 || ^2.4.0", 142 | "node-opus": "^0.3.3", 143 | "opusscript": "^0.0.8" 144 | }, 145 | "peerDependenciesMeta": { 146 | "@discordjs/opus": { 147 | "optional": true 148 | }, 149 | "ffmpeg-static": { 150 | "optional": true 151 | }, 152 | "node-opus": { 153 | "optional": true 154 | }, 155 | "opusscript": { 156 | "optional": true 157 | } 158 | } 159 | }, 160 | "node_modules/setimmediate": { 161 | "version": "1.0.5", 162 | "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", 163 | "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" 164 | }, 165 | "node_modules/tr46": { 166 | "version": "0.0.3", 167 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 168 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 169 | }, 170 | "node_modules/tweetnacl": { 171 | "version": "1.0.3", 172 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", 173 | "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" 174 | }, 175 | "node_modules/webidl-conversions": { 176 | "version": "3.0.1", 177 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 178 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 179 | }, 180 | "node_modules/whatwg-url": { 181 | "version": "5.0.0", 182 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 183 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 184 | "dependencies": { 185 | "tr46": "~0.0.3", 186 | "webidl-conversions": "^3.0.0" 187 | } 188 | }, 189 | "node_modules/ws": { 190 | "version": "7.5.9", 191 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", 192 | "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", 193 | "engines": { 194 | "node": ">=8.3.0" 195 | }, 196 | "peerDependencies": { 197 | "bufferutil": "^4.0.1", 198 | "utf-8-validate": "^5.0.2" 199 | }, 200 | "peerDependenciesMeta": { 201 | "bufferutil": { 202 | "optional": true 203 | }, 204 | "utf-8-validate": { 205 | "optional": true 206 | } 207 | } 208 | } 209 | } 210 | } 211 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "discordjs-moderation-bot", 3 | "version": "1.0.0", 4 | "description": "A small Discord bot, without a command handler", 5 | "main": "bot.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/Nekros-dsc" 12 | }, 13 | "keywords": [ 14 | "bot", 15 | "discord" 16 | ], 17 | "author": "root admin", 18 | "license": "ISC", 19 | "bugs": { 20 | "url": "https://github.com/Nekros-dsc" 21 | }, 22 | "homepage": "https://github.com/Nekros-dsc", 23 | "dependencies": { 24 | "discord.js": "^12.5.3" 25 | } 26 | } 27 | --------------------------------------------------------------------------------