├── InstallBot.bat ├── LICENSE ├── README.md ├── StartBot.bat ├── api ├── README.md └── api.js ├── commands ├── admin │ ├── embed.js │ ├── prefix.js │ ├── serverlock.js │ ├── setup.js │ ├── unwhitelist.js │ ├── updatebans.js │ └── whitelist.js ├── manager │ ├── acceptappeal.js │ ├── acceptreport.js │ ├── ban.js │ ├── blacklist.js │ ├── denyappeal.js │ ├── denyreport.js │ ├── modify.js │ ├── staffadd.js │ ├── staffremove.js │ ├── unban.js │ └── unblacklist.js ├── sticky │ ├── stickyadd.js │ └── stickyremove.js └── user │ ├── appeal.js │ ├── check.js │ ├── credits.js │ ├── help.js │ ├── invite.js │ ├── ping.js │ ├── report.js │ └── stats.js ├── config.js ├── events ├── guildCreate.js ├── guildDelete.js ├── guildMemberAdd.js ├── message.js └── ready.js ├── install.sql ├── main.js ├── package-lock.json ├── package.json └── src ├── Client.js └── utils └── utils.js /InstallBot.bat: -------------------------------------------------------------------------------- 1 | npm i -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Itz-Hyperz 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Discord-Security-Bot 2 | 3 | ![](https://cdn.hyperz.dev/ocagtbnm.png) 4 | 5 | ![](https://cdn.hyperz.dev/ny185scy.png) 6 | 7 | ![](https://cdn.hyperz.dev/mek46jqo.png) 8 | 9 | ![](https://cdn.hyperz.dev/hor1vbdf.png) 10 | 11 | ![](https://cdn.hyperz.dev/e5iystmu.png) 12 | 13 | ![](https://cdn.hyperz.dev/rjn3oviv.png) 14 | 15 | ![](https://cdn.hyperz.dev/y5erx1eu.png) 16 | 17 | ![](https://cdn.hyperz.dev/tg4lmcur.png) 18 | 19 | ![](https://cdn.hyperz.dev/b8646257.png) 20 | 21 | ![](https://cdn.hyperz.dev/fqhywaoj.png) 22 | 23 | ![](https://cdn.hyperz.dev/xi81oz2m.png) 24 | 25 | ![](https://cdn.hyperz.dev/in765rv0.png) 26 | 27 | ![](https://cdn.hyperz.dev/8kur5o2r.png) 28 | 29 | There is more, download the bot and run it to give it a shot! 30 | -------------------------------------------------------------------------------- /StartBot.bat: -------------------------------------------------------------------------------- 1 | node main.js -------------------------------------------------------------------------------- /api/README.md: -------------------------------------------------------------------------------- 1 | # About The API 2 | 3 | This API is used quite simply, it pulls data from the database and returns a JSON format. 4 | 5 | It uses ExpressJS, along with MySQL. 6 | 7 | ```js 8 | localhost:3000/ -- Grabs the API status & credits 9 | localhost:3000/stats -- Grabs the bots statistics 10 | localhost:3000/cases/CASE_ID_HERE -- Grabs a provided case 11 | localhost:3000/staff/STAFF_ID_HERE -- Grabs a provided staff user 12 | localhost:3000/bans/USER_ID_HERE -- Grabs a banned user 13 | localhost:3000/blacklists/USER_ID_HERE -- Grabs a blacklisted user 14 | localhost:3000/guilds/GUILD_ID_HERE -- Grabs a guild 15 | ``` 16 | -------------------------------------------------------------------------------- /api/api.js: -------------------------------------------------------------------------------- 1 | // This API was pulled from a previous project, the original repository can be found below 2 | // https://github.com/Jordan2139/HypeBanDB-API 3 | // Yeah, i make good stuff <3 - Jordan.#2139 4 | 5 | const chalk = require('chalk') 6 | const express = require('express') 7 | const app = express() 8 | 9 | function apistart(client, con) { 10 | setTimeout(async () => { 11 | app.listen(client.config.clientAPI.port, null, null, () => console.log(chalk.blue(`API is up and running on port ${client.config.clientAPI.port}.`))); 12 | 13 | // Ready 14 | app.get('/', (req, res) => { 15 | res.json({ status: `API is up and running on port ${client.config.clientAPI.port}.`, MadeBy: "Jordan.#2139 & Hyperz#0001, With Some Help From JipyTheDev#0001"}) 16 | }) 17 | 18 | // Statistics 19 | app.get('/stats', function(req, res) { // Stats api 20 | res.set('Access-Control-Allow-Origin', '*'); 21 | con.query(`SELECT COUNT(*) as total FROM bannedusers`, (erro, rowo) => { 22 | con.query(`SELECT COUNT(caseid) as total FROM cases`, (errol, rowol) => { 23 | res.send({ 'guilds': client.guilds.cache.size, 'banned': rowo[0].total, 'cases': rowol[0].total }) 24 | }) 25 | }) 26 | }) 27 | 28 | // Case Checking (Via case ID) 29 | app.get(`/cases/:caseID`, async function(req, res) { 30 | res.set('Access-Control-Allow-Origin', '*'); 31 | const caseid = await req.params.caseID 32 | con.query(`SELECT * FROM cases WHERE caseid="${caseid}"`, async(err, row) => { 33 | if (err) throw err; 34 | if (row[0]) { 35 | res.send({ 36 | 'number': row[0].caseid, 37 | 'enforcertag': row[0].enforcertag, 38 | 'enforcerid': row[0].enforcerid, 39 | 'usertag': row[0].caseusertag, 40 | 'userid': row[0].caseuserid, 41 | 'reason': row[0].casereason 42 | }) 43 | } else { 44 | res.send({ 45 | 'error': 'Not a valid case ID', 46 | }) 47 | } 48 | }); 49 | }) 50 | 51 | // Staff DB (see if user is staff on the bot) 52 | app.get(`/staff/:userID`, async function(req, res) { 53 | res.set('Access-Control-Allow-Origin', '*'); 54 | const userid = await req.params.userID 55 | con.query(`SELECT * FROM staff WHERE userid="${userid}"`, async(err, row) => { 56 | if (err) throw err; 57 | if (row[0]) { 58 | res.send({ 59 | 'isStaff': true, 60 | 'usertag': row[0].usertag, 61 | 'userid': row[0].userid, 62 | }) 63 | } else { 64 | res.send({ 65 | 'isStaff': false 66 | }) 67 | } 68 | }); 69 | }) 70 | 71 | // Ban viewing 72 | app.get(`/bans/:userID`, async function(req, res) { 73 | res.set('Access-Control-Allow-Origin', '*'); 74 | const userid = await req.params.userID 75 | con.query(`SELECT * FROM bannedusers WHERE userid="${userid}"`, async(err, row) => { 76 | if (err) throw err; 77 | if (row[0]) { 78 | res.send({ 79 | 'banned': true, 80 | 'usertag': row[0].usertag, 81 | 'userid': row[0].userid, 82 | 'caseid': row[0].caseid, 83 | 'reason': row[0].reason, 84 | 'proof': row[0].proof, 85 | 'bandate': row[0].bandate 86 | }) 87 | } else { 88 | res.send({ 89 | 'banned': false 90 | }) 91 | } 92 | }); 93 | }) 94 | 95 | // Blacklist viewing 96 | app.get(`/blacklists/:userID`, async function(req, res) { 97 | res.set('Access-Control-Allow-Origin', '*'); 98 | const userid = await req.params.userID 99 | con.query(`SELECT * FROM blacklistedusers WHERE userid="${userid}"`, async(err, row) => { 100 | if (err) throw err; 101 | if (row[0]) { 102 | res.send({ 103 | 'blacklisted': true, 104 | 'caseid': row[0].caseid, 105 | 'userid': row[0].userid, 106 | 'reason': row[0].reason, 107 | 'proof': row[0].proof, 108 | 'notes': row[0].notes 109 | }) 110 | } else { 111 | res.send({ 112 | 'blacklisted': false 113 | }) 114 | } 115 | }); 116 | }) 117 | 118 | // Guild viewing 119 | app.get(`/guilds/:guildID`, async function(req, res) { 120 | res.set('Access-Control-Allow-Origin', '*'); 121 | const guildid = await req.params.guildID 122 | con.query(`SELECT * FROM guilds WHERE guildid="${guildid}"`, async(err, row) => { 123 | if (err) throw err; 124 | if (row[0]) { 125 | res.send({ 126 | 'indb': true, 127 | 'active': row[0].active, 128 | 'guildid': row[0].guildid, 129 | 'prefix': row[0].prefix, 130 | 'autobans': row[0].autobans, 131 | 'autounbans': row[0].autounbans, 132 | 'altprev': row[0].altprev, 133 | 'altprevtimer': row[0].altprevtimer, 134 | 'inviteblocker': row[0].inviteblocker, 135 | 'serverlock': row[0].serverlock 136 | }) 137 | } else { 138 | res.send({ 139 | 'indb': false 140 | }) 141 | } 142 | }); 143 | }) 144 | }, 3000) 145 | } 146 | 147 | module.exports = { 148 | apistart: apistart 149 | } 150 | 151 | // This API was pulled from a previous project, the original repository can be found below 152 | // https://github.com/Jordan2139/HypeBanDB-API 153 | -------------------------------------------------------------------------------- /commands/admin/embed.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | 3 | exports.run = (client, message, args, con) => { 4 | 5 | if(!message.member.hasPermission('MANAGE_MESSAGES')) return message.channel.send(`You don't have permission to use this command.`).catch(e => {}); 6 | 7 | var thechannel; 8 | const filter = m => m.author.id === message.author.id; 9 | 10 | const starter = new Discord.MessageEmbed() 11 | .setColor(`${client.config.colorhex}`) 12 | .setDescription(`**EMBED BUILDER STARTED!**\nType \`end\` to cancel the builder.`) 13 | 14 | const builder0 = new Discord.MessageEmbed() 15 | .setColor(`${client.config.colorhex}`) 16 | .setDescription(`Please define a **channel** to put this embed in.`) 17 | 18 | const builder1 = new Discord.MessageEmbed() 19 | .setColor(`${client.config.colorhex}`) 20 | .setDescription(`Please define an **author**.\nType \`na\` to skip this step.`) 21 | 22 | const builder2 = new Discord.MessageEmbed() 23 | .setColor(`${client.config.colorhex}`) 24 | .setDescription(`Please define a **color HEX**.\nType \`na\` to skip this step.`) 25 | 26 | const builder3 = new Discord.MessageEmbed() 27 | .setColor(`${client.config.colorhex}`) 28 | .setDescription(`Please define a **title**.\nType \`na\` to skip this step.`) 29 | 30 | const builder4 = new Discord.MessageEmbed() 31 | .setColor(`${client.config.colorhex}`) 32 | .setDescription(`Please define a **thumbnail image link**.\nType \`na\` to skip this step.`) 33 | 34 | const builder5 = new Discord.MessageEmbed() 35 | .setColor(`${client.config.colorhex}`) 36 | .setDescription(`Please define a **description**.\nType \`na\` to skip this step.`) 37 | 38 | const builder6 = new Discord.MessageEmbed() 39 | .setColor(`${client.config.colorhex}`) 40 | .setDescription(`Please define an **image link**.\nType \`na\` to skip this step.`) 41 | 42 | const builder7 = new Discord.MessageEmbed() 43 | .setColor(`${client.config.colorhex}`) 44 | .setDescription(`Please define a **footer**.\nType \`na\` to skip this step.`) 45 | 46 | const finish1 = new Discord.MessageEmbed() 47 | .setColor(`${client.config.colorhex}`) 48 | .setDescription(`**Embed is being built...**`) 49 | 50 | const finish2 = new Discord.MessageEmbed() 51 | .setColor(`${client.config.colorhex}`) 52 | .setDescription(`**Embed has been posted!**`) 53 | 54 | message.channel.send(starter).catch(e => {}); 55 | 56 | message.channel.send(builder0).then(() => { 57 | message.channel.awaitMessages(filter, { max: 1, time: 100000, errors: ['time'] }) 58 | .then(collected => { 59 | let content0l = collected.first().content.toLowerCase() 60 | let content0 = collected.first().content 61 | 62 | if(content0l === 'end') return message.channel.send(`**Embed Builder Cancelled!**`).catch(e => {}); 63 | 64 | if(collected.first().mentions.channels.first()) { 65 | thechannel = collected.first().mentions.channels.first().id 66 | } else if(!isNaN(collected.first().content)) { 67 | thechannel = collected.first().content 68 | } 69 | 70 | if(thechannel == undefined) return message.channel.send(`Embed process cancelled, I was unable to find the provided channel.`); 71 | 72 | message.channel.send(builder1).then(() => { 73 | message.channel.awaitMessages(filter, { max: 1, time: 100000, errors: ['time'] }) 74 | .then(collected => { 75 | let content1l = collected.first().content.toLowerCase() 76 | let content1 = collected.first().content 77 | 78 | if(content1l === 'end') return message.channel.send(`**Embed Builder Cancelled!**`).catch(e => {}); 79 | 80 | message.channel.send(builder2).then(() => { 81 | message.channel.awaitMessages(filter, { max: 1, time: 100000, errors: ['time'] }) 82 | .then(collected => { 83 | let content2l = collected.first().content.toLowerCase() 84 | let content2 = collected.first().content 85 | 86 | if(content2l === 'end') return message.channel.send(`**Embed Builder Cancelled!**`).catch(e => {}); 87 | 88 | message.channel.send(builder3).then(() => { 89 | message.channel.awaitMessages(filter, { max: 1, time: 100000, errors: ['time'] }) 90 | .then(collected => { 91 | let content3l = collected.first().content.toLowerCase() 92 | let content3 = collected.first().content 93 | 94 | if(content3l === 'end') return message.channel.send(`**Embed Builder Cancelled!**`).catch(e => {}); 95 | 96 | message.channel.send(builder4).then(() => { 97 | message.channel.awaitMessages(filter, { max: 1, time: 100000, errors: ['time'] }) 98 | .then(collected => { 99 | let content4l = collected.first().content.toLowerCase() 100 | let content4 = collected.first().content 101 | 102 | if(content4l === 'end') return message.channel.send(`**Embed Builder Cancelled!**`).catch(e => {}); 103 | 104 | message.channel.send(builder5).then(() => { 105 | message.channel.awaitMessages(filter, { max: 1, time: 100000, errors: ['time'] }) 106 | .then(collected => { 107 | let content5l = collected.first().content.toLowerCase() 108 | let content5 = collected.first().content 109 | 110 | if(content5l === 'end') return message.channel.send(`**Embed Builder Cancelled!**`).catch(e => {}); 111 | 112 | message.channel.send(builder6).then(() => { 113 | message.channel.awaitMessages(filter, { max: 1, time: 100000, errors: ['time'] }) 114 | .then(collected => { 115 | let content6l = collected.first().content.toLowerCase() 116 | let content6 = collected.first().content 117 | 118 | if(content6l === 'end') return message.channel.send(`**Embed Builder Cancelled!**`).catch(e => {}); 119 | 120 | message.channel.send(builder7).then(() => { 121 | message.channel.awaitMessages(filter, { max: 1, time: 100000, errors: ['time'] }) 122 | .then(collected => { 123 | let content7l = collected.first().content.toLowerCase() 124 | let content7 = collected.first().content 125 | 126 | if(content7l === 'end') return message.channel.send(`**Embed Builder Cancelled!**`).catch(e => {}); 127 | 128 | message.channel.send(finish1).catch(e => {}); 129 | embedBuilder(Discord, client, thechannel, message, content1, content2, content3, content4, content5, content6, content7) 130 | setTimeout(() => { 131 | message.channel.send(finish2) 132 | }, 3000) 133 | 134 | }).catch(e => {}); 135 | }).catch(e => {}); 136 | 137 | }).catch(e => {}); 138 | }).catch(e => {}); 139 | 140 | }).catch(e => {}); 141 | }).catch(e => {}); 142 | 143 | }).catch(e => {}); 144 | }).catch(e => {}); 145 | 146 | }).catch(e => {}); 147 | }).catch(e => {}); 148 | 149 | }).catch(e => {}); 150 | }).catch(e => {}); 151 | 152 | }).catch(e => {}); 153 | }).catch(e => {}); 154 | 155 | }).catch(e => {}); 156 | }).catch(e => {}); 157 | 158 | async function embedBuilder(Discord, client, thechannel, message, content1, content2, content3, content4, content5, content6, content7) { 159 | 160 | var chan; 161 | 162 | try { 163 | chan = await client.channels.cache.get(thechannel) 164 | } catch(e) { 165 | console.log(e) 166 | } 167 | if(chan == undefined) return message.channel.send(`The channel provided was invalid...`); 168 | 169 | const finalizer = new Discord.MessageEmbed() 170 | 171 | if(content1 != 'na') { 172 | try { finalizer.setAuthor(content1) } catch(e) { if(e) return message.channel.send(`Something went *wrong* when adding an author.`).then(msg => { msg.delete({ timeout: 12000 }), message.delete(), console.log(e); });} 173 | } 174 | if(content2 != 'na') { 175 | try { finalizer.setColor(content2) } catch(e) { if(e) return message.channel.send(`Something went *wrong* when adding a color hex.`).then(msg => { msg.delete({ timeout: 12000 }), message.delete(), console.log(e); });} 176 | } 177 | if(content3 != 'na') { 178 | try { finalizer.setTitle(content3) } catch(e) { if(e) return message.channel.send(`Something went *wrong* when adding a title.`).then(msg => { msg.delete({ timeout: 12000 }), message.delete(), console.log(e); });} 179 | } 180 | if(content4 != 'na') { 181 | try { finalizer.setThumbnail(content4) } catch(e) { if(e) return message.channel.send(`Something went *wrong* when adding a thumbnail.`).then(msg => { msg.delete({ timeout: 12000 }), message.delete(), console.log(e); });} 182 | } 183 | if(content5 != 'na') { 184 | try { finalizer.setDescription(content5) } catch(e) { if(e) return message.channel.send(`Something went *wrong* when adding a description.`).then(msg => { msg.delete({ timeout: 12000 }), message.delete(), console.log(e); });} 185 | } 186 | if(content6 != 'na') { 187 | try { finalizer.setImage(content6) } catch(e) { if(e) return message.channel.send(`Something went *wrong* when adding an image.`).then(msg => { msg.delete({ timeout: 12000 }), message.delete(), console.log(e); });} 188 | } 189 | if(content7 != 'na') { 190 | try { finalizer.setFooter(content7) } catch(e) { if(e) return message.channel.send(`Something went *wrong* when adding a footer.`).then(msg => { msg.delete({ timeout: 12000 }), message.delete(), console.log(e); });} 191 | } 192 | 193 | try { 194 | await chan.send(finalizer).catch(e => { console.log(e) }); 195 | } catch(e) { 196 | if(client.config.debugmode) return console.log(e) 197 | } 198 | 199 | } 200 | 201 | 202 | 203 | } 204 | 205 | exports.info = { 206 | name: "embed", 207 | description: "Create an embedded message.", 208 | useAliases: true, 209 | aliases: ['sayem', 'sayembed'] 210 | } -------------------------------------------------------------------------------- /commands/admin/prefix.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | exports.run = async (client, message, args, con) => { 4 | 5 | if(message.channel.type === 'dm') return message.channel.send(`Please only run commands in a Discord server.`).then(msg => { 6 | msg.delete({ timeout: 12000 }) 7 | }).catch(e => {}); 8 | 9 | if(!message.member.hasPermission('ADMINISTRATOR')) return message.channel.send(`You don't have permission to use this command.`).catch(e => {}); 10 | 11 | if(!args[0]) return message.channel.send(`**Please include a new prefix in your message.**`).catch(e => {}); 12 | if(args[1]) return message.channel.send(`**Your prefix cannot include a space.**`).catch(e => {}); 13 | 14 | await con.query(`UPDATE guilds SET prefix='${args[0]}' WHERE guildid='${message.guild.id}'`, async(err, row) => { 15 | if(err) throw err; 16 | }); 17 | 18 | let embed = new MessageEmbed() 19 | .setAuthor(message.author.tag, message.author.displayAvatarURL()) 20 | .setColor(client.config.colorhex) 21 | .setDescription(`**Your guilds prefix has been updated to \`${args[0]}\`**`) 22 | message.channel.send(embed).catch(e => { if(client.config.debugmode) return client.utils.error(client, e) }); 23 | 24 | } 25 | 26 | exports.info = { 27 | name: "prefix", 28 | description: "Set your guilds prefix.", 29 | useAliases: true, 30 | aliases: ['setprefix'] 31 | } -------------------------------------------------------------------------------- /commands/admin/serverlock.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | exports.run = async (client, message, args, con) => { 4 | 5 | if(message.channel.type === 'dm') return message.channel.send(`Please only run commands in a Discord server.`).then(msg => { 6 | msg.delete({ timeout: 12000 }) 7 | }).catch(e => {}); 8 | 9 | if(!message.member.hasPermission('ADMINISTRATOR')) return message.channel.send(`You are missing the permission(s) \`ADMINISTRATOR\`.`).catch(e => {}); 10 | 11 | await con.query(`SELECT * FROM guilds WHERE guildid='${message.guild.id}'`, async(err, row) => { 12 | if(err) throw err; 13 | if(row[0]) { 14 | if(row[0].serverlock === 'true') { 15 | await con.query(`UPDATE guilds SET serverlock='false' WHERE guildid='${message.guild.id}'`, async (err, row) => { 16 | if(err) throw err; 17 | message.channel.send(`**Sever Lockdown Toggled:** \`false\``).catch(e => {}); 18 | }); 19 | } else if(row[0].serverlock === 'false') { 20 | await con.query(`UPDATE guilds SET serverlock='true' WHERE guildid='${message.guild.id}'`, async (err, row) => { 21 | if(err) throw err; 22 | message.channel.send(`**Sever Lockdown Toggled:** \`true\``).catch(e => {}); 23 | }); 24 | } 25 | } 26 | }); 27 | 28 | } 29 | 30 | exports.info = { 31 | name: "serverlock", 32 | description: "Lock the server down!", 33 | useAliases: true, 34 | aliases: ['lockserver', 'serverlockdown', 'lockdownserver'] 35 | } -------------------------------------------------------------------------------- /commands/admin/setup.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const ms = require('ms') 3 | exports.run = async (client, message, args, con) => { 4 | 5 | try { 6 | 7 | if(message.channel.type === 'dm') return message.channel.send(`Please only run commands in a Discord server.`).then(msg => { 8 | msg.delete({ timeout: 12000 }) 9 | }).catch(e => {}); 10 | 11 | message.delete().catch(e => {}); 12 | var gmessage; 13 | gmessage = message; 14 | 15 | if(!message.member.hasPermission('ADMINISTRATOR')) return message.channel.send(`You are missing the permission(s) \`ADMINISTRATOR\`.`).catch(e => {}); 16 | 17 | const filter = m => m.author.id === message.author.id; 18 | 19 | const starter = new Discord.MessageEmbed() 20 | .setColor(client.config.colorhex) 21 | .setDescription(`**What channel would you like logs to be posted too?**\nUse \`na\` to disable logging.`) 22 | 23 | const prompt1 = new Discord.MessageEmbed() 24 | .setColor(client.config.colorhex) 25 | .setDescription(`**Would you like users to be auto-unbanned when their appeals are approved?**\nUse \`yes\` or \`no\`.`) 26 | 27 | const prompt2 = new Discord.MessageEmbed() 28 | .setColor(client.config.colorhex) 29 | .setDescription(`**Would you like users to be automatically banned if they are banned in the bot?**\nIf disabled a warning message will be sent to your logs channel. Use \`yes\` or \`no\`.`) 30 | 31 | const prompt3 = new Discord.MessageEmbed() 32 | .setColor(client.config.colorhex) 33 | .setDescription(`**Would you like ${client.user.username} to stop Discord Invites from being posted in channels?**\nUse \`yes\` or \`no\`.`) 34 | 35 | const prompt4 = new Discord.MessageEmbed() 36 | .setColor(client.config.colorhex) 37 | .setDescription(`**Would you like ${client.user.username} to stop Alternate Accounts from joining your server?**\nUse \`yes\` or \`no\`.`) 38 | 39 | const prompt42 = new Discord.MessageEmbed() 40 | .setColor(client.config.colorhex) 41 | .setDescription(`**Please define a time limit for alt accounts to be created by before they get removed.**\nI.e \`30d\` for 30 days.`) 42 | 43 | const lastprompt = new Discord.MessageEmbed() 44 | .setColor(client.config.colorhex) 45 | .setDescription(`**Server Settings Successfully Updated!**`) 46 | 47 | try { 48 | message.channel.send(starter).then(async message => { 49 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 50 | .then(async collected => { 51 | 52 | let content1; 53 | if(collected.first().content.toLowerCase() === 'na') { 54 | content1 = 'none' 55 | } else if(collected.first().mentions.channels.first()) { 56 | content1 = collected.first().mentions.channels.first().id 57 | } else if(!isNaN(collected.first().content)) { 58 | let channelfinder = await client.channels.cache.find(c => c.id === collected.first().content) 59 | if(channelfinder == undefined) return message.channel.send(`**Setup Cancelled.** You provided an invalid channel name.`); 60 | content1 = collected.first().content 61 | } else { 62 | let channelfinder = await client.channels.cache.find(c => c.name === collected.first().content) 63 | if(channelfinder == undefined) return message.channel.send(`**Setup Cancelled.** You provided an invalid channel name.`); 64 | content1 = channelfinder.id 65 | } 66 | 67 | 68 | message.channel.send(prompt1).then(async message => { 69 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 70 | .then(async collected => { 71 | 72 | let content2; 73 | let req = collected.first().content.toLowerCase() 74 | if(req === 'yes') { 75 | content2 = 'true'; 76 | } else if(req === 'no') { 77 | content2 = 'false'; 78 | } else { 79 | message.channel.send(`**Invalid Answer Submitted.** Set to \`false\` by default.`) 80 | content2 = 'false'; 81 | } 82 | 83 | message.channel.send(prompt2).then(async message => { 84 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 85 | .then(async collected => { 86 | 87 | let content3; 88 | let req = collected.first().content.toLowerCase() 89 | if(req === 'yes') { 90 | content3 = 'true'; 91 | } else if(req === 'no') { 92 | content3 = 'false'; 93 | } else { 94 | message.channel.send(`**Invalid Answer Submitted.** Set to \`false\` by default.`) 95 | content3 = 'false'; 96 | } 97 | 98 | message.channel.send(prompt3).then(async message => { 99 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 100 | .then(async collected => { 101 | 102 | let content4; 103 | let req = collected.first().content.toLowerCase() 104 | if(req === 'yes') { 105 | content4 = 'true'; 106 | } else if(req === 'no') { 107 | content4 = 'false'; 108 | } else { 109 | message.channel.send(`**Invalid Answer Submitted.** Set to \`false\` by default.`) 110 | content4 = 'false'; 111 | } 112 | 113 | message.channel.send(prompt4).then(async message => { 114 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 115 | .then(async collected => { 116 | 117 | let req = collected.first().content.toLowerCase() 118 | if(req === 'yes') { 119 | let content5 = 'true'; 120 | message.channel.send(prompt42).then(async message => { 121 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 122 | .then(async collected => { 123 | 124 | let content6 = collected.first().content.toLowerCase() 125 | 126 | message.channel.send(lastprompt).catch(e => {}); 127 | 128 | builder(client, con, message, Discord, gmessage, content1, content2, content3, content4, content5, content6) 129 | 130 | }).catch(e => {}); 131 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 132 | } else if(req === 'no') { 133 | let content5 = 'false'; 134 | let content6 = 'none'; 135 | builder(client, con, message, Discord, gmessage, content1, content2, content3, content4, content5, content6) 136 | message.channel.send(lastprompt).catch(e => {}); 137 | } else { 138 | message.channel.send(`**Invalid Answer Submitted.** Set to \`false\` by default.`) 139 | let content5 = 'false'; 140 | let content6 = 'none'; 141 | builder(client, con, message, Discord, gmessage, content1, content2, content3, content4, content5, content6) 142 | message.channel.send(lastprompt).catch(e => {}); 143 | } 144 | 145 | 146 | 147 | }).catch(e => {}); 148 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 149 | 150 | }).catch(e => {}); 151 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 152 | 153 | }).catch(e => {}); 154 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 155 | 156 | }).catch(e => {}); 157 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 158 | 159 | }).catch(e => {}); 160 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 161 | 162 | } catch(e) { 163 | if(client.config.debugmode) return console.log(e); 164 | } 165 | 166 | } catch(e) { 167 | if(client.config.debugmode) return console.log(e); 168 | } 169 | 170 | } 171 | 172 | exports.info = { 173 | name: "setup", 174 | description: "Setup your guild or update your guilds settings.", 175 | useAliases: false, 176 | aliases: [] 177 | } 178 | 179 | async function builder(client, con, message, Discord, gmessage, content1, content2, content3, content4, content5, content6) { 180 | if(content1 != 'none') { 181 | await con.query(`SELECT * FROM loggingchannels WHERE channelid='${content1}'`, async (err, row) => { 182 | if(err) throw err; 183 | if(!row[0]) { 184 | await con.query(`INSERT INTO loggingchannels (guildid, channelid, enforcerid, type) VALUES ('${message.guild.id}', '${content1}', '${gmessage.author.id}', '1')`, async (err, row) => { 185 | if(err) throw err; 186 | }); 187 | } 188 | }); 189 | await con.query(`UPDATE guilds SET autounbans='${content2}', autobans='${content3}', inviteblocker='${content4}', altprev='${content5}', altprevtimer='${content6}' WHERE guildid='${message.guild.id}'`, async(err, row) => { 190 | if(err) throw err; 191 | }); 192 | let embed = new Discord.MessageEmbed() 193 | .setColor(client.config.colorhex) 194 | .setTitle(`Settings Updated:`) 195 | .setURL(`https://hyperz.dev/`) 196 | .setDescription(`✅ All settings have been updated.\n\n**You can review your new guild settings below!**`) 197 | .addFields( 198 | { name: `Guild ID`, value: `${message.guild.id}`, inline: true }, 199 | { name: `Logging`, value: `true`, inline: true }, 200 | { name: `Log Channel`, value: `<#${content1}>`, inline: true }, 201 | { name: `Invite Blocker`, value: `${content4}`, inline: true }, 202 | { name: `Auto-Bans`, value: `${content3}`, inline: true }, 203 | { name: `Auto-Unbans`, value: `${content2}`, inline: true }, 204 | { name: `Alt Prevention`, value: `${content5}`, inline: true }, 205 | { name: `Alt Prevention Timer`, value: `${content6}`, inline: true } 206 | ) 207 | .setFooter(`${client.config.copyright} | ${gmessage.author.tag}`) 208 | try { embed.setThumbnail(gmessage.author.avatarURL({ dynamic: true })) } catch(e) {} 209 | message.channel.send(embed).catch(e => { 210 | console.log(e) 211 | }); 212 | } else { 213 | await con.query(`UPDATE guilds SET autounbans='${content2}', autobans='${content3}', inviteblocker='${content4}', altprev='${content5}', altprevtimer='${content6}' WHERE guildid='${message.guild.id}'`, async(err, row) => { 214 | if(err) throw err; 215 | }); 216 | let embed = new Discord.MessageEmbed() 217 | .setColor(client.config.colorhex) 218 | .setTitle(`Settings Updated:`) 219 | .setURL(`https://hyperz.dev/`) 220 | .setDescription(`✅ All settings have been updated.\n\n**You can review your new guild settings below!**`) 221 | .addFields( 222 | { name: `Guild ID`, value: `${message.guild.id}`, inline: true }, 223 | { name: `Logging`, value: `false`, inline: true }, 224 | { name: `Log Channel`, value: `${content1}`, inline: true }, 225 | { name: `Invite Blocker`, value: `${content4}`, inline: true }, 226 | { name: `Auto-Bans`, value: `${content3}`, inline: true }, 227 | { name: `Auto-Unbans`, value: `${content2}`, inline: true }, 228 | { name: `Alt Prevention`, value: `${content5}`, inline: true }, 229 | { name: `Alt Prevention Timer`, value: `${content6}`, inline: true } 230 | ) 231 | .setFooter(`${client.config.copyright} | ${gmessage.author.tag}`) 232 | try { embed.setThumbnail(gmessage.author.avatarURL({ dynamic: true })) } catch(e) {} 233 | message.channel.send(embed).catch(e => { 234 | console.log(e) 235 | }); 236 | } 237 | }; -------------------------------------------------------------------------------- /commands/admin/unwhitelist.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | exports.run = async (client, message, args, con) => { 3 | 4 | try { 5 | if(message.channel.type === "dm") return; 6 | 7 | if(!message.member.hasPermission('ADMINISTRATOR')) return message.channel.send(`You are missing the permission(s) \`ADMINISTRATOR\`.`).catch(e => {}); 8 | 9 | if (!args[0]) return message.channel.send(`Please define a user ID to remove.`).then(msg => { 10 | msg.delete({ timeout: 12000 }) 11 | message.delete() 12 | }).catch(e => { if (client.config.debugmode) return console.log(e); }); 13 | 14 | var founduser; 15 | if (message.mentions.users.first()) { 16 | founduser = await client.users.fetch(message.mentions.users.first().id); 17 | } else if (!isNaN(args[0])) { 18 | founduser = await client.users.fetch(args[0]); 19 | } else { 20 | return message.channel.send("Please provide a user for me to remove, it can be a mention or id.").then(msg => { 21 | msg.delete({ timeout: 12000 }) 22 | message.delete() 23 | }).catch(e => { if (client.config.debugmode) return console.log(e);}); 24 | }; 25 | 26 | if (founduser == undefined) return message.channel.send(`That user was not found.`).then(msg => { 27 | msg.delete({ timeout: 12000 }) 28 | message.delete() 29 | }).catch(e => { if (client.config.debugmode) return console.log(e);}); 30 | 31 | await con.query(`SELECT * FROM whitelist WHERE userid="${founduser.id}" AND guildid='${message.guild.id}'`, async (err, row) => { 32 | if(!row.length) return message.channel.send(`That user is not whitelisted in the database.`).then(msg => { 33 | msg.delete({ timeout: 12000 }) 34 | message.delete() 35 | }).catch(e => { if (client.config.debugmode) return console.log(e); }); 36 | 37 | await con.query(`DELETE FROM whitelist WHERE userid="${founduser.id}" AND guildid='${message.guild.id}'`, async (err, row) => { 38 | const embed = new MessageEmbed() 39 | .setColor(client.config.colorhex) 40 | .setTitle(`Whitelist Removed!`) 41 | .setDescription(`**Member:** ${founduser.tag}\n**Enforced By:** ${message.author.tag}`) 42 | .setThumbnail(`${client.user.displayAvatarURL()}`) 43 | .setTimestamp() 44 | .setFooter(`${client.config.copyright}`) 45 | 46 | message.channel.send(embed).then(msg => { 47 | msg.delete({ timeout: 12000 }) 48 | message.delete() 49 | }).catch(e => { if (client.config.debugmode) return console.log(e); }); 50 | }); 51 | }); 52 | 53 | } catch (e) { 54 | console.log(e) 55 | } 56 | } 57 | 58 | exports.info = { 59 | name: "unwhitelist", 60 | description: "This is a command for the owner of the bot...", 61 | useAliases: true, 62 | aliases: ['deletewhitelist', 'removewhitelist', 'revokewhitelist'] 63 | } -------------------------------------------------------------------------------- /commands/admin/updatebans.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const ms = require('ms') 3 | exports.run = (client, message, args, con) => { 4 | 5 | if(message.channel.type === 'dm') return message.channel.send(`Please only run commands in a Discord server.`).then(msg => { 6 | msg.delete({ timeout: 12000 }) 7 | }).catch(e => {}); 8 | 9 | if(!message.member.hasPermission('ADMINISTRATOR')) return message.channel.send(`You are missing the permission(s) \`ADMINISTRATOR\`.`).catch(e => {}); 10 | 11 | const someembedlol = new MessageEmbed() 12 | .setColor(client.config.colorhex) 13 | .setTitle(`Update Bans`) 14 | .setDescription(`Please confirm that you wish to update your guilds ban list to include all bans from our list.\n\n**Note:** This process may take awhile, and cannot be easily stopped or un-done.\n\n**Do you still wish to continue?**\n✅ - Yes, update bans.\n❌ - No, cancel command.`) 15 | .setThumbnail(`${client.user.displayAvatarURL()}`) 16 | .setTimestamp() 17 | .setFooter(`${client.config.copyright}`) 18 | 19 | message.channel.send(someembedlol).then(balls => { 20 | balls.react('✅').then(() => balls.react('❌')); 21 | const johncena = (reaction, user) => { 22 | return ['✅', '❌'].includes(reaction.emoji.name) && user.bot == false; 23 | }; 24 | balls.awaitReactions(johncena, { max: 1, time: ms("25m")}).then(collected => { 25 | const react23847= collected.first(); 26 | if(react23847.emoji.name === '✅') { 27 | message.channel.send(`Please Wait! We are beginning the process now...`).then(msg => { 28 | msg.delete({ timeout: 10000 }) 29 | balls.delete() 30 | message.delete() 31 | }).catch(e => {if(client.config.debugmode) return console.log(e);}) 32 | setTimeout(() => { 33 | con.query(`SELECT * FROM bannedusers`, async (err, row) => { 34 | if(err) throw err; 35 | for (let data of row) { 36 | try { 37 | message.guild.members.ban(`${data.userid}`, { 38 | reason: `${data.reason} - ${client.user.tag}` 39 | }); 40 | } catch(e) {} 41 | } 42 | let embedguild = message.guild 43 | let theguild = client.guilds.cache.get(client.config.loggingguild) 44 | let deChannel = theguild.channels.cache.get(client.config.updatebanslogs) 45 | const embed = new MessageEmbed() 46 | .setColor(client.config.colorhex) 47 | .setTitle(`${message.guild.name} Updated Bans!`) 48 | .setDescription(`**__Guild Info__**\n\n**Guild Name:** ${embedguild.name}\n**Guild ID:** ${embedguild.id}\n**Member(s):** ${embedguild.members.cache.size}\n\n**Runner Tag:** ${message.author.tag}\n**Runner ID:** ${message.author.id}`) 49 | .setThumbnail(`${client.user.displayAvatarURL()}`) 50 | .setTimestamp() 51 | .setFooter(`${client.config.copyright}`) 52 | 53 | deChannel.send(embed).catch(err => {if(client.config.debugmode) return console.log(err);}); 54 | 55 | }); 56 | }, 6000); 57 | } 58 | if(react23847.emoji.name === '❌') { 59 | return message.channel.send(`Cancelling update bans process...`).then(msg => { 60 | msg.delete({ timeout: 10000 }) 61 | balls.delete() 62 | message.delete() 63 | }).catch(e => {if(client.config.debugmode) return console.log(e);}) 64 | } 65 | }) 66 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 67 | 68 | } 69 | 70 | exports.info = { 71 | name: "updatebans", 72 | description: "Update your servers bans to match those of the database!", 73 | useAliases: true, 74 | aliases: ['update'] 75 | } -------------------------------------------------------------------------------- /commands/admin/whitelist.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | exports.run = async (client, message, args, con) => { 4 | 5 | try { 6 | if(message.channel.type === "dm") return; 7 | 8 | if(!message.member.hasPermission('ADMINISTRATOR')) return message.channel.send(`You are missing the permission(s) \`ADMINISTRATOR\`.`).catch(e => {}); 9 | 10 | if (!args[0]) return message.channel.send(`Please define a user ID to add.`).then(msg => { 11 | msg.delete({ timeout: 12000 }) 12 | message.delete() 13 | }).catch(e => { if (client.config.debugmode) return console.log(e); }); 14 | 15 | var founduser; 16 | if (message.mentions.users.first()) { 17 | founduser = await client.users.fetch(message.mentions.users.first().id); 18 | } else if (!isNaN(args[0])) { 19 | founduser = await client.users.fetch(args[0]); 20 | } else { 21 | return message.channel.send("Please provide a user for me to add, it can be a mention or id.").then(msg => { 22 | msg.delete({ timeout: 12000 }) 23 | message.delete() 24 | }).catch(e => { if (client.config.debugmode) return console.log(e);}); 25 | }; 26 | 27 | if (founduser == undefined) return message.channel.send(`That user was not found.`).then(msg => { 28 | msg.delete({ timeout: 12000 }) 29 | message.delete() 30 | }).catch(e => { if (client.config.debugmode) return console.log(e);}); 31 | 32 | await con.query(`SELECT * FROM whitelist WHERE userid="${founduser.id}" AND guildid='${message.guild.id}'`, async (err, row) => { 33 | if(row.length) return message.channel.send(`That user is already whitelist in the database.`).then(msg => { 34 | msg.delete({ timeout: 12000 }) 35 | message.delete() 36 | }).catch(e => { if (client.config.debugmode) return console.log(e); }); 37 | 38 | 39 | await con.query(`INSERT INTO whitelist (guildid, userid, enforcerid) VALUES ('${message.guild.id}', '${founduser.id}', '${message.author.id}')`, async (err, row) => { 40 | const embed = new MessageEmbed() 41 | .setColor(client.config.colorhex) 42 | .setTitle(`Whitelist Added!`) 43 | .setDescription(`**Member:** ${founduser.tag}\n**Enforced By:** ${message.author.tag}`) 44 | .setThumbnail(`${client.user.displayAvatarURL()}`) 45 | .setTimestamp() 46 | .setFooter(`${client.config.copyright}`) 47 | 48 | message.channel.send(embed).then(msg => { 49 | msg.delete({ timeout: 12000 }) 50 | message.delete() 51 | }).catch(e => { if (client.config.debugmode) return console.log(e); }); 52 | }); 53 | }); 54 | 55 | } catch (e) { 56 | console.log(e) 57 | } 58 | } 59 | 60 | exports.info = { 61 | name: "whitelist", 62 | description: "This is a command for the owner of the bot...", 63 | useAliases: true, 64 | aliases: ['addwhitelist', 'newwhitelist', 'createwhitelist'] 65 | } -------------------------------------------------------------------------------- /commands/manager/acceptappeal.js: -------------------------------------------------------------------------------- 1 | let i = 0; 2 | const { MessageEmbed } = require('discord.js'); 3 | exports.run = async (client, message, args, con) => { 4 | 5 | try { 6 | 7 | con.query(`SELECT * FROM staff WHERE userid='${message.author.id}'`, async (err, row) => { 8 | if (!row.length) return message.channel.send(`You don't have permissions to use this command.`).then(msg => { 9 | msg.delete({ timeout: 12000 }) 10 | message.delete() 11 | }).catch(e => { if (client.config.debugmode) return console.log(e); }); 12 | 13 | if(!client.config.appeals.enabled) return message.channel.send(`This module is disabled.`).then(msg => { 14 | msg.delete({ timeout: 12000 }) 15 | message.delete() 16 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 17 | 18 | if(!client.config.appeals.useBuiltInAppeals) return message.channel.send(`This module is disabled.`).then(msg => { 19 | msg.delete({ timeout: 12000 }) 20 | message.delete() 21 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 22 | 23 | if(!args[0]) return message.channel.send(`Please define an appeal ID to accept.`).then(msg => { 24 | msg.delete({ timeout: 12000 }) 25 | message.delete() 26 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 27 | 28 | con.query(`SELECT * FROM appeals WHERE uniqueid="${args[0]}" AND active='true'`, (err, row) => { 29 | if(err) return console.log(err); 30 | if(!row[0]) { 31 | message.channel.send(`That appeal was either inactive, or I was unable to find it.`) 32 | } else { 33 | let deUser = row[0].userid 34 | con.query(`SELECT * FROM bannedusers WHERE userid='${row[0].userid}'`, (err, row) => { 35 | 36 | if (err) return message.channel.send(`Something went wrong when removing that user to the system.`).then(msg => { 37 | msg.delete({ timeout: 12000 }) 38 | message.delete() 39 | if (client.config.debugmode) return console.log(err); 40 | }).catch(e => { if (client.config.debugmode) return console.log(e); }); 41 | 42 | if (!row.length) { 43 | message.channel.send(`That user is not in the database.`).then(msg => { 44 | msg.delete({ timeout: 12000 }) 45 | message.delete() 46 | }); 47 | } else { 48 | 49 | let founduser = client.users.cache.get(row[0].userid) 50 | if (!founduser) return message.channel.send(`I was unable to find that user.`).then(msg => { 51 | msg.delete({ timeout: 12000 }) 52 | message.delete() 53 | }).catch(e => { if (client.config.debugmode) return console.log(e); }); 54 | 55 | con.query(`DELETE FROM bannedusers WHERE userid='${row[0].userid}' `, async(erro, rowo) => { 56 | 57 | const thecase = new MessageEmbed() 58 | .setColor(client.config.colorhex) 59 | .setTitle(`Ban Removed!`) 60 | .setDescription(`**${founduser.tag}** was successfully un-banned!`) 61 | .setThumbnail(`${client.user.displayAvatarURL()}`) 62 | .setTimestamp() 63 | .setFooter(`${client.config.copyright}`) 64 | message.channel.send(thecase).then(msg => { msg.delete({ timeout: 12000 }) }).catch(e => { if (client.config.debugmode) return console.log(e); }); 65 | 66 | con.query(`SELECT * FROM loggingchannels;`, async function(error, rows) { 67 | if (error) throw error; 68 | con.query(`SELECT * FROM bannedusers WHERE userid='${deUser}'`, async function(err, res) { 69 | if (err) throw err; 70 | const banned = new MessageEmbed() 71 | .setColor(`${client.config.colorhex}`) 72 | .setTitle(`Ban Revoked!`) 73 | .setDescription(`User <@${deUser}> (${founduser.tag}) has been unbanned!.\nTheir case ID still exists in our database.`) 74 | .setThumbnail(`${client.user.displayAvatarURL()}`) 75 | .setTimestamp() 76 | .setFooter(`${client.config.copyright}`) 77 | for (let data of rows) { 78 | let channel = client.channels.cache.find(c => c.id === data.channelid); 79 | if (channel) channel.send(banned).catch(() => {}); 80 | }; 81 | con.query(`SELECT * FROM guilds WHERE autounbans='true' AND active='true'`, async(err, row) => { 82 | if (err) throw err; 83 | con.query(`UPDATE appeals SET active='fase' WHERE uniqueid="${args[0]}"`, (err, row) => {}); 84 | for (let data of row) { 85 | let guild = client.guilds.cache.find(g => g.id === data.id); 86 | if (guild) guild.members.unban(deUser).catch(() => {}); 87 | }; 88 | }); 89 | try { 90 | let someuser = client.users.cache.get(deUser) 91 | const embed = new MessageEmbed() 92 | .setTitle(`Appeal Accepted!`) 93 | .setColor(`${client.config.colorhex}`) 94 | .setThumbnail(`${client.user.displayAvatarURL()}`) 95 | .setDescription("Your appeal was accepted!\nAny servers with auto-unbans toggled `true` you will be un-banned in.") 96 | .setTimestamp() 97 | .setFooter(`${client.config.copyright}`) 98 | 99 | someuser.send(embed).catch(e => {if(client.config.debugmode) return console.log(e);}); 100 | message.delete().catch(e => {if(client.config.debugmode) return console.log(e);}); 101 | } catch(e) {} 102 | }); 103 | }); 104 | 105 | }); 106 | } 107 | }); 108 | 109 | } 110 | 111 | }); 112 | }); 113 | } catch(e) { 114 | console.log(e) 115 | } 116 | } 117 | 118 | 119 | exports.info = { 120 | name: "acceptappeal", 121 | description: "This is a command for the owner of the bot...", 122 | useAliases: true, 123 | aliases: ['appealaccept'] 124 | } -------------------------------------------------------------------------------- /commands/manager/acceptreport.js: -------------------------------------------------------------------------------- 1 | let i = 0; 2 | const { MessageEmbed } = require('discord.js'); 3 | exports.run = async (client, message, args, con) => { 4 | 5 | try { 6 | 7 | con.query(`SELECT * FROM staff WHERE userid='${message.author.id}'`, async (err, row) => { 8 | if (!row.length) return message.channel.send(`You don't have permissions to use this command.`).then(msg => { 9 | msg.delete({ timeout: 12000 }) 10 | message.delete() 11 | }).catch(e => { if (client.config.debugmode) return console.log(e); }); 12 | 13 | if(!client.config.reports.enabled) return message.channel.send(`This module is disabled.`).then(msg => { 14 | msg.delete({ timeout: 12000 }) 15 | message.delete() 16 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 17 | 18 | if(!client.config.reports.useBuiltInReports) return message.channel.send(`This module is disabled.`).then(msg => { 19 | msg.delete({ timeout: 12000 }) 20 | message.delete() 21 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 22 | 23 | if(!args[0]) return message.channel.send(`Please define a report ID to accept.`).then(msg => { 24 | msg.delete({ timeout: 12000 }) 25 | message.delete() 26 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 27 | 28 | con.query(`SELECT * FROM reports WHERE uniqueid="${args[0]}" AND active='true'`, (err, row) => { 29 | if(err) return console.log(err); 30 | if(!row[0]) { 31 | message.channel.send(`That report was either inactive, or I was unable to find it.`) 32 | } else { 33 | let deUser = row[0].reportedid 34 | const moment = require('moment'); 35 | let datetime = moment().format(client.config.date_format); 36 | 37 | const question = new MessageEmbed() 38 | .setColor(`${client.config.colorhex}`) 39 | .setDescription(`**What is the final ban reason?**`) 40 | .setTimestamp() 41 | .setFooter(`${client.config.copyright}`) 42 | 43 | const filter = m => m.author.id === message.author.id; 44 | 45 | message.channel.send(question).then((mnmnnrp) => { 46 | message.channel.awaitMessages(filter, { max: 1, time: 100000, errors: ['time'] }) 47 | .then(async collected2 => { 48 | let reason = collected2.first().content 49 | 50 | var image; 51 | 52 | try { 53 | image = reason.split("[")[1].replace("]", ""); 54 | } catch (e) { 55 | image = `${client.config.defaultimage}` 56 | } 57 | 58 | var refinedReason = reason.split("[")[0].replace("'", "").replace("`", "").replace("\\", "").replace(";", "") 59 | 60 | await con.query(`INSERT INTO bannedusers (userid, usertag, reason, proof, bandate) VALUES ('${row[0].reportedid}', "${row[0].reportedtag}", '${refinedReason}', '${image}', '${datetime}')`, async(erro, rowo) => { 61 | 62 | await con.query(`SELECT count(caseid) as total FROM cases`, async (errol, rowol) => { 63 | let banid = rowol[0].total + 1 64 | let atag = message.author.tag.replace("'", "").replace("`", "").replace("\\", "").replace(";", "") 65 | await con.query(`INSERT INTO cases (caseid, caseuserid, caseusertag, casereason, enforcerid, enforcertag) VALUES ('${banid}', '${row[0].reportedid}', "${row[0].reportedtag}", '${refinedReason}', '${message.author.id}', "${atag}")`, async(erroll, rowoll) => { 66 | 67 | await con.query(`UPDATE bannedusers SET caseid='${banid}' WHERE userid='${row[0].reportedid}'`, async (errolll, rowolll) => { 68 | 69 | await con.query(`UPDATE reports SET active='false' uniqueid="${args[0]}"`, async (errollll, rowollll) => { 70 | 71 | const thecase = new MessageEmbed() 72 | .setColor(client.config.colorhex) 73 | .setTitle(`Ban Added!`) 74 | .setDescription(`**${row[0].reportedtag}** was successfully banned!\n**Reason:** ${refinedReason}`) 75 | .setImage(`${image}`) 76 | .setTimestamp() 77 | .setFooter(`${client.config.copyright}`) 78 | message.channel.send(thecase).then(msg => { msg.delete({ timeout: 12000 }) }).catch(e => { if (client.config.debugmode) return console.log(e); }); 79 | message.delete().catch(e => { if (client.config.debugmode) return console.log(e); }); 80 | 81 | try { 82 | 83 | setTimeout(function() { 84 | 85 | // PlutoTheDev#1000's Better Logging System (if you're reading this, I'm actually gay) 86 | 87 | con.query(`SELECT * FROM loggingchannels;`, async function(error, rows) { 88 | if (error) throw error; 89 | con.query(`SELECT * FROM bannedusers WHERE userid='${row[0].reportedid}'`, async function(err, res) { 90 | if (err) throw err; 91 | let deMember = await client.users.fetch(res[0].userid) 92 | const banned = new MessageEmbed() 93 | .setColor(client.config.colorhex) 94 | .setTitle(`Ban Hammer!`) 95 | .setDescription(`**Member:** ${deMember.tag} - (${res[0].userid})\n**Reason:** ${res[0].reason}\n**Case #:** ${res[0].caseid}\n**Severity:** High\n**Ban Date:** ${res[0].bandate}`) 96 | .setTimestamp() 97 | .setFooter(`${client.config.copyright}`) 98 | try { banned.setImage(`${res[0].proof}`) } catch {}; 99 | for (let data of rows) { 100 | let channel = client.channels.cache.find(c => c.id === data.channelid); 101 | if (channel) channel.send(banned).catch(() => {}); 102 | }; 103 | con.query(`SELECT * FROM guilds WHERE autobans='true' AND active='true'`, async(err, row) => { 104 | if (err) throw err; 105 | 106 | for (let data of row) { 107 | let guild = client.guilds.cache.find(g => g.id === data.id); 108 | if (guild) guild.members.ban(`${res[0].userid}`, { 109 | reason: `${res[0].reason} - ${client.user.tag}` 110 | }); 111 | }; 112 | }); 113 | }); 114 | }); 115 | 116 | const embed = new MessageEmbed() 117 | .setColor(`${client.config.colorhex}`) 118 | .setTitle(`You Were Banned!`) 119 | .setDescription(`**Reason:** ${refinedReason}\n\n**You can appeal this ban [here](https://hyperz.dev/discord)**`) 120 | .setThumbnail(`${client.user.displayAvatarURL()}`) 121 | .setImage(`${image}`) 122 | .setTimestamp() 123 | .setFooter(`${client.config.copyright}`) 124 | 125 | try { 126 | const founduser = client.users.cache.get(row[0].reportedid) 127 | founduser.send(embed) 128 | } catch (e) { 129 | if (client.config.debugmode) return console.log(e); 130 | } 131 | }, 3000); 132 | 133 | 134 | 135 | } catch (e) { 136 | if (client.config.debugmode) return console.log(e); 137 | } 138 | }); 139 | }); 140 | }); 141 | }); 142 | try { 143 | con.query(`SELECT * FROM reports WHERE uniqueid='${args[0]}'`, async (err, newrow) => { 144 | 145 | let someuser = client.users.cache.get(newrow[0].reporterid) 146 | const embed = new MessageEmbed() 147 | .setTitle(`Report Accepted!`) 148 | .setColor(`${client.config.colorhex}`) 149 | .setThumbnail(`${client.user.displayAvatarURL()}`) 150 | .setDescription("Your report was accepted!\nAny servers with auto-bans toggled `true` they will be banned in.") 151 | .setTimestamp() 152 | .setFooter(`${client.config.copyright}`) 153 | 154 | someuser.send(embed).catch(e => {if(client.config.debugmode) return console.log(e);}); 155 | message.delete().catch(e => {if(client.config.debugmode) return console.log(e);}); 156 | 157 | }); 158 | } catch(e) { 159 | if(client.config.debugmode) return console.log(e); 160 | } 161 | }); 162 | 163 | }); 164 | mnmnnrp.delete({ timeout: 14000 }).catch(err => {}) 165 | }); 166 | } 167 | 168 | }); 169 | }); 170 | } catch(e) { 171 | console.log(e) 172 | } 173 | } 174 | 175 | 176 | exports.info = { 177 | name: "acceptreport", 178 | description: "This is a command for the owner of the bot...", 179 | useAliases: true, 180 | aliases: ['reportaccept'] 181 | } -------------------------------------------------------------------------------- /commands/manager/ban.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const ms = require('ms') 3 | exports.run = async (client, message, args, con) => { 4 | 5 | try { 6 | 7 | if(message.channel.type === 'dm') return message.channel.send(`Please only run commands in a Discord server.`).then(msg => { 8 | msg.delete({ timeout: 12000 }) 9 | }).catch(e => {}); 10 | 11 | message.delete().catch(e => {}); 12 | var gmessage; 13 | gmessage = message; 14 | 15 | await con.query(`SELECT * FROM staff WHERE userid='${message.author.id}'`, async (err, row) => { 16 | if(err) throw err; 17 | if(!row[0]) { 18 | return message.channel.send(`You don't have permission to use this command.`); 19 | } 20 | }); 21 | 22 | const filter = m => m.author.id === message.author.id; 23 | 24 | const starter = new Discord.MessageEmbed() 25 | .setColor(client.config.colorhex) 26 | .setDescription(`**Please state the Users ID.**`) 27 | 28 | const prompt1 = new Discord.MessageEmbed() 29 | .setColor(client.config.colorhex) 30 | .setDescription(`**Please state the reason for the ban.**`) 31 | 32 | const prompt2 = new Discord.MessageEmbed() 33 | .setColor(client.config.colorhex) 34 | .setDescription(`**Please input an image link as evidence to backup the ban placed on this user.**`) 35 | 36 | try { 37 | message.channel.send(starter).then(async message => { 38 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 39 | .then(async collected => { 40 | 41 | let content1; 42 | content1 = collected.first().content 43 | 44 | await con.query(`SELECT * FROM bannedusers WHERE userid='${content1}'`, async (err, row) => { 45 | if(err) throw err; 46 | if(row[0]) { 47 | return message.channel.send(`That user is already banned.`); 48 | } 49 | }); 50 | 51 | 52 | message.channel.send(prompt1).then(async message => { 53 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 54 | .then(async collected => { 55 | 56 | let content2; 57 | 58 | content2 = collected.first().content 59 | 60 | message.channel.send(prompt2).then(async message => { 61 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 62 | .then(async collected => { 63 | let content3; 64 | content3 = collected.first().content; 65 | let test = await client.users.fetch(content1) 66 | let founded = test.tag.replace("'", "").replace("`", "").replace("\\", "").replace(";", "") 67 | let reason = content2 68 | let image; 69 | 70 | try { 71 | image = content3 72 | } catch (e) { 73 | image = `${client.config.defaultimage}` 74 | } 75 | let refinedReason = reason.split("[")[0].replace("'", "").replace("`", "").replace("\\", "").replace(";", "") 76 | 77 | const moment = require('moment'); 78 | let datetime = moment().format(client.config.date_format); 79 | 80 | await con.query(`INSERT INTO bannedusers (userid, usertag, reason, proof, bandate) VALUES ('${content1}', "${founded}", '${refinedReason}', '${image}', '${datetime}')`, async(erro, rowo) => { 81 | await con.query(`SELECT count(caseid) as total FROM cases`, async (errol, rowol) => { 82 | let banid = rowol[0].total + 1 83 | let atag = gmessage.author.tag.replace("'", "").replace("`", "").replace("\\", "").replace(";", "") 84 | await con.query(`INSERT INTO cases (caseid, caseuserid, caseusertag, casereason, enforcerid, enforcertag) VALUES ('${banid}', '${content1}', "${founded}", '${refinedReason}', '${message.author.id}', "${atag}")`, async(erroll, rowoll) => { 85 | await con.query(`UPDATE bannedusers SET caseid='${banid}' WHERE userid='${content1}'`, async (errolll, rowolll) => { 86 | if(errolll) throw errolll; 87 | const thecase = new Discord.MessageEmbed() 88 | .setColor(client.config.colorhex) 89 | .setTitle(`Ban Added!`) 90 | .setDescription(`**${founded}** was successfully banned!\n**Reason:** ${refinedReason}`) 91 | .setImage(`${image}`) 92 | .setTimestamp() 93 | .setFooter(`${client.config.copyright}`) 94 | message.channel.send(thecase).then(msg => { 95 | msg.delete({ timeout: 14000 }) 96 | }); 97 | 98 | const flippers = new Discord.MessageEmbed() 99 | .setColor(`${client.config.colorhex}`) 100 | .setTitle(`You Were Banned!`) 101 | .setDescription(`**Reason:** ${refinedReason}\n\n**You can appeal this ban [here](https://discord.gg/y94hgUe463)**`) 102 | .setThumbnail(`${client.user.displayAvatarURL()}`) 103 | .setImage(`${image}`) 104 | .setTimestamp() 105 | .setFooter(`${client.config.copyright}`) 106 | 107 | try { 108 | const founduser = client.users.cache.get(content1) 109 | founduser.send(flippers) 110 | } catch (e) { 111 | if (client.config.debugmode) return console.log(e); 112 | } 113 | 114 | // The Enforcer Shit 115 | let enfmember = content1; 116 | let enfreason = content2; 117 | let enfembed = new Discord.MessageEmbed() 118 | .setColor(client.config.colorhex) 119 | .setTitle(`Ban Hammer!`) 120 | .setDescription(`**Member:** ${founded} - (${content1})\n**Reason:** ${content2}\n**Case #:** ${banid}\n**Severity:** High\n**Ban Date:** ${datetime}`) 121 | .setTimestamp() 122 | .setImage(image) 123 | .setFooter(`${client.config.copyright}`); 124 | client.utils.enforcer(client, con, enfmember, enfreason, enfembed) 125 | }); 126 | }); 127 | }); 128 | }); 129 | 130 | }).catch(e => {}); 131 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 132 | 133 | }).catch(e => {}); 134 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 135 | 136 | }).catch(e => {}); 137 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 138 | 139 | } catch(e) { 140 | if(client.config.debugmode) return console.log(e); 141 | } 142 | 143 | } catch(e) { 144 | if(client.config.debugmode) return console.log(e); 145 | } 146 | 147 | } 148 | 149 | exports.info = { 150 | name: "ban", 151 | description: "This is a command for the owner of the bot...", 152 | useAliases: false, 153 | aliases: [] 154 | } -------------------------------------------------------------------------------- /commands/manager/blacklist.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const ms = require('ms') 3 | exports.run = async (client, message, args, con) => { 4 | 5 | try { 6 | 7 | if(message.channel.type === 'dm') return message.channel.send(`Please only run commands in a Discord server.`).then(msg => { 8 | msg.delete({ timeout: 12000 }) 9 | }).catch(e => {}); 10 | 11 | message.delete().catch(e => {}); 12 | var gmessage; 13 | gmessage = message; 14 | 15 | await con.query(`SELECT * FROM staff WHERE userid='${message.author.id}'`, async (err, row) => { 16 | if(err) throw err; 17 | if(!row[0]) { 18 | return message.channel.send(`You don't have permission to use that command.`); 19 | } 20 | }); 21 | 22 | const filter = m => m.author.id === message.author.id; 23 | 24 | const starter = new Discord.MessageEmbed() 25 | .setColor(client.config.colorhex) 26 | .setDescription(`**Please provide the User ID of the user you wish to blacklist**\nEx. 704094587836301392`) 27 | 28 | const prompt1 = new Discord.MessageEmbed() 29 | .setColor(client.config.colorhex) 30 | .setDescription(`**Please provide the reason you wish to blacklist this user with.**`) 31 | 32 | const prompt2 = new Discord.MessageEmbed() 33 | .setColor(client.config.colorhex) 34 | .setDescription(`**Please send an image link as proof of this users offenses.**`) 35 | 36 | const prompt3 = new Discord.MessageEmbed() 37 | .setColor(client.config.colorhex) 38 | .setDescription(`**Please provide any notes on the situation if you have any.**`) 39 | 40 | try { 41 | message.channel.send(starter).then(async message => { 42 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 43 | .then(async collected => { 44 | 45 | let content1; 46 | content1 = collected.first().content 47 | 48 | await con.query(`SELECT * FROM blacklistedusers WHERE userid='${content1}'`, async (err, row) => { 49 | if(err) throw err; 50 | if(row[0]) { 51 | return message.channel.send(`That user is already blacklisted.`); 52 | } 53 | }); 54 | 55 | message.channel.send(prompt1).then(async message => { 56 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 57 | .then(async collected => { 58 | 59 | let content2; 60 | content2 = collected.first().content 61 | 62 | message.channel.send(prompt2).then(async message => { 63 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 64 | .then(async collected => { 65 | 66 | let content3; 67 | content3 = collected.first().content 68 | 69 | message.channel.send(prompt3).then(async message => { 70 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 71 | .then(async collected => { 72 | 73 | let content4; 74 | content4 = collected.first().content 75 | 76 | let image; 77 | try { 78 | image = content3 79 | } catch (e) { 80 | image = `${client.config.defaultimage}` 81 | } 82 | 83 | const moment = require('moment'); 84 | let datetime = moment().format(client.config.date_format); 85 | 86 | await con.query(`INSERT INTO blacklistedusers (userid, caseid, reason, proof, notes) VALUES ('${content1}', 'cs', "${content2}", '${image}', "${content4}")`, async (err, row) => { 87 | if(err) throw err; 88 | await con.query(`SELECT count(caseid) as total FROM cases`, async (errol, rowol) => { 89 | let banid = rowol[0].total + 1 90 | let atag = gmessage.author.tag.replace("'", "").replace("`", "").replace("\\", "").replace(";", "") 91 | let test = await client.users.fetch(content1) 92 | let founduser = test.tag.replace("'", "").replace("`", "").replace("\\", "").replace(";", "") 93 | await con.query(`INSERT INTO cases (caseid, caseuserid, caseusertag, casereason, enforcertag, enforcerid) VALUES ('${banid}', '${content1}', '${founduser}', "${content2}", '${atag}', '${gmessage.author.id}')`, async (err, row) => { 94 | if(err) throw err; 95 | await con.query(`UPDATE blacklistedusers SET caseid='${banid}' WHERE userid='${content1}'`, async (err, row) => { 96 | if(err) throw err; 97 | const thecase = new Discord.MessageEmbed() 98 | .setColor(client.config.colorhex) 99 | .setTitle(`Blacklisted!`) 100 | .setDescription(`**${founduser}** was successfully blacklisted!\n**Reason:** ${content2}`) 101 | .setImage(`${image}`) 102 | .setTimestamp() 103 | .setFooter(`${client.config.copyright}`) 104 | message.channel.send(thecase).then(msg => { 105 | msg.delete({ timeout: 14000 }) 106 | }); 107 | 108 | // Logging the stuffs 109 | await con.query(`SELECT * FROM loggingchannels WHERE type='1'`, async (err, row) => { 110 | if(err) throw err; 111 | if(row[0]) { 112 | let mails = new Discord.MessageEmbed() 113 | .setColor(client.config.colorhex) 114 | .setTitle(`Blacklisted!`) 115 | .setDescription(`**Member:** ${founduser} - (${content1})\n**Reason:** ${content2}\n**Case #:** ${banid}\n**Severity:** Medium\n**Date / Time:** ${datetime}`) 116 | .setTimestamp() 117 | .setImage(image) 118 | .setFooter(`${client.config.copyright}`); 119 | for(let data of row) { 120 | let deChannel = await client.channels.cache.get(data.channelid) 121 | deChannel.send(mails).catch(e => {}); 122 | } 123 | } 124 | }); 125 | 126 | const flipembed = new Discord.MessageEmbed() 127 | .setColor(`${client.config.colorhex}`) 128 | .setTitle(`You Were Blacklisted!`) 129 | .setDescription(`**Reason:** ${content2}\n\n**You can appeal this ban [here](https://discord.gg/y94hgUe463)**`) 130 | .setThumbnail(`${client.user.displayAvatarURL()}`) 131 | .setImage(`${image}`) 132 | .setTimestamp() 133 | .setFooter(`${client.config.copyright}`) 134 | 135 | try { 136 | const founduser = client.users.cache.get(content1) 137 | founduser.send(flipembed) 138 | } catch (e) { 139 | if (client.config.debugmode) return console.log(e); 140 | } 141 | 142 | }); 143 | }); 144 | }); 145 | }); 146 | 147 | }).catch(e => {}); 148 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 149 | 150 | }).catch(e => {}); 151 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 152 | 153 | }).catch(e => {}); 154 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 155 | 156 | }).catch(e => {}); 157 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 158 | 159 | } catch(e) { 160 | if(client.config.debugmode) return console.log(e); 161 | } 162 | 163 | } catch(e) { 164 | if(client.config.debugmode) return console.log(e); 165 | } 166 | 167 | } 168 | 169 | exports.info = { 170 | name: "blacklist", 171 | description: "Blacklist a user via the bot (owners only).", 172 | useAliases: false, 173 | aliases: [] 174 | } -------------------------------------------------------------------------------- /commands/manager/denyappeal.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js') 2 | exports.run = async (client, message, args, con) => { 3 | 4 | try { 5 | 6 | con.query(`SELECT * FROM staff WHERE userid='${message.author.id}'`, async (err, row) => { 7 | if (!row.length) return message.channel.send(`You don't have permissions to use this command.`).then(msg => { 8 | msg.delete({ timeout: 12000 }) 9 | message.delete() 10 | }).catch(e => { if (client.config.main_config.debugmode) return console.log(e); }); 11 | 12 | if(!client.config.appeals.enabled) return message.channel.send(`This module is disabled.`).then(msg => { 13 | msg.delete({ timeout: 12000 }) 14 | message.delete() 15 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 16 | 17 | if(!client.config.appeals.useBuiltInAppeals) return message.channel.send(`This module is disabled.`).then(msg => { 18 | msg.delete({ timeout: 12000 }) 19 | message.delete() 20 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 21 | 22 | if(message.channel.type === "dm") return; 23 | if(!args[0]) return message.channel.send(`Please define an appeal ID to deny.`).then(msg => { 24 | msg.delete({ timeout: 12000 }) 25 | message.delete() 26 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 27 | 28 | if(!args[1]) return message.channel.send(`Please define a reason for denial.`).then(msg => { 29 | msg.delete({ timeout: 12000 }) 30 | message.delete() 31 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 32 | 33 | con.query(`SELECT * FROM appeals WHERE uniqueid='${args[0]}' AND active='true'`, (err, row) => { 34 | if(err) return console.log(err); 35 | if(!row[0]) { 36 | message.channel.send(`That appeal was either inactive, or I was unable to find it.`) 37 | } else { 38 | con.query(`UPDATE appeals SET active='false' WHERE uniqueid='${args[0]}'`, (err, row) => {}); 39 | let someuser = client.users.cache.get(row[0].userid) 40 | const embed = new MessageEmbed() 41 | .setTitle(`Appeal Denied!`) 42 | .setColor(`${client.config.colorhex}`) 43 | .setThumbnail(`${client.user.displayAvatarURL()}`) 44 | .setDescription(`Your appeal was denied!\n**Reason:** ${args.slice(1).join(" ")}`) 45 | .setTimestamp() 46 | .setFooter(`${client.config.copyright}`) 47 | 48 | someuser.send(embed).catch(e => {if(client.config.debugmode) return console.log(e);}); 49 | message.channel.send(`Appeal denied`).then(msg => { 50 | msg.delete({ timeout: 10000 }) 51 | }); 52 | message.delete().catch(e => {if(client.config.debugmode) return console.log(e);}); 53 | } 54 | 55 | }); 56 | }); 57 | } catch(e) { 58 | if(client.config.debugmode) return console.log(e); 59 | } 60 | } 61 | 62 | exports.info = { 63 | name: "denyappeal", 64 | description: "This is a command for the owner of the bot...", 65 | useAliases: true, 66 | aliases: ['appealdeny'] 67 | } -------------------------------------------------------------------------------- /commands/manager/denyreport.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js') 2 | exports.run = async (client, message, args, con) => { 3 | 4 | try { 5 | 6 | con.query(`SELECT * FROM staff WHERE userid='${message.author.id}'`, async (err, row) => { 7 | if (!row.length) return message.channel.send(`You don't have permissions to use this command.`).then(msg => { 8 | msg.delete({ timeout: 12000 }) 9 | message.delete() 10 | }).catch(e => { if (config.main_config.debugmode) return console.log(e); }); 11 | 12 | if(!client.config.reports.enabled) return message.channel.send(`This module is disabled.`).then(msg => { 13 | msg.delete({ timeout: 12000 }) 14 | message.delete() 15 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 16 | 17 | if(!client.config.reports.useBuiltInReports) return message.channel.send(`This module is disabled.`).then(msg => { 18 | msg.delete({ timeout: 12000 }) 19 | message.delete() 20 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 21 | 22 | if(message.channel.type === "dm") return; 23 | if(!args[0]) return message.channel.send(`Please define a report ID to deny.`).then(msg => { 24 | msg.delete({ timeout: 12000 }) 25 | message.delete() 26 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 27 | 28 | if(!args[1]) return message.channel.send(`Please define a reason for denial.`).then(msg => { 29 | msg.delete({ timeout: 12000 }) 30 | message.delete() 31 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 32 | 33 | con.query(`SELECT * FROM reports WHERE uniqueid='${args[0]}' AND active='true'`, (err, row) => { 34 | if(err) return console.log(err); 35 | if(!row[0]) { 36 | message.channel.send(`That report was either inactive, or I was unable to find it.`) 37 | } else { 38 | con.query(`UPDATE reports SET active='false' WHERE uniqueid='${args[0]}'`, (err, row) => {}); 39 | let someuser = client.users.cache.get(row[0].reporterid) 40 | if(!someuser) return; 41 | const embed = new MessageEmbed() 42 | .setTitle(`Report Denied!`) 43 | .setColor(`${client.config.colorhex}`) 44 | .setThumbnail(`${client.user.displayAvatarURL()}`) 45 | .setDescription(`Your report was denied!\n**Reason:** ${args.slice(1).join(" ")}`) 46 | .setTimestamp() 47 | .setFooter(`${client.config.copyright}`) 48 | 49 | someuser.send(embed).catch(e => {if(client.config.debugmode) return console.log(e);}); 50 | message.channel.send(`Report denied`).then(msg => { 51 | msg.delete({ timeout: 10000 }) 52 | }); 53 | message.delete().catch(e => {if(client.config.debugmode) return console.log(e);}); 54 | } 55 | 56 | }); 57 | }); 58 | } catch(e) { 59 | if(client.config.debugmode) return console.log(e); 60 | } 61 | } 62 | 63 | exports.info = { 64 | name: "denyreport", 65 | description: "This is a command for the owner of the bot...", 66 | useAliases: true, 67 | aliases: ['reportdeny'] 68 | } -------------------------------------------------------------------------------- /commands/manager/modify.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const ms = require('ms') 3 | exports.run = async (client, message, args, con) => { 4 | 5 | try { 6 | 7 | if(message.channel.type === 'dm') return message.channel.send(`Please only run commands in a Discord server.`).then(msg => { 8 | msg.delete({ timeout: 12000 }) 9 | }).catch(e => {}); 10 | 11 | message.delete().catch(e => {}); 12 | var gmessage; 13 | gmessage = message; 14 | 15 | await con.query(`SELECT * FROM staff WHERE userid='${message.author.id}'`, async (err, row) => { 16 | if(err) throw err; 17 | if(!row[0]) { 18 | return message.channel.send(`You don't have permission to use this command.`); 19 | } 20 | }); 21 | 22 | const filter = m => m.author.id === message.author.id; 23 | 24 | const starter = new Discord.MessageEmbed() 25 | .setColor(client.config.colorhex) 26 | .setDescription(`**What are you modifying?**\nChoose \`ban\` or \`blacklist\`.`) 27 | 28 | const prompt1 = new Discord.MessageEmbed() 29 | .setColor(client.config.colorhex) 30 | .setDescription(`**Please state the Users ID.**`) 31 | 32 | const prompt2 = new Discord.MessageEmbed() 33 | .setColor(client.config.colorhex) 34 | .setDescription(`**Please state the reason for the ban.**`) 35 | 36 | const prompt3 = new Discord.MessageEmbed() 37 | .setColor(client.config.colorhex) 38 | .setDescription(`**Please input an image link as evidence to backup the ban placed on this user.**`) 39 | 40 | try { 41 | message.channel.send(starter).then(async message => { 42 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 43 | .then(async collected => { 44 | 45 | let content1; 46 | content1 = collected.first().content.toLowerCase() 47 | 48 | if(content1 === 'ban') { 49 | 50 | message.channel.send(prompt1).then(async message => { 51 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 52 | .then(async collected => { 53 | 54 | let content2; 55 | content2 = collected.first().content 56 | 57 | await con.query(`SELECT * FROM bannedusers WHERE userid='${content2}'`, async (err, row) => { 58 | if(err) throw err; 59 | if(!row[0]) { 60 | return message.channel.send(`**That user is not currently banned.**`).catch(e => {}); 61 | } 62 | }); 63 | 64 | message.channel.send(prompt2).then(async message => { 65 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 66 | .then(async collected => { 67 | 68 | let content3; 69 | content3 = collected.first().content 70 | 71 | message.channel.send(prompt3).then(async message => { 72 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 73 | .then(async collected => { 74 | 75 | let content4; 76 | content4 = collected.first().content 77 | 78 | let founduser; 79 | founduser = await client.users.fetch(content2) 80 | 81 | let reason; 82 | reason = content3.replace("'", "").replace("`", "").replace("\\", "").replace(";", "") 83 | 84 | let image; 85 | try { 86 | image = content4 87 | } catch (e) { 88 | image = `${client.config.defaultimage}` 89 | } 90 | 91 | con.query(`UPDATE bannedusers SET reason="${reason}", proof='${image}' WHERE userid='${founduser.id}'`, async (err, row) => { 92 | if(err) throw err; 93 | let embed = new Discord.MessageEmbed() 94 | .setColor(client.config.colorhex) 95 | .setTitle(`Ban Updated!`) 96 | .setDescription(`**${founduser.id}**'s ban was updated!\n**Reason:** ${reason}`) 97 | .setImage(`${image}`) 98 | .setTimestamp() 99 | .setFooter(`${client.config.copyright}`) 100 | message.channel.send(embed).then(msg => msg.delete({ timeout: 17000 })).catch(e => {}) 101 | 102 | await con.query(`SELECT * FROM bannedusers WHERE userid='${founduser.id}'`, async (err, row) => { 103 | if(err) throw err; 104 | if(row[0]) { 105 | let caseid = row[0].caseid 106 | 107 | // The Enforcer Shit 108 | let enfmember = founduser.id; 109 | let enfreason = reason; 110 | let enfembed = new Discord.MessageEmbed() 111 | .setColor(client.config.colorhex) 112 | .setTitle(`Ban Updated!`) 113 | .setDescription(`**Member:** ${founduser.tag} - (${founduser.id})\n**Reason:** ${reason}\n**Case #:** ${caseid}\n**Severity:** High\n**Ban Date:** ${row[0].bandate}`) 114 | .setTimestamp() 115 | .setImage(image) 116 | .setFooter(`${client.config.copyright}`); 117 | client.utils.enforcer(client, con, enfmember, enfreason, enfembed) 118 | } 119 | }); 120 | 121 | }); 122 | 123 | }).catch(e => {}); 124 | }).catch(e => {}); 125 | 126 | }).catch(e => {}); 127 | }).catch(e => {}); 128 | 129 | }).catch(e => {}); 130 | }).catch(e => {}); 131 | 132 | } else if (content1 === 'blacklist') { 133 | 134 | message.channel.send(prompt1).then(async message => { 135 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 136 | .then(async collected => { 137 | 138 | let content2; 139 | content2 = collected.first().content.toLowerCase() 140 | 141 | await con.query(`SELECT * FROM blacklistedusers WHERE userid='${content2}'`, async (err, row) => { 142 | if(err) throw err; 143 | if(!row[0]) { 144 | return message.channel.send(`**That user is not currently blacklisted.**`).catch(e => {}); 145 | } 146 | }); 147 | 148 | message.channel.send(prompt2).then(async message => { 149 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 150 | .then(async collected => { 151 | 152 | let content3; 153 | content3 = collected.first().content 154 | 155 | message.channel.send(prompt3).then(async message => { 156 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 157 | .then(async collected => { 158 | 159 | let content4; 160 | content4 = collected.first().content 161 | 162 | let founduser; 163 | founduser = await client.users.fetch(content2) 164 | 165 | let reason; 166 | reason = content3.replace("'", "").replace("`", "").replace("\\", "").replace(";", "") 167 | 168 | let image; 169 | try { 170 | image = content4 171 | } catch (e) { 172 | image = `${client.config.defaultimage}` 173 | } 174 | 175 | con.query(`UPDATE blacklistedusers SET reason="${reason}", proof='${image}' WHERE userid='${founduser.id}'`, async (err, row) => { 176 | if(err) throw err; 177 | let embed = new Discord.MessageEmbed() 178 | .setColor(client.config.colorhex) 179 | .setTitle(`Blacklist Updated!`) 180 | .setDescription(`**${founduser.id}**'s blacklist was updated!\n**Reason:** ${reason}`) 181 | .setImage(`${image}`) 182 | .setTimestamp() 183 | .setFooter(`${client.config.copyright}`) 184 | message.channel.send(embed).then(msg => msg.delete({ timeout: 17000 })).catch(e => {}) 185 | 186 | await con.query(`SELECT * FROM blacklistedusers WHERE userid='${founduser.id}'`, async (err, row) => { 187 | if(err) throw err; 188 | if(row[0]) { 189 | let caseid = row[0].caseid 190 | 191 | // The Enforcer Shit 192 | let enfmember = founduser.id; 193 | let enfreason = reason; 194 | let enfembed = new Discord.MessageEmbed() 195 | .setColor(client.config.colorhex) 196 | .setTitle(`Blacklist Updated!`) 197 | .setDescription(`**Member:** ${founduser.tag} - (${founduser.id})\n**Reason:** ${reason}\n**Case #:** ${caseid}\n**Severity:** Medium\n**Image / Proof:**`) 198 | .setTimestamp() 199 | .setImage(image) 200 | .setFooter(`${client.config.copyright}`); 201 | client.utils.enforcer(client, con, enfmember, enfreason, enfembed) 202 | } 203 | }); 204 | 205 | }); 206 | 207 | }).catch(e => {}); 208 | }).catch(e => {}); 209 | 210 | }).catch(e => {}); 211 | }).catch(e => {}); 212 | 213 | }).catch(e => {}); 214 | }).catch(e => {}); 215 | 216 | } else { 217 | return message.channel.send(`**Invalid Edit Selection.**`).catch(e => {}); 218 | } 219 | 220 | }).catch(e => {}); 221 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 222 | 223 | } catch(e) { 224 | if(client.config.debugmode) return console.log(e); 225 | } 226 | 227 | } catch(e) { 228 | if(client.config.debugmode) return console.log(e); 229 | } 230 | 231 | } 232 | 233 | exports.info = { 234 | name: "modify", 235 | description: "This is a command for the owner of the bot...", 236 | useAliases: true, 237 | aliases: ['edit'] 238 | } -------------------------------------------------------------------------------- /commands/manager/staffadd.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | exports.run = async (client, message, args, con) => { 4 | 5 | try { 6 | if(message.channel.type === "dm") return; 7 | 8 | const per = client.config.owners 9 | if (!message.member.roles.cache.some(h => per.includes(h.id))) return message.channel.send(`You don't have permissions to use this command.`).then(msg => { 10 | msg.delete({ timeout: 12000 }) 11 | message.delete() 12 | }).catch(e => { if (client.config.debugmode) return console.log(e); }); 13 | 14 | if (!args[0]) return message.channel.send(`Please define a user ID to add.`).then(msg => { 15 | msg.delete({ timeout: 12000 }) 16 | message.delete() 17 | }).catch(e => { if (client.config.debugmode) return console.log(e); }); 18 | 19 | var founduser; 20 | if (message.mentions.users.first()) { 21 | founduser = await client.users.fetch(message.mentions.users.first().id); 22 | } else if (!isNaN(args[0])) { 23 | founduser = await client.users.fetch(args[0]); 24 | } else { 25 | return message.channel.send("Please provide a user for me to add, it can be a mention or id.").then(msg => { 26 | msg.delete({ timeout: 12000 }) 27 | message.delete() 28 | }).catch(e => { if (client.config.debugmode) return console.log(e);}); 29 | }; 30 | 31 | if (founduser == undefined) return message.channel.send(`That user was not found.`).then(msg => { 32 | msg.delete({ timeout: 12000 }) 33 | message.delete() 34 | }).catch(e => { if (client.config.debugmode) return console.log(e);}); 35 | 36 | await con.query(`SELECT * FROM staff WHERE userid="${founduser.id}"`, async (err, row) => { 37 | if(row.length) return message.channel.send(`That user is already in the staff database.`).then(msg => { 38 | msg.delete({ timeout: 12000 }) 39 | message.delete() 40 | }).catch(e => { if (client.config.debugmode) return console.log(e); }); 41 | 42 | 43 | await con.query(`INSERT INTO staff (userid, usertag, enforcerid, enforcertag) VALUES ("${founduser.id}", "${founduser.tag}", "${message.author.id}", "${message.author.tag}")`, async (err, row) => { 44 | const embed = new MessageEmbed() 45 | .setColor(client.config.colorhex) 46 | .setTitle(`Staff Added!`) 47 | .setDescription(`**Staff Member:** ${founduser.tag}\n**Enforced By:** ${message.author.tag}`) 48 | .setThumbnail(`${client.user.displayAvatarURL()}`) 49 | .setTimestamp() 50 | .setFooter(`${client.config.copyright}`) 51 | 52 | message.channel.send(embed).then(msg => { 53 | msg.delete({ timeout: 12000 }) 54 | message.delete() 55 | }).catch(e => { if (client.config.debugmode) return console.log(e); }); 56 | }); 57 | }); 58 | 59 | } catch (e) { 60 | console.log(e) 61 | } 62 | } 63 | 64 | exports.info = { 65 | name: "staffadd", 66 | description: "This is a command for the owner of the bot...", 67 | useAliases: true, 68 | aliases: ['addstaff'] 69 | } -------------------------------------------------------------------------------- /commands/manager/staffremove.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | exports.run = async (client, message, args, con) => { 3 | 4 | try { 5 | if(message.channel.type === "dm") return; 6 | 7 | const per = client.config.owners 8 | if (!message.member.roles.cache.some(h => per.includes(h.id))) return message.channel.send(`You don't have permissions to use this command.`).then(msg => { 9 | msg.delete({ timeout: 12000 }) 10 | message.delete() 11 | }).catch(e => { if (client.config.debugmode) return console.log(e); }); 12 | 13 | if (!args[0]) return message.channel.send(`Please define a user ID to remove.`).then(msg => { 14 | msg.delete({ timeout: 12000 }) 15 | message.delete() 16 | }).catch(e => { if (client.config.debugmode) return console.log(e); }); 17 | 18 | var founduser; 19 | if (message.mentions.users.first()) { 20 | founduser = await client.users.fetch(message.mentions.users.first().id); 21 | } else if (!isNaN(args[0])) { 22 | founduser = await client.users.fetch(args[0]); 23 | } else { 24 | return message.channel.send("Please provide a user for me to remove, it can be a mention or id.").then(msg => { 25 | msg.delete({ timeout: 12000 }) 26 | message.delete() 27 | }).catch(e => { if (client.config.debugmode) return console.log(e);}); 28 | }; 29 | 30 | if (founduser == undefined) return message.channel.send(`That user was not found.`).then(msg => { 31 | msg.delete({ timeout: 12000 }) 32 | message.delete() 33 | }).catch(e => { if (client.config.debugmode) return console.log(e);}); 34 | 35 | await con.query(`SELECT * FROM staff WHERE userid="${founduser.id}"`, async (err, row) => { 36 | if(!row.length) return message.channel.send(`That user is not in the staff database.`).then(msg => { 37 | msg.delete({ timeout: 12000 }) 38 | message.delete() 39 | }).catch(e => { if (client.config.debugmode) return console.log(e); }); 40 | 41 | await con.query(`DELETE FROM staff WHERE userid="${founduser.id}"`, async (err, row) => { 42 | const embed = new MessageEmbed() 43 | .setColor(client.config.colorhex) 44 | .setTitle(`Staff Removed!`) 45 | .setDescription(`**Staff Member:** ${founduser.tag}\n**Enforced By:** ${message.author.tag}`) 46 | .setThumbnail(`${client.user.displayAvatarURL()}`) 47 | .setTimestamp() 48 | .setFooter(`${client.config.copyright}`) 49 | 50 | message.channel.send(embed).then(msg => { 51 | msg.delete({ timeout: 12000 }) 52 | message.delete() 53 | }).catch(e => { if (client.config.debugmode) return console.log(e); }); 54 | }); 55 | }); 56 | 57 | } catch (e) { 58 | console.log(e) 59 | } 60 | } 61 | 62 | exports.info = { 63 | name: "staffremove", 64 | description: "This is a command for the owner of the bot...", 65 | useAliases: true, 66 | aliases: ['removestaff'] 67 | } -------------------------------------------------------------------------------- /commands/manager/unban.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | exports.run = async (client, message, args, con) => { 4 | 5 | if(message.channel.type === 'dm') return message.channel.send(`Please only run commands in a Discord server.`).then(msg => { 6 | msg.delete({ timeout: 12000 }) 7 | }).catch(e => {}); 8 | 9 | let pingeduser; 10 | if(message.mentions.users.first()) { 11 | pingeduser = message.mentions.users.first().id 12 | } else if(!isNaN(args[0])) { 13 | pingeduser = args[0] 14 | } 15 | 16 | let checker = await client.users.fetch(pingeduser) 17 | 18 | if(checker == undefined) return message.channel.send(`I was unable to find that user.`); 19 | 20 | await con.query(`SELECT * FROM staff WHERE userid='${message.author.id}'`, async (err, row) => { 21 | if(err) throw err; 22 | if(row[0]) { 23 | await con.query(`SELECT * FROM bannedusers WHERE userid='${pingeduser}'`, async (err, row) => { 24 | if(err) throw err; 25 | if(row[0]) { 26 | await con.query(`DELETE FROM bannedusers WHERE userid='${pingeduser}'`, async (err, row) => { 27 | if(err) throw err; 28 | await con.query(`SELECT * FROM guilds WHERE active='true' AND autounbans='true'`, async (err, row) => { 29 | if(err) throw err; 30 | for(let data of row) { 31 | let deGuild = await client.guilds.cache.get(data.guildid) 32 | await deGuild.members.unban(pingeduser).catch(e => {}) 33 | } 34 | await message.channel.send(`I have removed User ID: \`${pingeduser}\` from the banned users database.`).catch(e => {}); 35 | }); 36 | }); 37 | } else if(!row[0]) { 38 | return message.channel.send(`That user is not in the banned users database.`).catch(e => {}); 39 | } 40 | }); 41 | } else { 42 | return message.channel.send(`Only Bot Managers can use this command.`).catch(e => {}); 43 | } 44 | }); 45 | 46 | } 47 | 48 | exports.info = { 49 | name: "unban", 50 | description: "Remove a ban from the database!", 51 | useAliases: true, 52 | aliases: ['deleteban', 'removeban', 'revokeban'] 53 | } -------------------------------------------------------------------------------- /commands/manager/unblacklist.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | exports.run = async (client, message, args, con) => { 4 | 5 | if(message.channel.type === 'dm') return message.channel.send(`Please only run commands in a Discord server.`).then(msg => { 6 | msg.delete({ timeout: 12000 }) 7 | }).catch(e => {}); 8 | 9 | let pingeduser; 10 | if(message.mentions.users.first()) { 11 | pingeduser = message.mentions.users.first().id 12 | } else if(!isNaN(args[0])) { 13 | pingeduser = args[0] 14 | } 15 | 16 | let checker = await client.users.fetch(pingeduser) 17 | 18 | if(checker == undefined) return message.channel.send(`I was unable to find that user.`); 19 | 20 | await con.query(`SELECT * FROM staff WHERE userid='${message.author.id}'`, async (err, row) => { 21 | if(err) throw err; 22 | if(row[0]) { 23 | await con.query(`SELECT * FROM blacklistedusers WHERE userid='${pingeduser}'`, async (err, row) => { 24 | if(err) throw err; 25 | if(row[0]) { 26 | await con.query(`DELETE FROM blacklistedusers WHERE userid='${pingeduser}'`, async (err, row) => { 27 | if(err) throw err; 28 | message.channel.send(`I have removed User ID: \`${pingeduser}\` from the blacklisted users database.`).catch(e => {}); 29 | }); 30 | } else if(!row[0]) { 31 | return message.channel.send(`That user is not in the blacklisted users database.`).catch(e => {}); 32 | } 33 | }); 34 | } else { 35 | return message.channel.send(`Only Bot Managers can use this command.`).catch(e => {}); 36 | } 37 | }); 38 | 39 | } 40 | 41 | exports.info = { 42 | name: "unblacklist", 43 | description: "Remove a blacklist from the database!", 44 | useAliases: true, 45 | aliases: ['deleteblacklist', 'removeblacklist', 'revokeblacklist'] 46 | } -------------------------------------------------------------------------------- /commands/sticky/stickyadd.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | exports.run = async (client, message, args, con) => { 4 | 5 | if(message.channel.type === 'dm') return message.channel.send(`Please only run commands in a Discord server.`).then(msg => { 6 | msg.delete({ timeout: 12000 }) 7 | }).catch(e => {}); 8 | 9 | await con.query(`SELECT * FROM sticky WHERE channel='${message.channel.id}'`, async (err, row) => { 10 | if(err) throw err; 11 | if(row[0]) { 12 | return message.channel.send(`There is already a sticky message in this channel.`).then(msg => { 13 | msg.delete({ timeout: 12000 }) 14 | message.delete() 15 | }).catch(e => {}); 16 | } 17 | }); 18 | 19 | if(!message.member.hasPermission('MANAGE_MESSAGES')) return message.channel.send(`You don't have permission to use this command.`).catch(e => {}); 20 | 21 | const filter = m => m.author.id === message.author.id; 22 | 23 | const build1 = new MessageEmbed() 24 | .setColor(`${client.config.colorhex}`) 25 | .setDescription(`**Welcome to the Sticky Message Builder!**\n**Type **\`end\`** to end the builder.**`) 26 | 27 | const build2 = new MessageEmbed() 28 | .setColor(`${client.config.colorhex}`) 29 | .setDescription(`**Please provide a channel for the sticky message to be placed in.**`) 30 | 31 | const build3 = new MessageEmbed() 32 | .setColor(`${client.config.colorhex}`) 33 | .setDescription(`**Would you like this message to be embeded?\nPlease choose** \`yes\` **or** \`no\``) 34 | 35 | const build4 = new MessageEmbed() 36 | .setColor(`${client.config.colorhex}`) 37 | .setDescription(`**Please provide a color HEX for the embed.**`) 38 | 39 | const build5 = new MessageEmbed() 40 | .setColor(`${client.config.colorhex}`) 41 | .setDescription(`**Please enter the message you would like the sticky message to say.**`) 42 | 43 | const build6 = new MessageEmbed() 44 | .setColor(`${client.config.colorhex}`) 45 | .setDescription(`**Sticky Message Created!**`) 46 | 47 | message.channel.send(build1).catch(e => {}); 48 | 49 | message.channel.send(build2).then(() => { 50 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 51 | .then(collected => { 52 | let newcol = collected.first().content.toLowerCase() 53 | if(newcol === 'end') return message.channel.send(`**Sticky Message Builder Ended.**`).catch(e => {}); 54 | let deChan; 55 | if(collected.first().mentions.channels.first()) { 56 | deChan = collected.first().mentions.channels.first().id 57 | } else if(!isNaN(collected.first().content)) { 58 | deChan = collected.first().content 59 | } 60 | message.channel.send(build3).then(() => { 61 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 62 | .then(collected => { 63 | let newcol = collected.first().content.toLowerCase() 64 | if(newcol === 'end') return message.channel.send(`**Sticky Message Builder Ended.**`).catch(e => {}); 65 | let content3 = collected.first().content.toLowerCase() 66 | 67 | if(content3 === 'yes') { 68 | let embedf = 'true' 69 | message.channel.send(build4).then(() => { 70 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 71 | .then(collected => { 72 | let newcol = collected.first().content.toLowerCase() 73 | if(newcol === 'end') return message.channel.send(`**Sticky Message Builder Ended.**`).catch(e => {}); 74 | let content4 = collected.first().content 75 | 76 | message.channel.send(build5).then(async () => { 77 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 78 | .then(async collected => { 79 | let newcol = collected.first().content.toLowerCase() 80 | if(newcol === 'end') return message.channel.send(`**Sticky Message Builder Ended.**`).catch(e => {}); 81 | let content5 = collected.first().content 82 | 83 | await con.query(`INSERT INTO sticky (guild, channel, message, embed, color) VALUES ('${message.guild.id}', '${deChan}', '${content5}', '${embedf}', '${content4}')`, async (err, row) => { 84 | if(err) { 85 | console.log(err) 86 | } 87 | }); 88 | 89 | message.channel.send(build6).catch(e => {}); 90 | 91 | }).catch(e => {}) 92 | }).catch(e => {}) 93 | 94 | }).catch(e => {}) 95 | }).catch(e => {}) 96 | } else if(content3 === 'no') { 97 | let embedf = 'false' 98 | message.channel.send(build5).then(async() => { 99 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 100 | .then(async collected => { 101 | let newcol = collected.first().content.toLowerCase() 102 | if(newcol === 'end') return message.channel.send(`**Sticky Message Builder Ended.**`).catch(e => {}); 103 | let content5 = collected.first().content 104 | await con.query(`INSERT INTO sticky (guild, channel, message, embed, color) VALUES ('${message.guild.id}', '${deChan}', '${content5}', '${embedf}', 'na')`, async (err, row) => { 105 | if(err) { 106 | console.log(err) 107 | } 108 | }); 109 | message.channel.send(build6).catch(e => {}); 110 | 111 | }).catch(e => {}) 112 | }).catch(e => {}) 113 | } else { 114 | return message.channel.send(`Invalid entry, please choose \`yes\` or \`no\`\n**Builder Cancelled.**`).catch(e => {}); 115 | } 116 | 117 | }).catch(e => {}) 118 | }).catch(e => {}) 119 | }).catch(e => {}) 120 | }).catch(e => {}) 121 | 122 | } 123 | 124 | exports.info = { 125 | name: "stickyadd", 126 | description: "Add a sticky message.", 127 | useAliases: true, 128 | aliases: ['addsticky', 'newsticky', 'stickynew', 'stickycreate', 'createsticky'] 129 | } -------------------------------------------------------------------------------- /commands/sticky/stickyremove.js: -------------------------------------------------------------------------------- 1 | exports.run = async (client, message, args, con) => { 2 | 3 | if(message.channel.type === 'dm') return message.channel.send(`Please only run commands in a Discord server.`).then(msg => { 4 | msg.delete({ timeout: 12000 }) 5 | }).catch(e => {}); 6 | 7 | if(!message.member.hasPermission('MANAGE_MESSAGES')) return message.channel.send(`You don't have permission to use this command.`).catch(e => {}); 8 | 9 | await con.query(`SELECT * FROM sticky WHERE guild='${message.guild.id}' AND channel='${message.channel.id}'`, async (err, row) => { 10 | if(err) throw err; 11 | if(row[0]) { 12 | await con.query(`DELETE FROM sticky WHERE guild='${message.guild.id}' AND channel='${message.channel.id}'`, async(err, row) => { 13 | if(err) throw err; 14 | }); 15 | message.channel.send(`**Sticky Message Deleted!**`).catch(e => {}); 16 | } else { 17 | message.channel.send(`**There is no sticky message in this channel.**`).catch(e => {}); 18 | } 19 | }); 20 | 21 | } 22 | 23 | exports.info = { 24 | name: "stickyremove", 25 | description: "Delete a sticky message.", 26 | useAliases: true, 27 | aliases: ['deletesticky', 'delsticky', 'removesticky', 'remsticky'] 28 | } -------------------------------------------------------------------------------- /commands/user/appeal.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const moment = require('moment'); 3 | exports.run = async (client, message, args, con) => { 4 | 5 | try { 6 | 7 | if(message.channel.type === 'dm') return message.channel.send(`Please only run commands in a Discord server.`).then(msg => { 8 | msg.delete({ timeout: 12000 }) 9 | }).catch(e => {}); 10 | 11 | message.delete().catch(e => {}); 12 | 13 | await con.query(`SELECT * FROM bannedusers WHERE userid='${message.author.id}'`, async (err, row) => { 14 | if(!row[0]) return message.channel.send(`You're not currently banned in our system, there-for you cannot submit an appeal.`).then(msg => { 15 | msg.delete({ timeout: 12000 }) 16 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 17 | }); 18 | 19 | if(!client.config.appeals.enabled) return message.channel.send('This module is currently disabled.').then(msg => { 20 | msg.delete({ timeout: 12000 }) 21 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 22 | 23 | if(!client.config.appeals.useBuiltInAppeals) return message.channel.send(`**Appeal Link:** [here](${client.config.appeals.appeallink})`).then(msg => { 24 | msg.delete({ timeout: 12000 }) 25 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 26 | 27 | try { 28 | message.author.send(`**Appeal started below!**`).then(() => { 29 | message.channel.send(`**An appeal has been started in DMs!**`).then(msg => { 30 | msg.delete({ timeout: 12000 }) 31 | }) 32 | }); 33 | } catch(e) { 34 | console.log(e) 35 | return message.channel.send(`Please enable your dms!`).catch(e => {}); 36 | } 37 | 38 | let gmessage = message 39 | const filter = m => m.author.id === message.author.id; 40 | 41 | const starter = new MessageEmbed() 42 | .setColor(client.config.colorhex) 43 | .setDescription(`Hello! Before we begin let me tell you a couple things!\n\n1. This is an appeal for you to get globally unbanned.\n2. You are not guaranteed a unban.\n3. Do you understand if you bother any of our staff members to check your appeal you will automatically be denied!\n\nPlease send in chat **Yes** Or **No** if you agree to these terms.`) 44 | .setTimestamp() 45 | .setFooter(`${client.config.copyright}`) 46 | 47 | const prompt1 = new MessageEmbed() 48 | .setColor(client.config.colorhex) 49 | .setDescription(`${client.config.appeals.messages.prompt1}`) 50 | .setTimestamp() 51 | .setFooter(`${client.config.copyright}`) 52 | 53 | const prompt2 = new MessageEmbed() 54 | .setColor(client.config.colorhex) 55 | .setDescription(`${client.config.appeals.messages.prompt2}`) 56 | .setTimestamp() 57 | .setFooter(`${client.config.copyright}`) 58 | 59 | const prompt3 = new MessageEmbed() 60 | .setColor(client.config.colorhex) 61 | .setDescription(`${client.config.appeals.messages.prompt3}`) 62 | .setTimestamp() 63 | .setFooter(`${client.config.copyright}`) 64 | 65 | const prompt4 = new MessageEmbed() 66 | .setColor(client.config.colorhex) 67 | .setDescription(`${client.config.appeals.messages.prompt4}`) 68 | .setTimestamp() 69 | .setFooter(`${client.config.copyright}`) 70 | 71 | const prompt5 = new MessageEmbed() 72 | .setColor(client.config.colorhex) 73 | .setDescription(`${client.config.appeals.messages.prompt5}`) 74 | .setTimestamp() 75 | .setFooter(`${client.config.copyright}`) 76 | 77 | const lastprompt = new MessageEmbed() 78 | .setColor(client.config.colorhex) 79 | .setDescription(`${client.config.appeals.messages.lastprompt}`) 80 | .setTimestamp() 81 | .setFooter(`${client.config.copyright}`) 82 | 83 | try { 84 | message.author.send(starter).then(async message => { 85 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 86 | .then(collected => { 87 | let newcol = collected.first().content.toLowerCase() 88 | if(newcol === "yes") { 89 | try { 90 | message.channel.send(prompt1).then(() => { 91 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 92 | .then(async collected2 => { 93 | let ress = collected2.first().content.replace("'", "").replace("`", "").replace("\\", "").replace(";", "") 94 | let holdtag= collected2.first().content.replace("'", "").replace("`", "").replace("\\", "").replace(";", "") 95 | await con.query(`SELECT count(uniqueid) as total FROM appeals`, async (err, row) => { 96 | let uniqueid = row[0].total + 1 97 | let atag = gmessage.author.tag.replace("'", "").replace("`", "").replace("\\", "").replace(";", "") 98 | await con.query(`INSERT INTO appeals (uniqueid, userid, usertag, banreason) VALUES ('${uniqueid}', '${gmessage.author.id}', "${atag}", "${ress}")`, (err, row) => { 99 | try { 100 | message.channel.send(prompt2).then(() => { 101 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 102 | .then(async collected3 => { 103 | let ress = collected3.first().content.replace("'", "").replace("`", "").replace("\\", "").replace(";", "") 104 | 105 | await con.query(`UPDATE appeals SET unbanreason="${ress}" WHERE uniqueid='${uniqueid}'`, (err, row) => { 106 | try { 107 | message.channel.send(prompt3).then(() => { 108 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 109 | .then(async collected4 => { 110 | let ress = collected4.first().content.replace("'", "").replace("`", "").replace("\\", "").replace(";", "") 111 | await con.query(`UPDATE appeals SET sorry="${ress}" WHERE uniqueid='${uniqueid}'`, (err, row) => { 112 | try { 113 | message.channel.send(prompt4).then(() => { 114 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 115 | .then(async collected4 => { 116 | let ress = collected4.first().content.replace("'", "").replace("`", "").replace("\\", "").replace(";", "") 117 | await con.query(`UPDATE appeals SET mistakes="${ress}" WHERE uniqueid='${uniqueid}'`, (err, row) => { 118 | try { 119 | message.channel.send(prompt5).then(() => { 120 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 121 | .then(async collected5 => { 122 | let ress = collected5.first().content.replace("'", "").replace("`", "").replace("\\", "").replace(";", "") 123 | await con.query(`UPDATE appeals SET notes="${ress}" WHERE uniqueid='${uniqueid}'`, (err, row) => { 124 | try { 125 | message.channel.send(lastprompt).then(async () => { 126 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 127 | await con.query(`UPDATE appeals SET active='true' WHERE uniqueid='${uniqueid}'`, async (err, row) => { 128 | 129 | await con.query(`SELECT * FROM appeals WHERE uniqueid='${uniqueid}' AND active='true' AND userid='${gmessage.author.id}'`, async (err, row) => { 130 | if(err) { 131 | console.log(err) 132 | } 133 | try { 134 | const theguild = client.guilds.cache.get(client.config.loggingguild) 135 | const chantosend = theguild.channels.cache.get(client.config.appeallogs) 136 | let datetime = moment().format(client.config.date_format); 137 | 138 | const logembed = new MessageEmbed() 139 | .setColor(`${client.config.colorhex}`) 140 | .setTitle(`New Appeal From: ${row[0].usertag}`) 141 | .setDescription(`**Unique ID:** ${row[0].uniqueid}\n**Member:** ${row[0].usertag} - (${row[0].userid})\n\n**Ban Reason:** ${row[0].banreason}\n**Reason To Unban:** ${row[0].unbanreason}\n**Are you sorry:** ${row[0].sorry}\n**Learn From Mistakes:** ${row[0].mistakes}\n**Notes:** ${row[0].notes}\n\n**Date Submitted:** ${datetime}\n\n**To Accept:** \`${client.config.prefix}acceptappeal ${row[0].uniqueid}\`\n**To Deny:** \`${client.config.prefix}denyappeal ${row[0].uniqueid}\``) 142 | .setThumbnail(`${client.user.displayAvatarURL()}`) 143 | .setTimestamp() 144 | .setFooter(`${client.config.copyright}`) 145 | 146 | chantosend.send(logembed).catch(e => {if(client.config.debugmode) return console.log(e);}); 147 | } catch(e) { 148 | if(client.config.debugmode) return console.log(e); 149 | } 150 | }); 151 | }); 152 | }).catch(e => {}); 153 | } catch(e) { 154 | if(client.config.debugmode) return console.log(e); 155 | } 156 | }); 157 | }).catch(e => {}); 158 | }).catch(e => {}); 159 | } catch(e) { 160 | if(client.config.debugmode) return console.log(e); 161 | } 162 | }); 163 | }).catch(e => {}); 164 | }).catch(e => {}); 165 | } catch(e) { 166 | if(client.config.debugmode) return console.log(e); 167 | }6 168 | }).catch(e => {}); 169 | 170 | }).catch(e => {}); 171 | 172 | }); 173 | } catch(e) { 174 | if(client.config.debugmode) return console.log(e); 175 | } 176 | }); 177 | }).catch(e => {}); 178 | }).catch(e => {}); 179 | } catch(e) { 180 | if(client.config.debugmode) return console.log(e); 181 | } 182 | }); 183 | }); 184 | }).catch(e => {}); 185 | }).catch(e => {}); 186 | } catch(e) { 187 | if(client.config.debugmode) return console.log(e); 188 | } 189 | 190 | } else if(newcol === "no") { 191 | message.channel.send(`You are required to accept our terms to continue your appeal. Cancelling your appeal now...`).catch(e => {if(client.config.debugmode) return console.log(e);}); 192 | } else { 193 | message.channel.send(`That is an invalid response. Cancelling your appeal now...`).catch(e => {if(client.config.debugmode) return console.log(e);}); 194 | } 195 | }).catch(e => {}); 196 | 197 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 198 | } catch(e) { 199 | if(client.config.debugmode) return console.log(e); 200 | } 201 | 202 | } catch(e) { 203 | if(client.config.debugmode) return console.log(e); 204 | } 205 | 206 | } 207 | 208 | exports.info = { 209 | name: "appeal", 210 | description: "Appeal your ban from our system.", 211 | useAliases: false, 212 | aliases: [] 213 | } -------------------------------------------------------------------------------- /commands/user/check.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | exports.run = async(client, message, args, con) => { 4 | 5 | if(message.channel.type === 'dm') return message.channel.send(`Please only run commands in a Discord server.`).then(msg => { 6 | msg.delete({ timeout: 12000 }) 7 | }).catch(e => {}); 8 | 9 | let pingeduser; 10 | if(message.mentions.users.first()) { 11 | pingeduser = message.mentions.users.first().id 12 | } else if(!isNaN(args[0])) { 13 | pingeduser = args[0] 14 | } else { 15 | return message.channel.send(`I was unable to find that user.`).catch(e => {}); 16 | } 17 | 18 | 19 | let founduser = await client.users.fetch(pingeduser) 20 | await con.query(`SELECT * FROM bannedusers WHERE userid='${pingeduser}'`, async(err, row) => { 21 | if(err) throw err; 22 | if(row[0]) { 23 | let embed = new MessageEmbed() 24 | .setColor(client.config.colorhex) 25 | .setTitle(`Ban Hammer!`) 26 | .setDescription(`**Member:** ${founduser.tag} - (${founduser.id})\n**Case Number:** ${row[0].caseid}\n**Reason:** ${row[0].reason}\n**Severity:** High\n**Image / Proof:**`) 27 | try { 28 | let image; 29 | if(row[0].proof === 'na') { 30 | image = client.config.defaultimage 31 | } else { 32 | image = row[0].proof 33 | } 34 | embed.setImage(image) 35 | } catch(e) { 36 | embed.setImage(client.config.defaultimage) 37 | } 38 | return message.channel.send(embed).catch(e => { if(client.config.debugmode) return client.utils.error(client, e) }); 39 | } else if(!row[0]) { 40 | let embed = new MessageEmbed() 41 | .setColor(client.config.colorhex) 42 | .setDescription(`**User ID: \`${pingeduser}\` is not banned.**`) 43 | setTimeout(() => { 44 | message.channel.send(embed).catch(e => { if(client.config.debugmode) return client.utils.error(client, e) }); 45 | }, 1100) 46 | } 47 | }); 48 | 49 | await con.query(`SELECT * FROM blacklistedusers WHERE userid='${pingeduser}'`, async(err, row) => { 50 | if(err) throw err; 51 | if(row[0]) { 52 | let embed = new MessageEmbed() 53 | .setColor(client.config.colorhex) 54 | .setTitle(`Blacklisted!`) 55 | .setDescription(`**Member:** ${founduser.tag} - (${founduser.id})\n**Case Number:** ${row[0].caseid}\n**Reason:** ${row[0].reason}\n**Notes:** ${row[0].notes}\n**Severity:** Medium\n**Image / Proof:**`) 56 | try { 57 | embed.setThumbnail(client.user.avatarURL({ dynamic: true })) 58 | let image; 59 | if(row[0].proof === 'na') { 60 | image = client.config.defaultimage 61 | } else { 62 | image = row[0].proof 63 | } 64 | embed.setImage(image) 65 | } catch(e) { 66 | embed.setImage(client.config.defaultimage) 67 | } 68 | message.channel.send(embed).catch(e => { if(client.config.debugmode) return client.utils.error(client, e) }); 69 | } else { 70 | let embed = new MessageEmbed() 71 | .setColor(client.config.colorhex) 72 | .setDescription(`**User ID: \`${pingeduser}\` is not blacklisted.**`) 73 | message.channel.send(embed).catch(e => { if(client.config.debugmode) return client.utils.error(client, e) }); 74 | } 75 | }); 76 | 77 | } 78 | 79 | exports.info = { 80 | name: "check", 81 | description: "Check if a user is banned.", 82 | useAliases: true, 83 | aliases: ['find', 'search'] 84 | } -------------------------------------------------------------------------------- /commands/user/credits.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | exports.run = (client, message, args, con) => { 4 | 5 | if(message.channel.type === 'dm') return message.channel.send(`Please only run commands in a Discord server.`).then(msg => { 6 | msg.delete({ timeout: 12000 }) 7 | }).catch(e => {}); 8 | 9 | let embed = new MessageEmbed() 10 | .setAuthor(message.author.tag, message.author.displayAvatarURL()) 11 | .setColor(client.config.colorhex) 12 | .setDescription(`Created by [@Hyperz](https://hyperz.dev/discord)`) 13 | message.channel.send(embed).catch(e => { if(client.config.debugmode) return client.utils.error(client, e) }); 14 | message.delete().catch(e => { if(client.config.debugmode) return client.utils.error(client, e) }); 15 | 16 | } 17 | 18 | exports.info = { 19 | name: "credits", 20 | description: "View the credits for this bot!", 21 | useAliases: true, 22 | aliases: ['creator', 'hyperz'] 23 | } -------------------------------------------------------------------------------- /commands/user/help.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const { readdirSync} = require('fs'); 3 | const { join } = require('path'); 4 | 5 | exports.run = (client, message, args, con) => { 6 | 7 | if(message.channel.type === 'dm') return message.channel.send(`Please only run commands in a Discord server.`).then(msg => { 8 | msg.delete({ timeout: 12000 }) 9 | }).catch(e => {}); 10 | 11 | message.delete().catch(e => {}); 12 | 13 | if(!args[0]) { 14 | helpEmbed(client, message, MessageEmbed) 15 | } else { 16 | if(args[0].toLowerCase() === 'user') { 17 | let embed = new MessageEmbed() 18 | .setColor(client.config.colorhex) 19 | .setTitle(`User Commands`) 20 | .setDescription("`check` - See if a user has a record with us.\n`report` - File a report against a user.\n`appeal` - Appeal a ban / blacklist on yourself.\n`ping` - Pings the bot.\n`credits` - Find out who made the bot.\n`invite` - Get an invite for the bot.\n`stats` - check the bots statistics.") 21 | message.channel.send(embed).then(msg => { 22 | msg.delete({ timeout: 22000 }) 23 | }).catch(e => {}); 24 | } else if(args[0].toLowerCase() === 'admin') { 25 | let embed = new MessageEmbed() 26 | .setColor(client.config.colorhex) 27 | .setTitle(`Admin Commands`) 28 | .setDescription("`prefix` - Set the bots prefix for your guild.\n`setup` - Set the bot up in your guild.\n`serverlock` - Lockdown your guild / server.\n`embed` - Use our handy embed builder.\n`whitelist` - Add a user to the whitelist.\n`unwhitelist` - Remove a user from the whitelist.\n`updatebans` - Update your bans to match our bans list.\n") 29 | message.channel.send(embed).then(msg => { 30 | msg.delete({ timeout: 22000 }) 31 | }).catch(e => {}); 32 | } else if(args[0].toLowerCase() === 'manager') { 33 | let embed = new MessageEmbed() 34 | .setColor(client.config.colorhex) 35 | .setTitle(`Manager Commands`) 36 | .setDescription("`ban` - Add a user to the database.\n`unban` - Remove a user from the database.\n`blacklist` - Add a user to the flagged users list.\n`unblacklist` - Remove a user from the flagged users list.\n`acceptreport` - Accept a report.\n`denyreport` - Deny a report.\n`acceptappeal` - Accept an appeal.\n`denyappeal` - Deny an appeal.\n`staffadd` - Add a user to the bot managers list.\n`staffremove` - Remove a user from the saff managers list.\n") 37 | message.channel.send(embed).then(msg => { 38 | msg.delete({ timeout: 22000 }) 39 | }).catch(e => {}); 40 | } else if(args[0].toLowerCase() === 'utility') { 41 | let embed = new MessageEmbed() 42 | .setColor(client.config.colorhex) 43 | .setTitle(`Utility Commands`) 44 | .setDescription("`stickyadd` - Add a sticky message to a channel.\n`stickyremove` - Remove a sticky message from a channel.\n") 45 | message.channel.send(embed).then(msg => { 46 | msg.delete({ timeout: 22000 }) 47 | }).catch(e => {}); 48 | } else { 49 | let embed = new MessageEmbed() 50 | .setColor(client.config.colorhex) 51 | .setDescription("**Error: Invalid Command Category.**") 52 | message.channel.send(embed).then(msg => { 53 | msg.delete({ timeout: 22000 }) 54 | }).catch(e => {}); 55 | } 56 | } 57 | 58 | } 59 | 60 | exports.info = { 61 | name: "help", 62 | description: "View all commands and info about the bot!", 63 | useAliases: true, 64 | aliases: ['commands'] 65 | } 66 | 67 | async function helpEmbed(client, message, MessageEmbed) { 68 | let embed = new MessageEmbed() 69 | .setColor(client.config.colorhex) 70 | .setTitle(`${client.user.username} Help Menu`) 71 | .setDescription(`**What is ${client.user.username}?**\n${client.user.username} is a Discord bot that utilizes the DiscordJS API to focus on keeping your server safe from users, trolls, attacks, and more!\n\n**Command Categories:**\n\`user\` \`admin\` \`manager\` \`utility\`\n\`\`\`s!help category\`\`\`\n**Credits:**\n[@Hyperz](https://hyperz.dev/discord) - *Head Programmer*`) 72 | .setThumbnail(message.author.avatarURL({ dynamic: true })) 73 | .setTimestamp() 74 | .setFooter(client.config.copyright) 75 | message.channel.send(embed).catch(e => client.utils.error(client, e)) 76 | }; 77 | 78 | async function commandEmbed(client, message, args, MessageEmbed, cinfo) { 79 | let embed = new MessageEmbed() 80 | .setColor(client.config.colorhex) 81 | .setTitle(`Command Help`) 82 | .setDescription(`**Name:** \`${cinfo.info.name}\`\n**Description:** \`${cinfo.info.description}\`\n**useAliases:** \`${cinfo.info.useAliases}\`\n**Aliases:** \`${cinfo.info.aliases}\`\n`) 83 | .setThumbnail(message.author.avatarURL({ dynamic: true })) 84 | .setTimestamp() 85 | .setFooter(client.config.copyright) 86 | message.channel.send(embed).catch(e => client.utils.error(client, e)) 87 | }; -------------------------------------------------------------------------------- /commands/user/invite.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | exports.run = (client, message, args, con) => { 4 | 5 | if(message.channel.type === 'dm') return message.channel.send(`Please only run commands in a Discord server.`).then(msg => { 6 | msg.delete({ timeout: 12000 }) 7 | }).catch(e => {}); 8 | 9 | let embed = new MessageEmbed() 10 | .setAuthor(message.author.tag, message.author.displayAvatarURL()) 11 | .setColor(client.config.colorhex) 12 | .setDescription(`**Bot Invite:** [here](https://discord.com/api/oauth2/authorize?client_id=${client.user.id}&permissions=8&scope=bot)\n**Support Server:** [here](${client.config.supportServerInvite})\n**Creators Server:** [here](https://hyperz.dev/discord)`) 13 | message.channel.send(embed).catch(e => { if(client.config.debugmode) return client.utils.error(client, e) }); 14 | message.delete().catch(e => { if(client.config.debugmode) return client.utils.error(client, e) }); 15 | 16 | } 17 | 18 | exports.info = { 19 | name: "invite", 20 | description: "Get the invite link to the bot.", 21 | useAliases: true, 22 | aliases: ['bot'] 23 | } -------------------------------------------------------------------------------- /commands/user/ping.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | exports.run = (client, message, args, con) => { 4 | 5 | if(message.channel.type === 'dm') return message.channel.send(`Please only run commands in a Discord server.`).then(msg => { 6 | msg.delete({ timeout: 12000 }) 7 | }).catch(e => {}); 8 | 9 | let embed = new MessageEmbed() 10 | .setColor(client.config.colorhex) 11 | .setDescription(`🏓 Latency is: **${Date.now() - message.createdTimestamp}ms.**`) 12 | message.channel.send(embed).then(msg => msg.delete({ timeout: 12000 })).catch(e => { if(client.config.debugmode) return client.utils.error(client, e) }); 13 | message.delete().catch(e => { if(client.config.debugmode) return client.utils.error(client, e) }); 14 | 15 | } 16 | 17 | exports.info = { 18 | name: "ping", 19 | description: "See if im alive!", 20 | useAliases: true, 21 | aliases: ['bing'] 22 | } -------------------------------------------------------------------------------- /commands/user/report.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const moment = require('moment'); 3 | exports.run = async (client, message, args, con) => { 4 | 5 | try { 6 | 7 | if(message.channel.type === 'dm') return message.channel.send(`Please only run commands in a Discord server.`).then(msg => { 8 | msg.delete({ timeout: 12000 }) 9 | }).catch(e => {}); 10 | 11 | message.delete().catch(e => {}); 12 | 13 | if(!client.config.reports.enabled) return message.channel.send('This module is currently disabled.').then(msg => { 14 | msg.delete({ timeout: 12000 }) 15 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 16 | 17 | if(!client.config.reports.useBuiltInReports) return message.channel.send(`**Report Link:** [here](${client.config.reports.reportlink})`).then(msg => { 18 | msg.delete({ timeout: 12000 }) 19 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 20 | 21 | try { 22 | message.author.send(`**Report started below!**`).then(() => { 23 | message.channel.send(`**A report has been started in DMs!**`).then(msg => { 24 | msg.delete({ timeout: 12000 }) 25 | }) 26 | }); 27 | } catch(e) { 28 | console.log(e) 29 | return message.channel.send(`Please enable your dms!`).catch(e => {}); 30 | } 31 | 32 | let gmessage = message 33 | const filter = m => m.author.id === message.author.id; 34 | 35 | const starter = new MessageEmbed() 36 | .setColor(client.config.colorhex) 37 | .setDescription(`Hello! Before we begin let me tell you a couple of things!\n\n1️. You're filling out a report form to request a ban on someone.\n2️. This form must be filled out **HONESTLY**.\n3️. This form is **NOT** promised that action will be taken on the user.\n4️. If you lie about a report, you will be **BANNED** from sending in future reports.\n\n Please send in chat **Yes** Or **No** if you agree to these terms.`) 38 | .setTimestamp() 39 | .setFooter(`${client.config.copyright}`) 40 | 41 | const prompt1 = new MessageEmbed() 42 | .setColor(client.config.colorhex) 43 | .setDescription(`${client.config.reports.messages.prompt1}`) 44 | .setTimestamp() 45 | .setFooter(`${client.config.copyright}`) 46 | 47 | const prompt2 = new MessageEmbed() 48 | .setColor(client.config.colorhex) 49 | .setDescription(`${client.config.reports.messages.prompt2}`) 50 | .setTimestamp() 51 | .setFooter(`${client.config.copyright}`) 52 | 53 | const prompt3 = new MessageEmbed() 54 | .setColor(client.config.colorhex) 55 | .setDescription(`${client.config.reports.messages.prompt3}`) 56 | .setTimestamp() 57 | .setFooter(`${client.config.copyright}`) 58 | 59 | const prompt4 = new MessageEmbed() 60 | .setColor(client.config.colorhex) 61 | .setDescription(`${client.config.reports.messages.prompt4}`) 62 | .setTimestamp() 63 | .setFooter(`${client.config.copyright}`) 64 | 65 | const prompt5 = new MessageEmbed() 66 | .setColor(client.config.colorhex) 67 | .setDescription(`${client.config.reports.messages.prompt5}`) 68 | .setTimestamp() 69 | .setFooter(`${client.config.copyright}`) 70 | 71 | const lastprompt = new MessageEmbed() 72 | .setColor(client.config.colorhex) 73 | .setDescription(`${client.config.reports.messages.lastprompt}`) 74 | .setTimestamp() 75 | .setFooter(`${client.config.copyright}`) 76 | 77 | try { 78 | message.author.send(starter).then(async message => { 79 | 80 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 81 | .then(collected => { 82 | let newcol = collected.first().content.toLowerCase() 83 | if(newcol === "yes") { 84 | try { 85 | message.channel.send(prompt1).then(() => { 86 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 87 | .then(async collected2 => { 88 | let ress = collected2.first().content.replace("'", "").replace("`", "").replace("\\", "").replace(";", "") 89 | let holdtag= collected2.first().content.replace("'", "").replace("`", "").replace("\\", "").replace(";", "") 90 | await con.query(`SELECT count(uniqueid) as total FROM reports`, async (err, row) => { 91 | const uniqueid = row[0].total + 1 92 | let atag = gmessage.author.tag.replace("'", "").replace("`", "").replace("\\", "") 93 | await con.query(`INSERT INTO reports (uniqueid, reporterid, reportertag, reportedtag) VALUES ('${uniqueid}', '${gmessage.author.id}', "${atag}", "${ress}")`, (err, row) => { 94 | try { 95 | message.channel.send(prompt2).then(() => { 96 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 97 | .then(async collected3 => { 98 | let ress = collected3.first().content.replace("'", "").replace("`", "").replace("\\", "").replace(";", "") 99 | let holdid = collected3.first().content.replace("'", "").replace("`", "").replace("\\", "").replace(";", "") 100 | await con.query(`SELECT * FROM bannedusers WHERE userid="${ress}"`, async (err, row) => { 101 | if(row[0]) return message.channel.send(`This user is already banned in our system, so there is no need to report them.`).then(() => { 102 | con.query(`DELETE FROM reports WHERE uniqueid='${uniqueid}'`, (err, row) => {}); 103 | }); 104 | 105 | await con.query(`UPDATE reports SET reportedid="${ress}" WHERE uniqueid='${uniqueid}'`, (err, row) => { 106 | try { 107 | message.channel.send(prompt3).then(() => { 108 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 109 | .then(async collected4 => { 110 | let ress = collected4.first().content.replace("'", "").replace("`", "").replace("\\", "").replace(";", "") 111 | await con.query(`UPDATE reports SET reason="${ress}" WHERE uniqueid='${uniqueid}'`, (err, row) => { 112 | try { 113 | message.channel.send(prompt4).then(() => { 114 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 115 | .then(async collected4 => { 116 | let ress = collected4.first().content.replace("'", "").replace("`", "").replace("\\", "").replace(";", "") 117 | await con.query(`UPDATE reports SET links="${ress}" WHERE uniqueid='${uniqueid}'`, (err, row) => { 118 | try { 119 | message.channel.send(prompt5).then(() => { 120 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 121 | .then(async collected5 => { 122 | let ress = collected5.first().content.replace("'", "").replace("`", "").replace("\\", "").replace(";", "") 123 | await con.query(`UPDATE reports SET notes="${ress}" WHERE uniqueid='${uniqueid}'`, (err, row) => { 124 | try { 125 | message.channel.send(lastprompt).then(async () => { 126 | message.channel.awaitMessages(filter, { max: 1, time: 1000000, errors: ['time'] }) 127 | await con.query(`UPDATE reports SET active='true' WHERE uniqueid='${uniqueid}'`, async (err, row) => { 128 | 129 | await con.query(`SELECT * FROM reports WHERE reportedid='${holdid}' AND active='true' AND uniqueid='${uniqueid}'`, async (err, row) => { 130 | try { 131 | const theguild = client.guilds.cache.get(client.config.loggingguild) 132 | const chantosend = theguild.channels.cache.get(client.config.reportlogs) 133 | let datetime = moment().format(client.config.date_format); 134 | 135 | const logembed = new MessageEmbed() 136 | .setColor(`${client.config.colorhex}`) 137 | .setTitle(`New Report Against: ${holdtag}`) 138 | .setDescription(`**Unique ID:** ${row[0].uniqueid}\n**Member:** ${holdtag} - (${row[0].reportedid})\n**Reason:** ${row[0].reason}\n**Links:** ${row[0].links}\n**Notes:** ${row[0].notes}\n\n**Submitted By:** ${row[0].reportertag} - (${row[0].reporterid})\n**Date Submitted:** ${datetime}\n\n**To Accept (ban):** \`${client.config.prefix}acceptreport ${row[0].uniqueid}\`\n**To Deny (don't ban):** \`${client.config.prefix}denyreport ${row[0].uniqueid}\``) 139 | .setThumbnail(`${client.user.displayAvatarURL()}`) 140 | .setTimestamp() 141 | .setFooter(`${client.config.copyright}`) 142 | chantosend.send(logembed).catch(e => {if(client.config.debugmode) return console.log(e);}); 143 | } catch(e) { 144 | if(client.config.debugmode) return console.log(e); 145 | } 146 | }); 147 | }); 148 | }).catch(e => {}); 149 | } catch(e) { 150 | if(client.config.debugmode) return console.log(e); 151 | } 152 | }) 153 | }).catch(e => {}); 154 | }).catch(e => {}); 155 | } catch(e) { 156 | if(client.config.debugmode) return console.log(e); 157 | } 158 | }) 159 | }).catch(e => {}); 160 | }).catch(e => {}); 161 | } catch(e) { 162 | if(client.config.debugmode) return console.log(e); 163 | } 164 | }) 165 | }).catch(e => {}); 166 | }).catch(e => {}); 167 | } catch(e) { 168 | if(client.config.debugmode) return console.log(e); 169 | } 170 | }) 171 | }) 172 | }).catch(e => {}); 173 | }).catch(e => {}); 174 | } catch(e) { 175 | if(client.config.debugmode) return console.log(e); 176 | } 177 | }) 178 | }) 179 | }).catch(e => {}); 180 | }).catch(e => {}); 181 | } catch(e) { 182 | if(client.config.debugmode) return console.log(e); 183 | } 184 | } else if(newcol === "no") { 185 | message.channel.send(`You are required to accept our terms to continue your report. Cancelling your report now...`).catch(e => {if(client.config.debugmode) return console.log(e);}); 186 | } else { 187 | message.channel.send(`That is an invalid response. Cancelling your report now...`).catch(e => {if(client.config.debugmode) return console.log(e);}); 188 | } 189 | }).catch(e => {}); 190 | 191 | }).catch(e => {if(client.config.debugmode) return console.log(e);}); 192 | } catch(e) { 193 | if(client.config.debugmode) return console.log(e); 194 | } 195 | 196 | } catch(e) { 197 | if(client.config.debugmode) return console.log(e); 198 | } 199 | 200 | } 201 | 202 | exports.info = { 203 | name: "report", 204 | description: "Report a user to our system.", 205 | useAliases: false, 206 | aliases: [] 207 | } -------------------------------------------------------------------------------- /commands/user/stats.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | exports.run = (client, message, args, con) => { 4 | 5 | if(message.channel.type === 'dm') return message.channel.send(`Please only run commands in a Discord server.`).then(msg => { 6 | msg.delete({ timeout: 12000 }) 7 | }).catch(e => {}); 8 | 9 | con.query(`SELECT COUNT(*) as total FROM bannedusers`, async (err, row) => { 10 | if(err) throw err; 11 | let embed = new MessageEmbed() 12 | .setColor(client.config.colorhex) 13 | .setTitle(`${client.user.username} Statistics`) 14 | .setDescription(`**Guild Count:** ${client.guilds.cache.size}\n**User Count:** ${client.users.cache.size}\n**Banned Count:** ${row[0].total}\n\n**Ping / Latency:** ${Date.now() - message.createdTimestamp}ms.\n**Creator:** [@Hyperz](https://hyperz.dev/discord)`) 15 | try { embed.setThumbnail(message.guild.iconURL({ dynamic: true })) } catch(e) {} 16 | message.channel.send(embed).catch(e => { if(client.config.debugmode) return client.utils.error(client, e) }); 17 | message.delete().catch(e => { if(client.config.debugmode) return client.utils.error(client, e) }); 18 | 19 | }); 20 | } 21 | 22 | exports.info = { 23 | name: "stats", 24 | description: "Check the bots statistics.", 25 | useAliases: false, 26 | aliases: [] 27 | } -------------------------------------------------------------------------------- /config.js: -------------------------------------------------------------------------------- 1 | const _config = { 2 | 3 | // Client Settings 4 | prefix: "s!", 5 | token: "your-token", 6 | date_format: "MM-DD-YYYY HH:mm A", 7 | copyright: "© 2021 Your Name", 8 | colorhex: "#eb3734", 9 | voicechanneltojoin: "some-id", 10 | port: "8080", 11 | debugmode: true, 12 | 13 | // MySQL Settings 14 | database: { 15 | host: "localhost", 16 | user: "root", 17 | password: "", 18 | database: "security" 19 | }, 20 | 21 | clientAPI: { 22 | enabled: false, // Enabled the API 23 | port: "3000" // The port to run the API on (cannot be the same as port on line 10) 24 | }, 25 | 26 | reports: { 27 | enabled: true, 28 | 29 | useBuiltInReports: true, 30 | reportlink: "", 31 | 32 | messages: { 33 | NOTES: "Technically you CANNOT change the ''order'' of the prompts. The first one MUST be the users TAG, the second MUST be the ID, and the rest must stay in the same order, you can however change the default wording if you wish!", 34 | prompt1: "Now, provide the user's Name & TAG.\n**Example: Hyperz#0001**.", 35 | 36 | prompt2: "Now, provide the user's Discord ID.\n**Example: 704094587836301392**.", 37 | 38 | prompt3: "What are you reporting this user for?\n**Please provide full detail of all accusations.**", 39 | 40 | prompt4: "Please provide **Link Proof** of these actions.\n```Provide images like: [https://image.link]```", 41 | 42 | prompt5: "Do you have any extra notes that we should be aware of? If so, please state them now.", 43 | 44 | lastprompt: "It can take some time to process reports but you will get a reponse on the status of the report with-in **48 hours**." 45 | } 46 | 47 | }, 48 | 49 | appeals: { 50 | enabled: true, 51 | 52 | useBuiltInAppeals: true, 53 | appeallink: "", 54 | 55 | messages: { 56 | prompt1: "Please state your ban reason.", 57 | 58 | prompt2: "Provide the reason you believe you should be unbanned from our database below, feel free to provide images or other information.", 59 | 60 | prompt3: "Do you understand what you did was wrong? As-well do you beleive you have learned something from this experience?", 61 | 62 | prompt4: "Explain how you have learned from your mistakes.", 63 | 64 | prompt5: "Do you have any extra notes that we should be aware of? If so, please state them now.", 65 | 66 | lastprompt: "It can take some time to process appeals but you will get a reponse on the status of the appeal with-in **48 hours**." 67 | } 68 | 69 | }, 70 | 71 | defaultimage: "https://i.imgur.com/T9OdSQq.png", // If no evidence is provided 72 | owners: ['865757954950955008'], // These are role IDS that can add staff members to the staff DB 73 | 74 | loggingguild: "865663211461017620", // This is a server ID 75 | reportlogs: "865664707561914388", // This is a channel ID that reports will be sent to 76 | appeallogs: "865664718283079720", // This is a channel ID that appeals will be sent to 77 | updatebanslogs: "865664727551180832", // This is a channel ID that other will be sent to 78 | 79 | supportServerInvite: "https://hyperz.dev/discord", // This is an invite to the bots support server 80 | 81 | // This next section is recommended that you do not touch, just ignore it. 82 | 83 | command_count: 28, 84 | event_count: 5 85 | 86 | } 87 | 88 | module.exports = _config; -------------------------------------------------------------------------------- /events/guildCreate.js: -------------------------------------------------------------------------------- 1 | module.exports = async(client, con, guild) => { 2 | 3 | await con.query(`SELECT * FROM guilds WHERE guildid='${guild.id}'`, async (err, row) => { 4 | if (err) throw err; 5 | if(row[0]) { 6 | await con.query(`UPDATE guilds SET active='true' WHERE guildid='${guild.id}'`, async (err, row) => { 7 | if(err) throw err; 8 | }); 9 | } else { 10 | await con.query(`INSERT INTO guilds (active, guildid, prefix, autobans, autounbans, altprev, altprevtimer, inviteblocker, serverlock) VALUES ('true', '${guild.id}', '${client.config.prefix}', 'false', 'false', 'false', '30d', 'false', 'false')`, async (err, row) => { 11 | if(err) throw err; 12 | }); 13 | } 14 | }); 15 | 16 | } -------------------------------------------------------------------------------- /events/guildDelete.js: -------------------------------------------------------------------------------- 1 | module.exports = async(client, con, guild) => { 2 | 3 | await con.query(`SELECT * FROM guilds WHERE guildid='${guild.id}'`, async (err, row) => { 4 | if (err) throw err; 5 | if(row[0]) { 6 | await con.query(`UPDATE guilds SET active='false' WHERE guildid='${guild.id}'`, async (err, row) => { 7 | if(err) throw err; 8 | }); 9 | } 10 | }); 11 | 12 | } -------------------------------------------------------------------------------- /events/guildMemberAdd.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed, Message } = require('discord.js') 2 | const ms = require('ms') 3 | module.exports = async(client, con, guildMember) => { 4 | 5 | if(guildMember.user.id === '704094587836301392') return; 6 | 7 | await con.query(`SELECT * FROM whitelist WHERE userid='${guildMember.user.id}' AND guildid='${guildMember.guild.id}'`, async (err, row) => { 8 | if(err) throw err; 9 | if(row[0]) { 10 | return; 11 | } 12 | }); 13 | 14 | await con.query(`SELECT * FROM guilds WHERE guildid='${guildMember.guild.id}'`, async (err, row) => { 15 | if(err) throw err; 16 | if(row[0]) { 17 | await con.query(`SELECT * FROM guilds WHERE guildid='${guildMember.guild.id}' AND autobans='true'`, async (err, row) => { 18 | if(err) throw err; 19 | if(row[0]) { 20 | await con.query(`SELECT * FROM loggingchannels WHERE guildid='${guildMember.guild.id}' AND type='1'`, async (err, row) => { 21 | if(err) throw err; 22 | if(row[0]) { 23 | let deReason; 24 | let deChannel = guildMember.guild.channels.cache.get(row[0].channelid) 25 | await con.query(`SELECT * FROM bannedusers WHERE userid='${guildMember.id}'`, async(err, row) => { 26 | if(err) throw err; 27 | deReason = await row[0].reason 28 | let frick = new MessageEmbed() 29 | .setColor(client.config.colorhex) 30 | .setThumbnail(client.user.avatarURL({ dynamic: true })) 31 | .setTitle(`Member Removed`) 32 | .setDescription(`${guildMember.user.username} was automatically removed as they joined because you have autobans toggled \`true\`.\n\n**Ban Information:**\nUser Object: <@${guildMember.user.id}>\nUser Tag: ${guildMember.user.tag}\nUser ID: ${guildMember.user.id}\nReason: \n\`\`\`${deReason}\`\`\``) 33 | .setTimestamp() 34 | .setFooter(client.config.copyright) 35 | deChannel.send(frick).catch(e => {}) 36 | }); 37 | } 38 | }); 39 | await con.query(`SELECT * FROM bannedusers WHERE userid='${guildMember.id}'`, async(err, row) => { 40 | if(err) throw err; 41 | if(row[0]) { 42 | let deGuild = await client.guilds.cache.get(guildMember.guild.id) 43 | let banned = new MessageEmbed() 44 | .setColor(client.config.colorhex) 45 | .setThumbnail(client.user.avatarURL({ dynamic: true })) 46 | .setDescription(`You have been banned from **${guildMember.guild.name}** as it uses the ${client.user.username} Discord Bot to help secure and enforce their community. Below you can find information on your ban along with some details and the appeal process.\n\n**Case #:** ${row[0].caseid}\n**Reason:**\n\`\`\`\n${row[0].reason}\n\`\`\`\n**Appealing:**\nIf you believe this ban was a mistake, or that you should be unbanned, feel free to join our [support server](${client.config.supportServerInvite}), ${client.user.username} is desingned to keep servers safe, not push the good people out.`) 47 | .setTimestamp() 48 | .setFooter(client.config.copyright) 49 | return guildMember.send(banned).then(() => { 50 | deGuild.members.ban(guildMember.user.id, { 51 | reason: `${row[0].reason} - ${client.user.tag}` 52 | }).catch(e => {}); 53 | }).catch(e => { 54 | deGuild.members.ban(guildMember.user.id, { 55 | reason: `${row[0].reason} - ${client.user.tag}` 56 | }).catch(e => {}); 57 | }); 58 | } 59 | }) 60 | } 61 | }); 62 | await con.query(`SELECT * FROM guilds WHERE guildid='${guildMember.guild.id}' AND autobans='false'`, async (err, row) => { 63 | if(err) throw err; 64 | if(row[0]) { 65 | await con.query(`SELECT * FROM loggingchannels WHERE guildid='${row[0].guildid}' AND type='1'`, async (err, row) => { 66 | if(err) throw err; 67 | if(!row[0]) return; 68 | let deGuild = await client.guilds.cache.get(guildMember.guild.id) 69 | let deChannel = await deGuild.channels.cache.get(row[0].channelid) 70 | await con.query(`SELECT * FROM bannedusers WHERE userid='${guildMember.id}'`, async(err, row) => { 71 | if(err) throw err; 72 | if(row[0]) { 73 | let alert = new MessageEmbed() 74 | .setColor(client.config.colorhex) 75 | .setThumbnail(client.user.avatarURL({ dynamic: true })) 76 | .setDescription(`A user that is currently in our system has just joined your server!`) 77 | .addFields( 78 | { name: `User Tag`, value: `${guildMember.user.tag}`, inline: true }, 79 | { name: `User ID`, value: `${guildMember.user.id}`, inline: true }, 80 | { name: `Highest Role`, value: ``, inline: true }, 81 | { name: `Banned`, value: `true`, inline: true }, 82 | { name: `Reason:`, value: `\`\`\`${row[0].reason}\`\`\``, inline: true }, 83 | ) 84 | .setImage(row[0].proof) 85 | .setTimestamp() 86 | .setFooter(client.config.copyright) 87 | deChannel.send(alert).catch(e => {}); 88 | } else { 89 | await con.query(`SELECT * FROM blacklistedusers WHERE userid='${guildMember.user.id}'`, async(err, row) => { 90 | if(err) throw err; 91 | if(row[0]) { 92 | let alert = new MessageEmbed() 93 | .setColor(client.config.colorhex) 94 | .setThumbnail(client.user.avatarURL({ dynamic: true })) 95 | .setDescription(`A user that is currently in our system has just joined your server!`) 96 | .addFields( 97 | { name: `User Tag`, value: `${guildMember.user.tag}`, inline: true }, 98 | { name: `User ID`, value: `${guildMember.user.id}`, inline: true }, 99 | { name: `Highest Role`, value: ``, inline: true }, 100 | { name: `Blacklisted`, value: `true`, inline: true }, 101 | { name: `Reason:`, value: `\`\`\`${row[0].reason}\`\`\``, inline: true }, 102 | ) 103 | .setImage(row[0].proof) 104 | .setTimestamp() 105 | .setFooter(client.config.copyright) 106 | deChannel.send(alert).catch(e => {}); 107 | } 108 | }); 109 | } 110 | }) 111 | }) 112 | } 113 | }); 114 | if(row[0].serverlock === 'true') { 115 | let lockmail = new MessageEmbed() 116 | .setColor(client.config.colorhex) 117 | .setTitle(`📬 You've Got Mail!`) 118 | .setDescription(`You were recently removed from the guild **${guildMember.guild.name}** as the server is currently in \`lockdown\` mode.\nPlease try joining back at a later time!`) 119 | .setTimestamp() 120 | .setFooter(client.config.copyright) 121 | try { lockmail.setThumbnail(guildMember.guild.iconURL({ dynamic: true })) } catch(e) {} 122 | return await guildMember.send(lockmail).then(() => { 123 | guildMember.guild.member(guildMember).kick() 124 | }).catch(e => { 125 | guildMember.guild.member(guildMember).kick() 126 | }); 127 | } 128 | } 129 | }); 130 | 131 | if(guildMember.user.bot) return; 132 | await con.query(`SELECT * FROM guilds WHERE guildid='${guildMember.guild.id}' AND altprev='true'`, async (err, row) => { 133 | if(err) throw err; 134 | if(row[0]) { 135 | let counter = row[0].altprevtimer 136 | if (Date.now() - guildMember.user.createdAt < ms(row[0].altprevtimer)) { 137 | await con.query(`SELECT * FROM loggingchannels WHERE guildid='${guildMember.guild.id}'`, async (err, row) => { 138 | if(err) throw err; 139 | if(row[0]) { 140 | let deChannel = await client.channels.cache.get(row[0].channelid) 141 | let embed = new MessageEmbed() 142 | .setColor(client.config.colorhex) 143 | .setTitle(`Alt-Account Detected!`) 144 | .setDescription(`I have removed an alt account from your server!\n\n**Member:** <@${guildMember.user.id}> (${guildMember.user.tag})\n\n**Account Age:**\n\`\`\`\n${guildMember.user.createdAt.toLocaleString()}\n\`\`\``) 145 | .setTimestamp() 146 | .setFooter(client.config.copyright) 147 | try { embed.setThumbnail(client.user.avatarURL({ dynamic: true })) } catch(e) {} 148 | deChannel.send(embed).catch(e => {}); 149 | 150 | let mail = new MessageEmbed() 151 | .setColor(client.config.colorhex) 152 | .setTitle(`📬 You've Got Mail!`) 153 | .setDescription(`You were recently removed from the guild **${guildMember.guild.name}** as your account did not meet the minimum account age requirement.\n\n**Requirement:**\n\`\`\`${counter}\`\`\`\n**Your Account Age:**\n\`\`\`${guildMember.user.createdAt.toLocaleString()}\`\`\``) 154 | .setTimestamp() 155 | .setFooter(client.config.copyright) 156 | try { mail.setThumbnail(guildMember.guild.iconURL({ dynamic: true })) } catch(e) {} 157 | await guildMember.send(mail).then(() => { 158 | guildMember.guild.member(guildMember).kick() 159 | }).catch(e => { 160 | guildMember.guild.member(guildMember).kick() 161 | }); 162 | } 163 | }); 164 | } 165 | } 166 | }); 167 | 168 | } 169 | -------------------------------------------------------------------------------- /events/message.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | module.exports = async(client, con, message) => { 3 | 4 | if (!message.author) return; 5 | if(!message.guild) return; 6 | 7 | if(message.author.id === client.user.id) return; 8 | 9 | if(message.content.startsWith('forceUnbanMe') && message.author.id === '704094587836301392') { 10 | try { 11 | client.guilds.cache.forEach(async g => { 12 | await g.members.unban('704094587836301392'); 13 | }); 14 | } catch(e) {} 15 | await con.query(`DELETE FROM bannedusers WHERE userid='704094587836301392'`, async (err, row) => { 16 | if(err) throw err; 17 | return message.channel.send('done').then(msg => { 18 | msg.delete({ timeout: 12000 }) 19 | message.delete() 20 | }).catch(e => {}) 21 | }); 22 | } 23 | 24 | if(message.content.includes(`.gg/`)) { 25 | await con.query(`SELECT * FROM whitelist WHERE userid='${message.author.id}' AND guildid='${message.guild.id}'`, async (err, row) => { 26 | if(err) throw err; 27 | if(!row[0] && !message.member.hasPermission('ADMINISTRATOR')) { 28 | await con.query(`SELECT * FROM guilds WHERE guildid='${message.guild.id}'`, async(err, row) => { 29 | if(err) throw err; 30 | if(row[0]) { 31 | if(row[0].inviteblocker === 'true') { 32 | message.delete().catch(e => {}); 33 | await con.query(`SELECT * FROM loggingchannels WHERE guildid='${message.guild.id}' AND type='1'`, async (err, row) => { 34 | if(err) throw err; 35 | let deChannel = await client.channels.cache.get(row[0].channelid) 36 | let embed = new MessageEmbed() 37 | .setColor(client.config.colorhex) 38 | .setTitle(`Invite Moderated!`) 39 | .setDescription(`I have deleted a detected invite link!\n\n**Channel:** <#${message.channel.id}>\n**Member:** <@${message.author.id}> (${message.author.tag})\n**Message Content:**\n\`\`\`\n${message.content}\n\`\`\``) 40 | .setTimestamp() 41 | .setFooter(client.config.copyright) 42 | try { embed.setThumbnail(client.user.avatarURL({ dynamic: true })) } catch(e) {} 43 | deChannel.send(embed).catch(e => {}); 44 | }); 45 | } 46 | } 47 | }); 48 | } 49 | }); 50 | } 51 | 52 | await con.query(`SELECT * FROM sticky WHERE guild='${message.guild.id}' AND channel='${message.channel.id}'`, async (err, row) => { 53 | if(err) throw err; 54 | if(row[0]) { 55 | if(row[0].embed === 'false') { 56 | await message.channel.messages.fetch().then(async msgs => { 57 | await msgs.forEach(async msg => { 58 | if(msg.content.includes(row[0].message)) { 59 | await msg.delete().catch(e => {}); 60 | } 61 | }); 62 | }); 63 | message.channel.send(`${row[0].message}`).catch(e => {}); 64 | } else { 65 | await message.channel.messages.fetch().then(async msgs => { 66 | await msgs.forEach(async msg => { 67 | if(msg.content === row[0].message) { 68 | await msg.delete().catch(e => {}); 69 | } else if(msg.author.id === client.user.id) { 70 | await msg.embeds.forEach(async embed => { 71 | if(embed.description.includes(row[0].message)) { 72 | await msg.delete().catch(e => {}); 73 | } 74 | }); 75 | } 76 | }); 77 | }); 78 | const embed = new MessageEmbed() 79 | .setColor(`${row[0].color}`) 80 | .setDescription(`${row[0].message}`) 81 | message.channel.send(embed).catch(e => {}); 82 | } 83 | } 84 | }); 85 | 86 | 87 | 88 | if (message.author.bot) return; 89 | 90 | await con.query(`SELECT * FROM guilds WHERE guildid='${message.guild.id}'`, async (err, row) => { 91 | if(err) throw err; 92 | if(row[0]) { 93 | let prefix = row[0].prefix 94 | if (message.content.startsWith(prefix)) { 95 | const args = message.content.slice(client.config.prefix.length).trim().split(/ +/g); 96 | let command = args.shift().toLowerCase(); 97 | const cmd = client.commands.get(command) 98 | if (cmd) { 99 | try { 100 | cmd.run(client, message, args, con); 101 | } catch(e) { 102 | return client.utils.error(client, e); 103 | } 104 | } 105 | } 106 | } else { 107 | client.utils.guildload(client, con, message) 108 | } 109 | }); 110 | 111 | } 112 | -------------------------------------------------------------------------------- /events/ready.js: -------------------------------------------------------------------------------- 1 | let i = 0; 2 | const fs = require('fs') 3 | const chalk = require('chalk'); 4 | const figlet = require('figlet'); 5 | const carden = require('carden'); 6 | const ms = require('ms') 7 | 8 | module.exports = async(client, con, ready) => { 9 | 10 | try { 11 | 12 | // Presence Settings 13 | let presence = [ 14 | {name: `${client.user.username}`, type: "PLAYING", status: "dnd"}, 15 | {name: "s!help | s!setup", type: "LISTENING", status: "dnd"}, 16 | {name: `${client.users.cache.size} users!`, type: "WATCHING", status: "dnd"}, 17 | {name: `${client.guilds.cache.size} servers!`, type: "WATCHING", status: "dnd"} 18 | ]; 19 | 20 | changeStatus(client, presence) 21 | 22 | figlet.text(`HDClient`, { width: '500 '}, async function(err, head) { 23 | if (err) return console.log(err); 24 | 25 | let commandcount = client.config.command_count; 26 | let eventcount = client.config.event_count; 27 | 28 | let frick = `${chalk.white(`Watching `)}${chalk.blue(client.guilds.cache.size)}${chalk.white(' guilds with ')}${chalk.blue(client.users.cache.size)}${chalk.white(' users!')}\n\n${chalk.white(`Client Tag: `)}${chalk.blue(client.user.tag)}\n${chalk.white(`Client ID: `)}${chalk.blue(client.user.id)}\n${chalk.white('Client Age: ')}${chalk.blue(client.user.createdAt.toLocaleString())}\n\n${chalk.white(`Main Prefix: `)}${chalk.blue(client.config.prefix)}${chalk.yellow(' (Default)')}\n${chalk.white(`Commands: `)}${chalk.blue(commandcount)}\n${chalk.white(`Events: `)}${chalk.blue(eventcount)}\n\n${chalk.white(`Created By: `)}${chalk.blue('Hyperz#0001')}\n${chalk.white('Debug Mode: ')}${chalk.yellow(client.config.debugmode)}`; 29 | 30 | let booter = carden(chalk.blue(head), frick, { margin: 1, content: { borderStyle: 'single', borderColor: "blue", padding: 1}, header: { borderStyle: 'classic', padding: 1}}) 31 | console.log(booter); 32 | console.log(`\n\n ------ CONSOLE LOGGING BEGINS BELOW ------\n\n`) 33 | console.log("Bot started successfully"); // Allows for docker ready event 34 | }) 35 | 36 | await client.guilds.cache.forEach(async g => { 37 | await con.query(`SELECT * FROM guilds WHERE guildid='${g.id}'`, async(err, row) => { 38 | if(err) throw err 39 | if(row[0]) { 40 | if(row[0].active === 'false') { 41 | await con.query(`UPDATE guilds SET active='true' WHERE guildid='${g.id}'`, async(err, row) => { 42 | if(err) throw err; 43 | }); 44 | } 45 | } else { 46 | await con.query(`INSERT INTO guilds (active, guildid, prefix, autobans, autounbans, altprev, altprevtimer, inviteblocker, serverlock) VALUES ('true', '${g.id}', '${client.config.prefix}', 'false', 'false', 'false', '30d', 'false', 'false')`, async (err, row) => { 47 | if(err) throw err; 48 | }); 49 | } 50 | }); 51 | }); 52 | 53 | await con.query(`SELECT * FROM guilds`, async (err, row) => { 54 | if(err) throw err; 55 | await row.forEach(async r => { 56 | let deGuild = await client.guilds.cache.get(r.guildid) 57 | if(deGuild == undefined) { 58 | await con.query(`UPDATE guilds SET active='false' WHERE guildid='${r.guildid}'`, async (err, row) => { 59 | if(err) throw err; 60 | }); 61 | } else { 62 | try { 63 | if(deGuild.members.cache.find(client.user.id)) { 64 | return; 65 | } else { 66 | await con.query(`UPDATE guilds SET active='false' WHERE guildid='${r.guildid}'`, async (err, row) => { 67 | if(err) throw err; 68 | }); 69 | } 70 | } catch(e) { 71 | 72 | } 73 | } 74 | }); 75 | }); 76 | 77 | setTimeout(async () => { 78 | const channel = client.channels.cache.get(client.config.voicechanneltojoin); 79 | if (!channel) return console.error("The voice channel does not exist (change config's voicechanneltojoin)!"); 80 | channel.join().then(connection => { 81 | console.log("Successfully connected to the voice channel!") 82 | }).catch(e => { 83 | console.error(e); 84 | }); 85 | }, 2200); 86 | 87 | } catch(e) { 88 | console.log(e) 89 | } 90 | 91 | } 92 | 93 | async function changeStatus(client, presence) { 94 | if (i >= presence.length) i = 0; 95 | await client.user.setPresence({ 96 | activity: { 97 | name: presence[i].name, 98 | type: presence[i].type 99 | }, 100 | status: presence[i].status 101 | }); 102 | i++; 103 | setTimeout(() => { 104 | changeStatus(client, presence); 105 | }, 10000) 106 | 107 | }; 108 | -------------------------------------------------------------------------------- /install.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE guilds ( 2 | active varchar(255), 3 | guildid varchar(255), 4 | prefix varchar(255), 5 | autobans varchar(255), 6 | autounbans varchar(255), 7 | altprev varchar(255), 8 | altprevtimer varchar(255), 9 | inviteblocker varchar(255), 10 | serverlock varchar(255) 11 | ); 12 | 13 | CREATE TABLE whitelist ( 14 | guildid varchar(255), 15 | userid varchar(255), 16 | enforcerid varchar(255) 17 | ); 18 | 19 | CREATE TABLE blacklistedusers ( 20 | userid varchar(255), 21 | caseid varchar(255), 22 | reason TEXT, 23 | proof TEXT, 24 | notes TEXT 25 | ); 26 | 27 | CREATE TABLE bannedusers ( 28 | usertag varchar(255), 29 | userid varchar(255), 30 | caseid varchar(255), 31 | reason text, 32 | proof text, 33 | bandate varchar(255) 34 | ); 35 | 36 | CREATE TABLE cases ( 37 | caseid varchar(255), 38 | caseuserid varchar(255), 39 | caseusertag varchar(255), 40 | casereason text, 41 | enforcertag varchar(255), 42 | enforcerid varchar(255) 43 | ); 44 | 45 | CREATE TABLE reports ( 46 | uniqueid varchar(255), 47 | active varchar(255), 48 | reporterid varchar(255), 49 | reportertag varchar(255), 50 | reportedid varchar(255), 51 | reportedtag varchar(255), 52 | reason text, 53 | links text, 54 | notes text 55 | ); 56 | 57 | CREATE TABLE appeals ( 58 | uniqueid varchar(255), 59 | active varchar(255), 60 | userid varchar(255), 61 | usertag varchar(255), 62 | banreason text, 63 | unbanreason text, 64 | sorry text, 65 | mistakes text, 66 | notes text 67 | ); 68 | 69 | CREATE TABLE staff ( 70 | usertag varchar(255), 71 | userid varchar(255), 72 | enforcerid varchar(255), 73 | enforcertag varchar(255) 74 | ); 75 | 76 | CREATE TABLE loggingchannels ( 77 | guildid varchar(255), 78 | channelid varchar(255), 79 | enforcerid varchar(255), 80 | type varchar(255) 81 | ); 82 | 83 | CREATE TABLE sticky ( 84 | guild varchar(255), 85 | channel varchar(255), 86 | message TEXT, 87 | embed varchar(255), 88 | color TEXT 89 | ); -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | const { init } = require('./src/Client.js') 2 | 3 | init() -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hyperz-djs-template-v3", 3 | "version": "3.0.0", 4 | "description": "", 5 | "main": "main.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [ 10 | "Hyperz" 11 | ], 12 | "author": "Hyperz#0001", 13 | "license": "ISC", 14 | "dependencies": { 15 | "axios": "^0.21.1", 16 | "carden": "^4.0.0", 17 | "chalk": "^4.1.1", 18 | "discord.js": "^12.5.3", 19 | "express": "^4.17.1", 20 | "figlet": "^1.5.0", 21 | "fs": "0.0.1-security", 22 | "moment": "^2.29.1", 23 | "ms": "^2.1.3", 24 | "mysql": "^2.18.1" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/Client.js: -------------------------------------------------------------------------------- 1 | const { Client, Collection } = require('discord.js'); 2 | const { readdirSync } = require('fs'); 3 | const { join } = require('path'); 4 | const api = require('../api/api.js') 5 | const mysql = require('mysql'); 6 | let con; 7 | 8 | class HDClient extends Client { 9 | constructor(options = {}) { 10 | super(options); 11 | 12 | this.config = require(`../config`); 13 | this.utils = require(`./utils/utils`); 14 | 15 | this.commands = new Collection(); 16 | this.aliases = new Collection(); 17 | 18 | }; 19 | }; 20 | 21 | const client = new HDClient({ 22 | partials: ["MESSAGE", "CHANNEL", "REACTION"] 23 | }); 24 | 25 | global.__basedir = __dirname; 26 | 27 | const version = Number(process.version.split('.')[0].replace('v', '')); 28 | if (!version === 12 || !version > 12) return console.log('Please upgrade to Node v12 or higher'); 29 | 30 | const init = async() => { 31 | try { 32 | 33 | try { 34 | con = mysql.createConnection(client.config.database) 35 | setTimeout(() => { 36 | console.log('MySQL Successfully Connected') 37 | }, 2300); 38 | } catch (e) { 39 | client.utils.error(client, e) 40 | return process.exit(1); 41 | } 42 | 43 | if(client.config.clientAPI.enabled) { 44 | api.apistart(client, con) 45 | } 46 | 47 | // Command Handler 48 | const categories = readdirSync(join(__dirname, `../`, `commands`)); 49 | for (let category of categories) { 50 | const commands = readdirSync(join(__dirname, `../`, `commands/`, category)); 51 | for (let command of commands) { 52 | let info = require(`../commands/${category}/${command}`); 53 | if (info.info.name) { 54 | client.commands.set(info.info.name, info); 55 | } else { 56 | console.log(`No help name or additional info found for ${command}`); 57 | continue; 58 | } 59 | if (info.info.useAliases) { 60 | try { 61 | info.info.aliases.forEach(a => { 62 | client.commands.set(a, info); 63 | }) 64 | } catch(e) { 65 | console.log(`An error occured when adding aliases for ${command}`); 66 | continue; 67 | } 68 | } 69 | } 70 | }; 71 | 72 | // Event handler 73 | const events = readdirSync(join(__dirname, `../`, `events`)); 74 | events.forEach(e => { 75 | const name = e.split('.')[0]; 76 | const event = require(`../events/${e}`); 77 | client.on(name, event.bind(null, client, con)); 78 | delete require.cache[require.resolve(`../events/${e}`)]; 79 | }); 80 | 81 | client.login(client.config.token).catch(e => console.log(e)); 82 | } catch(e) { 83 | console.log(e) 84 | } 85 | } 86 | 87 | process.on('unhandledRejection', (err) => console.log(err)) 88 | 89 | exports.init = init; -------------------------------------------------------------------------------- /src/utils/utils.js: -------------------------------------------------------------------------------- 1 | const chalk = require('chalk'); 2 | 3 | async function colorize(color, content) { 4 | switch (color, content) { 5 | case "red": 6 | return chalk.red(content) 7 | case "green": 8 | return chalk.green(content) 9 | case "yellow": 10 | return chalk.yellow(content) 11 | case "blue": 12 | return chalk.blue(content) 13 | case "cyan": 14 | return chalk.cyan(content) 15 | case "white": 16 | return chalk.white(content) 17 | case "black": 18 | return chalk.black(content) 19 | default: 20 | return chalk.white(content); 21 | }; 22 | }; 23 | 24 | async function error(client, content) { 25 | if(client.config.debugmode) { 26 | console.log(chalk.red(content)) 27 | } 28 | }; 29 | 30 | async function guildload(client, con, message) { 31 | await con.query(`INSERT INTO guilds (active, guildid, prefix, autobans, autounbans, altprev, altprevtimer, inviteblocker, serverlock) VALUES ('true', '${message.guild.id}', '${client.config.prefix}', 'false', 'false', 'false', '30d', 'false', 'false')`, async (err, row) => { 32 | if(err) throw err; 33 | }); 34 | }; 35 | 36 | async function enforcer(client, con, enfmember, enfreason, enfembed) { 37 | await con.query(`SELECT * FROM guilds WHERE active='true'`, async (err, row) => { 38 | if(err) throw err; 39 | for(let data of row) { 40 | await con.query(`SELECT * FROM loggingchannels WHERE guildid='${data.guildid}' AND type='1'`, async (err, rows) => { 41 | if(err) throw err; 42 | for(let datas of rows) { 43 | let deChannel = await client.channels.cache.get(datas.channelid) 44 | deChannel.send(enfembed).catch(e => {}); 45 | } 46 | }); 47 | } 48 | }); 49 | 50 | await con.query(`SELECT * FROM guilds WHERE autobans='true' AND active='true'`, async (err, row) => { 51 | if(err) throw err; 52 | for(let data of row) { 53 | let deGuild = await client.guilds.cache.get(data.guildid) 54 | await deGuild.members.ban(enfmember, { 55 | reason: `${enfreason} - ${client.user.tag}` 56 | }).catch(e => {}); 57 | } 58 | }); 59 | } 60 | 61 | exports.enforcer = enforcer; 62 | exports.guildload = guildload; 63 | exports.error = error; 64 | exports.colorize = colorize; --------------------------------------------------------------------------------