├── README.md ├── bleed.js ├── config.json ├── configuration ├── altdentifier.js ├── antiinvite.js ├── autorole.js ├── joindm.js ├── logs.js ├── prefix.js ├── setme.js └── welcome.js ├── emojis.json ├── events ├── guildCreate.js ├── guildDelete.js ├── guildMemberAdd.js ├── guildMemberRemove.js ├── message.js ├── messageDelete.js └── ready.js ├── fmuser.json ├── fun ├── editsnipe.js ├── gnome.js ├── image.js ├── meme.js ├── randomnumber.js └── snipe.js ├── handlers ├── command.js ├── event.js └── xp.js ├── information ├── about.js ├── faq.js ├── find.js ├── help.js ├── invite.js ├── inviteinfo.js ├── membercount.js ├── members.js ├── ping.js ├── random.js ├── roleinfo.js ├── serverinfo.js ├── uptime.js └── userinfo.js ├── jointocreate.js ├── lastfm ├── fm.js └── lastfm.js ├── moderation ├── ban.js ├── botclear.js ├── hackban.js ├── jail.js ├── kick.js ├── lockdown.js ├── mute.js ├── purge.js ├── purgeuser.js ├── rename.js ├── role.js ├── rolecreate.js ├── roleremove.js ├── unban.js ├── unlock.js └── unmute.js ├── owner ├── eval.js ├── guilds.js ├── leave.js ├── portal.js ├── reload.js └── status.js ├── package-lock.json ├── package.json └── utility ├── afk.js ├── appstore.js ├── avatar.js ├── createembed.js ├── emojiadd.js ├── firstmessage.js ├── google.js ├── guildbanner.js ├── guildicon.js ├── jumbo.js ├── pin.js ├── poll.js ├── remind.js ├── setbanner.js ├── seticon.js ├── setsplash.js ├── spotify.js ├── twitter.js ├── unpin.js ├── urban.js └── userbanner.js /README.md: -------------------------------------------------------------------------------- 1 | Discord Bleed Bot SRC 2 | https://bleed.bot/ -------------------------------------------------------------------------------- /bleed.js: -------------------------------------------------------------------------------- 1 | const { token, default_prefix, color } = require("./config.json"); 2 | const Discord = require("discord.js"); 3 | require("@haileybot/sanitize-role-mentions")(); 4 | const client = new Discord.Client({ 5 | disableMentions: "everyone", 6 | fetchAllMembers: true, 7 | partials: ['MESSAGE', 'REACTION'] 8 | }); 9 | const mongoose = require('mongoose') 10 | mongoose.connect('mongo url', { 11 | useUnifiedTopology: true, 12 | useNewUrlParser: true 13 | }).then(console.log('connected to mongoose')) 14 | const jointocreate = require("./jointocreate"); 15 | jointocreate(client); 16 | client.commands = new Discord.Collection(); 17 | client.aliases = new Discord.Collection(); 18 | client.db = require("quick.db"); 19 | module.exports = client; 20 | ["command", "event"].forEach(handler => { 21 | require(`./handlers/${handler}`)(client); 22 | }); 23 | Discord.Constants.DefaultOptions.ws.properties.$browser = "Discord Android" 24 | 25 | client.login(token) 26 | -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "token": "ODY4MzMyODgwNTI1NDA2MjA4.YPuIAw.NIcESVKqBUSnvanmJuHXtgM4YVs", 3 | "default_prefix": ",,", 4 | "owner": "262429076763967488", 5 | "color": "#95a5a6", 6 | "lfkey": "6245df282e7ba09748fb801fe27ad66d", 7 | "JOINTOCREATECHANNEL": "868312252569243648" 8 | } -------------------------------------------------------------------------------- /configuration/altdentifier.js: -------------------------------------------------------------------------------- 1 | const db = require('quick.db'); 2 | const { default_prefix } = require("../../config.json"); 3 | const Discord = require('discord.js'); 4 | const { color } = require("../../config.json"); 5 | const { approve } = require('../../emojis.json') 6 | const { warn } = require('../../emojis.json') 7 | 8 | module.exports = { 9 | name: 'altdentifier', 10 | aliases: ['ad'], 11 | 12 | run: async (client, message, args) => { 13 | if (args[0] == 'Altdentifier is disabled') { 14 | if (!message.member.hasPermission("MANAGE_GUILD")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_guild\`` } }); 15 | if (!message.guild.me.hasPermission("KICK_MEMBERS")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`kick_members\`` } }); 16 | 17 | let prefix = db.get(`prefix_${message.guild.id}`) 18 | if (prefix === null) { prefix = default_prefix; } 19 | const embed = new Discord.MessageEmbed() 20 | .setTitle(`**${prefix}altdentifier**`) 21 | .setDescription(`set up altdentifier when new accounts join`) 22 | .addField(`**subcommands**`, `${prefix}altdentifier enable * enables altdentifier for the guild\n ${prefix}altdentifier disable * disables altdentifier for the guild`) 23 | .addField(`**usage**`, `${prefix}altdentifier`) 24 | .addField(`**aliases**`, `ad`) 25 | .setColor(color) 26 | if (!args[0]) return message.channel.send(embed) 27 | 28 | if (await db.has(`anti-new_${message.guild.id}`) === true) { 29 | 30 | await db.delete(`anti-new_${message.guild.id}`); 31 | message.channel.send({ embed: { color: "#a3eb7b", description: `${approve} ${message.author}: Altdentifier is now **disabled**` } }) 32 | 33 | } else return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: Altdentifier has already been **enabled**` } }) 34 | } else if (args[0] == 'enable') { 35 | if (!message.member.hasPermission("MANAGE_GUILD")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_guild\`` } }); 36 | if (!message.guild.me.hasPermission("MANAGE_MESSAGES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`manage_messages\``}}); 37 | 38 | if (await db.has(`anti-new_${message.guild.id}`) === false) { 39 | 40 | await db.set(`anti-new_${message.guild.id}`, true) 41 | message.channel.send({ embed: { color: "#a3eb7b", description: `${approve} ${message.author}: Altdentifier is now **enabled**` } }) 42 | 43 | } else return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: Altdentifier has already been **enabled**` } }) 44 | } else if (args[0] == 'on') { 45 | if (!message.member.hasPermission("MANAGE_GUILD")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_guild\`` } }); 46 | if (!message.guild.me.hasPermission("MANAGE_MESSAGES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`manage_messages\``}}); 47 | 48 | if (await db.has(`anti-new_${message.guild.id}`) === false) { 49 | 50 | await db.set(`anti-new_${message.guild.id}`, true) 51 | message.channel.send({ embed: { color: "#a3eb7b", description: `${approve} ${message.author}: Altdentifier is now **enabled**` } }) 52 | 53 | } else return message.channel.send({ embed: { color: "#a3eb7b", description: `${warn} ${message.author}: Altdentifier has already been **enabled**` } }) 54 | } else if (args[0] == 'off', 'disabled') { 55 | if (!message.member.hasPermission("MANAGE_GUILD")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_guild\`` } }); 56 | if (!message.guild.me.hasPermission("MANAGE_MESSAGES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`manage_messages\``}}); 57 | 58 | if (await db.has(`anti-new_${message.guild.id}`) === true) { 59 | 60 | await db.delete(`anti-new_${message.guild.id}`); 61 | message.channel.send({ embed: { color: "#a3eb7b", description: `${approve} ${message.author}: Altdentifier is now **disabled**` } }) 62 | 63 | } else return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: Altdentifier has already been **disabled**` } }) 64 | } 65 | } 66 | } -------------------------------------------------------------------------------- /configuration/antiinvite.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js') 2 | const db = require('quick.db') 3 | const { default_prefix } = require("../../config.json"); 4 | const { color } = require("../../config.json"); 5 | const { approve } = require('../../emojis.json') 6 | const { warn } = require('../../emojis.json') 7 | 8 | module.exports = { 9 | name: "antiinvite", 10 | aliases: ["antilinks"], 11 | 12 | run: async (client, message, args) => { 13 | if (!message.member.hasPermission("MANAGE_GUILD")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_guild\`` } }); 14 | if (!message.guild.me.hasPermission("MANAGE_MESSAGES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`manage_messages\`` } }); 15 | 16 | let prefix = db.get(`prefix_${message.guild.id}`); 17 | if (prefix === null) { prefix = default_prefix; }; 18 | if (message.author.bot) return; 19 | const embed = new Discord.MessageEmbed() 20 | .setColor(color) 21 | .setTitle(`${prefix}antiinvite`) 22 | .setDescription(`set up anti invite when users send a links`) 23 | .addField('**subcommands**', `${prefix}antiinvite enable * enable anti invite when links are sent\n${prefix}antiinvite disable * disable anti inivte for the guild`) 24 | .addField('**usage**', `${prefix}antiinvite`) 25 | .addField('**aliases**', `antilinks`) 26 | if (!args[0]) return message.channel.send(embed) 27 | 28 | const antilinks = args[0] 29 | if (!antilinks || (antilinks !== "enable" && antilinks !== "disable")) { 30 | 31 | if (antilinks === "enable") { 32 | db.set(`antilink_${message.guild.id}`, 'on') 33 | 34 | const embed_on = new Discord.MessageEmbed() 35 | .setColor(`#a3eb7b`) 36 | .setDescription(`${approve} ${message.author}: Antiinvite is now **enabled**`) 37 | 38 | message.channel.send(embed_on) 39 | 40 | } else if (antilinks === "disable") { 41 | db.set(`antilink_${message.guild.id}`, 'off') 42 | 43 | const embed_off = new Discord.MessageEmbed() 44 | .setColor(`#a3eb7b`) 45 | .addDescription(`${approve} ${message.author}: Successfully **disabled** antiinvite for this guild`) 46 | 47 | message.channel.send(embed_off) 48 | } 49 | } 50 | } 51 | } -------------------------------------------------------------------------------- /configuration/autorole.js: -------------------------------------------------------------------------------- 1 | const db = require('quick.db') 2 | const { default_prefix } = require("../../config.json"); 3 | const Discord = require('discord.js'); 4 | const { color } = require("../../config.json"); 5 | const { approve } = require('../../emojis.json') 6 | const { warn } = require('../../emojis.json') 7 | 8 | module.exports = { 9 | name: "autorole", 10 | aliases: ["ar"], 11 | 12 | run: async (client, message, args) => { 13 | if (!message.member.hasPermission("MANAGE_GUILD")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_guild\`` } }); 14 | if (!message.guild.me.hasPermission("MANAGE_ROLES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`manage_roles\`` } }); 15 | 16 | let prefix = db.get(`prefix_${message.guild.id}`) 17 | if (prefix === null) { prefix = default_prefix; } 18 | const embed = new Discord.MessageEmbed() 19 | .setTitle(`**${prefix}autorole**`) 20 | .setDescription(`set up autorole when new members join`) 21 | .addField(`**subcommands**`, `${prefix}autorole set * set the autorole for the guild\n ${prefix}autorole clear * clear the original set autorole`) 22 | .addField(`**usage**`, `${prefix}autorole`) 23 | .addField(`**aliases**`, `ar`) 24 | .setColor(color) 25 | if (!args[0]) return message.channel.send(embed) 26 | 27 | if (!args[0]) { 28 | const rid = db.get(`autorole_${message.guild.id}`); 29 | const role = message.guild.roles.cache.find(r => r.id === rid); 30 | if (!role) { 31 | return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: There is no autorole set`}}) 32 | } 33 | if(!message.member.hasPermission('MANAGE_GUILD')) { 34 | return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_guild\`` } }); 35 | }} 36 | else { 37 | if (args[0].toLowerCase() == 'set') { 38 | const attemptedRoleName = args.splice(1).join(' '); 39 | const roleName = message.guild.roles.cache.find(r => r.name === attemptedRoleName); 40 | if (!roleName) { 41 | return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: You didn't return an existing role ${attemptedRoleName}`}}) 42 | } 43 | if(!message.member.hasPermission('MANAGE_GUILD')) { 44 | return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_guild\`` } }); 45 | } 46 | await db.set(`autorole_${message.guild.id}`, roleName.id); 47 | return message.channel.send({ embed: { color: "#a3eb7b", description: `${approve} ${message.author}: Autorole is now set to **${roleName.name}**`}}) 48 | } 49 | else if (args[0].toLowerCase() == 'clear') { 50 | const roleName = db.get(`autorole_${message.guild.id}`); 51 | if(!message.member.hasPermission('MANAGE_GUILD')) { 52 | return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_guild\`` } }); 53 | } 54 | await db.delete(`autorole_${message.guild.id}`, roleName.id); 55 | return message.channel.send({ embed: { color: "#a3eb7b", description: `${approve} ${message.author}: The autorole is now **cleared**`}}) 56 | } 57 | } 58 | }} -------------------------------------------------------------------------------- /configuration/joindm.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js') 2 | const db = require('quick.db') 3 | const schema = require('../../models/joindmmodel') 4 | const { default_prefix } = require("../../config.json"); 5 | const { color } = require("../../config.json"); 6 | const { approve } = require('../../emojis.json') 7 | const { warn } = require('../../emojis.json') 8 | 9 | module.exports = { 10 | name: "joindm", 11 | aliases: ['jdm', 'welcomedm'], 12 | 13 | run: async (client, message, args) => { 14 | if (!message.member.hasPermission("MANAGE_GUILD")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_guild\`` } }); 15 | if (!message.guild.me.hasPermission("MANAGE_MESSAGES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`manage_messages\`` } }); 16 | 17 | let prefix = db.get(`prefix_${message.guild.id}`); 18 | if (prefix === null) { prefix = default_prefix; }; 19 | if (message.author.bot) return; 20 | const sub = args[0] 21 | const embed = new Discord.MessageEmbed() 22 | .setTitle(`**${prefix}joindm**`) 23 | .setDescription(`set up a join dm when new members join`) 24 | .addField(`**subcommands**`, `${prefix}joindm message * edit the join dm, text\n${prefix}joindm clear * clear the join dm message\n${prefix}joindm test * test how the join dm will look\n${prefix}joindm variables * list all the join dm variables`) 25 | .addField(`**usage**`, `${prefix}joindm`) 26 | .addField(`**aliases**`, `jdm, welcomedm`) 27 | .setColor(color) 28 | if (!sub) return message.channel.send(embed) 29 | 30 | if (sub === 'message') { 31 | const msg = args.slice(1).join(" ") 32 | const state = new Discord.MessageEmbed() 33 | .setDescription(`${warn} ${message.author}: You need to provide a **join message**`) 34 | .setColor(`#efa23a`) 35 | if (!msg) return message.channel.send(state) 36 | 37 | schema.findOne({ guildId: message.guild.id }, async (err, data) => { 38 | if (data) { 39 | data.Message = msg 40 | data.save(); 41 | } else { 42 | new schema({ 43 | guildId: message.guild.id, 44 | Message: msg, 45 | }).save() 46 | } 47 | }) 48 | return message.channel.send({ embed: { color: "a3eb7b", description: `${approve} ${message.author}: Successfully set your **joindm message**` } }) 49 | } 50 | 51 | if (sub === 'clear') { 52 | const msg = args.slice(1).join(" ") 53 | schema.findOne({ guildId: message.guild.id }, async (err, data) => { 54 | if (!data) { 55 | return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: There is no **joindm message** set for me to clear this` } }) 56 | } else { 57 | await schema.findOneAndDelete({ guildId: message.guild.id }); 58 | } 59 | return message.channel.send({ embed: { color: "#a3eb7b", description: `${approve} ${message.author}: Successfully cleared the **joindm message**` } }) 60 | }) 61 | } 62 | if (sub === 'test') { 63 | const msg = args.slice(1).join(" ") 64 | schema.findOne({ guildId: message.guild.id }, async (err, data) => { 65 | if (!data) { 66 | return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: There is no **joindm message** set for me to test this` } }) 67 | } else { 68 | message.channel.send(data.Message) 69 | } 70 | }) 71 | } 72 | } 73 | } -------------------------------------------------------------------------------- /configuration/logs.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js"); 2 | const db = require("quick.db") 3 | const { default_prefix } = require("../../config.json"); 4 | const { color } = require("../../config.json"); 5 | const { approve } = require('../../emojis.json') 6 | const { warn } = require('../../emojis.json') 7 | 8 | module.exports = { 9 | name: "logs", 10 | aliases: ['modlogs'], 11 | 12 | run: async (client, message, args) => { 13 | 14 | if (!message.member.hasPermission("MANAGE_GUILD")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_guild\`` } }); 15 | 16 | let prefix = db.get(`prefix_${message.guild.id}`) 17 | const args1 = message.content.trim().split(/ +/g) 18 | if (prefix === null) { prefix = default_prefix; } 19 | 20 | let channel2 = args[0] 21 | 22 | if(!channel2) { 23 | const logsEmbed = new Discord.MessageEmbed() 24 | .setColor(color) 25 | .setTitle(`${prefix}logs`) 26 | .setDescription(`set your server modlogs`) 27 | .addField(`**subcommands**`, `${prefix}logs channel * set your modlogs channel\n${prefix}logs clear * remove the current modlog channel`) 28 | .addField(`**usage**`, `${prefix}logs`) 29 | .addField(`**aliases**`, `modlogs`) 30 | 31 | message.channel.send(logsEmbed) 32 | } 33 | 34 | if (args[0] == "clear") { 35 | db.delete(`logschannel_${message.guild.id}`) 36 | return await message.channel.send({ embed: { color: "#a3eb7b", description: `${approve} ${message.author}: The previous **modlogs channel** has been removed`}}) 37 | } 38 | 39 | if (args[0] == "channel") { 40 | let channel = message.mentions.channels.first() 41 | if(!channel) { 42 | return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: To set the modlogs channel do \`${prefix}logs channel [channel]\``}}) 43 | } 44 | db.set(`logschannel_${message.guild.id}`, channel.id) 45 | await message.channel.send({ embed: { color: "#a3eb7b", description: `${approve} ${message.author}: Set the **modlogs channel** to ${channel}`}}) 46 | 47 | } 48 | }} -------------------------------------------------------------------------------- /configuration/prefix.js: -------------------------------------------------------------------------------- 1 | const db = require("quick.db") 2 | const { default_prefix } = require("../../config.json") 3 | const { approve } = require('../../emojis.json') 4 | const { warn } = require('../../emojis.json') 5 | 6 | module.exports = { 7 | name: "prefix", 8 | 9 | run: async (client, message, args) => { 10 | if (!message.member.hasPermission("MANAGE_GUILD")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_guild\`` } }); 11 | 12 | if (!args[0]) { 13 | return message.channel.send({ embed: { color: "#6495ED", description: `${message.author}: Please provide the prefix that you want to set` } }) 14 | } 15 | 16 | if (args[1]) { 17 | return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: You cannot set the **prefix** to a **double argument**` } }) 18 | } 19 | 20 | if (args[0].length > 3) { 21 | return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: Your **prefix** cannot be longer than **3 characters**!` } }) 22 | } 23 | 24 | if (args.join("") === default_prefix) { 25 | db.delete(`prefix_${message.guild.id}`) 26 | return await message.channel.send({ embed: { color: "#a3eb7b", description: `${approve} ${message.author}: The guild's prefix has been reset to \`,\`` } }) 27 | } 28 | 29 | db.set(`prefix_${message.guild.id}`, args[0]) 30 | await message.channel.send({ embed: { color: "#a3eb7b", description: `${approve} ${message.author}: Replaced your current guild's prefix to \`${args[0]}\`` } }) 31 | } 32 | } -------------------------------------------------------------------------------- /configuration/setme.js: -------------------------------------------------------------------------------- 1 | const { approve } = require('../../emojis.json') 2 | const { warn } = require('../../emojis.json') 3 | 4 | module.exports = { 5 | name: "setme", 6 | 7 | run: async (client, message, args) => { 8 | if (!message.member.hasPermission("MANAGE_GUILD")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_guild\`` } }); 9 | if (!message.guild.me.hasPermission("MANAGE_ROLES", "MANAGE_CHANNELS")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`manage_channels or manage_roles\`` } }); 10 | 11 | message.channel.send({ embed: { color: "#6495ED", description: `:gear: ${message.author}: Working moderation setup...` } }).then(embedMessage => { 12 | embedMessage.edit({ embed: { color: "#a3eb7b", description: `${approve} ${message.author}: **Moderation system set** up has been completed. Please make sure that all of your channels and roles have been configured properly.` } }) 13 | }) 14 | 15 | message.guild.roles.create({ 16 | data: { 17 | name: 'muted', 18 | permissions: [] 19 | } 20 | }); 21 | message.guild.roles.create({ 22 | data: { 23 | name: 'jailed', 24 | permissions: [] 25 | } 26 | }); 27 | message.guild.channels.create("jailed", { 28 | type: "text", 29 | position: 0, 30 | permissions: ['VIEW_CHANNEL'] 31 | }) 32 | } 33 | } -------------------------------------------------------------------------------- /configuration/welcome.js: -------------------------------------------------------------------------------- 1 | const db = require('quick.db') 2 | const discord = require('discord.js') 3 | const { default_prefix } = require("../../config.json"); 4 | const { color } = require("../../config.json"); 5 | const { approve } = require('../../emojis.json') 6 | const { warn } = require('../../emojis.json') 7 | 8 | module.exports = { 9 | name: "welcome", 10 | aliases: ['welc', 'wlc'], 11 | 12 | run: async (client, message, args) => { 13 | if (!message.member.hasPermission("MANAGE_GUILD")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_guild\`` } }); 14 | 15 | let prefix = db.get(`prefix_${message.guild.id}`); 16 | if (prefix === null) { prefix = default_prefix; }; 17 | if (message.author.bot) return; 18 | const embed = new discord.MessageEmbed() 19 | .setTitle(`**${prefix}welcome**`) 20 | .setDescription(`set up a welcome message when new members join`) 21 | .addField(`**subcommands**`, `${prefix}welcome channel * set where to send welcome messages\n${prefix}welcome clear * clear the welcome message\n${prefix}welcome message * set the welcome message text\n${prefix}welcome variables * see all the welcome message variables`) 22 | .addField(`**usage**`, `${prefix}welcome`) 23 | .addField(`**aliases**`, `welc, wlc`) 24 | .setColor(color) 25 | if (!args[0]) return message.channel.send(embed) 26 | if (args[0].toLowerCase() == 'message') { 27 | db.set(`welmessage_${message.guild.id}`, args.splice(1).join(' ')) 28 | let wlcmsg = db.get(`welmessage_${message.guild.id}`) 29 | if (wlcmsg === null) { 30 | const setmsgembed = new discord.MessageEmbed() 31 | .setDescription(`${warn} ${message.author}: There is no **welcome message** set one with \`${prefix}welcome message\``) 32 | .setColor(`#efa23a`) 33 | return message.channel.send(setmsgembed) 34 | } else { 35 | const setembed = new discord.MessageEmbed() 36 | .setTitle("welcome message:") 37 | .setDescription(`\`\`\`` + wlcmsg + `\`\`\``) 38 | .setFooter(`see the varibles with ${prefix}welcome variables + test with ${prefix}welcome test\ndisable with ${prefix}welcome clear`) 39 | .setColor(color) 40 | return message.channel.send(setembed) 41 | } 42 | } else if (args[0].toLowerCase() == 'test') { 43 | let chx = db.get(`welchannel_${message.guild.id}`); 44 | if (chx === null) { 45 | return; 46 | } 47 | let welcome = db.get(`welmessage_${message.guild.id}`); 48 | if (welcome === null) { 49 | return; 50 | } 51 | welcome = welcome.replace('{user}', message.member); 52 | welcome = welcome.replace('{user.name}', message.author.username); 53 | welcome = welcome.replace('{user.tag}', message.author.tag); 54 | welcome = welcome.replace('{user.id}', message.author.id); 55 | welcome = welcome.replace('{membercount}', message.member.guild.memberCount); 56 | const ordinal = (message.guild.memberCount.toString().endsWith(1) && !message.guild.memberCount.toString().endsWith(11)) ? 'st' : (message.guild.memberCount.toString().endsWith(2) && !message.guild.memberCount.toString().endsWith(12)) ? 'nd' : (message.guild.memberCount.toString().endsWith(3) && !message.guild.memberCount.toString().endsWith(13)) ? 'rd' : 'th'; 57 | welcome = welcome.replace('{membercount.ordinal}', message.member.guild.memberCount + ordinal); 58 | welcome = welcome.replace('{guild.name}', message.member.guild.name); 59 | welcome = welcome.replace('{guild.id}', message.member.guild.id); 60 | 61 | client.channels.cache.get(chx).send(welcome) 62 | message.channel.send({ embed: { color: "#a3eb7b", description: `${approve} ${message.author}: Successfully tested your **welcome message** in <#` + chx + `>` } }) 63 | if (chx === null) { 64 | return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: There is no **welcome channel** set for me to test this` } }) 65 | } 66 | } else if (args[0].toLowerCase() == 'variables') { 67 | const member = message.author 68 | const ordinal = (message.guild.memberCount.toString().endsWith(1) && !message.guild.memberCount.toString().endsWith(11)) ? 'st' : (message.guild.memberCount.toString().endsWith(2) && !message.guild.memberCount.toString().endsWith(12)) ? 'nd' : (message.guild.memberCount.toString().endsWith(3) && !message.guild.memberCount.toString().endsWith(13)) ? 'rd' : 'th'; 69 | const variablesembed = new discord.MessageEmbed() 70 | .setTitle(`welcome variables`) 71 | .setDescription(`\`{user}\` * <@` + member + `>\n\`{user.name}\` * ` + message.author.username + `\n\`{user.tag}\` * ` + message.author.tag + `\n\`{user.id}\` * ` + message.author.id + `\n\`{guild.name}\` * ` + message.member.guild.name + `\n\`{guild.id}\` * ` + message.member.guild.id + `\n\`{membercount}\` * ` + message.member.guild.memberCount + `\n\`{membercount.ordinal}\` * ` + message.member.guild.memberCount + ordinal) 72 | .setColor(color) 73 | message.channel.send(variablesembed) 74 | } else if (args[0].toLowerCase() == "channel") { 75 | let channel = message.mentions.channels.first() 76 | if (!channel) { 77 | const welcomechannel = new discord.MessageEmbed() 78 | .setTitle(`${prefix}welcome channel`) 79 | .setDescription(`set the channel 4 welcome msgs`) 80 | .addField(`**usage**`, `${prefix}welcome channel [#channel]`) 81 | .addField(`**aliases**`, `c, chan`) 82 | .setColor(color) 83 | return message.channel.send(welcomechannel) 84 | } 85 | db.set(`welchannel_${message.guild.id}`, channel.id) 86 | await message.channel.send(`Set the welcome channel to ${channel}`) 87 | } else if (args[0].toLowerCase() == "chan") { 88 | let channel = message.mentions.channels.first() 89 | if (!channel) { 90 | const welcomechannel = new discord.MessageEmbed() 91 | .setTitle(`${prefix}welcome channel`) 92 | .setDescription(`set the channel 4 welcome msgs`) 93 | .addField(`**usage**`, `${prefix}welcome channel [#channel]`) 94 | .addField(`**aliases**`, `c, chan`) 95 | .setColor(color) 96 | return message.channel.send(welcomechannel) 97 | } 98 | db.set(`welchannel_${message.guild.id}`, channel.id) 99 | await message.channel.send({ embed: { color: "#a3eb7b", description: `${approve} ${message.author}: Set the **welcome channel** to ${channel}` } }) 100 | } else if (args[0].toLowerCase() == "c") { 101 | let channel = message.mentions.channels.first() 102 | if (!channel) { 103 | const welcomechannel = new discord.MessageEmbed() 104 | .setTitle(`${prefix}welcome channel`) 105 | .setDescription(`set the channel 4 welcome msgs`) 106 | .addField(`**usage**`, `${prefix}welcome channel [#channel]`) 107 | .addField(`**aliases**`, `c, chan`) 108 | .setColor(color) 109 | return message.channel.send(welcomechannel) 110 | } 111 | db.set(`welchannel_${message.guild.id}`, channel.id) 112 | await message.channel.send({ embed: { color: "#a3eb7b", description: `${approve} ${message.author}: Set the **welcome channel** to ${channel}` } }) 113 | } else if (args[0].toLowerCase() == "clear") { 114 | db.delete(`welchannel_${message.guild.id}`) 115 | db.delete(`welmessage_${message.guild.id}`) 116 | return await message.channel.send({ embed: { color: "#a3eb7b", description: `${approve} ${message.author}: Successfully cleared the **welcome channel** & **message**` } }) 117 | } 118 | } 119 | } -------------------------------------------------------------------------------- /emojis.json: -------------------------------------------------------------------------------- 1 | { 2 | "add": "<:add:868562133250609212>", 3 | "approve": "<:approve:868562133850394675>", 4 | "warn": "<:warn:868562165777444944>", 5 | "deny": "<:deny:868562165093777468>", 6 | "remove": "<:remove:868562134236299326>", 7 | "lastfm": "<:lastfm:868562385974202428>", 8 | "verifiedBotDev": "<:VerifiedBotDeveloper:868562234140393472>", 9 | "bugHunterPlus": "<:BugHunterPlus:868562384736878602>", 10 | "bugHunter": "<:BugHunter:868562384183246888>", 11 | "verifiedBot": "<:Verified:868562311172997150>", 12 | "hypeSquad": "<:HypeSquad:868562311751794739>", 13 | "hypeSquadBal": "<:HypeSquadBalance:868562309965054002>", 14 | "hypeSquadBravery": "<:HypeSquadBravery:868562235293839391>", 15 | "hypeSquadBril": "<:HypeSquadBrilliance:868562234907983922>", 16 | "discordStaff": "<:DiscordStaff:868562487941931038>", 17 | "discordPartner": "<:Partner:868799657130729502>", 18 | "earlySupporter": "<:EarlySupporter:868800908010594325>", 19 | "verifiedServer": "<:Verified:868562311172997150>" 20 | } -------------------------------------------------------------------------------- /events/guildCreate.js: -------------------------------------------------------------------------------- 1 | const client = require('../bleed') 2 | const { default_prefix, color } = require("../config.json"); 3 | const Discord = require('discord.js') 4 | const { warn } = require('../emojis.json') 5 | 6 | client.on("guildCreate", guild => { 7 | const embed = new Discord.MessageEmbed() 8 | .setDescription(`Joined new guild: **${guild.name}**, owned by ${guild.owner.user.tag} (\`${guild.id}\`) | ${guild.memberCount} members`) 9 | .setColor(`#a3eb7b`) 10 | client.channels.cache.get("868302839947100160").send(embed) 11 | }) 12 | 13 | client.on("guildCreate", guild => { 14 | let channelToSend; 15 | 16 | guild.channels.cache.forEach((channel) => { 17 | if ( 18 | channel.type === "text" && 19 | !channelToSend && 20 | channel.permissionsFor(guild.me).has("SEND_MESSAGES") 21 | ) channelToSend = channel; 22 | }); 23 | 24 | const embed = new Discord.MessageEmbed() 25 | .setColor(color) 26 | .setThumbnail(client.user.displayAvatarURL({ size: 2048 })) 27 | .setTitle(`Getting started with ${client.user.username}`) 28 | .setDescription(`Hey! Thanks for your interest in **${client.user.username} bot**. The following will provide you with some tips on how to get started with your server!`) 29 | .addField(`**Prefix :robot:**`, `The most important thing is my prefix. It is set to \`,\` by default for this server and it is also customizable, so if you don't like this prefix, you can always change it with \`prefix\` command!`) 30 | .addField(`**Moderation System :shield:**`, `If you would like to use moderation commands, such as \`jail\`, \`ban\`, \`kick\` and so much more... please run the \`setme\` command to quickly set up the moderation system.`) 31 | .addField(`**Support Server**`, `[Support Server](https://discord.gg/E5vPHzFU2S)`, true) 32 | .addField(`**Invite Bleed**`, `[Invite Here](https://discord.com/api/oauth2/authorize?client_id=868297144480710756&permissions=8&scope=bot)`, true) 33 | .addField(`**Upvote Bleed**`, `[Upvote Here](https://top.gg/bot/868297144480710756)`, true) 34 | 35 | if (!channelToSend) return; 36 | 37 | channelToSend.send(embed) 38 | }) -------------------------------------------------------------------------------- /events/guildDelete.js: -------------------------------------------------------------------------------- 1 | const client = require('../bleed') 2 | const Discord = require('discord.js') 3 | 4 | client.on("guildDelete", guild => { 5 | const embed = new Discord.MessageEmbed() 6 | .setDescription(`Left guild: **${guild.name}**, owned by ${guild.owner.user.tag} (\`${guild.id}\`) | **${guild.memberCount}** members`) 7 | .setColor("e74c3c") 8 | client.channels.cache.get("868302839947100160").send(embed) 9 | }) -------------------------------------------------------------------------------- /events/guildMemberAdd.js: -------------------------------------------------------------------------------- 1 | const client = require('../bleed') 2 | const db = require('quick.db') 3 | const { default_prefix, color } = require("../config.json"); 4 | const Discord = require('discord.js') 5 | 6 | client.on("guildMemberAdd", async member => { 7 | 8 | var antiNew = db.get(`anti-new_${member.guild.id}`); 9 | if (antiNew == null) { antiNew = false; } 10 | 11 | if (antiNew) { if (member.user.createdTimestamp + 1210000000 > Date.now()) { member.kick() } } 12 | 13 | const newMember = member 14 | const role = member.guild.roles.cache.find(r => r.id === db.get(`autorole_${member.guild.id}`)); 15 | if (role) member.roles.add(role); 16 | const logs = db.get(`logschannel_${member.guild.id}`); 17 | if (logs === null) { 18 | return; 19 | } 20 | 21 | if (role === null) return; 22 | 23 | const embed = new Discord.MessageEmbed() 24 | .setAuthor(newMember.user.tag, newMember.user.avatarURL()) 25 | .setTitle(`**Autorole**`) 26 | .addField(`**Member**`, `<@` + newMember + `>`) 27 | .addField(`**Role**`, `${role}`) 28 | .setColor(`${color}`) 29 | .setTimestamp() 30 | if (newMember) await newMember.roles.add(role); 31 | if (logs) await client.channels.cache.get(logs).send(embed); 32 | 33 | const embed2 = new Discord.MessageEmbed() 34 | .setAuthor(newMember.user.tag, newMember.user.avatarURL()) 35 | .setDescription(`<@` + newMember + `>` + ` has joined ${newMember.guild.name}`) 36 | .setColor(`${color}`) 37 | .setTimestamp() 38 | await client.channels.cache.get(logs).send(embed2) 39 | }) 40 | 41 | client.on("guildMemberAdd", async member => { 42 | let chx = db.get(`welchannel_${member.guild.id}`); 43 | if (chx === null) { 44 | return; 45 | } 46 | let welcome = db.get(`welmessage_${member.guild.id}`); 47 | if (welcome === null) { 48 | return; 49 | } 50 | 51 | welcome = welcome.replace('{user}', member); 52 | welcome = welcome.replace('{user.name}', member.username); 53 | welcome = welcome.replace('{user.tag}', member.tag); 54 | welcome = welcome.replace('{user.id}', member.id); 55 | welcome = welcome.replace('{membercount}', member.guild.memberCount); 56 | const ordinal = (member.guild.memberCount.toString().endsWith(1) && !member.guild.memberCount.toString().endsWith(11)) ? 'st' : (member.guild.memberCount.toString().endsWith(2) && !member.guild.memberCount.toString().endsWith(12)) ? 'nd' : (member.guild.memberCount.toString().endsWith(3) && !member.guild.memberCount.toString().endsWith(13)) ? 'rd' : 'th'; 57 | welcome = welcome.replace('{membercount.ordinal}', member.guild.memberCount + ordinal); 58 | welcome = welcome.replace('{guild.name}', member.guild.name); 59 | welcome = welcome.replace('{guild.id}', member.guild.id); 60 | 61 | if (welcome) await client.channels.cache.get(chx).send(welcome) 62 | }); 63 | 64 | client.on('guildMemberAdd', member =>{ 65 | if(member.user.bot) { 66 | member.ban() 67 | } 68 | }); 69 | const joinSchema = require('../models/joindmmodel') 70 | client.on('guildMemberAdd', async (member) => { 71 | joinSchema.findOne({ guildId: member.guild.id }, async(err, data) => { 72 | if(!data) return; 73 | 74 | const user = member.user 75 | const joindm = data.Message 76 | const toSend = joindm.replace('{user.mention}', member.user).replace('{user}', member.user.username).replace('{user.tag}', member.user.tag).replace('{guild.id}', member.guild.id).replace('{guild.name}', member.guild.name) 77 | 78 | user.send(toSend) 79 | }) 80 | }) -------------------------------------------------------------------------------- /events/guildMemberRemove.js: -------------------------------------------------------------------------------- 1 | const client = require('../bleed') 2 | const db = require('quick.db') 3 | const { default_prefix, color } = require("../config.json"); 4 | const Discord = require("discord.js") 5 | 6 | client.on("guildMemberRemove", async member => { 7 | 8 | const MemberLeft = member 9 | let logs = db.get(`logschannel_${member.guild.id}`); 10 | if (!logs) { 11 | return; 12 | } 13 | const embed = new Discord.MessageEmbed() 14 | .setAuthor(MemberLeft.user.tag, MemberLeft.user.avatarURL()) 15 | .setDescription(`<@` + MemberLeft + `>` + ` has left ${MemberLeft.guild.name}`) 16 | .setColor(`${color}`) 17 | .setTimestamp() 18 | const cachedLogs = await client.channels.fetch(logs) 19 | cachedLogs.send(embed); 20 | }) -------------------------------------------------------------------------------- /events/message.js: -------------------------------------------------------------------------------- 1 | const client = require('../bleed') 2 | const db = require("quick.db"); 3 | const { default_prefix, color } = require("../config.json"); 4 | const Discord = require('discord.js'); 5 | 6 | client.on("message", async message => { 7 | if (message.partial) return 8 | if (message.author.bot) return; 9 | 10 | if (message.author.bot) return; 11 | if (db.has(`afk-${message.author.id}+${message.guild.id}`)) { 12 | const info = db.get(`afk-${message.author.id}+${message.guild.id}`) 13 | await db.delete(`afk-${message.author.id}+${message.guild.id}`) 14 | message.channel.send({ embed: { color: "#6495ED", description: `:wave: ${message.author}: Welcome back, you're no longer **AFK**` } }); 15 | } 16 | 17 | if (message.mentions.members.first()) { 18 | if (db.has(`afk-${message.mentions.members.first().id}+${message.guild.id}`)) { 19 | const embed = new Discord.MessageEmbed() 20 | .setColor("#6495ED") 21 | .setDescription(`:zzz: ${message.mentions.members.first()} is AFK: ` + db.get(`afk-${message.mentions.members.first().id}+${message.guild.id}`)) 22 | message.channel.send(embed) 23 | } else return; 24 | } else; 25 | }) 26 | 27 | client.on("message", async message => { 28 | if (message.author.bot) return; 29 | 30 | let prefix2 = db.get(`prefix_${message.guild.id}`) 31 | 32 | const args1 = message.content.trim().split(/ +/g); 33 | if (prefix2 === null) { prefix2 = default_prefix; } 34 | if (args1.length === 1 && message.mentions.users.has(client.user.id)) { 35 | 36 | const prefixEmbed = new Discord.MessageEmbed() 37 | .setDescription(`${message.author}: Guild prefix: \`${prefix2}\``) 38 | .setColor(`#6495ED`) 39 | message.channel.send(prefixEmbed); 40 | } 41 | 42 | if (!message.guild) return; 43 | let prefix = db.get(`prefix_${message.guild.id}`); 44 | if (prefix === null) prefix = default_prefix; 45 | 46 | if (!message.content.startsWith(prefix)) return; 47 | 48 | 49 | const args = message.content 50 | .slice(prefix.length) 51 | .trim() 52 | .split(/ +/g); 53 | const cmd = args.shift().toLowerCase(); 54 | 55 | if (cmd.length === 0) return; 56 | 57 | let cmdx = db.get(`cmd_${message.guild.id}`) 58 | 59 | if (cmdx) { 60 | let cmdy = cmdx.find(x => x.name === cmd) 61 | if (cmdy) message.channel.send(cmdy.responce) 62 | } 63 | 64 | let command = client.commands.get(cmd); 65 | if (!command) command = client.commands.get(client.aliases.get(cmd)); 66 | 67 | 68 | if (command) command.run(client, message, args); 69 | 70 | // return addexp(message); 71 | 72 | }) 73 | 74 | client.on('message', message => { 75 | if (message.author.bot) return; 76 | if (message.content === 'bleed') { 77 | message.channel.send('what') 78 | } 79 | }); -------------------------------------------------------------------------------- /events/messageDelete.js: -------------------------------------------------------------------------------- 1 | const client = require('../bleed') 2 | const db = require('quick.db') 3 | const { default_prefix, color } = require("../config.json"); 4 | const Discord = require('discord.js') 5 | 6 | client.snipes = new Map() 7 | client.on('messageDelete', async function (message, guild) { 8 | if (message.partial) return 9 | if (message.channel.type === 'text') { 10 | if (message.author) { 11 | client.snipes.set(message.channel.id, { 12 | content: message.content, 13 | author: message.author.tag, 14 | image: message.attachments.first() ? message.attachments.first().proxyURL : null 15 | }) 16 | } 17 | 18 | let logs = db.get(`logschannel_${message.guild.id}`); 19 | if (!logs) { 20 | return; 21 | } 22 | if (message.author.bot) return; 23 | const embed = new Discord.MessageEmbed() 24 | .setAuthor(message.author.tag, message.author.displayAvatarURL({ dynamic: true })) 25 | .setTitle(`Deleted Message`) 26 | .setDescription(message.content) 27 | .setFooter(`User ID: ${message.author.id}`) 28 | .setTimestamp() 29 | .setColor(`${color}`) 30 | if (message.image) embed.setImage(message.image) 31 | if (logs) await db.fetch(`logschannel_${message.guild.id}`).then(await message.channel.send(embed)) 32 | } 33 | }) -------------------------------------------------------------------------------- /events/ready.js: -------------------------------------------------------------------------------- 1 | const client = require('../bleed') 2 | 3 | client.on("ready", () => { 4 | console.log(`${client.user.username} is now up and running!`); 5 | client.user.setActivity(`discord.gg/four`, { 6 | type: "PLAYING", 7 | url: "https://www.twitch.tv/discord" 8 | }) 9 | }) -------------------------------------------------------------------------------- /fmuser.json: -------------------------------------------------------------------------------- 1 | { 2 | "users": [] 3 | } -------------------------------------------------------------------------------- /fun/editsnipe.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js") 2 | const config = require("../../config.json") 3 | const db = require("quick.db") 4 | const { color } = require("../../config.json"); 5 | 6 | module.exports = { 7 | name: "editsnipe", 8 | aliases: ["es", "esnipe"], 9 | 10 | run: async (client, message, args) => { 11 | let mentionedMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 12 | if (!mentionedMember) mentionedMember = message.member; 13 | 14 | let prefix = await db.fetch(`prefix_${message.guild.id}`) 15 | if (prefix == null) { 16 | prefix = config.DEFAULT_PREFIX 17 | } 18 | 19 | const msg = client.messageUpdate.get(message.channel.id) 20 | if (!msg) return message.channel.send({ embed: { color: "#6495ED", description: `:mag_right: ${message.author}: No **recently edited messages** were found in this channel` } }) 21 | if (message.author.bot) return; 22 | const embed = new Discord.MessageEmbed() 23 | .setAuthor(msg.author, message.guild.members.cache.find(u => u.user.tag == msg.author).user.displayAvatarURL({ format: "png", dynamic: true })) 24 | .setDescription(msg.content) 25 | .setColor(mentionedMember.displayHexColor || color) 26 | .setFooter(`Sniped message by: ${message.author.tag}`) 27 | .setTimestamp() 28 | if (msg.image) embed.setImage(msg.image) 29 | 30 | message.channel.send(embed) 31 | 32 | 33 | } 34 | } -------------------------------------------------------------------------------- /fun/gnome.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | 4 | module.exports = { 5 | name: "gnome", 6 | 7 | run: async (client, message, args) => { 8 | const embed = new Discord.MessageEmbed() 9 | .setAuthor(message.author.username, message.author.avatarURL({ 10 | dynamic: true 11 | })) 12 | .setTitle('Command: gnome') 13 | .setDescription('Gnome the mentioned user') 14 | .addField('**Aliases**', 'N/A', true) 15 | .addField('**Parameters**', 'member', true) 16 | .addField('**Information**', `N/A`, true) 17 | .addField('**Usage**', '\`\`\`Syntax: gnome (member)\nExample: gnome four#0001\`\`\`') 18 | .setFooter(`Module: fun`) 19 | .setTimestamp() 20 | .setColor(color) 21 | if (!args[0]) return message.channel.send(embed) 22 | 23 | message.delete(); 24 | 25 | let user = message.mentions.users.first(); 26 | 27 | message.channel.send(`${user} Ho ho ho ha ha, ho ho ho he ha. Hello there, old chum. I’m g'not a g'nelf. I’m g'not a g'noblin. I’m a g'nome!! And you’ve been, GNOOOMED!!!`); 28 | } 29 | } -------------------------------------------------------------------------------- /fun/image.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const gis = require('g-i-s'); 3 | const { color } = require("../../config.json"); 4 | 5 | module.exports = { 6 | name: "image", 7 | aliases: ["im", "img"], 8 | 9 | run: async (client, message, args) => { 10 | let mentionedMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 11 | if (!mentionedMember) mentionedMember = message.member; 12 | 13 | message.channel.startTyping(); 14 | let googleIcon = 'https://maxcdn.icons8.com/Share/icon/Logos//google_logo1600.png'; 15 | 16 | const embed = new Discord.MessageEmbed() 17 | .setAuthor(message.author.username, message.author.avatarURL({ 18 | dynamic: true 19 | })) 20 | .setTitle('Command: image') 21 | .setDescription('Search google for an image') 22 | .addField('**Aliases**', 'im, img', true) 23 | .addField('**Parameters**', 'member', true) 24 | .addField('**Information**', `N/A`, true) 25 | .addField('**Usage**', '\`\`\`Syntax: image \nExample: image Ash Kaash\`\`\`') 26 | .setFooter(`Module: fun`) 27 | .setTimestamp() 28 | .setColor(color) 29 | message.channel.stopTyping(true); 30 | if (!args[0]) return message.channel.send(embed) 31 | 32 | message.channel.startTyping(); 33 | const filter = (reaction, user) => user.id === message.author.id && (reaction.emoji.name === '⬅️' || reaction.emoji.name === '➡️'); 34 | let page = 0 35 | let reactionTrigger = 0; 36 | let search = message.content.substring(message.content.indexOf(' ') + 1, message.content.length) || null; 37 | if (!search) { 38 | return message.channel.send('You need to type something to seach for this command to work') 39 | }; 40 | async function reactionCatcher(msg) { 41 | var removeAll = setTimeout(function () { 42 | msg.reactions.removeAll(); 43 | }, 60000) 44 | msg.awaitReactions(filter, { max: 1, time: 60000 }).then(collected => { 45 | if (collected) { 46 | if (collected.first().emoji.name === '➡️') { 47 | page++ 48 | clearTimeout(removeAll); 49 | msg.reactions.removeAll() 50 | updateImg(msg); 51 | } 52 | if (collected.first().emoji.name === '⬅️') { 53 | page-- 54 | clearTimeout(removeAll); 55 | msg.reaction.removeAll() 56 | updateImg(msg); 57 | } 58 | } 59 | }); 60 | }; 61 | async function generateReactions(msg) { 62 | if (page + 1 > 1 && page + 1 < 100) { 63 | msg.react('⬅️'); 64 | setTimeout(function () { 65 | msg.react('➡️'); 66 | }, 750) 67 | } else if (page == 0) { 68 | msg.react('➡️'); 69 | } else if (page + 1 == 100) { 70 | msg.react('⬅️'); 71 | } 72 | if (reactionTrigger !== 0) { 73 | reactionCatcher(msg) 74 | } 75 | }; 76 | 77 | async function updateImg(msg) { 78 | gis(search, logResults); 79 | function logResults(error, results) { 80 | if (error) { 81 | console.log(error) 82 | } 83 | else { 84 | if (msg == null) { 85 | var embed = new Discord.MessageEmbed() 86 | .setColor(mentionedMember.displayHexColor || color) 87 | .setAuthor(message.author.username, message.author.avatarURL({ 88 | dynamic: true 89 | })) 90 | .setTitle(`**Search Results for ${search}**`) 91 | .setImage(results[page].url) 92 | .setFooter(`${page + 1}/${results.length} of Google Image Search Results (Random)`, googleIcon); 93 | message.channel.stopTyping(true); 94 | message.channel.send(embed).then(msg => { 95 | generateReactions(msg); 96 | reactionCatcher(msg); 97 | }); 98 | } else { 99 | var embed = new Discord.MessageEmbed() 100 | .setColor(mentionedMember.displayHexColor || color) 101 | .setAuthor(message.author.username, message.author.avatarURL({ 102 | dynamic: true 103 | })) 104 | .setTitle(`**Search Results for ${search}**`) 105 | .setImage(results[page].url) 106 | .setFooter(`${page + 1}/${results.length} of Google Image Search Results (Random)`, googleIcon); 107 | msg.edit(embed) 108 | setTimeout(function () { 109 | generateReactions(msg) 110 | reactionCatcher(msg) 111 | }, 300) 112 | 113 | } 114 | } 115 | 116 | } 117 | } 118 | updateImg(null); 119 | } 120 | }; -------------------------------------------------------------------------------- /fun/meme.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const got = require('got'); 3 | const { color } = require("../../config.json"); 4 | 5 | module.exports = { 6 | name: "meme", 7 | 8 | run: async (client, message, args) => { 9 | 10 | let mentionedMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 11 | if (!mentionedMember) mentionedMember = message.member; 12 | 13 | const embed = new Discord.MessageEmbed 14 | got('https://www.reddit.com/r/memes/random/.json') 15 | .then(response => { 16 | const [list] = JSON.parse(response.body); 17 | const [post] = list.data.children; 18 | 19 | const permalink = post.data.permalink; 20 | const memeURL = `https://reddit.com${permalink}`; 21 | const memeImage = post.data.url; 22 | const memeTitle = post.data.title; 23 | 24 | embed.setTitle(`${memeTitle}`); 25 | embed.setURL(`${memeURL}`); 26 | embed.setColor(mentionedMember.displayHexColor || color); 27 | embed.setImage(`${memeImage}`); 28 | 29 | message.channel.send(embed); 30 | }) 31 | .catch(console.error); 32 | } 33 | } -------------------------------------------------------------------------------- /fun/randomnumber.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: "randomnumber", 3 | aliases: ["rn"], 4 | 5 | run: async (client, message, args) => { 6 | 7 | let result = Math.floor(Math.random() * 101); 8 | 9 | message.channel.send(`${result}`); 10 | } 11 | }; -------------------------------------------------------------------------------- /fun/snipe.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js") 2 | const config = require("../../config.json") 3 | const db = require("quick.db") 4 | const { color } = require("../../config.json"); 5 | 6 | module.exports = { 7 | name: "snipe", 8 | aliases: ["s"], 9 | 10 | run: async (client, message, args) => { 11 | let mentionedMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 12 | if (!mentionedMember) mentionedMember = message.member; 13 | 14 | let prefix = await db.fetch(`prefix_${message.guild.id}`) 15 | if (prefix == null) { 16 | prefix = config.DEFAULT_PREFIX 17 | } 18 | 19 | const msg = client.snipes.get(message.channel.id) 20 | if (!msg) return message.channel.send({ embed: { color: "#6495ED", description: `:mag_right: ${message.author}: No **recently deleted messages** were found in this channel` } }) 21 | if (message.author.bot) return; 22 | const embed = new Discord.MessageEmbed() 23 | .setAuthor(msg.author, message.guild.members.cache.find(u => u.user.tag == msg.author).user.displayAvatarURL({ format: "png", dynamic: true })) 24 | .setDescription(msg.content) 25 | .setColor(mentionedMember.displayHexColor || color) 26 | .setFooter(`Sniped message by: ${message.author.tag}`) 27 | .setTimestamp() 28 | if (msg.image) embed.setImage(msg.image) 29 | 30 | message.channel.send(embed) 31 | 32 | 33 | } 34 | } -------------------------------------------------------------------------------- /handlers/command.js: -------------------------------------------------------------------------------- 1 | const { readdirSync } = require("fs"); 2 | 3 | const ascii = require("ascii-table"); 4 | 5 | let table = new ascii("Commands"); 6 | table.setHeading("Command", "Load status"); 7 | 8 | module.exports = (client) => { 9 | 10 | readdirSync("./commands/").forEach(dir => { 11 | const commands = readdirSync(`./commands/${dir}/`).filter(file => file.endsWith(".js")); 12 | 13 | for (let file of commands) { 14 | let pull = require(`../commands/${dir}/${file}`); 15 | 16 | if (pull.name) { 17 | client.commands.set(pull.name, pull); 18 | table.addRow(file, '✅'); 19 | } else { 20 | table.addRow(file, `❌ -> missing a help.name, or help.name is not a string.`); 21 | continue; 22 | } 23 | if (pull.aliases && Array.isArray(pull.aliases)) pull.aliases.forEach(alias => client.aliases.set(alias, pull.name)); 24 | } 25 | }); 26 | 27 | //console.log(table.toString()); 28 | } -------------------------------------------------------------------------------- /handlers/event.js: -------------------------------------------------------------------------------- 1 | const { readdirSync } = require("fs"); 2 | 3 | module.exports = (client) => { 4 | 5 | readdirSync("./events/").forEach(file => { 6 | const events = readdirSync(`./events/`).filter(files => files.endsWith(".js")); 7 | 8 | for (let files of events) { 9 | let pull = require(`../events/${files}`); 10 | 11 | if (pull.name) { 12 | client.events.set(pull.name, pull); 13 | } else { 14 | continue; 15 | } 16 | } 17 | }) 18 | } -------------------------------------------------------------------------------- /handlers/xp.js: -------------------------------------------------------------------------------- 1 | const db = require("quick.db") 2 | 3 | class Util { 4 | static getLevel(xp, extra = false) { 5 | let level = 0; 6 | 7 | while (xp >= Util.getLevelxp(level)) { 8 | xp -= Util.getLevelxp(level); 9 | level++ 10 | } 11 | if (extra) return [level, xp]; 12 | else return level; 13 | } 14 | 15 | 16 | static getLevelxp(level) { 17 | return 5 * Math.pow(level, 2) + 50 * level + 100; 18 | } 19 | 20 | static getInfo(exp) { 21 | let [level, remxp] = Util.getLevel(exp, true); 22 | let levelxp = Util.getLevelxp(level); 23 | 24 | return { level, remxp, levelxp } 25 | } 26 | 27 | static addexp(message) { 28 | let toadd = Math.floor(Math.random() * 3 + 3); 29 | let oldxp = db.get(`xp_${message.author.id}_${message.guild.id}`) 30 | let oldlvl = Util.getLevel(oldxp) 31 | let newxp = oldxp = toadd; 32 | let newlvl = Util.getLevel(newxp); 33 | 34 | 35 | if (newlvl > oldlvl) 36 | message.channel.send(`${message.author}, you just reached level ${newlvl}`) 37 | db.add(`xp_${message.author.id}_${message.guild.id}`, toadd) 38 | } 39 | } 40 | 41 | module.exports = Util; -------------------------------------------------------------------------------- /information/about.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | 4 | module.exports = { 5 | name: "about", 6 | aliases: ["bleed", "botinfo"], 7 | 8 | run: async (client, message, args) => { 9 | 10 | let days = Math.floor(client.uptime / 86400000); 11 | let hours = Math.floor(client.uptime / 3600000) % 24; 12 | let minutes = Math.floor(client.uptime / 60000) % 60; 13 | let seconds = Math.floor(client.uptime / 1000) % 60; 14 | 15 | let UptimeDays = days 16 | if (UptimeDays) { 17 | UptimeDays = `${days} days, `; 18 | } else { 19 | UptimeDays = '' 20 | } 21 | 22 | let UptimeHours = hours 23 | if (UptimeHours) { 24 | UptimeHours = `${hours} hours, `; 25 | } else { 26 | UptimeHours = '' 27 | } 28 | 29 | let UptimeMinutes = minutes 30 | if (UptimeMinutes) { 31 | UptimeMinutes = `${minutes} minutes, `; 32 | } else { 33 | UptimeMinutes = '' 34 | } 35 | 36 | let UptimeSeconds = seconds 37 | if (UptimeSeconds) { 38 | UptimeSeconds = `${seconds} seconds`; 39 | } else { 40 | UptimeSeconds = '' 41 | } 42 | 43 | const uniqueIDs = new Set(); 44 | for (const guild of client.guilds.cache.values()) { 45 | for (const member of guild.members.cache.values()) { 46 | uniqueIDs.add(member.id); 47 | } 48 | } 49 | 50 | uniqueIDs.size 51 | 52 | const uniqueOnlineIDs = new Set(); 53 | for (const guild of client.guilds.cache.values()) { 54 | for (const member of guild.members.cache.values()) { 55 | if (member.presence.status !== "offline") uniqueOnlineIDs.add(member.id); 56 | } 57 | } 58 | 59 | uniqueOnlineIDs.size 60 | 61 | const embed = new Discord.MessageEmbed() 62 | .setColor(color) 63 | .setAuthor(`${client.user.username}`, client.user.displayAvatarURL()) 64 | .setDescription(`Bot statistics, developed by four#0001\n**Memory:** ${(process.memoryUsage().rss / 1024 / 1024).toFixed(2)}MB, **Commands:** ${client.commands.size}`) 65 | .addField('**Members**', `${client.guilds.cache.reduce((current, guild) => current + guild.memberCount, 0).toLocaleString()} total\n${uniqueIDs.size.toLocaleString()} unique\n${uniqueOnlineIDs.size.toLocaleString()} unique online`, true) 66 | .addField('**Channels**', `${client.channels.cache.size.toLocaleString()} total\n${client.channels.cache.filter(channel => channel.type == 'text').size.toLocaleString()} text\n${client.channels.cache.filter(channel => channel.type == 'voice').size.toLocaleString()} voice`, true) 67 | .addField('**Guilds**', `${client.guilds.cache.size.toLocaleString()} (public)`, true) 68 | .setFooter(`Uptime: ${UptimeDays}${UptimeHours}${UptimeMinutes}${UptimeSeconds}`) 69 | .setTimestamp() 70 | message.channel.send(embed) 71 | } 72 | } -------------------------------------------------------------------------------- /information/faq.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | 4 | module.exports = { 5 | name: "faq", 6 | 7 | run: async (client, message, args) => { 8 | if (message.author.id !== '262429076763967488') return; 9 | 10 | const embed = new Discord.MessageEmbed() 11 | .setAuthor(`bleed`, message.author.avatarURL()) 12 | .setImage('https://cdn.discordapp.com/attachments/870209468443533353/871177546446811166/bleed_banner.png') 13 | .setTitle(`Getting started with bleed`) 14 | .setDescription(`Learn how to set up bleed in your server or enhance your everyday use with commands & more.\nBy default, in a server with bleed, the prefix for the bot is a comma ,.`) 15 | .addField(`**Hey There,**`, `\u3000Welcome to the support server for bleed, a multi-purpose Discord bot fitting all communities with an easy-to-use system. This is the landing page to help you get set up and explaining all the commands you need to know.`) 16 | .addField(`**Why Bleed?**`, `Bleed is a sophisticated bot. Unlike many bots, bleed focuses on a smooth theme, with ease of access to a wide range of commands that may require multiple bots for. Some of it's notable features include Altdentifier, Autorole, Modlogs, Custom Prefixes and Welcome Messages, also an easy-to-use embed feature. It's the ultimate all in one Discord bot for all servers.`) 17 | .addField(`**FAQ**`, `Please reach out to **four#0001** on Discord for priority replies. Additionally, you can join the [support server](https://discord.gg/E5vPHzFU2S) and send a message in the main channel which will automatically alert us. 18 | If you are not in the support server or would like an alternative option, you may use ,help in any guild, and bleed will DM you so you can submit your request and contact the developers through the bot. 19 | Alternatively, direct message four#0001 with your request.`) 20 | .setColor(color) 21 | .setFooter('bleed bot') 22 | .setTimestamp() 23 | return message.channel.send(embed) 24 | } 25 | } -------------------------------------------------------------------------------- /information/find.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: "find", 3 | 4 | run: async (client, message, args) => { 5 | let user = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 6 | if (!user) user = message.member; 7 | 8 | if (user) { 9 | const mapped = client.guilds.cache.map(g => { 10 | if (g.members.cache.find(member => member.id === user.id)) return client.guilds.cache.size; 11 | }); 12 | 13 | message.channel.send(`${user}: ${mapped} common servers`); 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /information/help.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const pagination = require('discord.js-pagination'); 3 | const db = require('quick.db'); 4 | const { default_prefix } = require("../../config.json"); 5 | const { color } = require("../../config.json"); 6 | 7 | module.exports = { 8 | name: "help", 9 | 10 | run: async (client, message, args) => { 11 | let prefix = db.get(`prefix_${message.guild.id}`); 12 | if (prefix === null) { prefix = default_prefix; }; 13 | if (message.author.bot) return; 14 | 15 | const page1 = new Discord.MessageEmbed() 16 | .setColor(color) 17 | .setThumbnail(client.user.displayAvatarURL({ format: "png", dynamic: true, size: 2048 })) 18 | .setAuthor(`${client.user.username} help`, client.user.displayAvatarURL()) 19 | .setTitle('Launch Pad') 20 | .setDescription(`To get information on a command, invite ${client.user.username} to your server and run \`${prefix}[command]\`\nTo navigate through pages use the :arrow_left: or :arrow_right: arrow`) 21 | .addField(`**Want ${client.user.username} in your server?**`, `Invite ${client.user.username} [__here__](https://discord.com/api/oauth2/authorize?client_id=868297144480710756&permissions=8&scope=bot)`) 22 | .addField('**:newspaper: Latest News - July 23rd 2021**', 'lol four more like poor xd ! rofl.') 23 | 24 | const page2 = new Discord.MessageEmbed() 25 | .setColor(color) 26 | .setThumbnail(client.user.displayAvatarURL({ format: "png", dynamic: true, size: 2048 })) 27 | .setAuthor(`${client.user.username} help`, client.user.displayAvatarURL()) 28 | .setTitle('**Configuration Commands**') 29 | .setDescription(`${prefix}altdentifier enable - enables altdentifer for the guild\n${prefix}altdentifier disable - disables altdentifier for the guild\n${prefix}autorole set - set the autorole for the guild\n${prefix}autorole clear - clear the original set autorole\n${prefix}modlogs channel - set your modlogs channel\n${prefix}modlogs clear - remove the current modlogs channel\n${prefix}prefix - set command prefix for guild\n${prefix}welcome channel - set where to send welcome messages\n${prefix}welcome message - set the welcome message text\n${prefix}welcome test - test the welcome message\n${prefix}welcome variables - see all the welcome message variables`) 30 | 31 | const page3 = new Discord.MessageEmbed() 32 | .setColor(color) 33 | .setThumbnail(client.user.displayAvatarURL({ format: "png", dynamic: true, size: 2048 })) 34 | .setAuthor(`${client.user.username} help`, client.user.displayAvatarURL()) 35 | .setTitle('**Fun Commands**') 36 | .setDescription(`${prefix}gnome - gnome the mentioned user\n${prefix}meme - sends a random meme off of reddit\n${prefix}randomnumber - get a random number\n${prefix}snipe - snipe the latest message that was deleted`) 37 | 38 | const page4 = new Discord.MessageEmbed() 39 | .setColor(color) 40 | .setThumbnail(client.user.displayAvatarURL({ format: "png", dynamic: true, size: 2048 })) 41 | .setAuthor(`${client.user.username} help`, client.user.displayAvatarURL()) 42 | .setTitle('**Information Commands**') 43 | .setDescription(`${prefix}about - displays information about ${client.user.username}\n${prefix}help - displays this message embed\n${prefix}invite - sends an embed to invite ${client.user.username} w/ link\n${prefix}membercount - view the guilds member count\n${prefix}members - view members in a role\n${prefix}roleinfo - view information about a role\n${prefix}serverinfo - view information about the current guild\n${prefix}uptime - display ${client.user.username}'s uptime\n${prefix}userinfo - view information about a user/member`) 44 | 45 | const page5 = new Discord.MessageEmbed() 46 | .setColor(color) 47 | .setThumbnail(client.user.displayAvatarURL({ format: "png", dynamic: true, size: 2048 })) 48 | .setAuthor(`${client.user.username} help`, client.user.displayAvatarURL()) 49 | .setTitle('**Last.fm Commands**') 50 | .setDescription(`${prefix}lastfm set - connect your Last.fm account\n${prefix}lastfm unlink - disconenct your Last.fm account\n${prefix}fm/np - shows your current song playing from Last.fm`) 51 | 52 | const page6 = new Discord.MessageEmbed() 53 | .setColor(color) 54 | .setThumbnail(client.user.displayAvatarURL({ format: "png", dynamic: true, size: 2048 })) 55 | .setAuthor(`${client.user.username} help`, client.user.displayAvatarURL()) 56 | .setTitle('**Moderation Commands**') 57 | .setDescription(`${prefix}ban - bans the mentioned user from the guild\n${prefix}botclear - purge messages sent by bots\n${prefix}hackban - ban user from guild even if they arent in the server\n${prefix}kick - kicks the mentioned user from the guild\n${prefix}lockdown - lockdown a channel\n${prefix}mute - mutes the mentioned member in all channels\n${prefix}purge - deletes the specified amount of messages from the current channel\n${prefix}purgeuser - deletes the specified amount of messages from the mentioned user\n${prefix}rename - assigns the mentioned user a new nickname in the guild\n${prefix}role - adds role to member\n${prefix}rolecreate - creates a role with optional color\n${prefix}roleremove - removes role from a member\n${prefix}unban - unbans the mentioned user from the guild\n${prefix}unlock - unlock a channel\n${prefix}unmute - unmutes the mentioned member in all channels`) 58 | 59 | const page7 = new Discord.MessageEmbed() 60 | .setColor(color) 61 | .setThumbnail(client.user.displayAvatarURL({ format: "png", dynamic: true, size: 2048 })) 62 | .setAuthor(`${client.user.username} help`, client.user.displayAvatarURL()) 63 | .setTitle('**Utility Commands**') 64 | .setDescription(`${prefix}afk - set an AFK status for when you are mentioned\n${prefix}appstore - search an app on the appstore\n${prefix}avatar - get avatar of a member or yourself \n${prefix}createembed - create your own embed\n${prefix}firstmessage - get a link for the first message in a channel\n${prefix}google - search the largest search engine on the internet (fixing)\n${prefix}guildbanner - returns guild banner\n${prefix}guildicon - returns guild icon\n${prefix}pin - pin any recent message by ID\n${prefix}poll - create poll\n${prefix}remind - get reminders for a duration set about whatever you choose\n${prefix}setbanner - set a new guild banner\n${prefix}seticon - set a new guild icon\n${prefix}setsplash - set a new guild splash\n${prefix}spotify - gives Spotify results for the current song playing\n${prefix}twitter - check a twitter account profile\n${prefix}unpin - unpin any recent message by ID\n${prefix}urban - gets the definition of word from urban dictionary\n${prefix}userbanner - get banner of a member or yourself`) 65 | 66 | const pages = [ 67 | page1, 68 | page2, 69 | page3, 70 | page4, 71 | page5, 72 | page6, 73 | page7 74 | ] 75 | 76 | const emoji = ["⬅️", "➡️"] 77 | 78 | const timeout = '47000' 79 | 80 | pagination(message, pages, emoji, timeout) 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /information/invite.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | 4 | module.exports = { 5 | name: "invite", 6 | aliases: ["inv"], 7 | category: "information", 8 | 9 | run: async (client, message, args) => { 10 | 11 | const inviteEmbed = new Discord.MessageEmbed() 12 | .setTitle(`Invite ${client.user.username}`) 13 | .setDescription(`Want to invite ${client.user.username}? Click [__here__](https://discord.com/api/oauth2/authorize?client_id=868297144480710756&permissions=8&scope=bot)`) 14 | .setColor(color) 15 | .setFooter(`Default Prefix: , | Customizable`, message.author.displayAvatarURL({ 16 | dynamic: true 17 | })) 18 | return message.channel.send(inviteEmbed) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /information/inviteinfo.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const moment = require('moment'); 3 | const { color } = require("../../config.json"); 4 | const { warn } = require("../../emojis.json"); 5 | 6 | module.exports = { 7 | name: "inviteinfo", 8 | 9 | run: async (client, message, args) => { 10 | let mentionedMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 11 | if (!mentionedMember) mentionedMember = message.member; 12 | 13 | const embed = new Discord.MessageEmbed() 14 | .setAuthor(message.author.username, message.author.avatarURL({ 15 | dynamic: true 16 | })) 17 | .setTitle('Command: inviteinfo') 18 | .setDescription('View basic invite code information') 19 | .addField('**Aliases**', 'N/A', true) 20 | .addField('**Parameters**', 'code', true) 21 | .addField('**Information**', `N/A`, true) 22 | .addField('**Usage**', '\`\`\`Syntax: inviteinfo (code)\nExample: inviteinfo four\`\`\`') 23 | .setFooter(`Module: information`) 24 | .setTimestamp() 25 | .setColor(color) 26 | if (!args[0]) return message.channel.send(embed) 27 | 28 | const guild = await client.guilds.fetch(client.guilds.resolveID(mentionedMember)).catch(() => null); 29 | if (!guild) return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: Invalid **invite code** given` } }) 30 | 31 | let banner = guild.bannerURL({ dynamic: true, format: "png", size: 2048 }) 32 | if (banner) { 33 | banner = `[**Banner Image**](${guild.bannerURL({ dynamic: true, format: "png", size: 2048 })})` 34 | } else { 35 | banner = '' 36 | } 37 | 38 | let splash = guild.splashURL({ dynamic: true, format: "png", size: 2048 }) 39 | if (splash) { 40 | splash = `[**Splash Image**](${guild.splashURL({ dynamic: true, format: "png", size: 2048 })})` 41 | } else { 42 | splash = '' 43 | } 44 | 45 | let icon = guild.iconURL({ dynamic: true, format: "png", size: 2048 }) 46 | if (icon) { 47 | icon = `[**Icon Image**](${guild.iconURL({ dynamic: true, format: "png", size: 2048 })})` 48 | } else { 49 | icon = '' 50 | } 51 | 52 | let rulesChannel = guild.rulesChannel.name 53 | if (rulesChannel) { 54 | rulesChannel = `${guild.rulesChannel.name} (\`${guild.rulesChannel.type}\`)` 55 | } else { 56 | rulesChannel = 'N/A' 57 | } 58 | 59 | let rulesChannelid = guild.rulesChannel 60 | if (rulesChannelid) { 61 | rulesChannelid = `\`${guild.rulesChannel.id}\`` 62 | } else { 63 | rulesChannelid = 'N/A' 64 | } 65 | 66 | let rulesChannelCreated = guild.rulesChannel 67 | if (rulesChannelCreated) { 68 | rulesChannelCreated = `${moment(guild.rulesChannel.createdAt).format("dddd, MMMM Do YYYY, h:mm A")}` 69 | } else { 70 | rulesChannelCreated = 'N/A' 71 | } 72 | 73 | const verificationLevels = { 74 | NONE: 'None', 75 | LOW: 'Low', 76 | MEDIUM: 'Medium', 77 | HIGH: 'High', 78 | VERY_HIGH: 'Highest' 79 | }; 80 | 81 | const inviteembed = new Discord.MessageEmbed() 82 | .setColor(mentionedMember.displayHexColor || color) 83 | .setAuthor(message.author.username, message.author.avatarURL({ dynamic: true })) 84 | .setTitle(`Invite Code: ${guild.id}`) 85 | .addField(`**Channel & Invite**`, `**Name:** ${rulesChannel}\n**ID:** ${rulesChannelid}\n**Created:** ${rulesChannelCreated}\n**Invite Expiration:** Never\n**Inviter:** Unknown\n**Temporary:** N/A\n**Usage:** N/A`, true) 86 | .addField(`**Guild**`, `**Name:** ${guild.name}\n**ID:** \`${guild.id}\`\n**Created:** ${moment(guild.createdAt).format("dddd, MMMM Do YYYY, h:mm A")}\n**Members:** ${guild.memberCount}\n**Members Online:** ${guild.approximatePresenceCount}\n**Verification Level:** ${verificationLevels[guild.verificationLevel]}`, true) 87 | .addField(`**Design**`, `${icon} ${banner} ${splash}`) 88 | .setThumbnail(guild.iconURL()) 89 | message.channel.send(inviteembed); 90 | } 91 | } -------------------------------------------------------------------------------- /information/membercount.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | 4 | module.exports = { 5 | name: "membercount", 6 | aliases: ["mc"], 7 | category: "information", 8 | 9 | run: async (client, message, args) => { 10 | let mentionedMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 11 | if (!mentionedMember) mentionedMember = message.member; 12 | 13 | const botCount = message.guild.members.cache.filter(m => m.user.bot).size; 14 | 15 | const membercountEmbed = new Discord.MessageEmbed() 16 | .setColor(mentionedMember.displayHexColor || color) 17 | .setAuthor(`${message.guild.name} statistics`, message.guild.iconURL({ 18 | dynamic: true 19 | })) 20 | .setTimestamp() 21 | .addFields( 22 | { 23 | name: "**Users**", 24 | value: `${message.guild.memberCount}`, 25 | inline: true 26 | }, 27 | { 28 | name: "**Humans**", 29 | value: `${message.guild.memberCount - botCount}`, 30 | inline: true 31 | }, 32 | 33 | { 34 | name: "**Bots**", 35 | value: `${botCount}`, 36 | inline: true 37 | }, 38 | ) 39 | 40 | return message.channel.send(membercountEmbed) 41 | } 42 | } -------------------------------------------------------------------------------- /information/members.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | const { warn } = require('../../emojis.json') 4 | 5 | module.exports = { 6 | name: "members", 7 | aliases: ["inrole"], 8 | 9 | run: async (client, message, args) => { 10 | if (args.includes("@everyone")) return; 11 | 12 | if (args.includes("@here")) return; 13 | 14 | const inroleEmbed = new Discord.MessageEmbed() 15 | .setAuthor(message.author.username, message.author.avatarURL({ 16 | dynamic: true 17 | })) 18 | .setTitle('Command: members') 19 | .setDescription('View members in a role') 20 | .addField('**Aliases**', 'inrole', true) 21 | .addField('**Parameters**', 'role', true) 22 | .addField('**Information**', `N/A`, true) 23 | .addField('**Usage**', '\`\`\`Syntax: members \nExample: members Friends\`\`\`') 24 | .setFooter(`Module: information`) 25 | .setTimestamp() 26 | .setColor(color) 27 | if (!args[0]) return message.channel.send(inroleEmbed) 28 | 29 | let role = message.mentions.roles.first() || message.guild.roles.cache.get(args[0]) || message.guild.roles.cache.find(r => r.name.toLowerCase() === args.join(' ').toLocaleLowerCase()); 30 | if (!role) return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: You need to enter a **valid** role` } }); 31 | 32 | let membersWithRole = message.guild.members.cache.filter(member => { 33 | return member.roles.cache.find(r => r.name === role.name); 34 | }).map(member => { 35 | return member.user.tag; 36 | }) 37 | if (membersWithRole > 2048) return message.channel.send('List is too long') 38 | 39 | let roleListEmbed = new Discord.MessageEmbed() 40 | .setColor(role.hexColor) 41 | .setAuthor(`${message.author.username}`, message.author.displayAvatarURL({ 42 | dynamic: true, 43 | size: 2048 44 | })) 45 | .setTitle(`Members in '${role.name}'`) 46 | .setDescription(`**${membersWithRole.join("\n")}**`); 47 | message.channel.send(roleListEmbed); 48 | } 49 | } -------------------------------------------------------------------------------- /information/ping.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: "ping", 3 | aliases: ["latency"], 4 | 5 | run: async (client, message, args) => { 6 | let ping = [ 7 | `it took \`${Math.round(client.ws.ping)}ms\` to ping **your mother**`, 8 | `it took \`${Math.round(client.ws.ping)}ms\` to ping **the chinese government**`, 9 | `it took \`${Math.round(client.ws.ping)}ms\` to ping **lastfms ass computers**`, 10 | `it took \`${Math.round(client.ws.ping)}ms\` to ping **my teeshirt**`, 11 | `it took \`${Math.round(client.ws.ping)}ms\` to ping **lil mosey**`, 12 | `it took \`${Math.round(client.ws.ping)}ms\` to ping **north korea**`, 13 | `it took \`${Math.round(client.ws.ping)}ms\` to ping **localhost**`, 14 | `it took \`${Math.round(client.ws.ping)}ms\` to ping **twitter**`, 15 | `it took \`${Math.round(client.ws.ping)}ms\` to ping **the santos**`, 16 | `it took \`${Math.round(client.ws.ping)}ms\` to ping **the trash**`, 17 | `it took \`${Math.round(client.ws.ping)}ms\` to ping **a connection to the server**`, 18 | `it took \`${Math.round(client.ws.ping)}ms\` to ping **four on twitter**`, 19 | `it took \`${Math.round(client.ws.ping)}ms\` to ping **6ix9ines ankle monitor**`, 20 | `it took \`${Math.round(client.ws.ping)}ms\` to ping **fivem servers**`, 21 | `it took \`${Math.round(client.ws.ping)}ms\` to ping **new york**`, 22 | `it took \`${Math.round(client.ws.ping)}ms\` to ping **my black airforces**`, 23 | `it took \`${Math.round(client.ws.ping)}ms\` to ping **netflix database**` 24 | ]; 25 | const random = Math.floor(Math.random() * ping.length); 26 | if (args[0] === "me") { 27 | message.reply(ping[random]); 28 | } else { 29 | message.channel.send(args.join(" ") + ping[random]); 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /information/random.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const moment = require('moment'); 3 | const { color } = require("../../config.json"); 4 | const { verifiedBotDev } = require("../../emojis.json"); 5 | const { bugHunter } = require("../../emojis.json"); 6 | const { bugHunterPlus } = require("../../emojis.json"); 7 | const { discordPartner } = require("../../emojis.json"); 8 | const { discordStaff } = require("../../emojis.json"); 9 | const { hypeSquad } = require("../../emojis.json"); 10 | const { hypeSquadBravery } = require("../../emojis.json"); 11 | const { hypeSquadBril } = require("../../emojis.json"); 12 | const { hypeSquadBal } = require("../../emojis.json"); 13 | const { verifiedBot } = require("../../emojis.json"); 14 | const { earlySupporter } = require("../../emojis.json"); 15 | 16 | const flags = { 17 | DISCORD_EMPLOYEE: `${discordStaff}`, 18 | DISCORD_PARTNER: `${discordPartner}`, 19 | BUGHUNTER_LEVEL_1: `${bugHunter}`, 20 | BUGHUNTER_LEVEL_2: `${bugHunterPlus}`, 21 | HYPESQUAD_EVENTS: `${hypeSquad}`, 22 | HOUSE_BRAVERY: `${hypeSquadBravery}`, 23 | HOUSE_BRILLIANCE: `${hypeSquadBril}`, 24 | HOUSE_BALANCE: `${hypeSquadBal}`, 25 | EARLY_SUPPORTER: `${earlySupporter}`, 26 | VERIFIED_BOT: `${verifiedBot}`, 27 | VERIFIED_DEVELOPER: `${verifiedBotDev}` 28 | }; 29 | 30 | module.exports = { 31 | name: "uitest", 32 | aliases: ["uit", "uinfo", "info"], 33 | 34 | run: async (client, message, args) => { 35 | let mentionedMember = await message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.guild.members.cache.find(r => r.displayName.toLowerCase() === args.join(' ').toLocaleLowerCase()) || args[0] || message.member; 36 | 37 | const user = await client.users.fetch(client.users.resolveID(mentionedMember)).catch(() => null); 38 | if (!user) user = message.author; 39 | const userFlags = user.flags.toArray(); 40 | 41 | let nickname = user.nickname 42 | if (nickname) { 43 | nickname = `∙ ${user.nickname}`; 44 | } else { 45 | nickname = '' 46 | } 47 | 48 | let flags2 = user.flags2 49 | if (flags) { 50 | flags2 = `∙ ${userFlags.length ? userFlags.map(flag => flags[flag]).join(' ') : ' '}`; 51 | } else { 52 | flags2 = '' 53 | } 54 | 55 | let bot; 56 | if (user.bot === true) { 57 | bot = "Discord Bot"; 58 | } else { 59 | bot = "N/A"; 60 | } 61 | 62 | const userPos = message.guild.members.cache 63 | .sort((a, b) => a.joinedTimestamp - b.joinedTimestamp) 64 | .array(); 65 | 66 | const position = new Promise((fui) => { 67 | for (let i = 1; i < userPos.length + 1; i++) { 68 | if (userPos[i - 1].id === user.id) fui(i); 69 | } 70 | }); 71 | 72 | const activities = []; 73 | let customStatus; 74 | for (const activity of user.presence.activities.values()) { 75 | switch (activity.type) { 76 | case 'LISTENING': 77 | if (user.bot) activities.push(`Listening to **${activity.name}**`); 78 | else activities.push(`Listening to [**${activity.details}**](https://open.spotify.com/) by **${activity.state}**`); 79 | break; 80 | case 'CUSTOM_STATUS': 81 | customStatus = activity.state; 82 | break; 83 | } 84 | } 85 | 86 | const embed = new Discord.MessageEmbed() 87 | .setColor(mentionedMember.displayHexColor || color) 88 | .setThumbnail(user.displayAvatarURL({ format: "png", dynamic: true, size: 2048 })) 89 | .setAuthor(message.author.username, message.author.avatarURL({ 90 | dynamic: true 91 | })) 92 | .setTitle(`${user.tag} ${nickname} ${flags2}`) 93 | .setDescription(`${activities.join('\n')}\n\`\`${user.id}\`\` ∙ Join position:`) 94 | .setFooter(`${bot}`) 95 | .setTimestamp() 96 | .addFields( 97 | { 98 | name: "**Joined Discord On**", 99 | value: `${moment(user.createdAt).format("dddd, MMMM Do YYYY, h:mm A")}`, 100 | inline: true 101 | }, 102 | { 103 | name: "**Joined Guild On**", 104 | value: `${user.joinedAt === 0 105 | ? `N/A` 106 | : `${moment(user.joinedAt).format("dddd, MMMM Do YYYY, h:mm A")}` 107 | }`, 108 | inline: true 109 | }, 110 | { 111 | name: '**Boosted Guild On**', 112 | value: `${user.premiumSinceTimestamp === 0 113 | ? `N/A` 114 | : `${moment(user.premiumSince).format("dddd, MMMM Do YYYY, h:mm A")}` 115 | }`, 116 | inline: true, 117 | }, 118 | { 119 | name: `**Role List [${mentionedMember.roles.size || "N/A"}]**`, 120 | value: `${mentionedMember.roles.cache 121 | .filter(r => r.id !== message.guild.id).map(roles => `<@&${roles.id}>`) 122 | .join(", ") || "N/A"}`, 123 | inline: true 124 | }) 125 | 126 | message.channel.send(embed) 127 | } 128 | } -------------------------------------------------------------------------------- /information/roleinfo.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | const { warn } = require('../../emojis.json') 4 | const moment = require('moment') 5 | 6 | module.exports = { 7 | name: "roleinfo", 8 | aliases: ["rinfo"], 9 | 10 | run: async (client, message, args) => { 11 | const roleInfoEmbed2 = new Discord.MessageEmbed() 12 | .setAuthor(message.author.username, message.author.avatarURL({ 13 | dynamic: true 14 | })) 15 | .setTitle('Command: roleinfo') 16 | .setDescription('View information about a role') 17 | .addField('**Aliases**', 'rinfo', true) 18 | .addField('**Parameters**', 'role', true) 19 | .addField('**Information**', `N/A`, true) 20 | .addField('**Usage**', '\`\`\`Syntax: roleinfo \nExample: roleinfo Friends\`\`\`') 21 | .setFooter(`Module: information`) 22 | .setTimestamp() 23 | .setColor(color) 24 | if (!args[0]) return message.channel.send(roleInfoEmbed2) 25 | let role = message.mentions.roles.first() || message.guild.roles.cache.get(args[0]) || message.guild.roles.cache.find(r => r.name.toLowerCase() === args.join(' ').toLocaleLowerCase()); 26 | if (!role) return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: You need to enter a **valid** role` } }); 27 | 28 | const roleInfoEmbed = new Discord.MessageEmbed() 29 | .setColor(role.hexColor) 30 | .setAuthor(`${message.author.username}`, message.author.displayAvatarURL({ 31 | dynamic: true, 32 | size: 2048 33 | })) 34 | .setTitle(`${role.name}`) 35 | .addField("**Role ID**", `\`${role.id}\``, true) 36 | .addField("**Guild**", `${message.guild.name} (\`${message.guild.id}\`)`, true) 37 | .addField("**Hex**", `\`${role.hexColor}\``, true) 38 | .addField("**Creation Date**", `${moment(role.createdAt).format("dddd, MMMM Do YYYY, h:mm A")}`, false) 39 | .addField(`**${role.members.size} Member(s)**`, role.members.size, false) 40 | 41 | message.channel.send(roleInfoEmbed); 42 | } 43 | } -------------------------------------------------------------------------------- /information/serverinfo.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const moment = require('moment'); 3 | const ms = require('ms'); 4 | const { color } = require("../../config.json"); 5 | const { verifiedServer } = require("../../emojis.json"); 6 | 7 | module.exports = { 8 | name: "serverinfo", 9 | aliases: ["si"], 10 | category: "information", 11 | 12 | run: async (client, message, args) => { 13 | let mentionedMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 14 | if (!mentionedMember) mentionedMember = message.member; 15 | 16 | const botCount = message.guild.members.cache.filter(m => m.user.bot).size; 17 | const humanCount = message.guild.memberCount - botCount 18 | const { guild } = message 19 | const emojicount = message.guild.emojis.cache 20 | const roles = message.guild.roles.cache 21 | const create = `${moment(message.guild.createdAt).format("MMM Do YYYY")} (${ms(Date.now() - message.guild.createdAt, { long: true })})` 22 | 23 | let banner = message.guild.bannerURL({ dynamic: true, format: "png", size: 2048 }) 24 | if (banner) { 25 | banner = `[Click Here](${message.guild.bannerURL({ dynamic: true, format: "png", size: 2048 })})` 26 | } else { 27 | banner = 'N/A' 28 | } 29 | 30 | let splash = message.guild.splashURL({ dynamic: true, format: "png", size: 2048 }) 31 | if (splash) { 32 | splash = `[Click Here](${message.guild.splashURL({ dynamic: true, format: "png", size: 2048 })})` 33 | } else { 34 | splash = 'N/A' 35 | } 36 | 37 | let icon = message.guild.iconURL({ dynamic: true, format: "png", size: 2048 }) 38 | if (icon) { 39 | icon = `[Click Here](${message.guild.iconURL({ dynamic: true, format: "png", size: 2048 })})` 40 | } else { 41 | icon = 'N/A' 42 | } 43 | 44 | let vanity = message.guild.vanityURLCode 45 | if (vanity) { 46 | vanity = `(discord.gg/${message.guild.vanityURLCode})` 47 | } else { 48 | vanity = '' 49 | } 50 | 51 | let features = []; 52 | 53 | guild.features.forEach(feature => { 54 | features.push( 55 | feature 56 | .toLowerCase() 57 | .replace(/(^|"|_)(\S)/g, (s) => s.toUpperCase()) 58 | .replace(/_/g, " ") 59 | .replace(/Guild/g, "Server") 60 | .replace(/Use Vad/g, "Use Voice Acitvity") 61 | ); 62 | }); 63 | 64 | const verificationLevels = { 65 | NONE: 'None', 66 | LOW: 'Low', 67 | MEDIUM: 'Medium', 68 | HIGH: 'High', 69 | VERY_HIGH: 'Highest' 70 | }; 71 | 72 | 73 | const embed = new Discord.MessageEmbed() 74 | .setColor(mentionedMember.displayHexColor || color) 75 | .setAuthor(`${message.author.username}`, message.author.displayAvatarURL({ 76 | dynamic: true 77 | })) 78 | .setTitle(`${guild.name} ${vanity} ${message.guild.verified ? `${verifiedServer}` : ``}`) 79 | .setDescription(`Server created on __${create}__\n__${guild.name}__ is on bot shard ID: **${guild.shardID}/${guild.shardID}**`) 80 | .setThumbnail(message.guild.iconURL({ 81 | dynamic: true, 82 | format: "png", 83 | size: 2048 84 | })) 85 | .setFooter(`Guild ID: ${guild.id}`) 86 | .setTimestamp() 87 | .addFields({ 88 | name: "**Owner**", 89 | value: guild.owner.user.tag, 90 | inline: true, 91 | }, 92 | { 93 | name: "**Members**", 94 | value: `**Total:** ${guild.memberCount}\n**Humans:** ${humanCount}\n**Bots:** ${botCount}`, 95 | inline: true, 96 | }, 97 | { 98 | name: "**Information**", 99 | value: `**Region:** ${guild.region}\n**Verification:** ${verificationLevels[guild.verificationLevel]}\n**Level:** ${guild.premiumTier}/${guild.premiumSubscriptionCount} boosts`, 100 | inline: true, 101 | }, 102 | { 103 | name: "**Design**", 104 | value: `**Banner:** ${banner}\n**Splash:** ${splash}\n**Icon:** ${icon}`, 105 | inline: true, 106 | }, 107 | { 108 | name: `**Channels (${guild.channels.cache.size})**`, 109 | value: `**Text:** ${guild.channels.cache.filter(channel => channel.type == 'text').size}\n**Voice:** ${guild.channels.cache.filter(channel => channel.type == 'voice').size}\n**Category:** ${guild.channels.cache.filter(channel => channel.type == 'category').size}`, 110 | inline: true, 111 | }, 112 | { 113 | name: "**Other**", 114 | value: `**Roles:** ${roles.size}/250\n**Emojis:** ${emojicount.size}/250`, 115 | inline: true, 116 | }, 117 | { 118 | name: "**Features**", 119 | value: features.length 120 | ? features 121 | .map(feature => `\`${feature}\``) 122 | .join(", ") 123 | : "N/A", 124 | inline: true 125 | }) 126 | 127 | message.channel.send(embed) 128 | } 129 | } -------------------------------------------------------------------------------- /information/uptime.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | 4 | module.exports = { 5 | name: "uptime", 6 | 7 | run: async (client, message, args) => { 8 | 9 | let days = Math.floor(client.uptime / 86400000); 10 | let hours = Math.floor(client.uptime / 3600000) % 24; 11 | let minutes = Math.floor(client.uptime / 60000) % 60; 12 | let seconds = Math.floor(client.uptime / 1000) % 60; 13 | 14 | let UptimeDays = days 15 | if (UptimeDays) { 16 | UptimeDays = `${days} days, `; 17 | } else { 18 | UptimeDays = '' 19 | } 20 | 21 | let UptimeHours = hours 22 | if (UptimeHours) { 23 | UptimeHours = `${hours} hours, `; 24 | } else { 25 | UptimeHours = '' 26 | } 27 | 28 | let UptimeMinutes = minutes 29 | if (UptimeMinutes) { 30 | UptimeMinutes = `${minutes} minutes, `; 31 | } else { 32 | UptimeMinutes = '' 33 | } 34 | 35 | let UptimeSeconds = seconds 36 | if (UptimeSeconds) { 37 | UptimeSeconds = `${seconds} seconds`; 38 | } else { 39 | UptimeSeconds = '' 40 | } 41 | 42 | const embed = new Discord.MessageEmbed() 43 | .setColor(color) 44 | .setDescription(`:alarm_clock: **bleed** has been up for: ${UptimeDays}${UptimeHours}${UptimeMinutes}${UptimeSeconds}`) 45 | 46 | message.channel.send(embed) 47 | } 48 | } -------------------------------------------------------------------------------- /information/userinfo.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const moment = require('moment'); 3 | const { color } = require("../../config.json"); 4 | const { verifiedBotDev } = require("../../emojis.json"); 5 | const { bugHunter } = require("../../emojis.json"); 6 | const { bugHunterPlus } = require("../../emojis.json"); 7 | const { discordPartner } = require("../../emojis.json"); 8 | const { discordStaff } = require("../../emojis.json"); 9 | const { hypeSquad } = require("../../emojis.json"); 10 | const { hypeSquadBravery } = require("../../emojis.json"); 11 | const { hypeSquadBril } = require("../../emojis.json"); 12 | const { hypeSquadBal } = require("../../emojis.json"); 13 | const { verifiedBot } = require("../../emojis.json"); 14 | const { earlySupporter } = require("../../emojis.json"); 15 | 16 | const flags = { 17 | DISCORD_EMPLOYEE: `${discordStaff}`, 18 | DISCORD_PARTNER: `${discordPartner}`, 19 | BUGHUNTER_LEVEL_1: `${bugHunter}`, 20 | BUGHUNTER_LEVEL_2: `${bugHunterPlus}`, 21 | HYPESQUAD_EVENTS: `${hypeSquad}`, 22 | HOUSE_BRAVERY: `${hypeSquadBravery}`, 23 | HOUSE_BRILLIANCE: `${hypeSquadBril}`, 24 | HOUSE_BALANCE: `${hypeSquadBal}`, 25 | EARLY_SUPPORTER: `${earlySupporter}`, 26 | VERIFIED_BOT: `${verifiedBot}`, 27 | VERIFIED_DEVELOPER: `${verifiedBotDev}` 28 | }; 29 | 30 | module.exports = { 31 | name: "userinfo", 32 | aliases: ["ui", "whois", "info"], 33 | 34 | run: async (client, message, args) => { 35 | let mentionedMember = await message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.guild.members.cache.find(r => r.displayName.toLowerCase() === args.join(' ').toLocaleLowerCase()) || args[0] || message.member; 36 | 37 | const user = await client.users.fetch(client.users.resolveID(mentionedMember)).catch(() => null); 38 | if (!user) user = message.author; 39 | const userFlags = user.flags.toArray(); 40 | 41 | let nickname = user.nickname 42 | if (nickname) { 43 | nickname = `∙ ${user.nickname}`; 44 | } else { 45 | nickname = '' 46 | } 47 | 48 | let flags2 = user.flags2 49 | if (flags) { 50 | flags2 = `∙ ${userFlags.length ? userFlags.map(flag => flags[flag]).join(' ') : ' '}`; 51 | } else { 52 | flags2 = '' 53 | } 54 | 55 | const activities = []; 56 | let customStatus; 57 | for (const activity of user.presence.activities.values()) { 58 | switch (activity.type) { 59 | case 'LISTENING': 60 | if (user.bot) activities.push(`Listening to **${activity.name}**`); 61 | else activities.push(`Listening to [**${activity.details}**](https://open.spotify.com/) by **${activity.state}**`); 62 | break; 63 | case 'CUSTOM_STATUS': 64 | customStatus = activity.state; 65 | break; 66 | } 67 | } 68 | 69 | const userPos = message.guild.members.cache 70 | .sort((a, b) => a.joinedTimestamp - b.joinedTimestamp) 71 | .array(); 72 | 73 | const position = new Promise((fui) => { 74 | for (let i = 1; i < userPos.length + 1; i++) { 75 | if (userPos[i - 1].id === user.id) fui(i); 76 | } 77 | }); 78 | 79 | let bot; 80 | if (user.bot === true) { 81 | bot = "Discord Bot"; 82 | } else { 83 | bot = "N/A"; 84 | } 85 | 86 | const roles = user.roles.cache 87 | .sort((a, b) => b.position - a.position) 88 | .map(role => role.toString()) 89 | .slice(0, -1); 90 | 91 | const embed = new Discord.MessageEmbed() 92 | .setAuthor(`${message.author.username}`, message.author.displayAvatarURL({ 93 | dynamic: true, 94 | size: 2048 95 | })) 96 | .setTitle(`${user.tag} ${nickname} ${flags2}`) 97 | .setDescription(`${activities.join('\n')}\n\`\`${user.id}\`\` ∙ Join position: ${await position || "N/A"}`) 98 | .setColor(mentionedMember.displayHexColor || color) 99 | .setThumbnail(user.displayAvatarURL({ format: "png", dynamic: true, size: 2048 })) 100 | .setFooter(`${bot}`) 101 | .setTimestamp() 102 | .addFields( 103 | { 104 | name: "**Joined Discord On**", 105 | value: `${moment(user.createdAt).format("dddd, MMMM Do YYYY, h:mm A")}`, 106 | inline: true 107 | }, 108 | { 109 | name: "**Joined Guild On**", 110 | value: `${user.joinedAt === 0 111 | ? `N/A` 112 | : `${moment(user.joinedAt).format("dddd, MMMM Do YYYY, h:mm A")}` 113 | }`, 114 | inline: true 115 | }, 116 | { 117 | name: '**Boosted Guild On**', 118 | value: `${user.premiumSinceTimestamp === 0 119 | ? `N/A` 120 | : `${moment(user.premiumSince).format("dddd, MMMM Do YYYY, h:mm A")}` 121 | }`, 122 | inline: true 123 | }, 124 | { 125 | name: `**Roles List [${roles.length}]** `, 126 | value: user.roles.cache 127 | .sort((a, b) => b.position - a.position) 128 | .filter(role => role.toString() !== "@everyone") 129 | .map(role => role.toString()) 130 | .join(", "), 131 | inline: true 132 | } 133 | ) 134 | 135 | await message.channel.send(embed) 136 | } 137 | } -------------------------------------------------------------------------------- /jointocreate.js: -------------------------------------------------------------------------------- 1 | const config = require("./config"); 2 | const jointocreatemap = new Map(); 3 | module.exports = function (client) { 4 | const description = { 5 | name: "jointocreate", 6 | filename: "jointocreate.js", 7 | version: "3.2" 8 | } 9 | new Promise(resolve => { 10 | setInterval(() => { 11 | resolve(2); 12 | try { 13 | const guild = client.guilds.cache.get(config.guildid); 14 | const channels = guild.channels.cache.map(ch => ch.id) 15 | for (let i = 0; i < channels.length; i++) { 16 | const key = `tempvoicechannel_${guild.id}_${channels[i]}`; 17 | if (jointocreatemap.get(key)) { 18 | var vc = guild.channels.cache.get(jointocreatemap.get(key)); 19 | if (vc.members.size < 1) { 20 | jointocreatemap.delete(key); 21 | return vc.delete(); 22 | } else { } 23 | } 24 | } 25 | } catch { } 26 | }, 10000) 27 | }) 28 | 29 | 30 | client.on("voiceStateUpdate", (oldState, newState) => { 31 | 32 | let oldparentname = "unknown" 33 | let oldchannelname = "unknown" 34 | let oldchanelid = "unknown" 35 | if (oldState && oldState.channel && oldState.channel.parent && oldState.channel.parent.name) oldparentname = oldState.channel.parent.name 36 | if (oldState && oldState.channel && oldState.channel.name) oldchannelname = oldState.channel.name 37 | if (oldState && oldState.channelID) oldchanelid = oldState.channelID 38 | let newparentname = "unknown" 39 | let newchannelname = "unknown" 40 | let newchanelid = "unknown" 41 | if (newState && newState.channel && newState.channel.parent && newState.channel.parent.name) newparentname = newState.channel.parent.name 42 | if (newState && newState.channel && newState.channel.name) newchannelname = newState.channel.name 43 | if (newState && newState.channelID) newchanelid = newState.channelID 44 | if (oldState.channelID) { 45 | if (typeof oldState.channel.parent !== "undefined") oldChannelName = `${oldparentname}\n\t**${oldchannelname}**\n*${oldchanelid}*` 46 | else oldChannelName = `-\n\t**${oldparentname}**\n*${oldchanelid}*` 47 | } 48 | if (newState.channelID) { 49 | if (typeof newState.channel.parent !== "undefined") newChannelName = `${newparentname}\n\t**${newchannelname}**\n*${newchanelid}*` 50 | else newChannelName = `-\n\t**${newchannelname}**\n*${newchanelid}*` 51 | } 52 | 53 | if (!oldState.channelID && newState.channelID) { 54 | if (newState.channelID !== config.JOINTOCREATECHANNEL) return; 55 | jointocreatechannel(newState); 56 | } 57 | if (oldState.channelID && !newState.channelID) { 58 | if (jointocreatemap.get(`tempvoicechannel_${oldState.guild.id}_${oldState.channelID}`)) { 59 | var vc = oldState.guild.channels.cache.get(jointocreatemap.get(`tempvoicechannel_${oldState.guild.id}_${oldState.channelID}`)); 60 | if (vc.members.size < 1) { 61 | jointocreatemap.delete(`tempvoicechannel_${oldState.guild.id}_${oldState.channelID}`); 62 | return vc.delete(); 63 | } 64 | else { 65 | } 66 | } 67 | } 68 | if (oldState.channelID && newState.channelID) { 69 | 70 | if (oldState.channelID !== newState.channelID) { 71 | if (newState.channelID === config.JOINTOCREATECHANNEL) 72 | jointocreatechannel(oldState); 73 | if (jointocreatemap.get(`tempvoicechannel_${oldState.guild.id}_${oldState.channelID}`)) { 74 | var vc = oldState.guild.channels.cache.get(jointocreatemap.get(`tempvoicechannel_${oldState.guild.id}_${oldState.channelID}`)); 75 | if (vc.members.size < 1) { 76 | jointocreatemap.delete(`tempvoicechannel_${oldState.guild.id}_${oldState.channelID}`); 77 | return vc.delete(); 78 | } 79 | else { 80 | } 81 | } 82 | } 83 | } 84 | }) 85 | async function jointocreatechannel(user) { 86 | await user.guild.channels.create(`${user.member.user.username}'s room`, { 87 | type: 'voice', 88 | parent: user.channel.parent.id, 89 | }).then(async vc => { 90 | user.setChannel(vc); 91 | jointocreatemap.set(`tempvoicechannel_${vc.guild.id}_${vc.id}`, vc.id); 92 | await vc.overwritePermissions([ 93 | { 94 | id: user.id, 95 | allow: ['MANAGE_CHANNELS'], 96 | }, 97 | { 98 | id: user.guild.id, 99 | allow: ['VIEW_CHANNEL'], 100 | }, 101 | ]); 102 | }) 103 | } 104 | } -------------------------------------------------------------------------------- /lastfm/fm.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const request = require("superagent"); 3 | const low = require('lowdb') 4 | var rp = require('request-promise'); 5 | var commaNumber = require('comma-number') 6 | let db2 = require('quick.db') 7 | const { default_prefix } = require("../../config.json"); 8 | const { color } = require("../../config.json"); 9 | const { lastfm } = require("../../emojis.json"); 10 | 11 | module.exports = { 12 | name: "fm", 13 | aliases: ["lfm", "np"], 14 | usage: "fm", 15 | category: "lastfm", 16 | 17 | run: (client, message, args) => { 18 | let member = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.member; 19 | 20 | let prefix2 = db2.get(`prefix_${message.guild.id}`) 21 | const args1 = message.content.trim().split(/ +/g) 22 | if (prefix2 === null) { prefix2 = default_prefix; } 23 | const FileSync = require('lowdb/adapters/FileSync') 24 | const adapter = new FileSync('fmuser.json'); 25 | const db = low(adapter); 26 | const user = message.author 27 | let [fmUser] = args; 28 | if (!fmUser) { 29 | const dbUser = db 30 | .get('users') 31 | .find({ 32 | userID: message.author.id 33 | }) 34 | .value(); 35 | if (message.author.bot) return; 36 | if (!dbUser) { 37 | message.channel.send({ 38 | embed: { 39 | color: "#d1202a", description: `${lastfm} ${message.author}: Looks like you dont have your username set. 40 | You can connect your **Last.fm** using \`${prefix2}lastfm set \`` 41 | } 42 | }) 43 | } 44 | fmUser = dbUser.lastFM; 45 | } 46 | var options = { 47 | uri: "http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=" + fmUser + "&api_key=43693facbb24d1ac893a7d33846b15cc&format=json&extended=1", 48 | headers: { 49 | 'Connection': 'keep-alive', 50 | 'Accept-Encoding': '', 51 | 'Accept-Language': 'en-US,en;q=0.8', 52 | }, 53 | json: true 54 | } 55 | rp(options) 56 | .then(function (lastfm) { 57 | var trackName = lastfm.recenttracks.track[0].name.replace(/ /g, "+"); 58 | var artistName = lastfm.recenttracks.track[0].artist.name.replace(' ', '+'); 59 | var trackURL = "http://ws.audioscrobbler.com/2.0/?method=track.getInfo&username=" + fmUser + "&api_key=43693facbb24d1ac893a7d33846b15cc&artist=" + artistName + "&track=" + trackName + "&format=json&autocorrect=1"; 60 | var options2 = { 61 | uri: trackURL, 62 | headers: { 63 | 'Connection': 'keep-alive', 64 | 'Accept-Encoding': '', 65 | 'Accept-Language': 'en-US,en;q=0.8', 66 | }, 67 | json: true 68 | }; 69 | message.channel.startTyping(); 70 | rp(options2) 71 | .then(function (track) { 72 | try { 73 | var playCount = '?'; 74 | if (track.track.userplaycount != undefined) { 75 | playCount = track.track.userplaycount; 76 | } 77 | } catch (error) { 78 | playCount = '?'; 79 | } 80 | 81 | let artist = ""; 82 | let trackName = ""; 83 | let cover = ""; 84 | let album = ""; 85 | const result = request.get(`http://ws.audioscrobbler.com/2.0/?method=user.getRecentTracks&user=${fmUser}&api_key=43693facbb24d1ac893a7d33846b15cc&format=json&limit=1`) 86 | result.then(res => { 87 | const track = res.body.recenttracks.track[0]; 88 | artist = track.artist["#text"]; 89 | artistURL2 = "https://www.last.fm/music/" + artistName; 90 | trackName = track.name; 91 | album = track.album["#text"]; 92 | total = track.total; 93 | cover = track.image[0]["#text"]; 94 | var trackName2 = lastfm.recenttracks.track[0].name.replace(/ /g, "+"); 95 | var artistName = lastfm.recenttracks.track[0].artist.name.replace(/ /g, '+'); 96 | var spacer = "/_/" 97 | let url = "https://www.last.fm/user/" + fmUser; 98 | let trackURL2 = "https://www.last.fm/music/" + artistName + spacer + trackName2; 99 | let format = commaNumber.bindWith(',', '.') 100 | let result = format(playCount) 101 | let result2 = format(lastfm.recenttracks['@attr'].total) 102 | 103 | try { 104 | const embed = new MessageEmbed() 105 | .setAuthor(`Last.fm: ${fmUser}`, message.author.displayAvatarURL({ dynamic: true }), `${url}`) 106 | .setColor(member.displayHexColor || color) 107 | .setThumbnail(track.image[3]["#text"]) 108 | .setDescription(`[**${trackName}**](${trackURL2})\nBy [**${artist}**](${artistURL2})・**${album}**`) 109 | .setFooter("Plays: " + result + "・Total Scrobbles: " + result2 + ``) 110 | .setTimestamp() 111 | message.channel.stopTyping(true); 112 | message.channel.send(embed).then(embedMessage => { 113 | embedMessage.react("👍").then(embedMessage.react("👎")) 114 | }); 115 | } catch (error) { 116 | console.log(error) 117 | message.channel.send({ embed: { color: "#d1202a", description: `${lastfm} **Last.fm**: Operation failed - The backend service most likely failed, please try again` } }) 118 | } 119 | }) 120 | } 121 | ) 122 | }) 123 | } 124 | } -------------------------------------------------------------------------------- /lastfm/lastfm.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js') 2 | const { default_prefix } = require("../../config.json"); 3 | const { color } = require('../../config.json') 4 | const { approve } = require("../../emojis.json"); 5 | const { warn } = require("../../emojis.json"); 6 | const { deny } = require("../../emojis.json"); 7 | 8 | 9 | module.exports = { 10 | name: "lastfm", 11 | aliases: ["lf"], 12 | usage: "lastfm set [user]", 13 | category: "lastfm", 14 | 15 | run: (client, message, args) => { 16 | 17 | const low = require('lowdb') 18 | const FileSync = require('lowdb/adapters/FileSync') 19 | const adapter = new FileSync('fmuser.json'); 20 | const db = low(adapter); 21 | const db2 = require('quick.db'); 22 | let prefix = db2.get(`prefix_${message.guild.id}`); 23 | if (prefix === null) { prefix = default_prefix; }; 24 | if (message.author.bot) return; 25 | 26 | if (!args[0]) return message.channel.send({ embed: {color: color, description: `${message.author}: To set your **Last.fm** account: \`${prefix}lastfm set \``}}) 27 | if (args[0].toLowerCase() == "set") { 28 | let fmUser = args[1]; 29 | let period = args[2]; 30 | const dbUser = db 31 | .get('users') 32 | .find({ 33 | userID: message.author.id 34 | }) 35 | .value(); 36 | if (dbUser) { 37 | fmUser = dbUser.lastFM; 38 | period = args[1]; 39 | } 40 | if (args.length === 3) { 41 | fmUser = args[1]; 42 | period = args[2]; 43 | } 44 | if (!args.join(" ").slice(3)) { 45 | let embed = new Discord.MessageEmbed() 46 | .setColor("#efa23a") 47 | .setDescription(`${warn} ${message.author}: You must provide a **Last.fm** username`) 48 | return message.channel.send(embed); 49 | } 50 | const existingUser = db 51 | .get('users') 52 | .find({ 53 | userID: message.author.id 54 | }) 55 | .value(); 56 | 57 | if (existingUser) { 58 | if (existingUser.lastFM === fmUser) { 59 | return message.channel.send( 60 | { embed: {color: "#efa23a", description: `${warn} ${message.author}: Your **Last.fm** profile is already set to **${fmUser}**`}} 61 | ); 62 | } 63 | existingUser.lastFM = fmUser; 64 | db.get('users') 65 | .find({ 66 | userID: message.author.id 67 | }) 68 | .assign({ 69 | lastFM: fmUser 70 | }) 71 | .write(); 72 | return message.channel.send( 73 | { embed: {color: "#a3eb7b", description: `${approve} ${message.author}: Your **Last.fm** username has been updated to **${fmUser}**`}} 74 | ); 75 | } 76 | db.get('users') 77 | .push({ 78 | userID: message.author.id, 79 | lastFM: fmUser 80 | }) 81 | .write(); 82 | return message.channel.send({ embed: {color: "#a3eb7b", description: `${approve} ${message.author}: Your **Last.fm** username has been set to **${fmUser}**`}}) 83 | } else if (args[0].toLowerCase() == "unlink") { 84 | const existingUser = db 85 | .get('users') 86 | .find({ 87 | userID: message.author.id 88 | }) 89 | .value(); 90 | 91 | if (existingUser) { 92 | db.get('users') 93 | .remove({ 94 | userID: message.author.id 95 | }) 96 | .write(); 97 | return message.channel.send( 98 | { embed: {color: "#a3eb7b", description: `${approve} ${message.author}: The **Last.fm** username **${existingUser.lastFM}** has been unlinked`}} 99 | ); 100 | } 101 | return message.channel.send( 102 | { embed: {color: "#e74c3c", description: `${deny} ${message.author}: **Username** not found`}} 103 | ); 104 | 105 | } 106 | } 107 | } -------------------------------------------------------------------------------- /moderation/ban.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const db = require('quick.db') 3 | const { default_prefix } = require("../../config.json"); 4 | const { color } = require("../../config.json"); 5 | const { warn } = require('../../emojis.json') 6 | const { deny } = require('../../emojis.json') 7 | 8 | module.exports = { 9 | name: "ban", 10 | 11 | run: async (client, message, args) => { 12 | let prefix = db.get(`prefix_${message.guild.id}`); 13 | if (prefix === null) { prefix = default_prefix; }; 14 | 15 | if (!message.member.hasPermission("BAN_MEMBERS")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`ban_members\`` } }); 16 | if (!message.guild.me.hasPermission("BAN_MEMBERS")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`ban_members\`` } }); 17 | 18 | let reason = args.slice(1).join(" "); 19 | const mentionedMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 20 | 21 | if (!reason) reason = 'No Reason Supplied'; 22 | const embed = new Discord.MessageEmbed() 23 | .setAuthor(message.author.username, message.author.avatarURL({ 24 | dynamic: true 25 | })) 26 | .setTitle('Command: ban') 27 | .setDescription('Bans the mentioned user from the guild') 28 | .addField('**Aliases**', 'N/A', true) 29 | .addField('**Parameters**', 'member, reason', true) 30 | .addField('**Information**', `${warn} Ban Members`, true) 31 | .addField('**Usage**', '\`\`\`Syntax: ban (member) \nExample: ban four#0001 Threatening members\`\`\`') 32 | .setFooter(`Module: moderation`) 33 | .setTimestamp() 34 | .setColor(color) 35 | if (!args[0]) return message.channel.send(embed) 36 | if (mentionedMember.id == message.author.id) return message.channel.send({ embed: { color: "fe6464", description: `${deny} ${message.author}: You cannot ban **yourself**` } }) 37 | if (message.member.roles.highest.comparePositionTo(mentionedMember.roles.highest) >= 0) return message.channel.send({ embed: { color: "fe6464", description: `${deny} ${message.author}: You cannot ban someone that is **higher** than **yours**` } }) 38 | if (!mentionedMember) return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: **Invalid User**. Do \`${prefix}ban\` to see the variables` } }) 39 | if (!mentionedMember.bannable) return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: Cannot ban due to **hierarchy**` } }) 40 | if (message.member.roles.highest.comparePositionTo(mentionedMember.roles.highest) >= 0) return message.channel.send({ embed: { color: "fe6464", description: `${deny} ${message.author}: You cannot ban someone that is **higher** than **yours**` } }) 41 | 42 | 43 | const banEmbed = new Discord.MessageEmbed() 44 | .setTitle('**Banned**') 45 | .addField(`**You have been banned in**`, `${message.guild.name}`, true) 46 | .addField(`**Moderator**`, `${message.author.tag}`, true) 47 | .addField(`**Reason**`, `${reason}`, true) 48 | .setColor("#e74c3c") 49 | .setThumbnail(message.author.avatarURL({ dynamic: true, size: 2048 })) 50 | .setTimestamp() 51 | .setFooter('If you would like to dispute this punishment, contact a staff member.'); 52 | 53 | await mentionedMember.send(banEmbed).catch(err => console.log(err)); 54 | await mentionedMember.ban({ 55 | days: 7, 56 | reason: reason 57 | }).catch(err => console.log(err)).then(() => message.channel.send('👍')) 58 | } 59 | } -------------------------------------------------------------------------------- /moderation/botclear.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { approve } = require('../../emojis.json') 3 | const { warn } = require('../../emojis.json') 4 | 5 | /*** 6 | * @param {Discord.client} bot the discord bot client. 7 | * @param {Discord.messsage} message the initial message sent by the user. 8 | * @param {array} args an array of arguments 9 | */ 10 | 11 | module.exports = { 12 | name: "botclear", 13 | aliases: ["bc"], 14 | 15 | run: async (client, message, args) => { 16 | if (!message.member.hasPermission("MANAGE_MESSAGES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_messages\``}}); 17 | if (!message.guild.me.hasPermission("MANAGE_MESSAGES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`manage_messages\``}}); 18 | 19 | try { 20 | message.channel.messages.fetch().then(messages => { 21 | const botMessages = messages.filter(msg => msg.author.bot); 22 | message.channel.bulkDelete(botMessages); 23 | }); 24 | } catch (err) { 25 | return; 26 | } 27 | message.delete(); 28 | 29 | let botClearEmbed = new Discord.MessageEmbed() 30 | .setColor("#a3eb7b") 31 | .setDescription(`${approve} ${message.author}: Removed messages from **bots**`) 32 | message.channel.send(botClearEmbed); 33 | } 34 | } -------------------------------------------------------------------------------- /moderation/hackban.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | const { warn } = require('../../emojis.json') 4 | 5 | module.exports = { 6 | name: `hackban`, 7 | aliases: ['hban'], 8 | 9 | run: async (client, message, args) => { 10 | if (!message.member.hasPermission("BAN_MEMBERS")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`ban_members\`` } }); 11 | if (!message.guild.me.hasPermission("BAN_MEMBERS")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`ban_members\`` } }); 12 | 13 | const hackbanEmbed = new Discord.MessageEmbed() 14 | .setAuthor(message.author.username, message.author.avatarURL({ 15 | dynamic: true 16 | })) 17 | .setTitle('Command: hackban') 18 | .setDescription('Ban user from guild even if they arent in the server') 19 | .addField('**Aliases**', 'hban', true) 20 | .addField('**Parameters**', 'member, reason', true) 21 | .addField('**Information**', `${warn} Ban Members\n:notepad_spiral: Make sure to use a User ID (not name#tag...etc)`, true) 22 | .addField('**Usage**', '\`\`\`Syntax: hackban (user id) \nExample: hackban 262429076763967488 Raider\`\`\`') 23 | .setFooter(`Module: moderation`) 24 | .setTimestamp() 25 | .setColor(color) 26 | if (!args[0]) return message.channel.send(hackbanEmbed) 27 | 28 | const target = args[0]; 29 | if (target.id == message.author.id) return message.channel.send({ embed: { color: "fe6464", description: `${deny} ${message.author}: You cannot ban **yourself**` } }) 30 | if (message.member.roles.highest.comparePositionTo(target.roles.highest) >= 0) return message.channel.send({ embed: { color: "fe6464", description: `${deny} ${message.author}: You cannot ban someone that is **higher** than **yours**` } }) 31 | if (isNaN(target)) return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: You must to **specify** a valid user ID` } }); 32 | 33 | const reason = args.splice(1, args.length).join(' '); 34 | 35 | message.guild.members.ban(target, { reason: reason.length < 1 ? 'No Reason Supplied' : reason }); 36 | 37 | return message.channel.send('👍'); 38 | } 39 | } -------------------------------------------------------------------------------- /moderation/jail.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js"); 2 | const ms = require("ms"); 3 | const db = require("quick.db"); 4 | const { default_prefix } = require("../../config.json"); 5 | const { color } = require("../../config.json"); 6 | const { warn } = require('../../emojis.json') 7 | 8 | module.exports = { 9 | name: "jail", 10 | 11 | run: async (client, message, args) => { 12 | if (!message.member.hasPermission("MANAGE_MESSAGES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_messages\``}}); 13 | if (!message.guild.me.hasPermission("MUTE_MEMBERS")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`mute_members\``}}); 14 | 15 | let prefix = db.get(`prefix_${message.guild.id}`); 16 | if (prefix === null) { prefix = default_prefix; }; 17 | if (message.author.bot) return; 18 | 19 | const hackbanEmbed = new Discord.MessageEmbed() 20 | .setAuthor(message.author.username, message.author.avatarURL({ 21 | dynamic: true 22 | })) 23 | .setTitle('Command: jail') 24 | .setDescription('Jails the mentioned user (timeout)') 25 | .addField('**Aliases**', 'N/A', true) 26 | .addField('**Parameters**', 'member, time, reason', true) 27 | .addField('**Information**', `${warn} Manage Messages`, true) 28 | .addField('**Usage**', '\`\`\`Syntax: jail (member) \nExample: jail four#0001 1h Being weird\`\`\`') 29 | .setFooter(`Module: moderation`) 30 | .setTimestamp() 31 | .setColor(color) 32 | if (!args[0]) return message.channel.send(hackbanEmbed) 33 | 34 | let user = message.guild.member(message.mentions.users.first() || message.guild.members.cache(args[0])); 35 | 36 | let log = await db.fetch(`logschannel_${message.guild.id}`) 37 | if (!log) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: Modlogs channel was **not found** - set it using \`${prefix}modlogs channel (channel)\`` } }) 38 | var mod = message.author 39 | var time = args[1] 40 | let rson = args.slice(2).join(' ') 41 | 42 | if (!user) return message.channel.send('You didn\'t mention a user') 43 | if (!time) return message.channel.send('Please write a time, Ex : 1s/1m/1h/1d/1w') 44 | if (!rson) return message.channel.send('You didn\'t say a reason!') 45 | 46 | 47 | const mute = message.guild.roles.cache.find(role => role.name === 'jailed') 48 | 49 | let mutetime = args[1] 50 | if (!mute) { 51 | let mute = await message.guild.roles.create({ 52 | name: "jailed", 53 | color: "#818386", 54 | permissions: [] 55 | }) 56 | message.guild.channels.cache.filter(c => c.type === 'text').forEach(async (channel, id) => { 57 | await channel.overwritePermissions(mute, { 58 | VIEW_CHANNEL: false, 59 | READ_MESSAGE_HISTORY: false 60 | }); 61 | }); 62 | 63 | } 64 | 65 | 66 | await (user.addRole(mute.id)); 67 | message.channel.send(``) 68 | .replace(`d`, " Day") 69 | .replace(`s`, " Second") 70 | .replace(`h`, " Hour") 71 | .replace(`m`, " Minute") 72 | .replace(`w`, " Week") 73 | message.channel.send(`${user} is now jailed for, **${mutetime}**`) 74 | db.set(`jailed_${message.guild.id + user.id}`, 'jailed') 75 | db.set(`jailtime_${message.mentions.users.first().id + message.guild.id}`, mutetime) 76 | 77 | const jailedembed = new Discord.MessageEmbed() 78 | .setTitle('Penal: Jail') 79 | .setThumbnail(user.avatarURL || user.defaultAvatarURL) 80 | .addField('Moderator', `${mod}`, true) 81 | .addField('Reason', `\`${rson}\``, true) 82 | .addField('User', `<@${user.id}>`, true) 83 | .addField('Time', `\`${mutetime}\``) 84 | .setColor("RANDOM") 85 | message.guild.channels.get(log).sendEmbed(jailedembed) 86 | 87 | setTimeout(function () { 88 | db.delete(`jailed_${message.guild.id + user.id}`) 89 | user.removeRole(mute.id) 90 | message.channel.send(`<@${user.id}> has been unjailed.`) 91 | }, ms(mutetime)); 92 | 93 | } 94 | } -------------------------------------------------------------------------------- /moderation/kick.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const db = require('quick.db') 3 | const { default_prefix } = require("../../config.json"); 4 | const { color } = require("../../config.json"); 5 | const { warn } = require('../../emojis.json') 6 | const { deny } = require('../../emojis.json') 7 | 8 | module.exports = { 9 | name: "kick", 10 | 11 | run: async (client, message, args) => { 12 | let prefix = db.get(`prefix_${message.guild.id}`); 13 | if (prefix === null) { prefix = default_prefix; }; 14 | 15 | if (!message.member.hasPermission("KICK_MEMBERS")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`kick_members\`` } }); 16 | if (!message.guild.me.hasPermission("KICK_MEMBERS")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`kick_members\`` } }); 17 | const mentionedMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 18 | let reason = args.slice(1).join(" "); 19 | if (!reason) reason = "No Reason Supplied" 20 | const kickEmbed = new Discord.MessageEmbed() 21 | .setTitle('**Kicked**') 22 | .addField(`**You have been kicked from**`, `${message.guild.name}`, true) 23 | .addField(`**Moderator**`, `${message.author.tag}`, true) 24 | .addField(`**Reason**`, `${reason}`, true) 25 | .setColor("#e74c3c") 26 | .setThumbnail(message.author.avatarURL({ dynamic: true, size: 2048 })) 27 | .setTimestamp() 28 | .setFooter('If you would like to dispute this punishment, contact a staff member.'); 29 | 30 | //,kick @user [reason] 31 | const embed = new Discord.MessageEmbed() 32 | .setAuthor(message.author.username, message.author.avatarURL({ 33 | dynamic: true 34 | })) 35 | .setTitle('Command: kick') 36 | .setDescription('Kicks the mentioned user from the guild') 37 | .addField('**Aliases**', 'N/A', true) 38 | .addField('**Parameters**', 'member, reason', true) 39 | .addField('**Information**', `${warn} Kick Members`, true) 40 | .addField('**Usage**', '\`\`\`Syntax: kick (member) \nExample: kick four#0001 You need a break\`\`\`') 41 | .setFooter(`Module: moderation`) 42 | .setTimestamp() 43 | .setColor(color) 44 | if (!args[0]) return message.channel.send(embed) 45 | if (mentionedMember.id == message.author.id) return message.channel.send({ embed: { color: "fe6464", description: `${deny} ${message.author}: You cannot kick **yourself**` } }) 46 | if (message.member.roles.highest.comparePositionTo(mentionedMember.roles.highest) <= 0) return message.channel.send({ embed: { color: "fe6464", description: `${deny} ${message.author}: You cannot kick someone that is **higher** than **yours**` } }) 47 | if (!mentionedMember) return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: **Invalid User**. Do \`${prefix}kick\` to see the variables` } }); 48 | if (!mentionedMember.kickable) return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: Cannot kick due to **hierarchy**` } }) 49 | if (message.member.roles.highest.comparePositionTo(mentionedMember.roles.highest) >= 0) return message.channel.send({ embed: { color: "fe6464", description: `${deny} ${message.author}: You cannot kick someone that is **higher** than **yours**` } }) 50 | try { 51 | await mentionedMember.send(kickEmbed); 52 | } catch (err) { 53 | return message.channel.send('Cannot dm that member'); 54 | } 55 | 56 | try { 57 | await mentionedMember.kick(reason) 58 | return message.channel.send('👍') 59 | } catch (err) { 60 | console.log(err); 61 | } 62 | 63 | } 64 | } -------------------------------------------------------------------------------- /moderation/lockdown.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const db = require('quick.db') 3 | const { default_prefix } = require("../../config.json"); 4 | const { color } = require("../../config.json"); 5 | const { warn } = require('../../emojis.json') 6 | 7 | module.exports = { 8 | name: "lockdown", 9 | aliases: ["lock"], 10 | 11 | run: async (client, message, args) => { 12 | if (!message.member.hasPermission("BAN_MEMBERS")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`ban_members\`` } }); 13 | if (!message.guild.me.hasPermission("BAN_MEMBERS")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`ban_members\`` } }); 14 | 15 | let prefix = db.get(`prefix_${message.guild.id}`); 16 | if (prefix === null) { prefix = default_prefix; }; 17 | 18 | const lockEmbed = new Discord.MessageEmbed() 19 | .setAuthor(message.author.username, message.author.avatarURL({ 20 | dynamic: true 21 | })) 22 | .setTitle('Command: lockdown') 23 | .setDescription('Lockdown a channel') 24 | .addField('**Aliases**', 'lock', true) 25 | .addField('**Parameters**', 'channel, reason', true) 26 | .addField('**Information**', `${warn} Ban Members`, true) 27 | .addField('**Usage**', '\`\`\`Syntax: lockdown \nExample: lockdown #general\`\`\`') 28 | .setFooter(`Module: moderation`) 29 | .setTimestamp() 30 | .setColor(color) 31 | if (!args[0]) return message.channel.send(lockEmbed) 32 | 33 | let channel = message.mentions.channels.first(); 34 | 35 | if (channel) { 36 | reason = args.join(' ').slice(22) || 'Not Specified'; 37 | } else { 38 | channel = message.channel; 39 | } 40 | 41 | if (channel.permissionsFor(message.guild.id).has('SEND_MESSAGES') === false) { 42 | const lockchannelError2 = new Discord.MessageEmbed() 43 | .setDescription(`${warn} ${message.author}: ${channel} is already locked!`) 44 | .setColor('#efa23a'); 45 | 46 | return message.channel.send(lockchannelError2); 47 | } 48 | 49 | channel.updateOverwrite(message.guild.id, { SEND_MESSAGES: false }); 50 | 51 | const embed = new Discord.MessageEmbed() 52 | .setDescription(`:lock: ${message.author}: ${channel} locked. Use \`${prefix}unlock\` to remove this lockdown`) 53 | .setColor('#efa23a'); 54 | 55 | message.channel.send(embed); 56 | } 57 | 58 | }; -------------------------------------------------------------------------------- /moderation/mute.js: -------------------------------------------------------------------------------- 1 | const { Message } = require('discord.js') 2 | const Discord = require('discord.js'); 3 | const { color } = require("../../config.json"); 4 | const { approve } = require('../../emojis.json') 5 | const { warn } = require('../../emojis.json') 6 | 7 | module.exports = { 8 | name: 'mute', 9 | 10 | /** 11 | * @param {Message} message 12 | */ 13 | 14 | run: async (client, message, args) => { 15 | if (!message.member.hasPermission("MANAGE_MESSAGES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_messages\``}}); 16 | if (!message.guild.me.hasPermission("MUTE_MEMBERS")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`mute_members\``}}); 17 | 18 | const muteEmbed = new Discord.MessageEmbed() 19 | .setAuthor(message.author.username, message.author.avatarURL({ 20 | dynamic: true 21 | })) 22 | .setTitle('Command: mute') 23 | .setDescription('Mutes the mentioned member in all channels') 24 | .addField('**Aliases**', 'N/A', true) 25 | .addField('**Parameters**', 'member', true) 26 | .addField('**Information**', `${warn} Manage Messages`, true) 27 | .addField('**Usage**', '\`\`\`Syntax: mute \nExample: mute four#0001\`\`\`') 28 | .setFooter(`Module: moderation`) 29 | .setTimestamp() 30 | .setColor(color) 31 | if (!args[0]) return message.channel.send(muteEmbed) 32 | 33 | let user = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.member; 34 | 35 | const Member = message.mentions.members.first() || message.guild.members.cache.get(args[0]) 36 | if (Member.id == message.author.id) return message.channel.send({ embed: { color: "fe6464", description: `${deny} ${message.author}: You cannot mute **yourself**` } }) 37 | if (message.member.roles.highest.comparePositionTo(Member.roles.highest) >= 0) return message.channel.send({ embed: { color: "fe6464", description: `${deny} ${message.author}: You cannot mute someone that is **higher** than **yours**` } }) 38 | if (!Member) return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: I was unable to find a member with that name` } }) 39 | const role = message.guild.roles.cache.find(role => role.name.toLowerCase() === 'muted') 40 | if (!role) { 41 | try { 42 | message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: There was no **muted** role found` } }).then(embedMessage => { 43 | embedMessage.edit({ embed: { color: "#efa23a", description: `${warn} ${message.author}: Attempting to create a **muted** role` } }) 44 | }); 45 | 46 | let muterole = await message.guild.roles.create({ 47 | data: { 48 | name: 'muted', 49 | permissions: [] 50 | } 51 | }); 52 | message.guild.channels.cache.filter(c => c.type === 'text').forEach(async (channel, id) => { 53 | await channel.createOverwrite(muterole, { 54 | SEND_MESSAGES: false, 55 | ADD_REACTIONS: false 56 | }) 57 | }); 58 | message.channel.send({ embed: { color: "#a3eb7b", description: `${approve} ${message.author}: Sucessfully created a **muted** role` } }) 59 | } catch (error) { 60 | console.log(error) 61 | message.channel.send(error) 62 | } 63 | }; 64 | let role2 = message.guild.roles.cache.find(r => r.name.toLowerCase() === 'muted') 65 | if (Member.roles.cache.has(role2.id)) return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: **${user.user.tag}** has already been muted` } }) 66 | await Member.roles.add(role2) 67 | message.channel.send({ embed: { color: "RED", description: `${message.author}: **${user.user.tag}** is now muted` } }) 68 | } 69 | } -------------------------------------------------------------------------------- /moderation/purge.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | const { warn } = require('../../emojis.json') 4 | 5 | module.exports = { 6 | name: "purge", 7 | aliases: ["clear", "prune", "c"], 8 | 9 | run: async (client, message, args) => { 10 | if (!message.member.hasPermission("MANAGE_MESSAGES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_messages\`` } }); 11 | if (!message.guild.me.hasPermission("MANAGE_MESSAGES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`manage_messages\`` } }); 12 | const purgehelpEmbed = new Discord.MessageEmbed() 13 | .setAuthor(message.author.username, message.author.avatarURL({ 14 | dynamic: true 15 | })) 16 | .setTitle('Command: purge') 17 | .setDescription('Deletes the specified amount of messages from the current channel') 18 | .addField('**Aliases**', 'clear, prune, c', true) 19 | .addField('**Parameters**', 'member, amount', true) 20 | .addField('**Information**', `${warn} Manage Messages`, true) 21 | .addField('**Usage**', '\`\`\`Syntax: purge \nExample: purge 30\`\`\`') 22 | .setFooter(`Module: moderation`) 23 | .setTimestamp() 24 | .setColor(color) 25 | if (!args[0]) return message.channel.send(purgehelpEmbed); 26 | const amountToDelete = Number(args[0], 10); 27 | if (isNaN(amountToDelete)) return message.channel.send('Make sure you put in a number. Do \`purge\` to see the variables'); 28 | if (!Number.isInteger(amountToDelete)) return message.channel.send('Make sure you put in a number and not an integer. Do \`purge\` to see the variables'); 29 | if (!amountToDelete || amountToDelete < 2 || amountToDelete > 100) return message.channel.send('Invalid amount. Make sure it is between **2-100**') 30 | const fetched = await message.channel.messages.fetch({ 31 | limit: amountToDelete 32 | }); 33 | 34 | try { 35 | await message.channel.bulkDelete(fetched) 36 | return message.channel.send(`Purged **${fetched.size}** messages 👍`).then(msg => { 37 | msg.delete({ timeout: 1000 }) 38 | }) 39 | } catch (err) { 40 | console.log(err); 41 | return message.channel.send('Unable to **purge**') 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /moderation/purgeuser.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | const { warn } = require('../../emojis.json') 4 | 5 | module.exports = { 6 | name: "purgeuser", 7 | aliases: ["puser"], 8 | 9 | run: async (client, message, args) => { 10 | if (!message.member.hasPermission("MANAGE_MESSAGES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_messages\`` } }); 11 | if (!message.guild.me.hasPermission("MANAGE_MESSAGES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`manage_messages\`` } }); 12 | const purgehelpEmbed = new Discord.MessageEmbed() 13 | .setAuthor(message.author.username, message.author.avatarURL({ 14 | dynamic: true 15 | })) 16 | .setTitle('Command: purgeuser') 17 | .setDescription('Deletes the specified amount of messages from the mentioned user') 18 | .addField('**Aliases**', 'puser', true) 19 | .addField('**Parameters**', 'member, amount', true) 20 | .addField('**Information**', `${warn} Manage Messages`, true) 21 | .addField('**Usage**', '\`\`\`Syntax: purgeuser (member) \nExample: purgeuser four#0001 30\`\`\`') 22 | .setFooter(`Module: moderation`) 23 | .setTimestamp() 24 | .setColor(color) 25 | if (!args[0]) return message.channel.send(purgehelpEmbed); 26 | 27 | let member = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 28 | let amount = args[1] 29 | if (!member) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You need to **mention** a user to purge` } }) 30 | if (!amount) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: Provide an **amount** to purge` } }) 31 | if (isNaN(amount)) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You need to enter a **valid** amount to purge` } }) 32 | if (amount > 100) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: Invalid amount. Make sure it is between **2-100**` } }) 33 | let AllMessages = await message.channel.messages.fetch() 34 | let FilteredMessages = await AllMessages.filter(x => x.author.id === member.id) 35 | let deletedMessages = 0 36 | FilteredMessages.forEach(msg => { 37 | if (deletedMessages >= amount) return 38 | msg.delete() 39 | deletedMessages++ 40 | }) 41 | } 42 | } -------------------------------------------------------------------------------- /moderation/rename.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | const { approve } = require('../../emojis.json') 4 | const { warn } = require('../../emojis.json') 5 | const { deny } = require('../../emojis.json') 6 | 7 | module.exports = { 8 | name: "rename", 9 | aliases: ["nick"], 10 | 11 | run: async (client, message, args) => { 12 | if (!message.member.hasPermission("BAN_MEMBERS")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_messages\`` } }); 13 | if (!message.guild.me.hasPermission("BAN_MEMBERS")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`manage_messages\`` } }); 14 | 15 | const mentionedMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 16 | 17 | const nickEmbed = new Discord.MessageEmbed() 18 | .setAuthor(message.author.username, message.author.avatarURL({ 19 | dynamic: true 20 | })) 21 | .setTitle('Command: rename') 22 | .setDescription('Assigns the mentioned user a new nickname in the guild') 23 | .addField('**Aliases**', 'nick', true) 24 | .addField('**Parameters**', 'member, reason', true) 25 | .addField('**Information**', `${warn} Ban Members`, true) 26 | .addField('**Usage**', '\`\`\`Syntax: rename (member) \nExample: rename four#0001 amir\`\`\`') 27 | .setFooter(`Module: moderation`) 28 | .setTimestamp() 29 | .setColor(color) 30 | if (!args[0]) return message.channel.send(nickEmbed) 31 | 32 | if (mentionedMember.roles.highest.position >= message.member.roles.highest.position) return message.channel.send({ embed: { color: "#fe6464", description: `${deny} ${message.author}: You can't **rename** someone who is **higher** than you` } }); 33 | 34 | let user = message.mentions.users.first(); 35 | if (!user) return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: You need to **mention** a user` } }); 36 | 37 | let nick = args.slice(1).join(" "); 38 | if (!nick) return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: You need to **input** a nickname` } }); 39 | 40 | let member = message.guild.members.cache.get(user.id); 41 | 42 | await member.setNickname(nick); 43 | return message.channel.send({ embed: { color: "#a3eb7b", description: `${approve} ${message.author}: Changed **${user.username}**'s nickname to \`${nick}\`` } }); 44 | } 45 | } -------------------------------------------------------------------------------- /moderation/role.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | const { add } = require('../../emojis.json') 4 | const { deny } = require('../../emojis.json') 5 | const { warn } = require('../../emojis.json') 6 | 7 | module.exports = { 8 | name: "role", 9 | 10 | run: async (client, message, args) => { 11 | if (!message.member.hasPermission("MANAGE_ROLES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_roles\`` } }); 12 | if (!message.guild.me.hasPermission("MANAGE_ROLES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`manage_roles\`` } }); 13 | 14 | const mentionedMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 15 | const role = message.mentions.roles.first() || message.guild.roles.cache.get(args[1]) || message.guild.roles.cache.find(r => r.name === args.slice(1).join(' ')); 16 | 17 | const rolehelpEmbed = new Discord.MessageEmbed() 18 | .setAuthor(message.author.username, message.author.avatarURL({ 19 | dynamic: true 20 | })) 21 | .setTitle('Command: role') 22 | .setDescription('Adds role to a member') 23 | .addField('**Aliases**', 'N/A', true) 24 | .addField('**Parameters**', 'member, role', true) 25 | .addField('**Information**', `${warn} Manage Roles`, true) 26 | .addField('**Usage**', '\`\`\`Syntax: role (member) \nExample: role four#0001 Owner\`\`\`') 27 | .setFooter(`Module: moderation`) 28 | .setTimestamp() 29 | .setColor(color) 30 | if (!args[0]) return message.channel.send(rolehelpEmbed) 31 | 32 | if (!mentionedMember) return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: You must state a **user** to give the role to` } }); 33 | 34 | if (mentionedMember.roles.highest.position >= message.member.roles.highest.position) return message.channel.send({ embed: { color: "#fe6464", description: `${deny} ${message.author}: You cannot give a role that is **higher** than **yours**` } }); 35 | if (!args[1]) return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: You must **state** a valid role` } }); 36 | if (!role) return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: That role **doesn't** exist, state a valid role` } }); 37 | if (message.member.roles.highest.position <= role.position) message.channel.send({ embed: { color: "#fe6464", description: `${deny} ${message.author}: You cannot give a role that is **higher** than **yours**` } }); 38 | 39 | await mentionedMember.roles.add(role.id).catch(err => console.log(err)) 40 | const rolegiveEmbed = new Discord.MessageEmbed() 41 | .setDescription(`${add} ${message.author}: Added ${role} to ${mentionedMember}`) 42 | .setColor('#46bcec') 43 | return message.channel.send(rolegiveEmbed) 44 | } 45 | } -------------------------------------------------------------------------------- /moderation/rolecreate.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | const { approve } = require('../../emojis.json') 4 | const { warn } = require('../../emojis.json') 5 | 6 | module.exports = { 7 | name: "rolecreate", 8 | aliases: ["rc"], 9 | 10 | run: async (client, message, args) => { 11 | if (!message.member.hasPermission("MANAGE_ROLES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_roles\`` } }); 12 | if (!message.guild.me.hasPermission("MANAGE_ROLES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`manage_roles\`` } }); 13 | 14 | 15 | const rcEmbed = new Discord.MessageEmbed() 16 | .setAuthor(message.author.username, message.author.avatarURL({ 17 | dynamic: true 18 | })) 19 | .setTitle('Command: rolecreate') 20 | .setDescription('Creates a role with optional color') 21 | .addField('**Aliases**', 'rc', true) 22 | .addField('**Parameters**', 'role name, color', true) 23 | .addField('**Information**', `${warn} Manage Roles`, true) 24 | .addField('**Usage**', '\`\`\`Syntax: rolecreate (color)\nExample: rolecreate four #ff0000\`\`\`') 25 | .setFooter(`Module: moderation`) 26 | .setTimestamp() 27 | .setColor(color) 28 | if (!args[0]) return message.channel.send(rcEmbed) 29 | 30 | if (args.length == 0) { 31 | return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: You don't have enough arguments. Format: role roleName optional: color hex`}}); 32 | } 33 | 34 | const roleName = args.join(' ').trim(); 35 | 36 | if (args.length > 1) { 37 | 38 | let possibleHex = null; 39 | if (roleName.length > 6) { possibleHex = roleName.substr(roleName.length - 6); } 40 | let wasHex = false; 41 | if (possibleHex !== null && /^[0-9A-F]{6}$/i.test(possibleHex)) { wasHex = true; } 42 | 43 | const updatedRoleName = wasHex == true ? roleName.replace(possibleHex, '') : roleName; 44 | 45 | if (wasHex) { 46 | await message.guild.roles.create({ 47 | data: { 48 | name: updatedRoleName, 49 | color: possibleHex 50 | } 51 | }); 52 | } 53 | else { 54 | await message.guild.roles.create({ 55 | data: { 56 | name: updatedRoleName 57 | } 58 | }); 59 | } 60 | 61 | await message.channel.send({ embed: { color: "#a3eb7b", description: `${approve} ${message.author}: Created role **${updatedRoleName}**`}}); 62 | } 63 | else { 64 | await message.guild.roles.create({ 65 | data: { 66 | name: roleName 67 | } 68 | }); 69 | 70 | await message.channel.send({ embed: { color: "#a3eb7b", description: `${approve} ${message.author}: Created role **${roleName}**`}}); 71 | } 72 | } 73 | } -------------------------------------------------------------------------------- /moderation/roleremove.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { default_prefix, color } = require("../../config.json"); 3 | const { remove } = require('../../emojis.json') 4 | const { deny } = require('../../emojis.json') 5 | const { warn } = require('../../emojis.json') 6 | 7 | module.exports = { 8 | name: "roleremove", 9 | aliases: ["rr"], 10 | 11 | run: async (client, message, args) => { 12 | let prefix = db.get(`prefix_${message.guild.id}`); 13 | if (prefix === null) { prefix = default_prefix; }; 14 | 15 | if (!message.member.hasPermission("MANAGE_ROLES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_roles\`` } }); 16 | if (!message.guild.me.hasPermission("MANAGE_ROLES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`manage_roles\`` } }); 17 | 18 | const mentionedMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 19 | const role = message.mentions.roles.first() || message.guild.roles.cache.get(args[1]) || message.guild.roles.cache.find(r => r.name === args.slice(1).join(' ')); 20 | 21 | const rolehelpEmbed = new Discord.MessageEmbed() 22 | .setAuthor(message.author.username, message.author.avatarURL({ 23 | dynamic: true 24 | })) 25 | .setTitle('Command: roleremove') 26 | .setDescription('Removes role from a member') 27 | .addField('**Aliases**', 'rr', true) 28 | .addField('**Parameters**', 'member, role', true) 29 | .addField('**Information**', `${warn} Manage Roles`, true) 30 | .addField('**Usage**', '\`\`\`Syntax: roleremove (member) \nExample: roleremove four#0001 Owner\`\`\`') 31 | .setFooter(`Module: moderation`) 32 | .setTimestamp() 33 | .setColor(color) 34 | if (!args[0]) return message.channel.send(rolehelpEmbed) 35 | if (!mentionedMember) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: Please state a role to remove from the user. Run \`${prefix}roleremove\` to view the correct **syntax**` } }) 36 | 37 | if (mentionedMember.roles.highest.position >= message.member.roles.highest.position) return message.channel.send({ embed: { color: "#fe6464", description: `${deny} ${message.author}: You cannot remove a role that is **higher** than **yours**` } }); 38 | if (!args[1]) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: Please state a role to remove from the user. Run \`${prefix}roleremove\` to view the correct **syntax**` } }) 39 | if (!role) return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: That role **doesn't** exist, state a valid role` } }); 40 | if (message.member.roles.highest.position <= role.position) message.channel.send({ embed: { color: "#fe6464", description: `${deny} ${message.author}: You cannot remove a role that is **higher** than **yours**` } }); 41 | 42 | await mentionedMember.roles.remove(role.id).catch(err => console.log(err)) 43 | const rolegiveEmbed = new Discord.MessageEmbed() 44 | .setDescription(`${remove} ${message.author}: Removed ${role} from ${mentionedMember}`) 45 | .setColor("#46bcec") 46 | return message.channel.send(rolegiveEmbed) 47 | } 48 | } -------------------------------------------------------------------------------- /moderation/unban.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | const { warn } = require('../../emojis.json') 4 | const { deny } = require('../../emojis.json') 5 | 6 | module.exports = { 7 | name: "unban", 8 | category: "moderation", 9 | 10 | run: async (client, message, args) => { 11 | if (!message.member.hasPermission("BAN_MEMBERS")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`ban_members\`` } }); 12 | if (!message.guild.me.hasPermission("BAN_MEMBERS")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`ban_members\`` } }); 13 | 14 | 15 | let reason = args.slice(1).join(" "); 16 | let userID = args[0]; 17 | 18 | if (!reason) reason = 'No reason given.'; 19 | const ubhelpEmbed = new Discord.MessageEmbed() 20 | .setAuthor(message.author.username, message.author.avatarURL({ 21 | dynamic: true 22 | })) 23 | .setTitle('Command: unban') 24 | .setDescription('Unbans the mentioned user from the guild') 25 | .addField('**Aliases**', 'N/A', true) 26 | .addField('**Parameters**', 'member, reason', true) 27 | .addField('**Information**', `${warn} Ban Members`, true) 28 | .addField('**Usage**', '\`\`\`Syntax: unban (member) \nExample: unban four#0001 Forgiven\`\`\`') 29 | .setFooter(`Module: moderation`) 30 | .setTimestamp() 31 | .setColor(color) 32 | if (!args[0]) return message.channel.send(ubhelpEmbed) 33 | if (isNaN(args[0])) return message.channel.send(ubhelpEmbed) 34 | message.guild.fetchBans().then(async bans => { 35 | if (bans.size == 0) return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: Couldn't find any bans for this guild`}}); 36 | let bUser = bans.find(b => b.user.id == userID); 37 | if (!bUser) return message.channel.send({ embed: { color: "#fe6464", description: `${deny} ${message.author}: Couldn't find a ban for: **${userID}**` } }) 38 | await message.guild.members.unban(bUser.user, reason).catch(err => { 39 | console.log(err); 40 | return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: Something went wrong **unbanning** that ID` } }); 41 | }).then(() => { 42 | message.channel.send('👍') 43 | }) 44 | }) 45 | } 46 | } -------------------------------------------------------------------------------- /moderation/unlock.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js') 2 | const { color } = require("../../config.json"); 3 | const { warn } = require('../../emojis.json') 4 | 5 | module.exports = { 6 | name: "unlock", 7 | aliases: ["unlockdown"], 8 | 9 | run: async (client, message, args) => { 10 | if (!message.member.hasPermission("BAN_MEMBERS")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`ban_members\`` } }); 11 | if (!message.guild.me.hasPermission("BAN_MEMBERS")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`ban_members\`` } }); 12 | 13 | const channel = message.mentions.channels.first() || message.channel; 14 | 15 | const lockEmbed = new Discord.MessageEmbed() 16 | .setAuthor(message.author.username, message.author.avatarURL({ 17 | dynamic: true 18 | })) 19 | .setTitle('Command: unlock') 20 | .setDescription('Unlock a channel') 21 | .addField('**Aliases**', 'unlockdown', true) 22 | .addField('**Parameters**', 'channel, reason', true) 23 | .addField('**Information**', `${warn} Ban Members`, true) 24 | .addField('**Usage**', '\`\`\`Syntax: unlock \nExample: unlock #general\`\`\`') 25 | .setFooter(`Module: moderation`) 26 | .setTimestamp() 27 | .setColor(color) 28 | if (!args[0]) return message.channel.send(lockEmbed) 29 | 30 | if (channel.permissionsFor(message.guild.id).has('SEND_MESSAGES') === true) { 31 | const unlockchannelError2 = new Discord.MessageEmbed() 32 | .setDescription(`${warn} ${message.author}: ${channel} is not locked!`) 33 | .setColor('#efa23a'); 34 | 35 | return message.channel.send(unlockchannelError2); 36 | } 37 | 38 | channel.updateOverwrite(message.guild.id, { SEND_MESSAGES: true }); 39 | 40 | const embed = new Discord.MessageEmbed() 41 | .setDescription(`:unlock: ${message.author}: ${channel} unlocked - check permissions if previously hidden`) 42 | .setColor('#efa23a'); 43 | 44 | message.channel.send(embed); 45 | } 46 | 47 | }; -------------------------------------------------------------------------------- /moderation/unmute.js: -------------------------------------------------------------------------------- 1 | const { Message } = require('discord.js') 2 | const Discord = require('discord.js'); 3 | const { color } = require("../../config.json"); 4 | const { warn } = require('../../emojis.json') 5 | 6 | module.exports = { 7 | name: 'unmute', 8 | 9 | /** 10 | * @param {Message} message 11 | */ 12 | 13 | run: async (client, message, args) => { 14 | if (!message.member.hasPermission("MANAGE_MESSAGES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_messages\``}}); 15 | if (!message.guild.me.hasPermission("MANAGE_ROLES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`manage_roles\``}}); 16 | 17 | const unmuteEmbed = new Discord.MessageEmbed() 18 | .setAuthor(message.author.username, message.author.avatarURL({ 19 | dynamic: true 20 | })) 21 | .setTitle('Command: unmute') 22 | .setDescription('Unmutes the mentioned member in all channels') 23 | .addField('**Aliases**', 'N/A', true) 24 | .addField('**Parameters**', 'member', true) 25 | .addField('**Information**', `${warn} Manage Messages`, true) 26 | .addField('**Usage**', '\`\`\`Syntax: unmute \nExample: unmute four#0001\`\`\`') 27 | .setFooter(`Module: moderation`) 28 | .setTimestamp() 29 | .setColor(color) 30 | if (!args[0]) return message.channel.send(unmuteEmbed) 31 | 32 | let user = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.member; 33 | 34 | const Member = message.mentions.members.first() || message.guild.members.cache.get(args[0]) 35 | 36 | if (!Member) return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: I was unable to find a member with that name` } }) 37 | 38 | const role = message.guild.roles.cache.find(r => r.name.toLowerCase() === 'muted'); 39 | 40 | await Member.roles.remove(role) 41 | 42 | message.channel.send({ embed: { color: "RED", description: `${message.author}: **${user.user.tag}** is now unmuted` } }) 43 | } 44 | } -------------------------------------------------------------------------------- /owner/eval.js: -------------------------------------------------------------------------------- 1 | const { Client, Message } = require('discord.js'); 2 | 3 | module.exports = { 4 | name: "eval", 5 | aliases: ["pyk"], 6 | // cooldown: , 7 | 8 | /** * 9 | * @param { Client } client 10 | * @param { Message }message 11 | * @param { String[] } args 12 | */ 13 | 14 | run: async (client, message, args) => { 15 | if (message.author.id != "262429076763967488") return; 16 | 17 | const clean = text => { 18 | if (typeof (text) === "string") 19 | return text.replace(/`/g, "`" + String.fromCharCode(8203)).replace(/@/g, "@" + String.fromCharCode(8203)); 20 | else 21 | return text; 22 | } 23 | try { 24 | const code = args.join(" "); 25 | let evaled = eval(code); 26 | 27 | if (typeof evaled !== "string") 28 | evaled = require("util").inspect(evaled); 29 | 30 | message.channel.send(clean(evaled), { code: "xl" }); 31 | } catch (err) { 32 | message.channel.send(`\`ERROR\` \`\`\`xl\n${clean(err)}\n\`\`\``); 33 | } 34 | } 35 | 36 | } -------------------------------------------------------------------------------- /owner/guilds.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js"); 2 | const ownerid = "262429076763967488"; 3 | 4 | module.exports = { 5 | name: "guilds", 6 | aliases: ["serverlist", "slt"], 7 | category: "owner", 8 | 9 | run: async (client, message, args) => { 10 | if (message.author.id == ownerid) { 11 | if (!message.guild.me.hasPermission("EMBED_LINKS")) 12 | return message.channel 13 | .send("i don't have permissions to send embeds lol") 14 | .then(msg => msg.delete({ timeout: 5000 })); 15 | 16 | let i0 = 0; 17 | let i1 = 10; 18 | let page = 1; 19 | 20 | let description = 21 | `Total Servers - ${client.guilds.cache.size}\n\n` + 22 | client.guilds.cache 23 | .sort((a, b) => b.memberCount - a.memberCount) 24 | .map(r => r) 25 | .map((r, i) => `**${i + 1}** - ${r.name} | ${r.memberCount} Members\nID - ${r.id}`) 26 | .slice(0, 10) 27 | .join("\n\n"); 28 | 29 | let embed = new Discord.MessageEmbed() 30 | .setAuthor(client.user.tag, client.user.displayAvatarURL({ dynamic: true })) 31 | 32 | .setColor("7fa5a8") 33 | .setFooter(`Page - ${page}/${Math.ceil(client.guilds.cache.size / 10)}`) 34 | .setDescription(description); 35 | 36 | let msg = await message.channel.send(embed); 37 | 38 | await msg.react("⬅"); 39 | await msg.react("⏹️"); 40 | await msg.react("➡"); 41 | 42 | let collector = msg.createReactionCollector( 43 | (reaction, user) => user.id === message.author.id 44 | ); 45 | 46 | collector.on("collect", async (reaction, user) => { 47 | if (reaction._emoji.name === "⬅") { 48 | i0 = i0 - 10; 49 | i1 = i1 - 10; 50 | page = page - 1; 51 | 52 | if (i0 + 1 < 0) { 53 | console.log(i0) 54 | return msg.delete(); 55 | } 56 | if (!i0 || !i1) { 57 | return msg.delete(); 58 | } 59 | 60 | description = 61 | `Total Servers - ${client.guilds.cache.size}\n\n` + 62 | client.guilds.cache 63 | .sort((a, b) => b.memberCount - a.memberCount) 64 | .map(r => r) 65 | .map( 66 | (r, i) => `**${i + 1}** - ${r.name} | ${r.memberCount} Members\nID - ${r.id}`) 67 | .slice(i0, i1) 68 | .join("\n\n"); 69 | 70 | embed 71 | .setFooter( 72 | `Page - ${page}/${Math.round(client.guilds.cache.size / 10 + 1)}` 73 | ) 74 | .setDescription(description); 75 | 76 | msg.edit(embed); 77 | } 78 | 79 | if (reaction._emoji.name === "➡") { 80 | i0 = i0 + 10; 81 | i1 = i1 + 10; 82 | page = page + 1; 83 | 84 | if (i1 > client.guilds.cache.size + 10) { 85 | return msg.delete(); 86 | } 87 | if (!i0 || !i1) { 88 | return msg.delete(); 89 | } 90 | 91 | description = 92 | `Total Servers - ${client.guilds.cache.size}\n\n` + 93 | client.guilds.cache 94 | .sort((a, b) => b.memberCount - a.memberCount) 95 | .map(r => r) 96 | .map( 97 | (r, i) => `**${i + 1}** - ${r.name} | ${r.memberCount} Members\nID - ${r.id}`) 98 | .slice(i0, i1) 99 | .join("\n\n"); 100 | 101 | embed 102 | .setFooter( 103 | `Page - ${page}/${Math.round(client.guilds.cache.size / 10 + 1)}` 104 | ) 105 | .setDescription(description); 106 | 107 | msg.edit(embed); 108 | } 109 | 110 | if (reaction._emoji.name === "⏹️") { 111 | return msg.delete(); 112 | } 113 | 114 | await reaction.users.remove(message.author.id); 115 | }); 116 | } else { 117 | return; 118 | } 119 | } 120 | }; -------------------------------------------------------------------------------- /owner/leave.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: "leave", 3 | category: "owner", 4 | 5 | run: async (client, message, args) => { 6 | if (message.author.id === '262429076763967488') { 7 | client.guilds.fetch(args[0]).then(guild => guild.leave().catch(console.error).then(message.channel.send({ embed: { color: "#a3eb7b", description: `<:approve:853434679738105897> ${message.author}: Successfully left **${guild.name}**` } }))) 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /owner/portal.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: "portal", 3 | folder: "owner", 4 | props: { 5 | aliases: [ 6 | "createportal", 7 | "transport", 8 | "portalcreate", 9 | ], 10 | args: { 11 | need: 1, 12 | prompt: "which guild should I create a portal to?", 13 | usage: { 14 | format: "{id}", 15 | examples: ["778883981982"] 16 | } 17 | } 18 | }, 19 | about: "Creates a server portal.", 20 | 21 | async run(client, message, args) { 22 | if (message.author.id !== '262429076763967488') return; 23 | 24 | const guild = client.guilds.cache 25 | .get(args[0]); 26 | 27 | if (guild) { 28 | guild.channels.cache 29 | .filter(channel => channel.type !== "category").first() 30 | .createInvite( 31 | false, 32 | 84600, 33 | 0, 34 | false 35 | ).then(invite => message.channel.send(`discord.gg/${invite.code}`)); 36 | } else { 37 | return message.channel.send("that guild is invalid"); 38 | }; 39 | } 40 | }; -------------------------------------------------------------------------------- /owner/reload.js: -------------------------------------------------------------------------------- 1 | const glob = require('glob') 2 | const ownerid = '262429076763967488'; 3 | 4 | module.exports = { 5 | name: "reload", 6 | 7 | run: async (client, message, args) => { 8 | if (message.author.id !== ownerid) return; 9 | client.commands.sweep(() => true) 10 | glob(`${__dirname}/../**/*.js`, async (err, filePaths) => { 11 | if (err) message.react("868562165093777468") 12 | if (err) return console.log(err) 13 | filePaths.forEach((file) => { 14 | delete require.cache[require.resolve(file)] 15 | 16 | const pull = require(file) 17 | 18 | if (pull.name) { 19 | // console.log(`Reloaded ${pull.name} (cmd)`) 20 | client.commands.set(pull.name, pull) 21 | } 22 | 23 | if (pull.aliases && Array.isArray(pull.aliases)) { 24 | pull.aliases.forEach((alias) => { 25 | client.aliases.set(alias, pull.name) 26 | }) 27 | } 28 | }) 29 | message.react("868562133850394675") 30 | }) 31 | } 32 | } -------------------------------------------------------------------------------- /owner/status.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: "status", 3 | 4 | run: async (client, message, args) => { 5 | 6 | if (message.author.id !== '262429076763967488') return; 7 | 8 | let status = args.join(" ") 9 | if (!status) return message.channel.send('You need to input **status**') 10 | client.user.setPresence({ 11 | activity: { 12 | name: status, 13 | type: 0, 14 | } 15 | }) 16 | .then(message.channel.send(`Set the bot status to **${status}**`)) 17 | .catch(err => { 18 | return message.channel.send(`There was an error (${err})`) 19 | }) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bleed", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "bleed.js", 6 | "dependencies": { 7 | "@haileybot/sanitize-role-mentions": "^1.2.3", 8 | "app-store-scraper": "^0.17.0", 9 | "ascii-table": "^0.0.9", 10 | "axios": "^0.21.1", 11 | "better-sqlite3": "^7.4.1", 12 | "bing-translate-api": "^2.2.0", 13 | "canvas": "^2.8.0", 14 | "canvas-senpai": "^2.0.3", 15 | "comma-number": "^2.0.2", 16 | "common-tags": "^1.8.0", 17 | "discord-music-player": "^7.2.0", 18 | "discord.js": "^12.5.3", 19 | "discord.js-pagination": "^1.0.3", 20 | "g-i-s": "^2.1.6", 21 | "google": "^2.1.0", 22 | "got": "^11.8.2", 23 | "graceful-fs": "^4.2.6", 24 | "i": "^0.3.6", 25 | "js-yaml": "^4.1.0", 26 | "lowdb": "^1.0.0", 27 | "moment": "^2.29.1", 28 | "ms": "^2.1.3", 29 | "node-superfetch": "^0.2.3", 30 | "novelcovid": "^3.0.0", 31 | "npm": "^7.19.1", 32 | "parse-ms": "^2.1.0", 33 | "pretty-ms": "^7.0.1", 34 | "quick.db": "^7.1.3", 35 | "request-promise": "^4.2.6", 36 | "request-promise-native": "^1.0.9", 37 | "superagent": "^6.1.0", 38 | "twemoji-parser": "^13.0.0", 39 | "twitter-api.js": "0.0.12", 40 | "uninstall": "0.0.0", 41 | "urban": "^0.3.2", 42 | "user-instagram": "^2.1.9", 43 | "weather-js": "^2.0.0", 44 | "wokcommands": "^1.3.6" 45 | }, 46 | "devDependencies": {}, 47 | "scripts": { 48 | "test": "echo \"Error: no test specified\" && exit 1" 49 | }, 50 | "keywords": [], 51 | "author": "", 52 | "license": "ISC" 53 | } 54 | -------------------------------------------------------------------------------- /utility/afk.js: -------------------------------------------------------------------------------- 1 | const db = require('quick.db') 2 | const Discord = require('discord.js'); 3 | 4 | module.exports = { 5 | name : 'afk', 6 | category: "utility", 7 | usage: "afk", 8 | 9 | run : async(client, message, args) => { 10 | const content = args.join(" ") ? args.join(' ') : "AFK" 11 | await db.set(`afk-${message.author.id}+${message.guild.id}`, content) 12 | 13 | const afkEmbed = new Discord.MessageEmbed() 14 | .setColor("#a3eb7b") 15 | .setDescription(`<:approve:853434679738105897> ${message.author}: You're now AFK with the status: **${content}**`) 16 | message.channel.send(afkEmbed) 17 | } 18 | } -------------------------------------------------------------------------------- /utility/appstore.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js') 2 | const AppleStore = require('app-store-scraper') 3 | const Discord = require('discord.js'); 4 | const { color } = require("../../config.json"); 5 | 6 | module.exports = { 7 | name: 'appstore', 8 | 9 | run: async (client, message, args) => { 10 | let mentionedMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 11 | if (!mentionedMember) mentionedMember = message.member; 12 | 13 | const appStoreEmbed = new Discord.MessageEmbed() 14 | .setAuthor(message.author.username, message.author.avatarURL({ 15 | dynamic: true 16 | })) 17 | .setTitle('Command: appstore') 18 | .setDescription('Search an app on the appstore') 19 | .addField('**Aliases**', 'N/A', true) 20 | .addField('**Parameters**', 'search', true) 21 | .addField('**Information**', `N/A`, true) 22 | .addField('**Usage**', '\`\`\`Syntax: appstore \nExample: appstore Discord\`\`\`') 23 | .setFooter(`Module: fun`) 24 | .setTimestamp() 25 | .setColor(color) 26 | if (!args[0]) return message.channel.send(appStoreEmbed) 27 | 28 | let img = 'https://cdn4.iconfinder.com/data/icons/miu-black-social-2/60/app_store-512.png' 29 | 30 | AppleStore.search({ 31 | term: args.join(' '), 32 | num: 1, 33 | }).then((data) => { 34 | let AppInfo 35 | 36 | try { 37 | AppInfo = JSON.parse(JSON.stringify(data[0])) 38 | } catch (error) { 39 | return message.channel.send(`No App With Name **${appname}** Found`) 40 | } 41 | 42 | let description = AppInfo.description.length > 200 ? `${AppInfo.description.substr(0, 200)}...` : AppInfo.description 43 | let price = AppInfo.free ? 'Free' : `$${AppInfo.price}` 44 | let rating = AppInfo.score.toFixed(1) 45 | 46 | const embed = new MessageEmbed() 47 | .setAuthor(message.author.username, message.author.avatarURL({ 48 | dynamic: true 49 | })) 50 | .setTitle(`**${AppInfo.title}**`) 51 | .setThumbnail(AppInfo.icon) 52 | .setURL(AppInfo.url) 53 | .setTimestamp() 54 | .setColor(mentionedMember.displayHexColor || color) 55 | .setDescription(description) 56 | .addField(`**Price**`, price, true) 57 | .addField(`**Developer**`, AppInfo.developer, true) 58 | .addField(`**Rating**`, rating, true) 59 | .setFooter(`App Store Results`, img) 60 | message.channel.send(embed) 61 | }) 62 | } 63 | } -------------------------------------------------------------------------------- /utility/avatar.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | 4 | module.exports = { 5 | name: "avatar", 6 | aliases: ["av"], 7 | 8 | run: async (client, message, args) => { 9 | message.channel.startTyping(); 10 | 11 | let mentionedMember = await message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.guild.members.cache.find(r => r.displayName.toLowerCase() === args.join(' ').toLocaleLowerCase()) || args[0] || message.member; 12 | 13 | const user = await client.users.fetch(client.users.resolveID(mentionedMember)).catch(() => null); 14 | if (!user) user = message.author; 15 | 16 | const embed = new Discord.MessageEmbed() 17 | .setAuthor(message.author.username, message.author.avatarURL({ 18 | dynamic: true 19 | })) 20 | .setTitle(user.username + "'s avatar") 21 | .setURL(user.displayAvatarURL({ format: "png", dynamic: true, size: 2048 })) 22 | .setImage(user.displayAvatarURL({ format: "png", dynamic: true, size: 2048 })) 23 | .setColor(mentionedMember.displayHexColor || color) 24 | 25 | message.channel.stopTyping(true); 26 | message.channel.send(embed); 27 | } 28 | } -------------------------------------------------------------------------------- /utility/createembed.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | const { warn } = require('../../emojis.json') 4 | 5 | module.exports = { 6 | name: "createembed", 7 | aliases: ["ce", "embed"], 8 | 9 | run: async (client, message, args) => { 10 | if (!message.member.hasPermission("MANAGE_MESSAGES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_messages\`` } }); 11 | 12 | const ceEmbed = new Discord.MessageEmbed() 13 | .setAuthor(message.author.username, message.author.avatarURL({ 14 | dynamic: true 15 | })) 16 | .setTitle('Command: createembed') 17 | .setDescription('Create your own embed\n**Documentation found [h̶e̶r̶e̶](https://google.com/)**') 18 | .addField('**Aliases**', 'ce, embed', true) 19 | .addField('**Parameters**', 'arg', true) 20 | .addField('**Information**', `${warn} Manage Messages`, true) 21 | .addField('**Usage**', '\`\`\`Syntax: createembed \nExample: createembed {"title": "hi"}\`\`\`') 22 | .setFooter(`Module: misc`) 23 | .setTimestamp() 24 | .setColor(color) 25 | if (!args[0]) return message.channel.send(ceEmbed) 26 | try { 27 | const json = JSON.parse(args.join(' ')) 28 | const { text = '' } = json 29 | 30 | if ({}.hasOwnProperty.call(json, "thumbnail")) { 31 | json.thumbnail = { url: json.thumbnail }; 32 | } 33 | if ({}.hasOwnProperty.call(json, "image")) { 34 | json.image = { url: json.image }; 35 | } 36 | 37 | message.channel.send(text, { 38 | embed: json 39 | }) 40 | } catch (e) { 41 | message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: ${e.message}` } }); 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /utility/emojiadd.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | const { approve } = require('../../emojis.json') 4 | const { warn } = require('../../emojis.json') 5 | 6 | module.exports = { 7 | name: "emojiadd", 8 | aliases: ["copy"], 9 | 10 | run: (client, message, args) => { 11 | if (!message.member.hasPermission("MANAGE_EMOJIS")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_emojis\`` } }); 12 | if (!message.guild.me.hasPermission("MANAGE_EMOJIS")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`manage_emojis\`` } }); 13 | 14 | if (!args[0]) { 15 | const emojiEmbed = new Discord.MessageEmbed() 16 | .setAuthor(message.author.username, message.author.avatarURL({ 17 | dynamic: true 18 | })) 19 | .setTitle('Command: emojiadd') 20 | .setDescription('Downloads emote and adds to server') 21 | .addField('**Aliases**', 'copy', true) 22 | .addField('**Parameters**', 'emoji, characters', true) 23 | .addField('**Information**', `${warn} Manage Emojis`, true) 24 | .addField('**Usage**', '\`\`\`Syntax: emojiadd (emoji or url)\nExample: emojiadd cdn.discordapp.com/emojis/768...png\`\`\`') 25 | .setFooter(`Module: information`) 26 | .setTimestamp() 27 | .setColor(color) 28 | if (!args[0]) return message.channel.send(emojiEmbed) 29 | } 30 | for (const emojis of args) { 31 | const getEmoji = Discord.Util.parseEmoji(emojis); 32 | 33 | if (getEmoji.id) { 34 | const emojiExt = getEmoji.animated ? '.gif' : '.png'; 35 | const emojiURL = `https://cdn.discordapp.com/emojis/${getEmoji.id + emojiExt}`; 36 | message.guild.emojis 37 | .create(emojiURL, getEmoji.name) 38 | .then((emoji) => 39 | message.channel.send({ embed: { color: "#a3eb7b", description: `${approve} ${message.author}: Added \`:${emoji.name}:\` to this guild` } }) 40 | ); 41 | } 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /utility/firstmessage.js: -------------------------------------------------------------------------------- 1 | const { Client, Message, MessageEmbed } = require("discord.js"); 2 | const { color } = require("../../config.json"); 3 | 4 | module.exports = { 5 | name: "firstmessage", 6 | aliases: ["firstmsg"], 7 | /** 8 | * @param {Client} client 9 | * @param {Message} message 10 | * @param {String[]} args 11 | */ 12 | run: async (client, message, args) => { 13 | let mentionedMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 14 | if (!mentionedMember) mentionedMember = message.member; 15 | 16 | const fetchMessages = await message.channel.messages.fetch({ 17 | after: 1, 18 | limit: 1, 19 | }); 20 | const msg = fetchMessages.first(); 21 | 22 | message.channel.send( 23 | new MessageEmbed() 24 | .setAuthor(`${message.author.username}`, message.author.displayAvatarURL({ 25 | dynamic: true, 26 | size: 2048 27 | })) 28 | .setTitle(`First Messsage in #${message.channel.name}`) 29 | .setColor(mentionedMember.displayHexColor || color) 30 | .setURL(msg.url) 31 | .setThumbnail(msg.author.displayAvatarURL({ dynamic: true, format: "png", size: 2048 })) 32 | .setDescription("**Content:** " + msg.content) 33 | .addField("**Author**", msg.author, true) 34 | .addField('**Message ID**', msg.id, true) 35 | .addField('**Sent At**', message.createdAt.toLocaleDateString(), true) 36 | ); 37 | }, 38 | }; -------------------------------------------------------------------------------- /utility/google.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const google = require('google'); 3 | const { color } = require("../../config.json"); 4 | 5 | module.exports = { 6 | name: "google", 7 | aliases: ["g"], 8 | category: "utility", 9 | 10 | run: async (client, message, args) => { 11 | let mentionedMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 12 | if (!mentionedMember) mentionedMember = message.member; 13 | 14 | message.channel.startTyping(); 15 | google.resultsPerPage = 3; 16 | 17 | google(args.join("+"), function (err, res) { 18 | if (err) message.channel.send({ embed: { color: "#6495ED", description: `:mag_right: ${message.author}: No results found were found for **${args.join(' ')}**` } }); 19 | 20 | let link = res.links[0]; 21 | let googleIcon = 'https://maxcdn.icons8.com/Share/icon/Logos//google_logo1600.png'; 22 | 23 | const embed = new Discord.MessageEmbed() 24 | .setColor(mentionedMember.displayHexColor || color) 25 | .setAuthor(`${message.author.username}`, message.author.displayAvatarURL({ 26 | dynamic: true, 27 | size: 2048 28 | })) 29 | .setTitle(`Search Results for ${args.join(' ')}`) 30 | .setFooter(googleIcon) 31 | .addField(`**${link.title} - ${link.href}**`, link.description) 32 | 33 | message.channel.stopTyping(true); 34 | message.channel.sendEmbed(embed).catch(e => { 35 | message.channel.sendMessage("There was an error!\n" + e); 36 | }); 37 | }); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /utility/guildbanner.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | 4 | module.exports = { 5 | name: "guildbanner", 6 | aliases: ["gbanner", "serverbanner"], 7 | category: "utility", 8 | 9 | run: async (client, message, args) => { 10 | let mentionedMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 11 | if (!mentionedMember) mentionedMember = message.member; 12 | 13 | const bannerEmbed = new Discord.MessageEmbed() 14 | 15 | .setColor(mentionedMember.displayHexColor || color) 16 | .setTitle(`${message.guild.name}'s guild banner`) 17 | .setImage(message.guild.bannerURL({ 18 | dynamic: true, 19 | format: "png", 20 | size: 2048 21 | })) 22 | 23 | return message.channel.send(bannerEmbed) 24 | } 25 | } -------------------------------------------------------------------------------- /utility/guildicon.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | 4 | module.exports = { 5 | name: "guildicon", 6 | aliases: ["gicon", "servericon"], 7 | 8 | run: async (client, message, args) => { 9 | let mentionedMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 10 | if (!mentionedMember) mentionedMember = message.member; 11 | 12 | const iconEmbed = new Discord.MessageEmbed() 13 | 14 | .setColor(mentionedMember.displayHexColor || color) 15 | .setTitle(`${message.guild.name}'s guild icon`) 16 | .setImage(message.guild.iconURL({ 17 | dynamic: true, 18 | format: "png", 19 | size: 2048 20 | })) 21 | 22 | return message.channel.send(iconEmbed) 23 | } 24 | } -------------------------------------------------------------------------------- /utility/jumbo.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js"); 2 | const { parse } = require("twemoji-parser"); 3 | const { color } = require("../../config.json"); 4 | const { warn } = require('../../emojis.json') 5 | 6 | module.exports = { 7 | name: "jumbo", 8 | aliases: ["e", "enlarge", "enlargen"], 9 | 10 | run: async (client, message, args) => { 11 | let user = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.member; 12 | 13 | const emoji = args[0]; 14 | if (!args[0]) { 15 | const enlargeEmbed = new Discord.MessageEmbed() 16 | .setAuthor(message.author.username, message.author.avatarURL({ 17 | dynamic: true 18 | })) 19 | .setTitle('Command: jumbo') 20 | .setDescription('Returns a large emoji or server emote') 21 | .addField('**Aliases**', 'e, enlarge, enlargen', true) 22 | .addField('**Parameters**', 'emoji, characters', true) 23 | .addField('**Information**', `N/A`, true) 24 | .addField('**Usage**', '\`\`\`Syntax: jumbo \nExample: jumbo 🔥\`\`\`') 25 | .setFooter(`Module: misc`) 26 | .setTimestamp() 27 | .setColor(color) 28 | if (!args[0]) return message.channel.send(enlargeEmbed) 29 | } 30 | let custom = Discord.Util.parseEmoji(emoji); 31 | const embed = new Discord.MessageEmbed() 32 | .setColor(user.displayHexColor || color); 33 | 34 | if (custom.id) { 35 | embed.setImage(`https://cdn.discordapp.com/emojis/${custom.id}.${custom.animated ? "gif" : "png"}`); 36 | return message.channel.send(embed); 37 | } 38 | else { 39 | let parsed = parse(emoji, { assetType: "png" }); 40 | if (!parsed[0]) return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: You must input a **valid** emoji` } }); 41 | 42 | embed.setImage(parsed[0].url); 43 | return message.channel.send(embed); 44 | } 45 | 46 | } 47 | } -------------------------------------------------------------------------------- /utility/pin.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | const { warn } = require('../../emojis.json') 4 | const { deny } = require('../../emojis.json') 5 | 6 | module.exports = { 7 | name: "pin", 8 | 9 | run: async (client, message, args) => { 10 | if (!message.member.hasPermission("MANAGE_MESSAGES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_messages\``}}); 11 | if (!message.guild.me.hasPermission("MANAGE_MESSAGES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`manage_messages\``}}); 12 | 13 | const pinID = args.join(" "); 14 | 15 | const embed = new Discord.MessageEmbed() 16 | .setAuthor(message.author.username, message.author.avatarURL({ 17 | dynamic: true 18 | })) 19 | .setTitle('Command: pin') 20 | .setDescription('Pin any recent message by ID') 21 | .addField('**Aliases**', 'N/A', true) 22 | .addField('**Parameters**', 'message', true) 23 | .addField('**Information**', `${warn} Manage Messages`, true) 24 | .addField('**Usage**', '\`\`\`Syntax: pin (messageid)\`\`\`') 25 | .setFooter(`Module: servers`) 26 | .setTimestamp() 27 | .setColor(color) 28 | if (!args[0]) return message.channel.send(embed) 29 | 30 | message.channel.messages.fetch(pinID).then(d => { 31 | d.pin().catch(err => { 32 | message.channel.send({ embed: { color: "#e74c3c", description: `${deny} ${message.author}: An error has occurred! Failed to unpin message` } }) 33 | console.log(err) 34 | }) 35 | }).catch(() => { 36 | message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: \`${pinID}\` is not a valid message id` } }) 37 | }) 38 | } 39 | } -------------------------------------------------------------------------------- /utility/poll.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | const { warn } = require('../../emojis.json') 4 | 5 | module.exports = { 6 | name: "poll", 7 | aliases: ["createpoll"], 8 | category: "utility", 9 | 10 | run: async(client, message, args) => { 11 | let user = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.member; 12 | 13 | if (!message.member.hasPermission("MANAGE_MESSAGES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_messages\``}}); 14 | if (!message.guild.me.hasPermission("EMBED_LINKS")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`embed_links\``}}); 15 | 16 | const pollEmbed = new Discord.MessageEmbed() 17 | .setAuthor(message.author.username, message.author.avatarURL({ 18 | dynamic: true 19 | })) 20 | .setTitle('Command: poll') 21 | .setDescription('Create a poll') 22 | .addField('**Aliases**', 'N/A', true) 23 | .addField('**Parameters**', 'question', true) 24 | .addField('**Information**', `${warn} Embed Links`, true) 25 | .addField('**Usage**', '\`\`\`Syntax: poll \nExample: poll Am I gay?\`\`\`') 26 | .setFooter(`Module: misc`) 27 | .setTimestamp() 28 | .setColor(color) 29 | if(!args[0]) return message.channel.send(pollEmbed); 30 | let msg = args.slice(0).join(' '); 31 | 32 | let embed = new Discord.MessageEmbed() 33 | .setColor(user.displayHexColor || color) 34 | .setTitle(`__**Poll**__`) 35 | .setDescription(`${msg}`) 36 | .setAuthor(`Poll created by: ${message.author.username}`, message.author.displayAvatarURL({ 37 | dynamic: true, 38 | size: 2048 39 | })) 40 | .setTimestamp() 41 | .setFooter(`${message.guild.me.displayName}`); 42 | 43 | message.delete(); 44 | 45 | message.channel.send(embed).then(messageReaction => { 46 | messageReaction.react('👍'); 47 | messageReaction.react('👎'); 48 | }); 49 | } 50 | } -------------------------------------------------------------------------------- /utility/remind.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | const { warn } = require('../../emojis.json') 4 | 5 | module.exports = { 6 | name: "remind", 7 | aliases: ["reminder", "rm"], 8 | category: "utility", 9 | 10 | run: async (client, message, args) => { 11 | const remindEmbed = new Discord.MessageEmbed() 12 | .setAuthor(message.author.username, message.author.avatarURL({ 13 | dynamic: true 14 | })) 15 | .setTitle('Command: remind') 16 | .setDescription('Get reminders for a duration set about whatever you choose') 17 | .addField('**Aliases**', 'reminder, rm', true) 18 | .addField('**Parameters**', 'time, text', true) 19 | .addField('**Information**', `N/A`, true) 20 | .addField('**Usage**', '\`\`\`Syntax: remind (duration) \nExample: remind 1h To get food\`\`\`') 21 | .setFooter(`Module: moderation`) 22 | .setTimestamp() 23 | .setColor(color) 24 | if (!args[0]) return message.channel.send(remindEmbed) 25 | 26 | var time = args[0]; 27 | var reminder = args.splice(1).join(' '); 28 | 29 | if (!time) return message.channel.send('so you want me to remind you nothing?'); 30 | if (!reminder) return message.channel.send('so you want me to remind you nothing?'); 31 | 32 | // This will not work if the bot is restarted or stopped 33 | 34 | time = await time.toString(); 35 | 36 | if (time.indexOf('s') !== -1) { // Seconds 37 | var timesec = await time.replace(/s.*/, ''); 38 | var timems = await timesec * 1000; 39 | } else if (time.indexOf('m') !== -1) { // Minutes 40 | var timemin = await time.replace(/m.*/, ''); 41 | timems = await timemin * 60 * 1000; 42 | } else if (time.indexOf('h') !== -1) { // Hours 43 | var timehour = await time.replace(/h.*/, ''); 44 | timems = await timehour * 60 * 60 * 1000; 45 | } else if (time.indexOf('d') !== -1) { // Days 46 | var timeday = await time.replace(/d.*/, ''); 47 | timems = await timeday * 60 * 60 * 24 * 1000; 48 | } else { 49 | return message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: The time must be in the format of **[s/m/h/d]**` } }); 50 | } 51 | 52 | message.channel.send(`ok ill remind u in ${time}`); 53 | 54 | setTimeout(function () { 55 | message.author.send({ embed: { color: "#6495ED", text: `${message.author}`, description: `:alarm_clock: You wanted me to remind you to: **${reminder}** (\`${time}\`)` } }); 56 | }, parseInt(timems)); 57 | 58 | } 59 | } -------------------------------------------------------------------------------- /utility/setbanner.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js') 2 | const { approve } = require('../../emojis.json') 3 | const { warn } = require('../../emojis.json') 4 | const { color } = require('../../config.json') 5 | const { deny } = require('../../emojis.json') 6 | 7 | module.exports = { 8 | name: "setbanner", 9 | 10 | run: async (client, message, args) => { 11 | if (!message.member.hasPermission("MANAGE_GUILD")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_guild\`` } }); 12 | if (!message.guild.me.hasPermission("MANAGE_GUILD")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`manage_guild\`` } }); 13 | if (!message.guild.features.includes("BANNER")) return message.channel.send({ embed: { color: "fe6464", description: `${deny} ${message.author}: This command requires: Guild \`Level 2\``}}) 14 | let banner 15 | 16 | const embed = new Discord.MessageEmbed() 17 | .setAuthor(message.author.username, message.author.avatarURL({ 18 | dynamic: true 19 | })) 20 | .setTitle('Command: setbanner') 21 | .setDescription('Set a new guild banner') 22 | .addField('**Aliases**', 'N/A', true) 23 | .addField('**Parameters**', 'url', true) 24 | .addField('**Information**', `${warn} Manage Guild`, true) 25 | .addField('**Usage**', '\`\`\`Syntax: setbanner (url)\nExample: setbanner media.discordapp.com/attachments/871...png\`\`\`') 26 | .setFooter(`Module: servers`) 27 | .setTimestamp() 28 | .setColor(color) 29 | if (!banner) return message.channel.send(embed) 30 | 31 | if (message.attachments.first()) { 32 | banner = message.attachments.first().url 33 | message.guild.setBanner(banner).then(() => { 34 | message.channel.send({ embed: { color: "a3eb7b", description: `${approve} ${message.author}: Successfully set the guild banner to [**this image**](${banner})` } }) 35 | }) 36 | } else { 37 | banner = args[0] 38 | if (!banner) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You must provide a **url or attachment** to set as the guild banner` } }) 39 | message.guild.setBanner(banner).then(() => { 40 | message.channel.send({ embed: { color: "a3eb7b", description: `${approve} ${message.author}: Successfully set the guild banner to [**this image**](${banner})` } }) 41 | }) 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /utility/seticon.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js') 2 | const { approve } = require('../../emojis.json') 3 | const { warn } = require('../../emojis.json') 4 | const { color } = require('../../config.json') 5 | 6 | module.exports = { 7 | name: "seticon", 8 | 9 | run: async (client, message, args) => { 10 | if (!message.member.hasPermission("MANAGE_GUILD")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_guild\`` } }); 11 | if (!message.guild.me.hasPermission("MANAGE_GUILD")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`manage_guild\`` } }); 12 | let icon = args[0] 13 | const embed = new Discord.MessageEmbed() 14 | .setAuthor(message.author.username, message.author.avatarURL({ 15 | dynamic: true 16 | })) 17 | .setTitle('Command: seticon') 18 | .setDescription('Set a new guild icon') 19 | .addField('**Aliases**', 'N/A', true) 20 | .addField('**Parameters**', 'url', true) 21 | .addField('**Information**', `${warn} Manage Guild`, true) 22 | .addField('**Usage**', '\`\`\`Syntax: seticon (url)\nExample: seticon media.discordapp.com/attachments/871...png\`\`\`') 23 | .setFooter(`Module: servers`) 24 | .setTimestamp() 25 | .setColor(color) 26 | if (!icon) return message.channel.send(embed) 27 | 28 | if (message.attachments.first()) { 29 | icon = message.attachments.first().url 30 | message.guild.setIcon(icon).then(() => { 31 | message.channel.send({ embed: { color: "a3eb7b", description: `${approve} ${message.author}: Successfully set the guild icon to [**this image**](${icon})` } }) 32 | }) 33 | } else { 34 | if (!icon) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You must provide a **url or attachment** to set as the guild icon` } }) 35 | message.guild.setIcon(icon).then(() => { 36 | message.channel.send({ embed: { color: "a3eb7b", description: `${approve} ${message.author}: Successfully set the guild icon to [**this image**](${icon})` } }) 37 | }) 38 | } 39 | } 40 | } -------------------------------------------------------------------------------- /utility/setsplash.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js') 2 | const { approve } = require('../../emojis.json') 3 | const { warn } = require('../../emojis.json') 4 | const { color } = require('../../config.json') 5 | const { deny } = require('../../emojis.json') 6 | 7 | module.exports = { 8 | name: "setsplash", 9 | 10 | run: async (client, message, args) => { 11 | if (!message.member.hasPermission("MANAGE_GUILD")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_guild\`` } }); 12 | if (!message.guild.me.hasPermission("MANAGE_GUILD")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`manage_guild\`` } }); 13 | if (!message.guild.features.includes("SPLASH")) return message.channel.send({ embed: { color: "fe6464", description: `${deny} ${message.author}: This command requires: Guild \`Level 1\``}}) 14 | let splash 15 | 16 | const embed = new Discord.MessageEmbed() 17 | .setAuthor(message.author.username, message.author.avatarURL({ 18 | dynamic: true 19 | })) 20 | .setTitle('Command: setsplash') 21 | .setDescription('Set a new guild splash') 22 | .addField('**Aliases**', 'N/A', true) 23 | .addField('**Parameters**', 'url', true) 24 | .addField('**Information**', `${warn} Manage Guild`, true) 25 | .addField('**Usage**', '\`\`\`Syntax: setsplash (url)\nExample: setsplash media.discordapp.com/attachments/871...png\`\`\`') 26 | .setFooter(`Module: servers`) 27 | .setTimestamp() 28 | .setColor(color) 29 | if (!splash) return message.channel.send(embed) 30 | 31 | if (message.attachments.first()) { 32 | splash = message.attachments.first().url 33 | message.guild.setSplash(splash).then(() => { 34 | message.channel.send({ embed: { color: "a3eb7b", description: `${approve} ${message.author}: Successfully set the guild splash to [**this image**](${splash})` } }) 35 | }) 36 | } else { 37 | splash = args[0] 38 | if (!splash) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You must provide a **url or attachment** to set as the guild splash` } }) 39 | message.guild.setSplash(splash).then(() => { 40 | message.channel.send({ embed: { color: "a3eb7b", description: `${approve} ${message.author}: Successfully set the guild splash to [**this image**](${splash})` } }) 41 | }) 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /utility/spotify.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const convert = require('parse-ms'); 3 | 4 | module.exports = { 5 | name: "spotify", 6 | aliases: ["sp"], 7 | category: "utility", 8 | 9 | run: async (client, message, args) => { 10 | let user; 11 | if (message.mentions.users.first()) { 12 | user = message.mentions.users.first(); 13 | } else { 14 | user = message.author; 15 | } 16 | 17 | let status; 18 | if (user.presence.activities.length === 1) status = user.presence.activities[0]; 19 | else if (user.presence.activities.length > 1) status = user.presence.activities[1]; 20 | 21 | if (user.presence.activities.length === 0 || status.name !== "Spotify" && status.type !== "LISTENING") { 22 | const spotifyEmbed = new Discord.MessageEmbed() 23 | .setColor("#efa23a") 24 | .setDescription(`<:warn:823958404455989288> ${message.author}: User isn't playing anything on spotify`) 25 | return message.channel.send(spotifyEmbed); 26 | } 27 | 28 | if (status !== null && status.type === "LISTENING" && status.name === "Spotify" && status.assets !== null) { 29 | let image = `https://i.scdn.co/image/${status.assets.largeImage.slice(8)}`, 30 | url = `https://open.spotify.com/track${status.syncID}`, 31 | name = status.details, 32 | artist = status.state, 33 | album = status.assets.largeText, 34 | timeStart = status.timestamps.start, 35 | timeEnd = status.timestamps.end, 36 | timeConvert = convert(timeEnd - timeStart); 37 | 38 | let minutes = timeConvert.minutes < 10 ? `0${timeConvert.minutes}` : timeConvert.minutes; 39 | let seconds = timeConvert.seconds < 10 ? `0${timeConvert.seconds}` : timeConvert.seconds; 40 | let time = `${minutes}:${seconds}`; 41 | 42 | const embed = new Discord.MessageEmbed() 43 | .setAuthor("Spotify", "https://www.freepnglogos.com/uploads/spotify-logo-png/file-spotify-logo-png-4.png") 44 | .setTitle(`**${name}**`) 45 | .setColor("GREEN") 46 | .setFooter(message.author.username, message.author.avatarURL({ 47 | dynamic: true 48 | })) 49 | .setTimestamp() 50 | .setThumbnail(image) 51 | .addField("**Album**", album, true) 52 | .addField("**Artist**", artist, true) 53 | .addField("**Duration**", time, true) 54 | .addField("**Listen Now On Spotify**", `[${artist} - ${name}](${url})`, true) 55 | 56 | return message.channel.send(embed) 57 | } 58 | } 59 | } -------------------------------------------------------------------------------- /utility/twitter.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { stripIndents } = require('common-tags'); 3 | const twitter = require('twitter-api.js'); 4 | const { color } = require("../../config.json"); 5 | const { warn } = require('../../emojis.json') 6 | 7 | module.exports = { 8 | name: "twitter", 9 | aliases: ['twit'], 10 | 11 | run: async (client, message, args) => { 12 | let user = args[0]; 13 | const twitterEmbed = new Discord.MessageEmbed() 14 | .setAuthor(message.author.username, message.author.avatarURL({ 15 | dynamic: true 16 | })) 17 | .setTitle('Command: twitter') 18 | .setDescription('Check a twitter account profile') 19 | .addField('**Aliases**', 'twit', true) 20 | .addField('**Parameters**', 'handle', true) 21 | .addField('**Information**', `N/A`, true) 22 | .addField('**Usage**', '\`\`\`Syntax: twitter (subcommand) \nExample: twitter @fourr\`\`\`') 23 | .setFooter(`Module: information`) 24 | .setTimestamp() 25 | .setColor(color) 26 | if (!args[0]) return message.channel.send(twitterEmbed) 27 | 28 | try { 29 | const body = await twitter.users(user); 30 | const tweet = new Discord.MessageEmbed() 31 | .setColor('BLUE') 32 | .setURL(`https://twitter.com/${body.screen_name}`) 33 | .setAuthor(`${message.author.username}`, message.author.displayAvatarURL({ 34 | dynamic: true, 35 | size: 2048 36 | })) 37 | .setTitle( 38 | `${body.name} (@${body.screen_name.toLocaleString()})`, 39 | body.verified 40 | ? 'https://emoji.gg/assets/emoji/6817_Discord_Verified.png' 41 | : null 42 | ) 43 | .setDescription( 44 | stripIndents` ${body.description}`) 45 | .setFooter( 46 | `Twitter ID: ${body.id}`, 47 | 'https://abs.twimg.com/favicons/twitter.ico' 48 | ) 49 | .setThumbnail(body.profile_image_url_https.replace('_normal', '')) 50 | .addFields( 51 | { 52 | name: "**Tweets**", 53 | value: `${body.statuses_count.toLocaleString()}`, 54 | inline: true 55 | }, 56 | { 57 | name: "**Following**", 58 | value: `${body.friends_count.toLocaleString()}`, 59 | inline: true, 60 | }, 61 | { 62 | name: "**Followers**", 63 | value: `${body.followers_count.toLocaleString()}`, 64 | inline: true, 65 | } 66 | ) 67 | 68 | message.channel.send(tweet); 69 | } catch (e) { 70 | if (e.status === 403) 71 | return message.channel.send( 72 | { embed: {color: "#efa23a", description: `${warn} ${message.author}: That user is either **suspended** or is on **private mode**`}} 73 | ); 74 | else if (e.status === 404) return message.channel.send({ embed: {color: "#efa23a", description: `${warn} ${message.author}: That **user** doesn't exist`}}); 75 | else return message.channel.send(`**Unknown Error:** \`${e.message}\``); 76 | } 77 | } 78 | }; -------------------------------------------------------------------------------- /utility/unpin.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { color } = require("../../config.json"); 3 | const { approve } = require('../../emojis.json') 4 | const { warn } = require('../../emojis.json') 5 | const { deny } = require('../../emojis.json') 6 | 7 | module.exports = { 8 | name: "unpin", 9 | category: "utility", 10 | 11 | run: async (client, message, args) => { 12 | if (!message.member.hasPermission("MANAGE_MESSAGES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: You're **missing** permission: \`manage_messages\``}}); 13 | if (!message.guild.me.hasPermission("MANAGE_MESSAGES")) return message.channel.send({ embed: { color: "efa23a", description: `${warn} ${message.author}: I'm **missing** permission: \`manage_messages\``}}); 14 | 15 | const pinID = args.join(" "); 16 | 17 | const embed = new Discord.MessageEmbed() 18 | .setAuthor(message.author.username, message.author.avatarURL({ 19 | dynamic: true 20 | })) 21 | .setTitle('Command: unpin') 22 | .setDescription('Unpin any recent message by ID') 23 | .addField('**Aliases**', 'N/A', true) 24 | .addField('**Parameters**', 'message', true) 25 | .addField('**Information**', `${warn} Manage Messages`, true) 26 | .addField('**Usage**', '\`\`\`Syntax: unpin (messageid)\`\`\`') 27 | .setFooter(`Module: servers`) 28 | .setTimestamp() 29 | .setColor(color) 30 | if (!args[0]) return message.channel.send(embed) 31 | 32 | message.channel.messages.fetch(pinID).then(d => { 33 | d.unpin().catch(err => { 34 | message.channel.send({ embed: { color: "#e74c3c", description: `${deny} ${message.author}: An error has occurred! Failed to unpin message` } }) 35 | console.log(err) 36 | }) 37 | message.channel.send({ embed: { color: "#a3eb7b", description: `${approve} ${message.author}: **Unpinned** Message - \`${pinID}\`` } }) 38 | }).catch(() => { 39 | message.channel.send({ embed: { color: "#efa23a", description: `${warn} ${message.author}: \`${pinID}\` is not a valid message id` } }) 40 | }) 41 | } 42 | } -------------------------------------------------------------------------------- /utility/urban.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { stripIndents } = require("common-tags"); 3 | const urban = require('urban'); 4 | const { color } = require("../../config.json"); 5 | 6 | module.exports = { 7 | name: "urbandictionary", 8 | aliases: ["ud", "urban", "define"], 9 | 10 | run: async(client, message, args) => { 11 | 12 | let mentionedMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]); 13 | if (!mentionedMember) mentionedMember = message.member; 14 | 15 | const urbanEmbed = new Discord.MessageEmbed() 16 | .setAuthor(message.author.username, message.author.avatarURL({ 17 | dynamic: true 18 | })) 19 | .setTitle('Command: urbandictionary') 20 | .setDescription('Gets the definition of a word/slang from Urbandictionary') 21 | .addField('**Aliases**', 'define, ud, urban', true) 22 | .addField('**Parameters**', 'search', true) 23 | .addField('**Information**', `N/A`, true) 24 | .addField('**Usage**', '\`\`\`Syntax: urbandictionary \nExample: urbandictionary Slatt\`\`\`') 25 | .setFooter(`Module: fun`) 26 | .setTimestamp() 27 | .setColor(color) 28 | if(!args[0]) return message.channel.send(urbanEmbed); 29 | 30 | const img = 'https://images-ext-1.discordapp.net/external/8j3tp5o_0hOhrVP_IWHZJcnpmsZ4hdEaNcyEeRCp8TQ/%3Fcache-bust-this-di/https/cdn.notsobot.com/brands/urban-dictionary.png'; 31 | 32 | 33 | let msg = args.slice(0).join(' '); 34 | 35 | 36 | let search = urban(msg); 37 | 38 | 39 | try{ 40 | search.first(result => { 41 | 42 | if(!result) return message.channel.send('No results found'); 43 | 44 | //get info from the result 45 | let { word, definition, example, thumbs_up, thumbs_down, permalink, author } = result; 46 | 47 | 48 | let embed = new Discord.MessageEmbed() 49 | .setColor(mentionedMember.displayHexColor || color) 50 | .setAuthor(message.author.username, message.author.avatarURL({ 51 | dynamic: true 52 | })) 53 | .setTitle(`**${word}**`) 54 | .setURL(`${permalink || 'https://www.urbandictionary.com/'}`) 55 | .setDescription(stripIndents`${definition || 'No Definition'} 56 | **Example**\n${example || 'No Example'}`) 57 | .setTimestamp() 58 | .addField(`**Votes**`, `👍 \`${thumbs_up} / ${thumbs_down}\` 👎`) 59 | .setFooter(`Urban Dictionary Results`, img); 60 | 61 | message.channel.send(embed); 62 | }); 63 | } catch(e){ 64 | 65 | 66 | return message.channel.send(`Error, try again (${e})`); 67 | } 68 | } 69 | } -------------------------------------------------------------------------------- /utility/userbanner.js: -------------------------------------------------------------------------------- 1 | const config = require('../../config.json') 2 | const fetch = require('node-fetch') 3 | const { MessageEmbed } = require('discord.js') 4 | const { color } = require("../../config.json"); 5 | 6 | module.exports = { 7 | name: "userbanner", 8 | aliases: ['ub'], 9 | 10 | run: async (client, message, args) => { 11 | message.channel.startTyping(); 12 | let mentionedMember = await message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.guild.members.cache.find(r => r.displayName.toLowerCase() === args.join(' ').toLocaleLowerCase()) || args[0] || message.member; 13 | 14 | const user = await client.users.fetch(client.users.resolveID(mentionedMember)).catch(() => null); 15 | if (!user) user = message.author; 16 | let uid = user.id 17 | let response = fetch(`https://discord.com/api/v8/users/${uid}`, { 18 | method: 'GET', 19 | headers: { 20 | Authorization: `Bot ${config.token}` 21 | } 22 | }) 23 | let receive = '' 24 | let banner = 'https://cdn.discordapp.com/attachments/829722741288337428/834016013678673950/banner_invisible.gif' 25 | response.then(a => { 26 | if (a.status !== 404) { 27 | a.json().then(data => { 28 | receive = data['banner'] 29 | if (receive !== null) { 30 | let response2 = fetch(`https://cdn.discordapp.com/banners/${uid}/${receive}.gif`, { 31 | method: 'GET', 32 | headers: { 33 | Authorization: `Bot ${config.token}` 34 | } 35 | }) 36 | let statut = '' 37 | response2.then(b => { 38 | statut = b.status 39 | banner = `https://cdn.discordapp.com/banners/${uid}/${receive}.gif?size=1024` 40 | if (statut === 415) { 41 | banner = `https://cdn.discordapp.com/banners/${uid}/${receive}.png?size=1024` 42 | } 43 | }) 44 | } 45 | }) 46 | } 47 | }) 48 | setTimeout(() => { 49 | let embed = new MessageEmbed() 50 | .setColor(mentionedMember.displayHexColor || color) 51 | .setImage(banner) 52 | .setURL(banner) 53 | .setAuthor(message.author.username, message.author.avatarURL()) 54 | .setTitle(user.username + "'s banner") 55 | message.channel.stopTyping(true); 56 | message.channel.send(embed) 57 | }, 1000) 58 | } 59 | } 60 | --------------------------------------------------------------------------------