├── 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 |
--------------------------------------------------------------------------------