├── README.md ├── .replit ├── assets ├── sounds │ ├── ahh.mp3 │ ├── jeff.mp3 │ ├── nani.mp3 │ ├── ree.mp3 │ ├── yeet.mp3 │ ├── jeopardy.mp3 │ ├── moaning.mp3 │ ├── pikachu.mp3 │ ├── shutdown.mp3 │ └── startup.mp3 └── fonts │ ├── Impact.ttf │ ├── Korrina.otf │ ├── courbd.ttf │ └── RobotoRegular.ttf ├── config.js ├── JSON ├── soundboard.json ├── fishes.json ├── colours.json └── works.json ├── views └── index.html ├── handler ├── console.js ├── event.js └── command.js ├── events ├── client │ └── ready.js └── guild │ └── message.js ├── commands ├── fun │ ├── coinflip.js │ ├── say.js │ ├── meme.js │ ├── calculate.js │ ├── roast.js │ ├── urbandictionary.js │ ├── motivation.js │ ├── tts.js │ ├── soundboard.js │ └── status.js ├── info │ ├── ping.js │ ├── uptime.js │ ├── poll.js │ ├── channelinfo.js │ ├── rolememberinfo.js │ ├── roleinfo.js │ ├── serverinfo.js │ ├── news.js │ ├── invites.js │ ├── instasearch.js │ ├── weather.js │ ├── whois.js │ ├── level.js │ ├── help.js │ └── wikipedia.js ├── image │ ├── clyde.js │ ├── jail.js │ ├── rip.js │ ├── wasted.js │ ├── fire.js │ ├── scary.js │ ├── mission.js │ ├── tobecontinued.js │ ├── triggered.js │ ├── tweet.js │ ├── phcomment.js │ ├── captcha.js │ ├── gif.js │ ├── facepalm.js │ ├── avatar.js │ ├── love.js │ └── avatarfusion.js ├── economy │ ├── store.js │ ├── beg.js │ ├── balance.js │ ├── daily.js │ ├── weekly.js │ ├── work.js │ ├── leaderboard.js │ ├── addmoney.js │ ├── setinfo.js │ ├── removemoney.js │ ├── setbackground.js │ ├── slots.js │ ├── pay.js │ ├── withdraw.js │ ├── deposit.js │ ├── rob.js │ ├── fish.js │ ├── sell.js │ ├── roulette.js │ └── buy.js ├── moderation │ ├── disablexp.js │ ├── setxp.js │ ├── purge.js │ ├── disablemuterole.js │ ├── disablemodlogchannel.js │ ├── setprefix.js │ ├── disablewelcomechannel.js │ ├── verify.js │ ├── setmuterole.js │ ├── setmodlogchannel.js │ ├── setwelcomechannel.js │ ├── disableverification.js │ ├── setnick.js │ ├── unban.js │ ├── addrole.js │ ├── removerole.js │ ├── warn.js │ ├── ban.js │ ├── unmute.js │ ├── setverification.js │ └── kick.js ├── owner │ ├── getinvite.js │ ├── eval.js │ └── serverlist.js └── games │ ├── rps.js │ ├── memory.js │ ├── gunfight.js │ ├── russianroulette.js │ ├── horserace.js │ └── trivia.js ├── structures ├── poker │ ├── Deck.js │ └── Card.js └── phone │ └── PhoneCall.js └── package.json /README.md: -------------------------------------------------------------------------------- 1 | OUTDATED 2 | -------------------------------------------------------------------------------- /.replit: -------------------------------------------------------------------------------- 1 | language = "nodejs" 2 | run = "node index.js" 3 | -------------------------------------------------------------------------------- /assets/sounds/ahh.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMGXENON/Discord-Multipurpose-Bot/HEAD/assets/sounds/ahh.mp3 -------------------------------------------------------------------------------- /assets/sounds/jeff.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMGXENON/Discord-Multipurpose-Bot/HEAD/assets/sounds/jeff.mp3 -------------------------------------------------------------------------------- /assets/sounds/nani.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMGXENON/Discord-Multipurpose-Bot/HEAD/assets/sounds/nani.mp3 -------------------------------------------------------------------------------- /assets/sounds/ree.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMGXENON/Discord-Multipurpose-Bot/HEAD/assets/sounds/ree.mp3 -------------------------------------------------------------------------------- /assets/sounds/yeet.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMGXENON/Discord-Multipurpose-Bot/HEAD/assets/sounds/yeet.mp3 -------------------------------------------------------------------------------- /assets/fonts/Impact.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMGXENON/Discord-Multipurpose-Bot/HEAD/assets/fonts/Impact.ttf -------------------------------------------------------------------------------- /assets/fonts/Korrina.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMGXENON/Discord-Multipurpose-Bot/HEAD/assets/fonts/Korrina.otf -------------------------------------------------------------------------------- /assets/fonts/courbd.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMGXENON/Discord-Multipurpose-Bot/HEAD/assets/fonts/courbd.ttf -------------------------------------------------------------------------------- /assets/sounds/jeopardy.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMGXENON/Discord-Multipurpose-Bot/HEAD/assets/sounds/jeopardy.mp3 -------------------------------------------------------------------------------- /assets/sounds/moaning.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMGXENON/Discord-Multipurpose-Bot/HEAD/assets/sounds/moaning.mp3 -------------------------------------------------------------------------------- /assets/sounds/pikachu.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMGXENON/Discord-Multipurpose-Bot/HEAD/assets/sounds/pikachu.mp3 -------------------------------------------------------------------------------- /assets/sounds/shutdown.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMGXENON/Discord-Multipurpose-Bot/HEAD/assets/sounds/shutdown.mp3 -------------------------------------------------------------------------------- /assets/sounds/startup.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMGXENON/Discord-Multipurpose-Bot/HEAD/assets/sounds/startup.mp3 -------------------------------------------------------------------------------- /assets/fonts/RobotoRegular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMGXENON/Discord-Multipurpose-Bot/HEAD/assets/fonts/RobotoRegular.ttf -------------------------------------------------------------------------------- /config.js: -------------------------------------------------------------------------------- 1 | exports.TOKEN = ''; 2 | 3 | exports.PREFIX = ''; 4 | 5 | exports.news_API = ''; 6 | 7 | exports.giphy_API = ''; 8 | 9 | exports.AME_API = ''; 10 | -------------------------------------------------------------------------------- /JSON/soundboard.json: -------------------------------------------------------------------------------- 1 | [ 2 | "ahh", 3 | "pikachu", 4 | "jeff", 5 | "moaning", 6 | "nani", 7 | "reee", 8 | "shutdown", 9 | "startup", 10 | "yeet" 11 | ] -------------------------------------------------------------------------------- /views/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |

Subscribe to LMG XENON https://youtube.com/c/LMGXENON

6 | 7 |

Bot is Online

8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /handler/console.js: -------------------------------------------------------------------------------- 1 | module.exports = (bot, message) => { 2 | let prompt = process.openStdin() 3 | prompt.addListener("data", res => { 4 | let x = res.toString().trim().split(/ +/g) 5 | bot.channels.cache.get(message.channel.id).send(x.join(" ")); 6 | }); 7 | }; -------------------------------------------------------------------------------- /JSON/fishes.json: -------------------------------------------------------------------------------- 1 | { 2 | "junk": { 3 | "symbol": "🔧", 4 | "max": 30, 5 | "min": 10 6 | }, 7 | "common": { 8 | "symbol": "🐟", 9 | "max": 70, 10 | "min": 30 11 | }, 12 | "uncommon": { 13 | "symbol": "🐠", 14 | "max": 90, 15 | "min": 50 16 | }, 17 | "rare": { 18 | "symbol": "🦑", 19 | "max": 175, 20 | "min": 130 21 | }, 22 | "legendary": { 23 | "symbol": "🐋", 24 | "max": 500, 25 | "min": 100 26 | } 27 | } -------------------------------------------------------------------------------- /events/client/ready.js: -------------------------------------------------------------------------------- 1 | const { PREFIX } = require('../../config'); 2 | module.exports = async bot => { 3 | console.log(`${bot.user.username} is available now!`) 4 | let totalUsers = bot.guilds.cache.reduce((acc, value) => acc + value.memberCount, 0) 5 | var activities = [ `${bot.guilds.cache.size} servers`, `${totalUsers} users!` ], i = 0; 6 | setInterval(() => bot.user.setActivity(`${PREFIX}help | ${activities[i++ % activities.length]}`, { type: "WATCHING" }),5000) 7 | 8 | }; -------------------------------------------------------------------------------- /JSON/colours.json: -------------------------------------------------------------------------------- 1 | { 2 | "purpledark": "#6a006a", 3 | "purplemedium": "#a958a5", 4 | "purplelight": "#c481fb", 5 | "orange": "#ffa500", 6 | "gold": "#daa520", 7 | "reddark": "#8e2430", 8 | "redlight": "#ff0000", 9 | "bluedark": "#3b5998", 10 | "cyan": "#5780cd", 11 | "bluelight": "#ace9e7", 12 | "aqua": "#33a1ee", 13 | "pink": "#ff9dbb", 14 | "greendark": "#2ac075", 15 | "greenlight": "#a1ee33", 16 | "white": "#f9f9f6", 17 | "cream": "#ffdab9" 18 | } -------------------------------------------------------------------------------- /handler/event.js: -------------------------------------------------------------------------------- 1 | const { readdirSync } = require("fs") 2 | 3 | module.exports = (bot) => { 4 | const load = dirs => { 5 | const events = readdirSync(`./events/${dirs}/`).filter(d => d.endsWith('.js')); 6 | for (let file of events) { 7 | const evt = require(`../events/${dirs}/${file}`); 8 | let eName = file.split('.')[0]; 9 | bot.on(eName, evt.bind(null, bot)); 10 | }; 11 | }; 12 | ["client", "guild"].forEach(x => load(x)); 13 | }; -------------------------------------------------------------------------------- /handler/command.js: -------------------------------------------------------------------------------- 1 | const { readdirSync } = require("fs") 2 | 3 | module.exports = (bot) => { 4 | const load = dirs => { 5 | const commands = readdirSync(`./commands/${dirs}/`).filter(d => d.endsWith('.js')); 6 | for (let file of commands) { 7 | let pull = require(`../commands/${dirs}/${file}`); 8 | bot.commands.set(pull.config.name, pull); 9 | if (pull.config.aliases) pull.config.aliases.forEach(a => bot.aliases.set(a, pull.config.name)); 10 | }; 11 | }; 12 | ["economy", "fun", "image", "info", "moderation", "owner", "games"].forEach(x => load(x)); 13 | }; 14 | -------------------------------------------------------------------------------- /commands/fun/coinflip.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | module.exports = { 4 | config: { 5 | name: "coinflip", 6 | aliases: ['cf', 'coin', 'flip'], 7 | category: 'fun', 8 | description: 'flips a coin', 9 | usage: ' ', 10 | accessableby: "everyone" 11 | }, 12 | run: async (bot, message, args) => { 13 | const n = Math.floor(Math.random() * 2); 14 | let result; 15 | if (n === 1) result = 'Heads'; 16 | else result = 'Tails'; 17 | const embed = new MessageEmbed() 18 | .setColor("GREEN") 19 | .setDescription(`**${message.member.displayName} Flipped ${result}**!`) 20 | message.channel.send(embed); 21 | } 22 | }; -------------------------------------------------------------------------------- /commands/info/ping.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | module.exports = { 4 | config: { 5 | name: "ping", 6 | description: "Displays User And Bot Latency", 7 | usage: " ", 8 | noalias: "No Aliases", 9 | category: "info", 10 | accessableby: "everyone" 11 | }, 12 | run: async (bot, message, args) => { 13 | 14 | message.channel.send("**Pinging...**").then(m => { 15 | let ping = m.createdTimestamp - message.createdTimestamp 16 | const embed = new MessageEmbed() 17 | .setColor("GREEN") 18 | .setDescription(`<:hourglass_flowing_sand:699128011743690794> ${ping}\n\n💓 ${Math.round(bot.ws.ping)}`) 19 | message.channel.send(embed) 20 | m.delete() 21 | }) 22 | } 23 | }; -------------------------------------------------------------------------------- /commands/fun/say.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const { greenlight } = require("../../JSON/colours.json") 3 | 4 | module.exports = { 5 | config: { 6 | name: "say", 7 | category: "fun", 8 | noalias: [''], 9 | description: "Says your input via the bot", 10 | usage: "[text]", 11 | accessableby: "everyone" 12 | }, 13 | run: async (bot, message, args) => { 14 | try { 15 | if (args.length === 0) 16 | return message.channel.send("**Enter Some Text!**") 17 | message.delete({ timeout: 1000 }) 18 | 19 | const embed = new MessageEmbed() 20 | .setDescription(args.join(" ")) 21 | .setColor(greenlight); 22 | 23 | message.channel.send(embed) 24 | } catch (e) { 25 | throw e; 26 | }; 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /commands/fun/meme.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const randomPuppy = require("random-puppy"); 3 | 4 | module.exports = { 5 | config: { 6 | name: "meme", 7 | category: "fun", 8 | noalias: "No Aliases", 9 | usage: " ", 10 | description: "Sends an epic meme", 11 | accessableby: "everyone" 12 | }, 13 | run: async (bot, message, args) => { 14 | 15 | const subReddits = ["dankmeme", "meme", "me_irl"]; 16 | const random = subReddits[Math.floor(Math.random() * subReddits.length)]; 17 | 18 | const img = await randomPuppy(random); 19 | const embed = new MessageEmbed() 20 | .setColor("RANDOM") 21 | .setImage(img) 22 | .setTitle("meme!") 23 | .setURL(`https://reddit.com/r/${random}`); 24 | 25 | message.channel.send(embed); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /commands/image/clyde.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const fetch = require('node-fetch'); 3 | 4 | module.exports = { 5 | config: { 6 | name: "clyde", 7 | noalias: [''], 8 | category: "image", 9 | description: "Shows Embed Send By Clyde Bot", 10 | usage: "", 11 | accessableby: "everyone" 12 | }, 13 | run: async (bot, message, args) => { 14 | 15 | let text = args.join(" "); 16 | 17 | if (!text) { 18 | return message.channel.send("**Enter Text**"); 19 | } 20 | 21 | let m = await message.channel.send("**Please Wait...**"); 22 | try { 23 | let res = await fetch(encodeURI(`https://nekobot.xyz/api/imagegen?type=clyde&text=${text}`)); 24 | let json = await res.json(); 25 | let attachment = new Discord.MessageAttachment(json.message, "clyde.png"); 26 | message.channel.send(attachment); 27 | m.delete({ timeout: 5000 }); 28 | } catch (e) { 29 | m.edit(e.message); 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /commands/info/uptime.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js') 2 | 3 | module.exports = { 4 | config: { 5 | name: "uptime", 6 | description: "Shows Uptime of bot", 7 | aliases: ["up"], 8 | category: "info", 9 | usage: " ", 10 | accessableby: "everyone" 11 | }, 12 | run: async(bot, message, args) => { 13 | let days = Math.floor(bot.uptime / 86400000); 14 | let hours = Math.floor(bot.uptime / 3600000) % 24; 15 | let minutes = Math.floor(bot.uptime / 60000) % 60; 16 | let seconds = Math.floor(bot.uptime / 1000) % 60; 17 | 18 | const embed = new MessageEmbed() 19 | .setTitle("Uptime") 20 | .setColor("GREEN") 21 | .setDescription(`${days} days ${hours} hours ${minutes} minutes ${seconds} seconds`) 22 | .setThumbnail(bot.user.displayAvatarURL()) 23 | .setFooter(message.guild.name, message.guild.iconURL()) 24 | .setAuthor(bot.user.username, bot.user.displayAvatarURL()) 25 | message.channel.send(embed); 26 | } 27 | } -------------------------------------------------------------------------------- /commands/economy/store.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const { PREFIX } = require('../../config'); 3 | const db = require('quick.db'); 4 | 5 | module.exports = { 6 | config: { 7 | name: "store", 8 | noalias: [""], 9 | category: "economy", 10 | description: "Shows list of items", 11 | usage: " ", 12 | accessableby: "everyone" 13 | }, 14 | run: async (bot, message, args) => { 15 | let prefix; 16 | let fetched = await db.fetch(`prefix_${message.guild.id}`); 17 | 18 | if (fetched === null) { 19 | prefix = PREFIX 20 | } else { 21 | prefix = fetched 22 | } 23 | 24 | let embed = new MessageEmbed() 25 | .setDescription(`**VIP Ranks**\n\nBronze: 200 Coins [${prefix}buy/${prefix}sell bronze]\n\n**Lifestyle Items**\n\nFresh Nikes: 600 [${prefix}buy/${prefix}sell nikes]\nCar: 800 [${prefix}buy/${prefix}sell car]\nMansion: 1200 [${prefix}buy/${prefix}sell mansion]`) 26 | .setColor("GREEN") 27 | message.channel.send(embed) 28 | } 29 | } -------------------------------------------------------------------------------- /commands/info/poll.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | module.exports = { 4 | config: { 5 | name: "poll", 6 | description: "polling", 7 | category: "info", 8 | usage: "[question]", 9 | noalias: "No Aliases", 10 | accessableby: "Administrator", 11 | }, 12 | run: async (bot, message, args) => { 13 | if (!message.member.hasPermission('MANAGE_GUILD')) return message.channel.send("**You Do Not Have Sufficient Permissions! - [MANAGE_GUILD]**"); 14 | 15 | if (!args[0]) 16 | return message.channel.send("**Please Enter A Query!**"); 17 | 18 | const embed = new MessageEmbed() 19 | .setColor("GREEN") 20 | .setTitle(`Poll For ${message.guild.name} Sever`) 21 | .setFooter(message.member.displayName, message.author.displayAvatarURL()) 22 | .setDescription(args.join(' ')) 23 | var msg = await message.channel.send(embed); 24 | 25 | await msg.react('✅'); 26 | await msg.react('❌'); 27 | 28 | message.delete({ timeout: 1000 }); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /commands/moderation/disablexp.js: -------------------------------------------------------------------------------- 1 | const db = require('quick.db'); 2 | 3 | module.exports = { 4 | config: { 5 | name: 'disablexp', 6 | aliases: ['dxp'], 7 | category: 'moderation', 8 | description: 'Disables Server XP Messages', 9 | usage: ' ', 10 | accessableby: 'Administrators' 11 | }, 12 | run: async (bot, message, args) => { 13 | if (!message.member.hasPermission("ADMINISTRATOR")) return message.channel.send("**You Do Not Have The Required Permissions! - [ADMINISTRATOR]**") 14 | 15 | try { 16 | let a = await db.fetch(`guildMessages_${message.guild.id}`) 17 | 18 | if (!a) { 19 | return message.channel.send("**XP Messages Are Already Disabled In The Server!**") 20 | } else { 21 | db.delete(`guildMessages_${message.guild.id}`) 22 | 23 | message.channel.send("**XP Messages Are Disabled Successfully!**") 24 | } 25 | return; 26 | } catch { 27 | return message.channel.send("**Something Went Wrong!**") 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /commands/moderation/setxp.js: -------------------------------------------------------------------------------- 1 | const db = require('quick.db'); 2 | 3 | module.exports = { 4 | config: { 5 | name: 'setxp', 6 | aliases: ['enablexp'], 7 | category: 'moderation', 8 | description: 'Enables Server XP Messages', 9 | usage: ' ', 10 | accessableby: 'Administrators' 11 | }, 12 | run: async (bot, message, args) => { 13 | if (!message.member.hasPermission("ADMINISTRATOR")) return message.channel.send("**You Do Not Have The Required Permissions! - [ADMINISTRATOR]**") 14 | 15 | try { 16 | let a = await db.fetch(`guildMessages_${message.guild.id}`) 17 | 18 | if (a) { 19 | return message.channel.send("**XP Messages Are Already Enabled In The Server!**") 20 | } else { 21 | db.set(`guildMessages_${message.guild.id}`, 1) 22 | 23 | message.channel.send("**XP Messages Are Enabled Successfully!**") 24 | } 25 | return; 26 | } catch (e) { 27 | console.log(e) 28 | return message.channel.send("**Something Went Wrong!**") 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /commands/moderation/purge.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | config: { 3 | name: "purge", 4 | aliases: ["delete", "clear", 'prune'], 5 | category: "moderation", 6 | description: "Deletes messages from a channel", 7 | usage: "delete [amount of messages]", 8 | accessableby: "Administrator" 9 | }, 10 | run: async (bot, message, args) => { 11 | if (!message.member.hasPermission("MANAGE_MESSAGES")) return message.channel.send("You Don't Have Sufficient Permissions!- [MANAGE_MESSAGES]") 12 | if (isNaN(args[0])) 13 | return message.channel.send('**Please Supply A Valid Amount To Delete Messages!**'); 14 | 15 | if (args[0] > 100) 16 | return message.channel.send("**Please Supply A Number Less Than 100!**"); 17 | 18 | if (args[0] < 1) 19 | return message.channel.send("**Please Supply A Number More Than 1!**"); 20 | 21 | message.channel.bulkDelete(args[0]) 22 | .then(messages => message.channel.send(`**Succesfully deleted \`${messages.size}/${args[0]}\` messages**`).then(msg => msg.delete({ timeout: 2000 }))).catch(() => null) 23 | } 24 | } -------------------------------------------------------------------------------- /events/guild/message.js: -------------------------------------------------------------------------------- 1 | const db = require('quick.db'); 2 | const { PREFIX } = require('../../config'); 3 | const queue2 = new Map(); 4 | const queue3 = new Map(); 5 | const queue = new Map(); 6 | const games = new Map() 7 | 8 | module.exports = async (bot, message) => { 9 | try { 10 | if (message.author.bot || message.channel.type === "dm") return; 11 | 12 | let prefix; 13 | let fetched = await db.fetch(`prefix_${message.guild.id}`); 14 | 15 | if (fetched === null) { 16 | prefix = PREFIX 17 | } else { 18 | prefix = fetched 19 | } 20 | 21 | let args = message.content.slice(prefix.length).trim().split(/ +/g); 22 | let cmd = args.shift().toLowerCase(); 23 | 24 | if (!message.content.startsWith(prefix)) return; 25 | 26 | let ops = { 27 | queue2: queue2, 28 | queue: queue, 29 | queue3: queue3, 30 | games: games 31 | } 32 | 33 | var commandfile = bot.commands.get(cmd) || bot.commands.get(bot.aliases.get(cmd)) 34 | if (commandfile) commandfile.run(bot, message, args, ops) 35 | } catch (e) { 36 | console.log(e); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /commands/image/jail.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js"); 2 | const { AME_API } = require('../../config'); 3 | const AmeClient = require('amethyste-api'); 4 | const AmeAPI = new AmeClient(AME_API); 5 | 6 | module.exports = { 7 | config: { 8 | name: "jail", 9 | category: "image", 10 | noalias: [''], 11 | description: "Sends User To Jail", 12 | usage: "[username | nickname | mention | ID] (optional)", 13 | accessableby: "everyone" 14 | }, 15 | run: async (bot, message, args) => { 16 | let user = 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()) || message.member; 17 | let m = await message.channel.send("**Please Wait...**"); 18 | let buffer = await AmeAPI.generate("jail", { url: user.user.displayAvatarURL({ format: "png", size: 1024 }) }); 19 | let attachment = new Discord.MessageAttachment(buffer, "jail.png"); 20 | m.delete({ timeout: 5000 }); 21 | message.channel.send(attachment); 22 | } 23 | }; 24 | -------------------------------------------------------------------------------- /commands/image/rip.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js"); 2 | const { AME_API } = require('../../config') 3 | const ameClient = require('amethyste-api') 4 | const AmeAPI = new ameClient(AME_API) 5 | 6 | module.exports = { 7 | config: { 8 | name: "rip", 9 | noalias: [''], 10 | category: 'image', 11 | description: "Shows Grave Of An User!", 12 | usage: "[username | nickname | mention | ID] (optional)", 13 | accessableby: "everyone" 14 | }, 15 | run: async (bot, message, args) => { 16 | 17 | let user = 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()) || message.member; 18 | let m = await message.channel.send("**Please Wait...**"); 19 | let buffer = await AmeAPI.generate("rip", { url: user.user.displayAvatarURL({ format: "png", size: 512 }) }); 20 | let attachment = new Discord.MessageAttachment(buffer, "rip.png"); 21 | m.delete({ timeout: 5000 }); 22 | message.channel.send(attachment); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /commands/image/wasted.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js"); 2 | const { AME_API } = require('../../config'); 3 | const AmeClient = require('amethyste-api'); 4 | const AmeAPI = new AmeClient(AME_API); 5 | 6 | module.exports = { 7 | config: { 8 | name: "wasted", 9 | noalias: [''], 10 | category: "image", 11 | description: "Shows Wastage of A User", 12 | usage: "[username | nickname | mention | ID] (optional)", 13 | accessableby: "everyone" 14 | }, 15 | run: async (bot, message, args) => { 16 | let user = 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()) || message.member; 17 | let m = await message.channel.send("**Please Wait...**"); 18 | let buffer = await AmeAPI.generate("wasted", { url: user.user.displayAvatarURL({ format: "png", size: 512 }) }); 19 | let attachment = new Discord.MessageAttachment(buffer, "wasted.png"); 20 | m.delete({ timeout: 5000 }); 21 | message.channel.send(attachment); 22 | } 23 | }; -------------------------------------------------------------------------------- /commands/image/fire.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js"); 2 | const { AME_API } = require('../../config') 3 | const ameClient = require('amethyste-api') 4 | const AmeAPI = new ameClient(AME_API) 5 | 6 | module.exports = { 7 | config: { 8 | name: "fire", 9 | aliases: ['setfire', 'sf'], 10 | category: 'image', 11 | description: "Sets User On Fire!", 12 | usage: "[username | nickname | mention | ID] (optional)", 13 | accessableby: "everyone" 14 | }, 15 | run: async (bot, message, args) => { 16 | 17 | let user = 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()) || message.member; 18 | let m = await message.channel.send("**Please Wait...**"); 19 | let buffer = await AmeAPI.generate("fire", { url: user.user.displayAvatarURL({ format: "png", size: 512 }) }); 20 | let attachment = new Discord.MessageAttachment(buffer, "fire.png"); 21 | m.delete({ timeout: 5000 }); 22 | message.channel.send(attachment); 23 | } 24 | }; -------------------------------------------------------------------------------- /commands/image/scary.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { AME_API } = require('../../config'); 3 | const ApeClient = require('amethyste-api'); 4 | const AmeAPI = new ApeClient(AME_API); 5 | 6 | module.exports = { 7 | config: { 8 | name: "scary", 9 | aliases: ["scare"], 10 | category: "image", 11 | description: "Shows An Image To Scare People", 12 | usage: "[username | nickname | mention | ID] (optional)", 13 | accessableby: "everyone" 14 | }, 15 | run: async (bot, message, args) => { 16 | 17 | let user = 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()) || message.member; 18 | let m = await message.channel.send("**Please Wait...**"); 19 | let buffer = await AmeAPI.generate("scary", { url: user.user.displayAvatarURL({ format: "png", size: 512 }) }); 20 | let attachment = new Discord.MessageAttachment(buffer, "scary.png"); 21 | m.delete({ timeout: 5000 }); 22 | message.channel.send(attachment); 23 | } 24 | }; -------------------------------------------------------------------------------- /commands/moderation/disablemuterole.js: -------------------------------------------------------------------------------- 1 | const db = require('quick.db'); 2 | 3 | module.exports = { 4 | config: { 5 | name: "disablemuterole", 6 | aliases: ['clearmuterole', 'dmr', 'disablemr', 'dmrole'], 7 | category: 'moderation', 8 | description: 'Disables Server Mute Role', 9 | usage: '[role name | role mention | role ID]', 10 | accessableby: 'Administrators' 11 | }, 12 | run: async (bot, message, args) => { 13 | if (!message.member.hasPermission("ADMINISTRATOR")) return message.channel.send("**You Do Not Have The Required Permissions! - [ADMINISTRATOR]**") 14 | 15 | try { 16 | let a = db.fetch(`muterole_${message.guild.id}`) 17 | 18 | if (!a) { 19 | return message.channel.send("**There Is No Muterole Set To Disable!**") 20 | } else { 21 | let role = message.guild.roles.cache.get(a) 22 | db.delete(`muterole_${message.guild.id}`) 23 | 24 | message.channel.send(`**\`${role.name}\` Has Been Successfully Disabled**`) 25 | } 26 | return; 27 | } catch { 28 | return message.channel.send("**Error - `Missing Permissions or Role Doesn't Exist`**") 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /commands/image/mission.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { AME_API } = require('../../config'); 3 | const AmeClient = require('amethyste-api'); 4 | const AmeAPI = new AmeClient(AME_API); 5 | 6 | module.exports = { 7 | config: { 8 | name: "mission", 9 | noalias: [''], 10 | category: "image", 11 | description: "Shows Mission Passed Respect+ Image", 12 | usage: "[username | nickname | mention | ID] (optional)", 13 | accessableby: "everyone" 14 | }, 15 | run: async (bot, message, args) => { 16 | 17 | let user = 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()) || message.member; 18 | let m = await message.channel.send("**Please Wait...**"); 19 | let buffer = await AmeAPI.generate("missionpassed", { url: user.user.displayAvatarURL({ format: "png", size: 2048 }) }); 20 | let attachment = new Discord.MessageAttachment(buffer, "mission.png"); 21 | m.delete({ timeout: 5000 }); 22 | message.channel.send(attachment); 23 | } 24 | }; -------------------------------------------------------------------------------- /commands/image/tobecontinued.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const { AME_API } = require('../../config'); 3 | const AmeClient = require('amethyste-api'); 4 | const AmeAPI = new AmeClient(AME_API) 5 | 6 | module.exports = { 7 | config: { 8 | name: "tobecontinued", 9 | aliases: ['tbc'], 10 | category: "image", 11 | description: "Shows A ToBeContinued Image", 12 | usage: "[username | nickname | mention | ID] (optional)", 13 | accessableby: "everyone" 14 | }, 15 | run: async (bot, message, args) => { 16 | 17 | let user = 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()) || message.member; 18 | let m = await message.channel.send("**Please Wait...**"); 19 | let buffer = await AmeAPI.generate("tobecontinued", { url: user.user.displayAvatarURL({ format: "png", size: 512 }) }); 20 | let attachment = new Discord.MessageAttachment(buffer, "tobecontinued.png"); 21 | m.delete({ timeout: 5000 }); 22 | message.channel.send(attachment); 23 | } 24 | }; -------------------------------------------------------------------------------- /commands/image/triggered.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js"); 2 | const { AME_API } = require('../../config') 3 | const ameClient = require('amethyste-api') 4 | const AmeAPI = new ameClient(AME_API) 5 | 6 | module.exports = { 7 | config: { 8 | name: "triggered", 9 | aliases: ['trigger'], 10 | category: "image", 11 | description: "Shows A Triggered User Embed", 12 | usage: "[username | nickname | mention | ID] (optional)", 13 | accessableby: "everyone" 14 | }, 15 | 16 | run: async (bot, message, args) => { 17 | 18 | let user = 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()) || message.member; 19 | let m = await message.channel.send("**Please wait...**"); 20 | let buffer = await AmeAPI.generate("triggered", { url: user.user.displayAvatarURL({ format: "png", size: 512 }), sepia: "true", invert: "true" }); 21 | let attachment = new Discord.MessageAttachment(buffer, "triggered.gif"); 22 | m.delete({ timeout: 5000 }); 23 | message.channel.send(attachment); 24 | } 25 | }; -------------------------------------------------------------------------------- /commands/image/tweet.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js") 2 | const fetch = require("node-fetch"); 3 | 4 | module.exports = { 5 | config: { 6 | name: "tweet", 7 | noalias: [''], 8 | category: "image", 9 | description : "Sends A Tweet", 10 | usage: "[username] ", 11 | accessableby: "everyone" 12 | }, 13 | run: async(bot, message, args) => { 14 | 15 | let user = args[0]; 16 | let text = args.slice(1).join(" "); 17 | 18 | let m = await message.channel.send("**Please wait...**"); 19 | 20 | if(!user){ 21 | return m.edit("**You Have To Enter Someone's Twitter Nickname!**"); 22 | } 23 | 24 | if(!text){ 25 | return m.edit("**You must enter a message!**"); 26 | } 27 | 28 | try { 29 | let res = await fetch(encodeURI(`https://nekobot.xyz/api/imagegen?type=tweet&username=${user}&text=${text}`)); 30 | let json = await res.json(); 31 | let attachment = new Discord.MessageAttachment(json.message, "tweet.png"); 32 | await message.channel.send(`**New tweet published by ${user}**`, attachment); 33 | m.delete({ timeout: 5000}); 34 | } catch(e){ 35 | m.edit("Error, Try Again! Mention Someone"); 36 | } 37 | } 38 | }; -------------------------------------------------------------------------------- /structures/poker/Deck.js: -------------------------------------------------------------------------------- 1 | const Card = require('./Card'); 2 | const suits = ['spades', 'hearts', 'diamonds', 'clubs']; 3 | const faces = ['Jack', 'Queen', 'King']; 4 | const { shuffle } = require('../../functions'); 5 | 6 | module.exports = class Deck { 7 | constructor(options = {}) { 8 | this.deckCount = options.deckCount || 1; 9 | this.includeJokers = options.includeJokers || false; 10 | this.deck = []; 11 | this.makeCards(this.deckCount); 12 | } 13 | 14 | makeCards (deckCount) { 15 | for (let i = 0; i < deckCount; i++) { 16 | for (const suit of suits) { 17 | this.deck.push(new Card('Ace', suit)); 18 | for (let j = 2; j <= 10; j++) this.deck.push(new Card(j, suit)); 19 | for (const face of faces) this.deck.push(new Card(face, suit)); 20 | } 21 | if (this.includeJokers) { 22 | this.deck.push(new Card('Joker', 'joker')); 23 | this.deck.push(new Card('Joker', 'joker')); 24 | } 25 | } 26 | this.deck = shuffle(this.deck); 27 | return this.deck; 28 | } 29 | 30 | draw (amount = 1) { 31 | const cards = []; 32 | for (let i = 0; i < amount; i++) { 33 | const card = this.deck[0]; 34 | this.deck.shift(); 35 | cards.push(card); 36 | } 37 | return amount === 1 ? cards[0] : cards; 38 | } 39 | 40 | reset() { 41 | this.deck = this.makeCards(this.deckCount); 42 | return this; 43 | } 44 | }; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "discord-bot", 3 | "version": "1.0.0", 4 | "description": "Discord Bot Made By Firez#2902", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "node index.js" 9 | }, 10 | "engines": { 11 | "node": "12.16.1" 12 | }, 13 | "author": "", 14 | "license": "ISC", 15 | "dependencies": { 16 | "common-tags": "^1.8.0", 17 | "discord.js": "^12.2.0", 18 | "ms": "^2.1.2", 19 | "node-fetch": "^2.6.1", 20 | "opusscript": "0.0.7", 21 | "random-puppy": "^1.1.0", 22 | "simple-youtube-api": "^5.2.1", 23 | "parse-ms": "^2.1.0", 24 | "weather-js": "^2.0.0", 25 | "ytdl-core": "^2.1.5", 26 | "relevant-urban": "^2.0.0", 27 | "http": "^0.0.0", 28 | "express": "^4.17.1", 29 | "@discordjs/opus": "^0.3.2", 30 | "fs": "^0.0.2", 31 | "quick.db": "^7.1.1", 32 | "iso-639-1": "^2.1.2", 33 | "mathjs": "^6.6.5", 34 | "canvas": "^2.6.1", 35 | "amethyste-api": "^1.1.3", 36 | "jimp": "^0.12.1", 37 | "wikijs": "^6.0.0", 38 | "dblapi.js": "^2.4.0", 39 | "path": "^0.12.7", 40 | "node-superfetch": "^0.1.10", 41 | "canvas-constructor": "^3.2.0", 42 | "fs-nextra": "^0.5.1", 43 | "aki-api": "^5.0.0", 44 | "giphy-api": "^2.0.1", 45 | "pokersolver": "^2.1.3" 46 | }, 47 | "devDependencies": {} 48 | } -------------------------------------------------------------------------------- /commands/info/channelinfo.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | module.exports = { 4 | config: { 5 | name: "channelinfo", 6 | aliases: ['ci', 'channeli', 'cinfo'], 7 | category: "info", 8 | description: "Shows Channel Info", 9 | usage: "[ channel mention | channel name | ID] (optional)", 10 | accessableby: "everyone" 11 | }, 12 | run: async (bot, message, args) => { 13 | let channel = message.mentions.channels.first() || bot.guilds.cache.get(message.guild.id).channels.cache.get(args[0]) || message.guild.channels.cache.find(r => r.name.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.channel; 14 | if (!channel) return message.channel.send("**Channel Not Found!**"); 15 | 16 | let channelembed = new MessageEmbed() 17 | .setTitle(`Channel Information for ${channel.name}`) 18 | .setThumbnail(message.guild.iconURL()) 19 | .addField("**NSFW**", channel.nsfw, true) 20 | .addField("**Channel ID**", channel.id, true) 21 | .addField("**Channel Type**", channel.type) 22 | .addField("**Channel Description**", `${channel.topic || "No Description"}`) 23 | .addField("**Channel Created At**", channel.createdAt) 24 | .setColor("GREEN") 25 | message.channel.send(channelembed); 26 | } 27 | } -------------------------------------------------------------------------------- /commands/image/phcomment.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js"); 2 | const fetch = require("node-fetch"); 3 | 4 | module.exports = { 5 | config: { 6 | name: "phcomment", 7 | aliases: ['phc'], 8 | category: "image", 9 | description: "Shows PH Comment", 10 | usage: '[text]', 11 | accessableby: "everyone" 12 | }, 13 | run: async (bot, message, args) => { 14 | 15 | let user = await message.mentions.members.first() 16 | let text = args.join(" "); 17 | 18 | if(user){ 19 | text = args.slice(1).join(" "); 20 | } else { 21 | user = message.author; 22 | } 23 | 24 | if(!text){ 25 | return message.channel.send("**Enter Text!**"); 26 | } 27 | 28 | let m = await message.channel.send("**Please Wait...**"); 29 | try { 30 | let res = await fetch(encodeURI(`https://nekobot.xyz/api/imagegen?type=phcomment&username=${user.username}&image=${user.displayAvatarURL({ format: "png", size: 512 })}&text=${text}`)); 31 | let json = await res.json(); 32 | let attachment = new Discord.MessageAttachment(json.message, "phcomment.png"); 33 | message.channel.send(attachment); 34 | m.delete({ timeout: 5000 }); 35 | } catch(e){ 36 | m.edit("Error, Try Again! Mention Someone"); 37 | } 38 | } 39 | }; 40 | -------------------------------------------------------------------------------- /commands/economy/beg.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const db = require("quick.db"); 3 | const ms = require("parse-ms"); 4 | 5 | module.exports = { 6 | config: { 7 | name: "beg", 8 | noalias: [""], 9 | category: "economy", 10 | description: "Beg for money", 11 | usage: " ", 12 | accessableby: "everyone" 13 | }, 14 | run: async (bot, message, args) => { 15 | let user = message.author; 16 | 17 | let timeout = 120000; 18 | let amount = 20; 19 | 20 | let beg = await db.fetch(`beg_${user.id}`); 21 | 22 | if (beg !== null && timeout - (Date.now() - beg) > 0) { 23 | let time = ms(timeout - (Date.now() - beg)); 24 | 25 | let timeEmbed = new MessageEmbed() 26 | .setColor("GREEN") 27 | .setDescription(`❌ You've already begged recently\n\nBeg again in ${time.minutes}m ${time.seconds}s `); 28 | message.channel.send(timeEmbed) 29 | } else { 30 | let moneyEmbed = new MessageEmbed() 31 | .setColor("GREEN") 32 | .setDescription(`✅ You've begged and received ${amount} coins`); 33 | message.channel.send(moneyEmbed) 34 | db.add(`money_${user.id}`, amount) 35 | db.add(`begs_${user.id}`, 1) 36 | db.set(`beg_${user.id}`, Date.now()) 37 | 38 | 39 | } 40 | } 41 | }; -------------------------------------------------------------------------------- /commands/moderation/disablemodlogchannel.js: -------------------------------------------------------------------------------- 1 | const db = require('quick.db'); 2 | 3 | module.exports = { 4 | config: { 5 | name: "disablemodlogchannel", 6 | aliases: ['dmc', 'disablem'], 7 | category: 'moderation', 8 | description: 'Disables Server Modlog Channel', 9 | usage: '[channel name | channel mention | channel ID]', 10 | accessableby: 'Administrators' 11 | }, 12 | run: async (bot, message, args) => { 13 | if (!message.member.hasPermission("ADMINISTRATOR")) return message.channel.send("**You Do Not Have The Required Permissions! - [ADMINISTRATOR]**") 14 | 15 | try { 16 | let a = db.fetch(`modlog_${message.guild.id}`) 17 | 18 | if (!a) { 19 | return message.channel.send('**There Is No Modlog Channel Set To Disable!**') 20 | } else { 21 | let channel = message.guild.channels.cache.get(a) 22 | bot.guilds.cache.get(message.guild.id).channels.cache.get(channel.id).send("**Welcome Channel Disabled!**") 23 | db.delete(`modlog_${message.guild.id}`) 24 | 25 | message.channel.send(`**Modlog Channel Has Been Successfully Disabled in \`${channel.name}\`**`) 26 | } 27 | return; 28 | } catch { 29 | return message.channel.send("**Error - `Missing Permissions or Channel Doesn't Exist`**") 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /commands/moderation/setprefix.js: -------------------------------------------------------------------------------- 1 | const db = require('quick.db'); 2 | 3 | module.exports = { 4 | config: { 5 | name: "setprefix", 6 | aliases: ['sp', 'prefix'], 7 | category: "moderation", 8 | description: "Sets Custom Prefix", 9 | usage: "[prefix]", 10 | accessableby: 'Administrators' 11 | }, 12 | run: async (bot, message, args) => { 13 | if (!message.member.hasPermission('ADMINISTRATOR')) return message.channel.send("**You Do Not Have Sufficient Permissions! - [ADMINISTRATOR]**") 14 | 15 | if (!args[0]) { 16 | let b = await db.fetch(`prefix_${message.guild.id}`); 17 | if (b) { 18 | return message.channel.send( 19 | `**Prefix Of This Server is \`${b}\`**` 20 | ); 21 | } else return message.channel.send("**Please Enter A Prefix To Set!**"); 22 | } 23 | 24 | try { 25 | 26 | let a = args.join(' '); 27 | let b = await db.fetch(`prefix_${message.guild.id}`) 28 | 29 | if (a === b) { 30 | return message.channel.send('**This is Already The Server Prefix!**') 31 | } else { 32 | db.set(`prefix_${message.guild.id}`, a) 33 | 34 | return message.channel.send(`**Successfuly Set Server Prefix To \`${a}\`**`) 35 | } 36 | } catch (e) { 37 | console.log(e) 38 | } 39 | } 40 | } -------------------------------------------------------------------------------- /structures/poker/Card.js: -------------------------------------------------------------------------------- 1 | const { firstUpperCase } = require('../../functions'); 2 | const displaySuits = { 3 | spades: '♠', 4 | diamonds: '♦', 5 | hearts: '♥', 6 | clubs: '♣', 7 | joker: '⭐' 8 | }; 9 | 10 | module.exports = class Card { 11 | constructor(value, suit) { 12 | this.value = value; 13 | this.suit = suit; 14 | } 15 | 16 | get blackjackValue() { 17 | if (this.value === 'Joker') return 0; 18 | if (this.value === 'King' || this.value === 'Queen' || this.value === 'Jack') return 10; 19 | if (this.value === 'Ace') return 11; 20 | return this.value; 21 | } 22 | 23 | get display() { 24 | return `${displaySuits[this.suit]} ${this.value}`; 25 | } 26 | 27 | get textDisplay() { 28 | return `${this.value} of ${firstUpperCase(this.suit)}`; 29 | } 30 | 31 | get pokersolverKey() { 32 | if (this.value === 'Joker') return null; 33 | let suitLetter; 34 | switch (this.suit) { 35 | case 'clubs': suitLetter = 'c'; break; 36 | case 'hearts': suitLetter = 'h'; break; 37 | case 'diamonds': suitLetter = 'd'; break; 38 | case 'spades': suitLetter = 's'; break; 39 | } 40 | let value; 41 | switch (this.value) { 42 | case 'King': value = 'K'; break; 43 | case 'Queen': value = 'Q'; break; 44 | case 'Jack': value = 'J'; break; 45 | case 'Ace': value = 'A'; break; 46 | case 10: value = 'T'; break; 47 | default: value = this.value; break; 48 | } 49 | return `${value}${suitLetter}`; 50 | } 51 | }; -------------------------------------------------------------------------------- /commands/moderation/disablewelcomechannel.js: -------------------------------------------------------------------------------- 1 | const db = require('quick.db'); 2 | 3 | module.exports = { 4 | config: { 5 | name: 'disablewelcomechannel', 6 | aliases: ['dwc', 'dw', 'disablewc'], 7 | category: 'moderation', 8 | description: 'Disables Server Welcome Channel', 9 | usage: '[channel name | channel ID | channel mention]', 10 | accessableby: 'Administrators' 11 | }, 12 | run: async (bot, message, args) => { 13 | if (!message.member.hasPermission("ADMINISTRATOR")) return message.channel.send("**You Do Not Have The Required Permissions! - [ADMINISTRATOR]**") 14 | 15 | try { 16 | let a = db.fetch(`welcome_${message.guild.id}`) 17 | 18 | if (!a) { 19 | return message.channel.send("**There Is No Welcome Channel Set To Disable!**") 20 | } else { 21 | let channel = message.guild.channels.cache.get(a) 22 | bot.guilds.cache.get(message.guild.id).channels.cache.get(channel.id).send("**Welcome Channel Disabled!**") 23 | db.delete(`welcome_${message.guild.id}`) 24 | 25 | message.channel.send(`**Welcome Channel Has Been Successfully Disabled in \`${channel.name}\`**`) 26 | } 27 | return; 28 | } catch { 29 | return message.channel.send("**Error - `Missing Permissions or Channel Doesn't Exist`**") 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /commands/image/captcha.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const fetch = require('node-fetch'); 3 | 4 | module.exports = { 5 | config: { 6 | name: "captcha", 7 | noalias: [''], 8 | category: "image", 9 | description: "Shows Captcha Image Of An User", 10 | usage: "[username | nickname | mention | ID](optional)", 11 | accessableby: "everyone" 12 | }, 13 | run: async (bot, message, args) => { 14 | 15 | let user = 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()) || message.member; 16 | let m = await message.channel.send("**Please Wait...**"); 17 | try { 18 | let res = await fetch(encodeURI(`https://nekobot.xyz/api/imagegen?type=captcha&username=${user.user.username}&url=${user.user.displayAvatarURL({ format: "png", size: 512 })}`)); 19 | let json = await res.json(); 20 | let attachment = new Discord.MessageAttachment(json.message, "captcha.png"); 21 | message.channel.send(attachment); 22 | m.delete({ timeout: 5000 }); 23 | } catch (e) { 24 | console.log(e); 25 | m.edit("Error, Try Again! Mention Someone"); 26 | } 27 | } 28 | }; -------------------------------------------------------------------------------- /commands/economy/balance.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const db = require("quick.db"); 3 | 4 | module.exports = { 5 | config: { 6 | name: "balance", 7 | aliases: ["bal"], 8 | category: "economy", 9 | description: "Shows Current Balance", 10 | usage: "[username | nickname | mention | ID](optional)", 11 | accessableby: "everyone" 12 | }, 13 | run: async (bot, message, args) => { 14 | let user = 15 | message.mentions.members.first() || 16 | message.guild.members.cache.get(args[0]) || 17 | message.guild.members.cache.find( 18 | r => 19 | r.user.username.toLowerCase() === args.join(" ").toLocaleLowerCase() 20 | ) || 21 | message.guild.members.cache.find( 22 | r => r.displayName.toLowerCase() === args.join(" ").toLocaleLowerCase() 23 | ) || 24 | message.member; 25 | 26 | let bal = db.fetch(`money_${user.id}`); 27 | 28 | if (bal === null) bal = 0; 29 | 30 | let bank = await db.fetch(`bank_${user.id}`); 31 | 32 | if (bank === null) bank = 0; 33 | 34 | if (user) { 35 | let moneyEmbed = new MessageEmbed() 36 | .setColor("GREEN") 37 | .setDescription( 38 | `**${user.user.username}'s Balance**\n\nPocket: ${bal}\nBank: ${bank}` 39 | ); 40 | message.channel.send(moneyEmbed); 41 | } else { 42 | return message.channel.send("**Enter A Valid User!**"); 43 | } 44 | } 45 | }; 46 | -------------------------------------------------------------------------------- /commands/economy/daily.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const db = require("quick.db"); 3 | const ms = require("parse-ms"); 4 | 5 | module.exports = { 6 | config: { 7 | name: "daily", 8 | aliases: ["day"], 9 | category: "economy", 10 | description: "Gives You 200 per day", 11 | usage: " ", 12 | accessableby: "everyone" 13 | }, 14 | run: async (bot, message, args) => { 15 | let user = message.author; 16 | 17 | let timeout = 86400000; 18 | let amount = 200; 19 | 20 | let daily = await db.fetch(`daily_${user.id}`); 21 | 22 | if (daily !== null && timeout - (Date.now() - daily) > 0) { 23 | let time = ms(timeout - (Date.now() - daily)); 24 | 25 | let timeEmbed = new MessageEmbed() 26 | .setColor("GREEN") 27 | .setDescription(`❌ You've already collected your daily reward\n\nCollect it again in ${time.hours}h ${time.minutes}m ${time.seconds}s `); 28 | message.channel.send(timeEmbed) 29 | } else { 30 | let moneyEmbed = new MessageEmbed() 31 | .setColor("GREEN") 32 | .setDescription(`✅ You've collected your daily reward of ${amount} coins`); 33 | message.channel.send(moneyEmbed) 34 | db.add(`money_${user.id}`, amount) 35 | db.set(`daily_${user.id}`, Date.now()) 36 | 37 | 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /commands/economy/weekly.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const db = require("quick.db"); 3 | const ms = require("parse-ms"); 4 | 5 | module.exports = { 6 | config: { 7 | name: "weekly", 8 | aliases: ["week"], 9 | category: "economy", 10 | description: "Gives You 5000 per Day", 11 | usage: " ", 12 | accessableby: "everyone" 13 | }, 14 | run: async (bot, message, args) => { 15 | 16 | let user = message.author; 17 | let timeout = 604800000; 18 | let amount = 5000; 19 | 20 | let weekly = await db.fetch(`weekly_${user.id}`); 21 | 22 | if (weekly !== null && timeout - (Date.now() - weekly) > 0) { 23 | let time = ms(timeout - (Date.now() - weekly)); 24 | 25 | let timeEmbed = new MessageEmbed() 26 | .setColor("GREEN") 27 | .setDescription(`❌ You have already collected your weekly reward\n\nCollect it again in ${time.days}d ${time.hours}h ${time.minutes}m ${time.seconds}s `); 28 | message.channel.send(timeEmbed) 29 | } else { 30 | let moneyEmbed = new MessageEmbed() 31 | .setColor("GREEN") 32 | .setDescription(`✅ You've collected your weekly reward of ${amount} coins`); 33 | message.channel.send(moneyEmbed) 34 | db.add(`money_${user.id}`, amount) 35 | db.set(`weekly_${user.id}`, Date.now()) 36 | 37 | 38 | } 39 | } 40 | } -------------------------------------------------------------------------------- /commands/image/gif.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const { giphy_API } = require('../../config.js'); 3 | const giphy = require('giphy-api')(giphy_API); 4 | 5 | module.exports = { 6 | config: { 7 | name: 'gif', 8 | category: 'image', 9 | aliases: ['search-gif', 'search-gifs'], 10 | description: 'Provide a query and I will return a gif!', 11 | usage: "[query]", 12 | accessableby: "everyone" 13 | }, 14 | run: async (bot, message, args) => { 15 | if (!args[0]) { 16 | const embed = new MessageEmbed() 17 | .setColor("GREEN") 18 | .setDescription("**Please Enter A Search Query!**") 19 | return message.channel.send(embed) 20 | } 21 | try { 22 | giphy.search(args.join(' ')).then(function (res) { 23 | let id = res.data[0].id; 24 | let url = `https://media.giphy.com/media/${id}/giphy.gif`; 25 | const embed = { 26 | color: 'GREEN', 27 | timestamp: new Date(), 28 | footer: { 29 | text: message.guild.name, 30 | icon_url: message.guild.iconURL() 31 | }, 32 | image: { 33 | url: url 34 | } 35 | }; 36 | message.channel.send({ embed }); 37 | }); 38 | } catch { 39 | return message.channel.send("**Not Found!**") 40 | } 41 | } 42 | }; -------------------------------------------------------------------------------- /commands/economy/work.js: -------------------------------------------------------------------------------- 1 | const db = require('quick.db') 2 | const { MessageEmbed } = require('discord.js') 3 | const ms = require("parse-ms"); 4 | const Jwork = require('../../JSON/works.json'); 5 | const JworkR = Jwork[Math.floor(Math.random() * Jwork.length)]; 6 | 7 | module.exports = { 8 | config: { 9 | name: "work", 10 | aliases: ["wr"], 11 | category: "economy", 12 | description: "Work to Earn Money", 13 | usage: " ", 14 | accessableby: "everyone" 15 | }, 16 | run: async (bot, message, args) => { 17 | 18 | let user = message.author; 19 | let author = await db.fetch(`work_${user.id}`) 20 | 21 | let timeout = 1800000; 22 | 23 | if (author !== null && timeout - (Date.now() - author) > 0) { 24 | let time = ms(timeout - (Date.now() - author)); 25 | 26 | let timeEmbed = new MessageEmbed() 27 | .setColor("GREEN") 28 | .setDescription(`❌ You have already worked recently\n\nTry again in ${time.minutes}m ${time.seconds}s `); 29 | message.channel.send(timeEmbed) 30 | } else { 31 | let amount = Math.floor(Math.random() * 80) + 1; 32 | let embed1 = new MessageEmbed() 33 | .setColor("GREEN") 34 | .setDescription(`✅ **${JworkR} ${amount}**`) 35 | message.channel.send(embed1) 36 | 37 | db.add(`works_${user.id}`, 1) 38 | db.add(`money_${user.id}`, amount) 39 | db.set(`work_${user.id}`, Date.now()) 40 | }; 41 | } 42 | }; 43 | -------------------------------------------------------------------------------- /commands/info/rolememberinfo.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | module.exports = { 4 | config: { 5 | name: "rolememberinfo", 6 | aliases: ['rolemembers', 'rmi'], 7 | category: "info", 8 | description: "Shows List Of Members Having A Role", 9 | usage: "[role name | role mention | ID]", 10 | accessableby: "everyone" 11 | }, 12 | run: async (bot, message, args) => { 13 | if (args.includes("@everyone")) return; 14 | 15 | if (args.includes("@here")) return; 16 | 17 | if (!args[0]) return message.channel.send("**Please Enter A Role!**") 18 | 19 | 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()); 20 | 21 | if (!role) return message.channel.send("**Please Enter A Valid Role!**"); 22 | 23 | let membersWithRole = message.guild.members.cache.filter(member => { 24 | return member.roles.cache.find(r => r.name === role.name); 25 | }).map(member => { 26 | return member.user.tag; 27 | }) 28 | if (membersWithRole > 2048) return message.channel.send('**List Is Too Long!**') 29 | 30 | let roleEmbed = new MessageEmbed() 31 | .setColor("GREEN") 32 | .setThumbnail(message.guild.iconURL()) 33 | .setTitle(`Users With The ${role.name} Role!`) 34 | .setDescription(membersWithRole.join("\n")); 35 | message.channel.send(roleEmbed); 36 | } 37 | } -------------------------------------------------------------------------------- /commands/info/roleinfo.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | 3 | module.exports = { 4 | config: { 5 | name: 'roleinfo', 6 | category: "info", 7 | aliases: ["rinfo"], 8 | description: "shows stats of the mentioned role", 9 | usage: "[role name | role mention | ID]", 10 | accessableby: 'everyone' 11 | }, 12 | run: async (bot, message, args) => { 13 | if (!args[0]) return message.channel.send("**Please Enter A Role!**") 14 | 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()); 15 | if (!role) return message.channel.send("**Please Enter A Valid Role!**"); 16 | 17 | const status = { 18 | false: "No", 19 | true: "Yes" 20 | } 21 | 22 | let roleembed = new MessageEmbed() 23 | .setColor("#00ff00") 24 | .setAuthor("Role Info") 25 | .setThumbnail(message.guild.iconURL()) 26 | .addField("**ID**", `\`${role.id}\``, true) 27 | .addField("**Name**", role.name, true) 28 | .addField("**Hex**", role.hexColor) 29 | .addField("**Members**", role.members.size) 30 | .addField("**Position**", role.position) 31 | .addField("**Mentionable**", status[role.mentionable]) 32 | .setFooter(message.member.displayName, message.author.displayAvatarURL()) 33 | .setTimestamp() 34 | 35 | message.channel.send(roleembed); 36 | } 37 | } -------------------------------------------------------------------------------- /commands/fun/calculate.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | const math = require('mathjs'); 3 | 4 | module.exports = { 5 | config: { 6 | name: "calculate", 7 | aliases: ['calc', 'calculator'], 8 | description: "Shows Calculated Answers Of User's Query", 9 | usage: "[query](mathematical)", 10 | accessableby: "everyone" 11 | }, 12 | run: async (bot, message, args) => { 13 | 14 | if (!args[0]) return message.channel.send("**Enter Something To Calculate**"); 15 | 16 | let result; 17 | try { 18 | result = math.evaluate(args.join(" ").replace(/[x]/gi, "*").replace(/[,]/g, ".").replace(/[÷]/gi, "/")); 19 | } catch (e) { 20 | return message.channel.send("**Enter Valid Calculation!**\n\n**List of Calculations** - \n1. **sqrt equation** - `sqrt(3^2 + 4^2) = 5`\n2. **Units to Units** - `2 inch to cm = 0.58`\n3. **Complex Expressions Like** - `cos(45 deg) = 0.7071067811865476`\n4. **Basic Maths Expressions** - `+, -, ^, /, decimals` = **2.5 - 2 = 0.5**"); 21 | } 22 | 23 | let embed = new Discord.MessageEmbed() 24 | .setColor("GREEN") 25 | .setAuthor(`${bot.user.username} Calculator`, message.author.displayAvatarURL({ dynamic: true })) 26 | .addField("**Operation**", `\`\`\`Js\n${args.join("").replace(/[x]/gi, "*").replace(/[,]/g, ".").replace(/[÷]/gi, "/")}\`\`\``) 27 | .addField("**Result**", `\`\`\`Js\n${result}\`\`\``) 28 | .setFooter(message.guild.name, message.guild.iconURL()); 29 | message.channel.send(embed); 30 | } 31 | } -------------------------------------------------------------------------------- /commands/image/facepalm.js: -------------------------------------------------------------------------------- 1 | const Canvas = require("canvas"); 2 | const Discord = require("discord.js"); 3 | 4 | module.exports = { 5 | config: { 6 | name: "facepalm", 7 | aliases: ['fp'], 8 | category: 'image', 9 | description: "Shows Facepalmed User", 10 | usage: "[username | nickname | mention | ID] (optional)", 11 | accessableby: "everyones" 12 | }, 13 | run: async (bot, message, args) => { 14 | let user = 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()) || message.member, 15 | m = await message.channel.send("**Please Wait...**"), 16 | canvas = Canvas.createCanvas(632, 357), 17 | ctx = canvas.getContext("2d"); 18 | 19 | ctx.fillStyle = "black"; 20 | ctx.fillRect(0, 0, 632, 357); 21 | 22 | let avatar = await Canvas.loadImage(user.user.displayAvatarURL({ format: "png", size: 512 })); 23 | ctx.drawImage(avatar, 199, 112, 235, 235); 24 | 25 | let layer = await Canvas.loadImage('https://raw.githubusercontent.com/Androz2091/AtlantaBot/master/assets/img/facepalm.png'); 26 | ctx.drawImage(layer, 0, 0, 632, 357); 27 | 28 | let attachment = new Discord.MessageAttachment(canvas.toBuffer(), "facepalm.png"); 29 | 30 | m.delete({ timeout: 5000 }); 31 | message.channel.send(attachment); 32 | } 33 | }; -------------------------------------------------------------------------------- /commands/economy/leaderboard.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const db = require('quick.db'); 3 | 4 | module.exports = { 5 | config: { 6 | name: "leaderboard", 7 | aliases: ['lb'], 8 | category: 'economy', 9 | description: 'Shows Server\'s Top 10 Users of Economy Leaderboard', 10 | usage: ' ', 11 | accessableby: "everyone" 12 | }, 13 | run: async (bot, message, args) => { 14 | let money = db.all().filter(data => data.ID.startsWith(`money_`)).sort((a, b) => b.data - a.data); 15 | if (!money.length) { 16 | let noEmbed = new MessageEmbed() 17 | .setAuthor(message.member.displayName, message.author.displayAvatarURL()) 18 | .setColor("GREEN") 19 | .setFooter("Nothing To See Here Yet!") 20 | return message.channel.send(noEmbed) 21 | }; 22 | 23 | money.length = 10; 24 | var finalLb = ""; 25 | for (var i in money) { 26 | if (money[i].data === null) money[i].data = 0 27 | finalLb += `**${money.indexOf(money[i]) + 1}. ${bot.users.cache.get(money[i].ID.split('_')[1]) ? bot.users.cache.get(money[i].ID.split('_')[1]).tag : "Unknown User#0000"}** - ${money[i].data} :dollar:\n`; 28 | }; 29 | 30 | const embed = new MessageEmbed() 31 | .setTitle(`Leaderboard Of ${message.guild.name}`) 32 | .setColor("GREEN") 33 | .setDescription(finalLb) 34 | .setFooter(bot.user.tag, bot.user.displayAvatarURL()) 35 | .setTimestamp() 36 | message.channel.send(embed); 37 | } 38 | }; -------------------------------------------------------------------------------- /commands/economy/addmoney.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const db = require("quick.db"); 3 | 4 | module.exports = { 5 | config: { 6 | name: "addmoney", 7 | aliases: ["am"], 8 | category: "economy", 9 | description: "Adds Money to a user", 10 | usage: "[ mention | ID]", 11 | accessableby: "Administrator, Owner" 12 | }, 13 | run: async (bot, message, args) => { 14 | if (!message.member.hasPermission("ADMINISTRATOR")) return message.channel.send("❌ You Do Not Have Permissions To Add Money! - [ADMINISTRATOR]"); 15 | if (!args[0]) return message.channel.send("**Please Enter A User!**") 16 | 17 | let user = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args[0].toLocaleLowerCase()) || message.guild.members.cache.find(r => r.displayName.toLowerCase() === args[0].toLocaleLowerCase()); 18 | if (!user) return message.channel.send("**Enter A Valid User!**") 19 | if (!args[1]) return message.channel.send("**Please Enter A Amount!**") 20 | if (isNaN(args[1])) return message.channel.send(`**❌ Your Amount Is Not A Number!**`); 21 | if (args[0] > 10000) return message.channel.send("**Cannot Add That Much Amount!**") 22 | db.add(`money_${user.id}`, args[1]) 23 | let bal = db.fetch(`money_${user.id}`) 24 | 25 | let moneyEmbed = new MessageEmbed() 26 | .setColor("GREEN") 27 | .setDescription(`✅ Added ${args[1]} coins\n\nNew Balance: ${bal}`); 28 | message.channel.send(moneyEmbed) 29 | 30 | } 31 | } -------------------------------------------------------------------------------- /commands/info/serverinfo.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js") 2 | const { greenlight } = require("../../JSON/colours.json") 3 | 4 | module.exports = { 5 | config: { 6 | name: "serverinfo", 7 | description: "Pulls the serverinfo of the guild!", 8 | usage: " ", 9 | category: "info", 10 | accessableby: "everyone", 11 | aliases: ["sinfo"] 12 | }, 13 | run: async (bot, message, args) => { 14 | let owner = []; 15 | await bot.users.fetch(message.guild.ownerID).then(o => owner.push(o.tag)) 16 | try { 17 | let embed = new MessageEmbed() 18 | .setColor(greenlight) 19 | .setTitle("Server Info") 20 | .setThumbnail(message.guild.iconURL()) 21 | .setAuthor(`${message.guild.name} Info`, message.guild.iconURL()) 22 | .addField("**Guild Name**", `${message.guild.name}`, true) 23 | .addField("**Guild Owner**", `${owner}`, true) 24 | .addField("**ID**", `${message.guild.id}`) 25 | .addField("**Created At**", `${message.guild.createdAt}`) 26 | .addField("**Text Channels**", `${message.guild.channels.cache.filter(r => r.type === "text").size}`) 27 | .addField("**Voice Channels**", `${message.guild.channels.cache.filter(c => c.type === "voice").size}`) 28 | .addField("**Members**", `${message.guild.memberCount}`, true) 29 | .addField("**Roles**", `${message.guild.roles.cache.size}`, true) 30 | message.channel.send(embed); 31 | } 32 | catch { 33 | return message.channel.send('Something Went Wrong!') 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /commands/economy/setinfo.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const db = require('quick.db'); 3 | const { chunk } = require('../../functions'); 4 | 5 | module.exports = { 6 | config: { 7 | name: "setinfo", 8 | aliases: ['setbio'], 9 | description: "Set Profile Description", 10 | category: 'economy', 11 | usage: '[info]', 12 | accessableby: 'everyone' 13 | }, 14 | run: async (bot, message, args) => { 15 | let user = message.author; 16 | if (!args[0]) { 17 | let fetchInfo = await db.fetch(`info_${user.id}`) 18 | if (fetchInfo) { 19 | let embed = new MessageEmbed() 20 | .setColor("GREEN") 21 | .setAuthor('Info Is Already Set', message.author.displayAvatarURL()) 22 | .setDescription(`**${fetchInfo}**`) 23 | .setFooter(message.guild.name, message.guild.iconURL()) 24 | return message.channel.send(embed) 25 | } 26 | } 27 | let newInfo = args.join(' '); 28 | if (!newInfo) return message.channel.send('**Please Enter Your Info!**'); 29 | if (newInfo.length > 165) return message.channel.send(`**Max \`165\` Characters Allowed!**`); 30 | let newsInfo = chunk(newInfo, 42).join('\n'); 31 | db.set(`info_${user.id}`, newsInfo); 32 | 33 | let notesEmbed = new MessageEmbed() 34 | .setColor("GREEN") 35 | .setAuthor(`Your Info Box Has Been Set`, message.author.displayAvatarURL()) 36 | .setDescription(newsInfo) 37 | .setFooter(message.guild.name, message.guild.iconURL()) 38 | message.channel.send(notesEmbed); 39 | } 40 | }; -------------------------------------------------------------------------------- /commands/image/avatar.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | config: { 3 | name: "avatar", 4 | aliases: ["av"], 5 | category: "image", 6 | description: "Shows Avatar", 7 | usage: "[username | nickname | mention | ID](optional)", 8 | accessableby: "everyone" 9 | }, 10 | run: async (bot, message, args) => { 11 | 12 | let user = 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()) || message.member; 13 | 14 | if (args[0]) { 15 | message.channel.send({ 16 | embed: { 17 | 18 | title: `${user.user.username}'s Avatar`, 19 | 20 | color: 0xFFEFD5, 21 | 22 | image: { 23 | url: `${user.user.displayAvatarURL({dynamic: true})}` + '?size=4096' 24 | }, 25 | 26 | timestamp: new Date(), 27 | 28 | footer: { 29 | text: message.guild.name, 30 | icon_url: message.guild.iconURL() 31 | } 32 | } 33 | }) 34 | } 35 | else if (!args[0]) { 36 | message.channel.send({ 37 | embed: { 38 | 39 | title: `${user.user.username}'s Avatar`, 40 | 41 | color: 0xFFEFD5, 42 | 43 | image: { 44 | url: `${user.user.displayAvatarURL({ dynamic: true })}` + '?size=4096' 45 | }, 46 | 47 | timestamp: new Date(), 48 | 49 | footer: { 50 | text: message.guild.name, 51 | icon_url: message.guild.iconURL() 52 | } 53 | 54 | } 55 | }) 56 | } 57 | } 58 | } -------------------------------------------------------------------------------- /commands/economy/removemoney.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed }= require("discord.js"); 2 | const db = require("quick.db"); 3 | 4 | module.exports = { 5 | config: { 6 | name: "removemoney", 7 | aliases: ["rm"], 8 | category: "economy", 9 | description: "Removes money from a user", 10 | usage: "[ mention | ID]", 11 | accessableby: "Administrator, Owner" 12 | }, 13 | run: async (bot, message, args) => { 14 | if (!message.member.hasPermission("ADMINISTRATOR", "MANAGE_GUILD")) return message.channel.send("❌ You do not have permissions to remove money!"); 15 | if (!args[0]) return message.channel.send("**Please Enter A User!**") 16 | 17 | let user = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args[0].toLocaleLowerCase()) || message.guild.members.cache.find(r => r.displayName.toLowerCase() === args[0].toLocaleLowerCase()); 18 | if (!user) return message.channel.send("**Enter A Valid User!**") 19 | 20 | if (!args[1]) return message.channel.send("**Please Enter A Amount!**") 21 | if (isNaN(args[1])) return message.channel.send("**Enter Valid Amount!**"); 22 | let bal = await db.fetch(`money_${user.id}`) 23 | 24 | if (args[0] > bal) return message.channel.send("**Cannot Remove That Much Money!**") 25 | db.subtract(`money_${user.id}`, args[1]) 26 | let bal2 = await db.fetch(`money_${user.id}`) 27 | 28 | let moneyEmbed = new MessageEmbed() 29 | .setColor("GREEN") 30 | .setDescription(`✅ Removed ${args[1]} coins\n\nNew Balance: ${bal2}`); 31 | message.channel.send(moneyEmbed) 32 | 33 | } 34 | } -------------------------------------------------------------------------------- /commands/owner/getinvite.js: -------------------------------------------------------------------------------- 1 | const ownerid = "457556815345877003"; 2 | 3 | module.exports = { 4 | config: { 5 | name: "getinvite", 6 | aliases: ['getinv', 'gi'], 7 | category: "owner", 8 | description: "Generates an invitation to the server in question.", 9 | usage: "[ID | name]", 10 | accessableby: "Owner" 11 | }, 12 | run: async(bot, message, args) => { 13 | if (message.author.id === ownerid) { 14 | let guild = null; 15 | 16 | if (!args[0]) return message.channel.send("Enter An Name") 17 | 18 | if(args[0]){ 19 | let fetched = bot.guilds.cache.find(g => g.name === args.join(" ")); 20 | let found = bot.guilds.cache.get(args[0]); 21 | if(!found) { 22 | if(fetched) { 23 | guild = fetched; 24 | } 25 | } else { 26 | guild = found 27 | } 28 | } else { 29 | return message.channel.send("Invalid Name!"); 30 | } 31 | if(guild){ 32 | let tChannel = guild.channels.cache.find(ch => ch.type == "text" && ch.permissionsFor(ch.guild.me).has("CREATE_INSTANT_INVITE")); 33 | if(!tChannel) { 34 | return message.channel.send("An Error Has Occured Try Again!"); 35 | } 36 | let invite = await tChannel.createInvite({ temporary: false, maxAge: 0 }).catch(err => { 37 | return message.channel.send(`${err} has occured!`); 38 | }); 39 | message.channel.send(invite.url); 40 | } else { 41 | return message.channel.send(`\`${args.join(' ')}\` - Bot is Not in this server`); 42 | } 43 | } else { 44 | return; 45 | } 46 | } 47 | 48 | } -------------------------------------------------------------------------------- /commands/fun/roast.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const roasts = require('../../JSON/roast.json'); 3 | 4 | module.exports = { 5 | config: { 6 | name: "roast", 7 | category: "fun", 8 | noalias: [''], 9 | description: "Roasts people", 10 | usage: "[username | nickname | mention | ID]", 11 | accesableby: "everyone" 12 | }, 13 | run: async (bot, message, args) => { 14 | 15 | let member = 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()); 16 | 17 | let roast = roasts.roast[Math.floor((Math.random() * roasts.roast.length))]; 18 | 19 | if(!args[0]) { 20 | const sembed = new MessageEmbed() 21 | .setAuthor(message.guild.name, message.guild.iconURL()) 22 | .setColor("GREEN") 23 | .setDescription("**Do You Really Want To Roast Yourself?**") 24 | .setFooter(message.member.displayName, message.author.displayAvatarURL()) 25 | .setTimestamp() 26 | message.channel.send(sembed); 27 | } 28 | else if (args[0]) { 29 | const embed = new MessageEmbed() 30 | .setAuthor(message.guild.name, message.guild.iconURL()) 31 | .setTitle(`${message.author.username}-`) 32 | .setColor("GREEN") 33 | .setDescription(`${roast}`) 34 | .setFooter(member.displayName, member.user.displayAvatarURL()) 35 | .setTimestamp() 36 | message.channel.send(embed); 37 | } 38 | } 39 | } -------------------------------------------------------------------------------- /commands/info/news.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const fetch = require('node-fetch'); 3 | const { news_API } = require('../../config'); 4 | 5 | module.exports = { 6 | config: { 7 | name: 'news', 8 | aliases: ['globalnews', 'reuters'], 9 | description: 'Replies with the 5 latest world news headlines', 10 | category: "info", 11 | usage: " ", 12 | accessableby: "everyone" 13 | }, 14 | run: async (bot, message, args) => { 15 | try { 16 | const response = await fetch( 17 | `https://newsapi.org/v2/top-headlines?sources=reuters&pageSize=5&apiKey=${news_API}` 18 | ); 19 | const json = await response.json(); 20 | const articleArr = json.articles; 21 | let processArticle = article => { 22 | const embed = new MessageEmbed() 23 | .setColor('GREEN') 24 | .setTitle(article.title) 25 | .setURL(article.url) 26 | .setAuthor(article.author) 27 | .setDescription(article.description) 28 | .setThumbnail(article.urlToImage) 29 | .setTimestamp(article.publishedAt) 30 | .setFooter(message.guild.name, message.guild.iconURL()); 31 | return embed; 32 | }; 33 | async function processArray(array) { 34 | for (const article of array) { 35 | const msg = await processArticle(article); 36 | message.channel.send(msg); 37 | } 38 | } 39 | await processArray(articleArr); 40 | } catch (e) { 41 | message.channel.send('Something failed along the way'); 42 | } 43 | } 44 | }; -------------------------------------------------------------------------------- /commands/owner/eval.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js') 2 | 3 | module.exports = { 4 | config: { 5 | name: "eval", 6 | description: "Evaluates js code", 7 | accessableby: "Bot Owner", 8 | category: "owner", 9 | aliases: ["e"], 10 | usage: 'eval ' 11 | }, 12 | run: async (bot, message, args) => { 13 | function clean(text) { 14 | if (typeof text === "string") 15 | return text 16 | .replace(/`/g, "`" + String.fromCharCode(8203)) 17 | .replace(/@/g, "@" + String.fromCharCode(8203)); 18 | else return text; 19 | } 20 | let owner = '457556815345877003' 21 | 22 | if (!owner.includes(message.author.id)) return; 23 | 24 | try { 25 | const code = args.join(" "); 26 | let evaled = eval(code); 27 | 28 | if (typeof evaled !== "string") evaled = require("util").inspect(evaled); 29 | 30 | message.react("✅"); 31 | var emb = new MessageEmbed() 32 | .setTitle('Result') 33 | .setDescription(`\`\`\`js` + '\n' + clean(evaled) + `\n` + `\`\`\``) 34 | .setFooter(bot.user.username, bot.user.displayAvatarURL({ dynamic: true })) 35 | .setColor(0xd26a0e) 36 | message.channel.send(emb); 37 | } catch (err) { 38 | message.react("⚠"); 39 | var emb = new MessageEmbed() 40 | .setTitle('Result') 41 | .setDescription(`\`\`\`js` + '\n' + clean(err) + `\n` + `\`\`\``) 42 | .setFooter(bot.user.username, bot.user.displayAvatarURL({ dynamic: true })) 43 | .setColor(0xd26a0e) 44 | message.channel.send(emb); 45 | } 46 | } 47 | } -------------------------------------------------------------------------------- /commands/fun/urbandictionary.js: -------------------------------------------------------------------------------- 1 | const urban = require('relevant-urban'); 2 | const { MessageEmbed } = require('discord.js'); 3 | 4 | module.exports = { 5 | config: { 6 | name: "urbandictionary", 7 | aliases: ["ud", "urban"], 8 | category: "fun", 9 | description: "Give information about urban words!", 10 | usage: "[word]", 11 | accessableby: "everyone" 12 | }, 13 | run: async (bot, message, args) => { 14 | if(!args[0]) 15 | return message.channel.send("Please Enter Something To Search"); 16 | 17 | let image = "http://cdn.marketplaceimages.windowsphone.com/v8/images/5c942bfe-6c90-45b0-8cd7-1f2129c6e319?imageType=ws_icon_medium"; 18 | try { 19 | let res = await urban(args.join(' ')) 20 | if (!res) return message.channel.send("No results found for this topic, sorry!"); 21 | let { word, urbanURL, definition, example, thumbsUp, thumbsDown, author } = res; 22 | 23 | let embed = new MessageEmbed() 24 | .setColor("GREEN") 25 | .setAuthor(`Word - ${word}`) 26 | .setThumbnail(image) 27 | .setDescription(`**Defintion:**\n*${definition || "No definition"}*\n\n**Example:**\n*${example || "No Example"}*`) 28 | .addField('**Rating:**', `**\`Upvotes: ${thumbsUp} | Downvotes: ${thumbsDown}\`**`) 29 | .addField("**Link**", `[link to ${word}](${urbanURL})`) 30 | .addField("**Author:**", `${author || "unknown"}`) 31 | .setTimestamp() 32 | 33 | message.channel.send(embed) 34 | 35 | } catch (e) { 36 | console.log(e) 37 | return message.channel.send("looks like i've broken! Try again") 38 | } 39 | } 40 | } -------------------------------------------------------------------------------- /JSON/works.json: -------------------------------------------------------------------------------- 1 | [ 2 | "You work as a flatulence smell reduction underwear maker and earn", 3 | "You work at Grandma's restaurant as a cook and earn", 4 | "You work as a professional smuggler and earn", 5 | "You work as a pumpkin painter and earn", 6 | "You work as a engineer and earn", 7 | "You work as a meerkat behaviour consultant and earn", 8 | "Your job as a fart collector is very interesting and earns you", 9 | "You work as a penguinologist and earn", 10 | "You work as a ear cleaner and earn", 11 | "You develop games and earn", 12 | "You work as a personal shopper and earn", 13 | "You work as a dog surfing instructor and earn", 14 | "You work as a beefeater and earn", 15 | "You work as a comedian and earn", 16 | "You work as the head of elephants and earn", 17 | "You work as an elementary school teacher and earn", 18 | "You worked as a voice actor for Spongebob and managed to gain", 19 | "You had a fruitful day at the office today and earned", 20 | "You actually finished the plate of vegetables that your parents made you eat! You were awarded", 21 | "You work as child birth educator and earn", 22 | "You work as a body pillow factory salesman on the Internet for real weebs, the weebs gave you", 23 | "You work as a vibration consultant and earn", 24 | "Work at the icecream shop of your childhood dreams and earn", 25 | "You work as a professional minecraft hacker. You manage to rake in", 26 | "You dabbed so hard that even your mother is proud! You make", 27 | "You work as a professional cleaner. After hiding the body, you're handed", 28 | "You got cloned for sciene. You earned", 29 | "You work as a police officer and earn", 30 | "You work as a bush pruner for Donald Trump and earn", 31 | "You work as a paper towel sniffer and earn", 32 | "You work as a water slide tester and earn", 33 | "You milk a cow for" 34 | ] -------------------------------------------------------------------------------- /commands/economy/setbackground.js: -------------------------------------------------------------------------------- 1 | const db = require('quick.db'); 2 | const { MessageEmbed } = require('discord.js'); 3 | const { PREFIX } = require('../../config') 4 | 5 | module.exports = { 6 | config: { 7 | name: "setbackground", 8 | aliases: ['setbg'], 9 | category: "economy", 10 | description: 'Sets Profile Background', 11 | usage: "[upload Image]", 12 | accessableby: 'everyone' 13 | }, 14 | run: async (bot, message, args) => { 15 | 16 | let prefix; 17 | let fetched = await db.fetch(`prefix_${message.guild.id}`); 18 | 19 | if (fetched === null) { 20 | prefix = PREFIX 21 | } else { 22 | prefix = fetched 23 | } 24 | let user = message.author; 25 | let amount = 250; 26 | let bal = await db.fetch(`money_${user.id}`) 27 | 28 | let newBg = message.attachments.first() 29 | let fetchBg = await db.fetch(`bg_${user.id}`); 30 | if (!newBg) { 31 | if (fetchBg) { 32 | return message.channel.send(`**Profile Background Already Set As - \`${fetchBg}\`**`) 33 | } else { 34 | return message.channel.send("**You Need To Upload The Image To Set New Background!**") 35 | } 36 | } 37 | 38 | if (bal < amount) return message.channel.send(`**You Do Not Have Sufficient Money!\nPrice To Change Background - ${amount}**`) 39 | db.subtract(`money_${user.id}`, amount) 40 | db.set(`bg_${user.id}`, newBg.url) 41 | 42 | let embed = new MessageEmbed() 43 | .setColor("GREEN") 44 | .setAuthor(`Your Background Image Has Been Set`, user.displayAvatarURL()) 45 | .setDescription(`**\`${amount}\` Has Been Deducted And Profile Background Has Been Set\nLink - \`${newBg.url}\`!**`) 46 | .setFooter(`To Check Background Type ${prefix}profile`) 47 | return message.channel.send(embed) 48 | } 49 | } -------------------------------------------------------------------------------- /commands/info/invites.js: -------------------------------------------------------------------------------- 1 | const Discord = require('discord.js'); 2 | 3 | module.exports = { 4 | config: { 5 | name: "invitations", 6 | aliases: ['invites'], 7 | category: "info", 8 | description: "Shows Users Joined Through Someone's Invites", 9 | usage: "[name | nickname | mention | ID] (optional)", 10 | accessableby: "everyone" 11 | }, 12 | run: async (bot, message, args) => { 13 | try { 14 | let member = 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()) || message.member; 15 | 16 | let invites = await message.guild.fetchInvites() 17 | 18 | let memberInvites = invites.filter(i => i.inviter && i.inviter.id === member.user.id); 19 | 20 | if (memberInvites.size <= 0) { 21 | return message.channel.send(`**${member.displayName} didn't invite anyone to the server!**`, (member === message.member ? null : member)); 22 | {} } 23 | 24 | let content = memberInvites.map(i => i.code).join("\n"); 25 | let index = 0; 26 | memberInvites.forEach(invite => index += invite.uses); 27 | 28 | let embed = new Discord.MessageEmbed() 29 | .setColor("GREEN") 30 | .setFooter(message.guild.name, message.guild.iconURL()) 31 | .setAuthor(`Invite Tracker for ${message.guild.name}`) 32 | .setDescription(`Information on Invites of ${member.displayName}`) 33 | .addField("**No. Invited Persons**", index) 34 | .addField("Invitation Codes\n\n", content); 35 | message.channel.send(embed); 36 | } catch (e) { 37 | return message.channel.send(e.message) 38 | } 39 | } 40 | }; -------------------------------------------------------------------------------- /commands/fun/motivation.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const jsonQuotes = require('../../JSON/motivational.json') 3 | 4 | module.exports = { 5 | config: { 6 | name: 'motivation', 7 | aliases: ['motivate', 'motivational'], 8 | description: 'Get a random motivation quote', 9 | category: "fun", 10 | usage: "[username | nickname | mention | ID](optional)", 11 | accessableby: "everyone" 12 | }, 13 | run: async (bot, message, args) => { 14 | let member = 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()) || message.member; 15 | 16 | const randomQuote = jsonQuotes.quotes[Math.floor((Math.random() * jsonQuotes.quotes.length))]; 17 | if (!args[0]) { 18 | const quoteEmbed = new MessageEmbed() 19 | .setAuthor(message.guild.name, message.guild.iconURL()) 20 | .setTitle(randomQuote.author) 21 | .setDescription(randomQuote.text) 22 | .setColor('GREEN') 23 | .setFooter(member.displayName, member.user.displayAvatarURL()) 24 | .setTimestamp() 25 | return message.channel.send(quoteEmbed); 26 | } 27 | else if (args[0]) { 28 | const embed = new MessageEmbed() 29 | .setAuthor(message.guild.name, message.guild.iconURL()) 30 | .setColor("GREEN") 31 | .setTitle(`${randomQuote.author} -`) 32 | .setDescription(`**${randomQuote.text}** \n\nBy ${message.member.displayName} to ${member.displayName}`) 33 | .setFooter(member.displayName, member.user.displayAvatarURL()) 34 | .setTimestamp() 35 | message.channel.send(embed) 36 | } 37 | } 38 | }; -------------------------------------------------------------------------------- /commands/games/rps.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const { promptMessage } = require("../../functions"); 3 | 4 | const chooseArr = ["🗻", "📰", "✂"]; 5 | 6 | module.exports = { 7 | config: { 8 | name: "rps", 9 | category: "games", 10 | aliases: ['rockpaperscissors'], 11 | description: "Rock Paper Scissors Game. React to one of the emojis to play the game.", 12 | usage: " ", 13 | accessableby: "everyone" 14 | }, 15 | run: async (bot, message, args) => { 16 | try 17 | { const embed = new MessageEmbed() 18 | .setColor("GREEN") 19 | .setAuthor(message.member.displayName, message.author.displayAvatarURL()) 20 | .setFooter(message.guild.me.displayName, bot.user.displayAvatarURL()) 21 | .setDescription("**Play A Game of RPS Against The Bot!\nSelect Reactions To Play!**") 22 | .setTimestamp(); 23 | 24 | const m = await message.channel.send(embed); 25 | const reacted = await promptMessage(m, message.author, 30, chooseArr); 26 | 27 | const botChoice = chooseArr[Math.floor(Math.random() * chooseArr.length)]; 28 | 29 | const result = await getResult(reacted, botChoice); 30 | await m.reactions.removeAll(); 31 | 32 | embed 33 | .setDescription("") 34 | .addField(`**${result}**`, `${reacted} vs ${botChoice}`); 35 | 36 | m.edit(embed); 37 | 38 | } catch { 39 | return message.channel.send('**Missing Permissions - [MANAGE_MESSAGES]!**') 40 | } 41 | function getResult(me, botChosen) { 42 | if ((me === "🗻" && botChosen === "✂") || 43 | (me === "📰" && botChosen === "🗻") || 44 | (me === "✂" && botChosen === "📰")) { 45 | return "You won!"; 46 | } else if (me === botChosen) { 47 | return "Its a tie!"; 48 | } else { 49 | return "You lost!"; 50 | } 51 | 52 | } 53 | 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /commands/info/instasearch.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const fetch = require("node-fetch"); 3 | 4 | module.exports = { 5 | config: { 6 | name: "instasearch", 7 | aliases: ["searchinsta", "sinsta"], 8 | category: "info", 9 | description: "Find out some nice instagram statistics", 10 | usage: "[instagram username]", 11 | accessableby: "everyone" 12 | }, 13 | run: async (bot, message, args) => { 14 | const name = args.join(" "); 15 | 16 | if (!name) { 17 | return message.channel.send("**Please Enter A Name!**") 18 | .then(m => m.delete({timeout: 5000})); 19 | } 20 | 21 | const url = `https://instagram.com/${name}/?__a=1`; 22 | 23 | let res; 24 | 25 | try { 26 | res = await fetch(url).then(url => url.json()); 27 | } catch (e) { 28 | return message.channel.send("I couldn't find that account").then(msg => { 29 | msg.delete({timeout: 5000}) 30 | }) 31 | } 32 | 33 | const account = res.graphql.user; 34 | 35 | const embed = new MessageEmbed() 36 | .setColor("GREEN") 37 | .setTitle(account.full_name) 38 | .setURL(`https://instagram.com/${name}`) 39 | .setThumbnail(account.profile_pic_url_hd) 40 | .setDescription("Profile information") 41 | .addField("**Username**", `${account.username}`) 42 | .addField("**Full name**", `${account.full_name}`) 43 | .addField("**Biography**", `${account.biography.length == 0 ? "none" : account.biography}`) 44 | .addField("**Posts**", `${account.edge_owner_to_timeline_media.count}`) 45 | .addField("**Followers**", `${account.edge_followed_by.count}`) 46 | .addField("**Following**", `${account.edge_follow.count}`) 47 | .addField("**Private account**", `${account.is_private ? "Yes 🔐" : "Nope 🔓"}`); 48 | 49 | message.channel.send(embed); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /commands/info/weather.js: -------------------------------------------------------------------------------- 1 | const weather = require('weather-js'); 2 | const { MessageEmbed } = require('discord.js'); 3 | 4 | module.exports = { 5 | config: { 6 | name: "weather", 7 | noalias: "", 8 | category: "info", 9 | description: "Shows weather of a city", 10 | usage: "[city name]", 11 | accessableby: "everyone" 12 | }, 13 | run: async (bot, message, args) => { 14 | if(!args[0]) return message.channel.send('**Please Enter A City Name!**') 15 | 16 | weather.find({search: args.join(" "), degreeType: 'C'}, function(err, result){ 17 | 18 | if(err) message.channel.send(err.message); 19 | 20 | if(result.length === 0) { 21 | message.channel.send('**Please Enter A Valid Location.**') 22 | return undefined; 23 | } 24 | 25 | var current = result[0].current; 26 | var location = result[0].location; 27 | 28 | const embed = new MessageEmbed() 29 | .setDescription(`**${current.skytext}**`) 30 | .setAuthor(`Weather for ${current.observationpoint}`) 31 | .setThumbnail(current.imageUrl) 32 | .setColor("GREEN") 33 | .addField('**Timezone**', `UTC ${location.timezone}`, true) 34 | .addField('**Degree Type**', `${location.degreetype}`, true) 35 | .addField('**Temperature**', `${current.temperature} Degrees`, true) 36 | .addField('**Feels Like**', `${current.feelslike} Degrees`, true) 37 | .addField('**Winds**', `${current.winddisplay}`, true) 38 | .addField('**Humidity**', `${current.humidity}%`, true) 39 | .addField('**Date**', `${current.date}`, true) 40 | .addField('**Day**', `${current.day}`, true) 41 | .setFooter(message.member.displayName, message.author.displayAvatarURL()) 42 | .setTimestamp() 43 | 44 | message.channel.send({embed}) 45 | 46 | }); 47 | } 48 | } 49 | 50 | -------------------------------------------------------------------------------- /commands/moderation/verify.js: -------------------------------------------------------------------------------- 1 | const db = require('quick.db'); 2 | 3 | module.exports = { 4 | config: { 5 | name: 'verify', 6 | noalias: [''], 7 | category: 'moderation', 8 | description: 'Use This To Get Verified In A Server', 9 | usage: ' ', 10 | accessableby: 'everyone' 11 | }, 12 | run: async (bot, message, args) => { 13 | let verifychannel = db.fetch(`verificationchannel_${message.guild.id}`); 14 | if (!verifychannel || verifychannel === null) return; 15 | if(!message.guild.channels.cache.has(verifychannel)) return; 16 | 17 | let verifiedchannel = message.guild.channels.cache.get(verifychannel); 18 | if (message.channel.id !== verifiedchannel.id) return; 19 | 20 | let verifyrole = db.fetch(`verificationrole_${message.guild.id}`); 21 | if (!verifyrole || verifyrole === null) return; 22 | if(!message.guild.roles.cache.has(verifyrole)) return; 23 | 24 | let verifiedrole = message.guild.roles.cache.get(verifyrole); 25 | if (verifiedrole.managed) return message.channel.send("**Cannot Add That Role To The User!**").then(m => m.delete({ timeout: 2000 })); 26 | if (message.guild.me.roles.highest.comparePositionTo(verifiedrole) <= 0) return message.channel.send('**Role Is Currently Higher Than Me Therefore Cannot Add It To The User!**').then(m => m.delete({ timeout: 2000 })); 27 | if (message.member.roles.highest.comparePositionTo(message.guild.me.roles.highest) >= 0) return message.channel.send('**Cannot Add Role To This User! - [Higher Than Me In Role Hierachy]**').then(m => m.delete({ timeout: 2000 })); 28 | 29 | try { 30 | if (message.member.roles.cache.has(verifiedrole.id)) { 31 | message.delete(); 32 | return; 33 | } 34 | let m = await message.react('✅'); 35 | message.member.roles.add(verifiedrole.id); 36 | m.delete({ timeout: 5000 }); 37 | } catch { 38 | return; 39 | }; 40 | } 41 | }; -------------------------------------------------------------------------------- /commands/moderation/setmuterole.js: -------------------------------------------------------------------------------- 1 | const db = require("quick.db"); 2 | 3 | module.exports = { 4 | config: { 5 | name: "setmuterole", 6 | category: "moderation", 7 | aliases: ["setmute", "smrole", "smr"], 8 | description: "Sets A Mute Role For Muted Users!", 9 | usage: "[role name | role mention | role ID]", 10 | accessableby: "Administrators" 11 | }, 12 | run: async (bot, message, args) => { 13 | if (!message.member.hasPermission("ADMINISTRATOR")) 14 | return message.channel.send( 15 | "**You Do Not Have The Required Permissions! - [ADMINISTRATOR]**" 16 | ); 17 | if (!args[0]) { 18 | let b = await db.fetch(`muterole_${message.guild.id}`); 19 | let roleName = message.guild.roles.cache.get(b); 20 | if (message.guild.roles.cache.has(b)) { 21 | return message.channel.send( 22 | `**Muterole Set In This Server Is \`${roleName.name}\`!**` 23 | ); 24 | } else 25 | return message.channel.send( 26 | "**Please Enter A Role Name or ID To Set!**" 27 | ); 28 | } 29 | 30 | let role = 31 | message.mentions.roles.first() || 32 | bot.guilds.cache.get(message.guild.id).roles.cache.get(args[0]) || 33 | message.guild.roles.cache.find( 34 | c => c.name.toLowerCase() === args.join(" ").toLocaleLowerCase() 35 | ); 36 | 37 | if (!role) 38 | return message.channel.send("**Please Enter A Valid Role Name or ID!**"); 39 | 40 | try { 41 | let a = await db.fetch(`muterole_${message.guild.id}`); 42 | 43 | if (role.id === a) { 44 | return message.channel.send( 45 | "**This Role is Already Set As Muterole!**" 46 | ); 47 | } else { 48 | db.set(`muterole_${message.guild.id}`, role.id); 49 | 50 | message.channel.send( 51 | `**\`${role.name}\` Has Been Set Successfully As Muterole!**` 52 | ); 53 | } 54 | } catch (e) { 55 | return message.channel.send( 56 | "**Error - `Missing Permissions or Role Doesn't Exist!`**", 57 | `\n${e.message}` 58 | ); 59 | } 60 | } 61 | }; 62 | -------------------------------------------------------------------------------- /commands/economy/slots.js: -------------------------------------------------------------------------------- 1 | const slotItems = ["🍇", "🍉", "🍌", "🍎", "🍒"]; 2 | const db = require("quick.db"); 3 | const { MessageEmbed } = require('discord.js'); 4 | 5 | module.exports = { 6 | config: { 7 | name:"slots", 8 | aliases: ["sl"], 9 | category: "economy", 10 | description: "Slot game | 9x - rare | 3x - common", 11 | usage: "", 12 | accessableby: "everyone" 13 | }, 14 | run: async (bot, message, args) => { 15 | 16 | let user = message.author; 17 | let moneydb = await db.fetch(`money_${user.id}`) 18 | let money = parseInt(args[0]); 19 | let win = false; 20 | 21 | let moneymore = new MessageEmbed() 22 | .setColor("GREEN") 23 | .setDescription(`❌ You are betting more than you have`); 24 | 25 | let moneyhelp = new MessageEmbed() 26 | .setColor("GREEN") 27 | .setDescription(`❌ Specify an amount`); 28 | 29 | if (!money) return message.channel.send(moneyhelp); 30 | if (money > moneydb) return message.channel.send(moneymore); 31 | 32 | let number = [] 33 | for (let i = 0; i < 3; i++) { number[i] = Math.floor(Math.random() * slotItems.length); } 34 | 35 | if (number[0] == number[1] && number[1] == number[2]) { 36 | money *= 9 37 | win = true; 38 | } else if (number[0] == number[1] || number[0] == number[2] || number[1] == number[2]) { 39 | money *= 3 40 | win = true; 41 | } 42 | if (win) { 43 | let slotsEmbed1 = new MessageEmbed() 44 | .setDescription(`${slotItems[number[0]]} | ${slotItems[number[1]]} | ${slotItems[number[2]]}\n\nYou won ${money} coins`) 45 | .setColor("GREEN") 46 | message.channel.send(slotsEmbed1) 47 | db.add(`money_${user.id}`, money) 48 | } else { 49 | let slotsEmbed = new MessageEmbed() 50 | .setDescription(`${slotItems[number[0]]} | ${slotItems[number[1]]} | ${slotItems[number[2]]}\n\nYou lost ${money} coins`) 51 | .setColor("GREEN") 52 | message.channel.send(slotsEmbed) 53 | db.subtract(`money_${user.id}`, money) 54 | } 55 | 56 | } 57 | } -------------------------------------------------------------------------------- /commands/image/love.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js"); 2 | const fetch = require("node-fetch"); 3 | 4 | module.exports = { 5 | config: { 6 | name: "love", 7 | noalias: [''], 8 | category: "image", 9 | description: "Shows Image of 2 Lovers, 3 persons!", 10 | usage: "[mention(1) | ID(1) | name(1) | nickname(1)] [mention(2) | ID(2) | name(2) | nickname(2)]", 11 | accessableby: "everyone" 12 | }, 13 | run: async (bot, message, args) => { 14 | 15 | let user = await message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(m => m.user.username.toLowerCase() === args[0].toLocaleLowerCase()) || message.guild.members.cache.find(mp => mp.displayName.toLowerCase() === args[0].toLocaleLowerCase()); 16 | let user2 = await message.mentions.members.array()[1] || message.guild.members.cache.get(args[1]) || message.guild.members.cache.find(m => m.user.username.toLowerCase() === args[1].toLocaleLowerCase()) || message.guild.members.cache.find(mp => mp.displayName.toLowerCase() === args[1].toLocaleLowerCase()); 17 | if(!args[0]) return message.channel.send("**Enter Name Of Lover!**") 18 | if(!args[1]) return message.channel.send("**Enter Name Of Another Lover!**") 19 | 20 | if (!user) return message.channel.send("**Please Enter A Valid User!**") 21 | if (!user2) return message.channel.send("**Please Enter A Valid User!**") 22 | 23 | let m = await message.channel.send("**Please Wait..**"); 24 | try { 25 | let res = await fetch(encodeURI(`https://nekobot.xyz/api/imagegen?type=ship&user1=${user.user.displayAvatarURL({ format: "png", size: 512 })}&user2=${user2.user.displayAvatarURL({ format: "png", size: 512 })}`)); 26 | let json = await res.json(); 27 | let attachment = new Discord.MessageAttachment(json.message, "love.png"); 28 | message.channel.send(attachment); 29 | m.delete({ timeout: 5000 }); 30 | } catch(e){ 31 | m.edit("Error, Please Try Again! Mention Someone"); 32 | } 33 | } 34 | }; -------------------------------------------------------------------------------- /commands/fun/tts.js: -------------------------------------------------------------------------------- 1 | const request = require("node-superfetch"); 2 | 3 | module.exports = { 4 | config: { 5 | name: "tts", 6 | aliases: ["texttospeech"], 7 | category: "fun", 8 | usage: "Converts Text To Speech", 9 | description: "Convert Text-to-Speech", 10 | accessableby: "everyone" 11 | }, 12 | run: async (bot, message, args, ops) => { 13 | if (!args[0]) 14 | return message.channel.send( 15 | "**Please Enter Something To Convert To Speech!**" 16 | ); 17 | let text = args.join(" "); 18 | let serverQueue = ops.queue.get(message.guild.id) 19 | if (text.length > 1024) 20 | return message.channel.send( 21 | "**Please Enter Text Between 0 And 1024 Characters!**" 22 | ); 23 | const voiceChannel = message.member.voice.channel; 24 | if (!voiceChannel) 25 | return message.channel.send("**Please Join A Voice Channel First!**"); 26 | if ( 27 | !voiceChannel 28 | .permissionsFor(message.client.user) 29 | .has(["CONNECT", "SPEAK"]) 30 | ) { 31 | return message.channel.send( 32 | "**Missing Permissions For The Voice Channel! - [CONNECT, SPEAK]**" 33 | ); 34 | } 35 | if (serverQueue) return message.channel.send("**Cannot Play TTS While Music Is Being Played!**") 36 | if (!voiceChannel.joinable) 37 | return message.channel.send("**Cannot Join Voice Channel!**"); 38 | if (bot.voice.connections.has(voiceChannel.guild.id)) 39 | return message.channel.send("**I Am Already Converting TTS!**"); 40 | try { 41 | const connection = await voiceChannel.join(); 42 | const { url } = await request 43 | .get("http://tts.cyzon.us/tts") 44 | .query({ text }); 45 | const dispatcher = connection.play(url); 46 | await message.react("🔉"); 47 | dispatcher.once("finish", () => voiceChannel.leave()); 48 | dispatcher.once("error", () => voiceChannel.leave()); 49 | return null; 50 | } catch (err) { 51 | voiceChannel.leave(); 52 | console.log(err) 53 | return message.channel.send( 54 | `**Oh No, An Error Occurred: Try Again Later!**` 55 | ); 56 | } 57 | } 58 | }; 59 | -------------------------------------------------------------------------------- /commands/info/whois.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const { formatDate } = require("../../functions.js"); 3 | 4 | module.exports = { 5 | config: { 6 | name: "whois", 7 | category: "info", 8 | aliases: ["who", "user", "userinfo"], 9 | description: "Returns user information", 10 | usage: "[name | nickname | mention | ID] (optional)", 11 | accessableby: "everyone" 12 | }, 13 | run: async (bot, message, args) => { 14 | let member = 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()) || message.member; 15 | 16 | if(!member) 17 | return message.channel.send("**Enter A Valid User!**"); 18 | 19 | const joined = formatDate(member.joinedAt); 20 | const roles = member.roles.cache 21 | .filter(r => r.id !== message.guild.id) 22 | .map(r => r.name).join(", ") || 'none'; 23 | const created = formatDate(member.user.createdAt); 24 | 25 | const embed = new MessageEmbed() 26 | .setTitle("User Info") 27 | .setFooter(message.guild.name, message.guild.iconURL()) 28 | .setThumbnail(member.user.displayAvatarURL({ dynamic: true})) 29 | .setColor("GREEN") 30 | .addField("**User information**", `${member.displayName}`) 31 | .addField("**ID**", `${member.user.id}`) 32 | .addField("**Username**",`${member.user.username}`) 33 | .addField("**Tag**", `${member.user.tag}`) 34 | .addField("**Created at**", `${created}`) 35 | .addField("**Joined at**", `${joined}`) 36 | .addField("**Roles**", `${roles}`, true) 37 | .setTimestamp() 38 | 39 | member.presence.activities.forEach((activity) => { 40 | if (activity.type === 'PLAYING') { 41 | embed.addField('Currently playing',`\n**${activity.name}**`) 42 | } 43 | }) 44 | 45 | message.channel.send(embed); 46 | } 47 | } -------------------------------------------------------------------------------- /commands/moderation/setmodlogchannel.js: -------------------------------------------------------------------------------- 1 | const db = require("quick.db") 2 | 3 | module.exports = { 4 | config: { 5 | name: "setmodlogchannel", 6 | category: "moderation", 7 | aliases: ['setm', 'sm', 'smc'], 8 | description: "Sets A Channel Where The Bot Can Send Moderation Logs!", 9 | usage: "[channel mention | channel ID | channel name]", 10 | accessableby: "Administrators" 11 | }, 12 | run: async (bot, message, args) => { 13 | if (!message.member.hasPermission("ADMINISTRATOR")) return message.channel.send("**You Do Not Have The Required Permissions! - [ADMINISTRATOR]**") 14 | if (!args[0]) { 15 | let b = await db.fetch(`modlog_${message.guild.id}`); 16 | let channelName = message.guild.channels.cache.get(b); 17 | if (message.guild.channels.cache.has(b)) { 18 | return message.channel.send( 19 | `**Modlog Channel Set In This Server Is \`${channelName.name}\`!**` 20 | ); 21 | } else 22 | return message.channel.send( 23 | "**Please Enter A Channel Name or ID To Set!**" 24 | ); 25 | } 26 | let channel = message.mentions.channels.first() || bot.guilds.cache.get(message.guild.id).channels.cache.get(args[0]) || message.guild.channels.cache.find(c => c.name.toLowerCase() === args.join(' ').toLocaleLowerCase()); 27 | 28 | if (!channel || channel.type !== 'text') return message.channel.send("**Please Enter A Valid Text Channel!**"); 29 | 30 | try { 31 | let a = await db.fetch(`modlog_${message.guild.id}`) 32 | 33 | if (channel.id === a) { 34 | return message.channel.send("**This Channel is Already Set As Modlog Channel!**") 35 | } else { 36 | bot.guilds.cache.get(message.guild.id).channels.cache.get(channel.id).send("**Modlog Channel Set!**") 37 | db.set(`modlog_${message.guild.id}`, channel.id) 38 | 39 | message.channel.send(`**Modlog Channel Has Been Set Successfully in \`${channel.name}\`!**`) 40 | } 41 | } catch { 42 | return message.channel.send("**Error - `Missing Permissions Or Channel Is Not A Text Channel!`**"); 43 | } 44 | } 45 | }; -------------------------------------------------------------------------------- /commands/moderation/setwelcomechannel.js: -------------------------------------------------------------------------------- 1 | const db = require("quick.db"); 2 | 3 | module.exports = { 4 | config: { 5 | name: "setwelcomechannel", 6 | category: "moderation", 7 | aliases: ["enablewelcomechannel", "swc", "ewc", 'sw', 'ew'], 8 | description: "Sets A Channel Where The Bot Can Welcome Users!", 9 | usage: "[channel mention | channel ID | channel name]", 10 | accessableby: "Administrators" 11 | }, 12 | run: async (bot, message, args) => { 13 | if (!message.member.hasPermission("ADMINISTRATOR")) 14 | return message.channel.send( 15 | "**You Do Not Have The Required Permissions! - [ADMINISTRATOR]**" 16 | ); 17 | 18 | if (!args[0]) { 19 | let b = await db.fetch(`welcome_${message.guild.id}`); 20 | let channelName = message.guild.channels.cache.get(b); 21 | if (message.guild.channels.cache.has(b)) { 22 | return message.channel.send( 23 | `**Welcome Channel Set In This Server Is \`${channelName.name}\` Channel!**` 24 | ); 25 | } else return message.channel.send("**Please Enter Channel Name or ID To Set!**"); 26 | } 27 | 28 | let channel = 29 | message.mentions.channels.first() || 30 | bot.guilds.cache.get(message.guild.id).channels.cache.get(args[0]) || 31 | message.guild.channels.cache.find( 32 | c => c.name.toLowerCase() === args.join(" ").toLocaleLowerCase() 33 | ); 34 | 35 | if (!channel || channel.type !== 'text') return message.channel.send("**Please Enter A Valid Text Channel!**"); 36 | 37 | try { 38 | let a = await db.fetch(`welcome_${message.guild.id}`); 39 | 40 | if (a === channel.id) { 41 | return message.channel.send( 42 | "**This Channel is Already Set As Welcome Channel**" 43 | ); 44 | } else { 45 | bot.guilds.cache 46 | .get(message.guild.id) 47 | .channels.cache.get(channel.id) 48 | .send("**Welcome Channel Set!**"); 49 | db.set(`welcome_${message.guild.id}`, channel.id); 50 | 51 | message.channel.send( 52 | `**Welcome Channel Has Been Set Successfully in \`${channel.name}\`**` 53 | ); 54 | } 55 | return; 56 | } catch (e) { 57 | return message.channel.send("**Error - `Missing Permissions Or Channel Is Not A Text Channel!`**"); 58 | } 59 | } 60 | }; 61 | -------------------------------------------------------------------------------- /commands/economy/pay.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const db = require("quick.db"); 3 | 4 | module.exports = { 5 | config: { 6 | name: "pay", 7 | noalias: [""], 8 | category: "economy", 9 | description: "Pay to Somebody", 10 | usage: "[mention | ID] ", 11 | accessableby: "everyone" 12 | }, 13 | run: async (bot, message, args) => { 14 | try { 15 | let user2 = message.author 16 | if (!args[0]) return message.channel.send("**Please Enter A User!**"); 17 | let user = 18 | message.mentions.members.first() || 19 | message.guild.members.cache.get(args[0]) || 20 | message.guild.members.cache.find( 21 | r => r.user.username.toLowerCase() === args[0].toLocaleLowerCase() 22 | ) || 23 | message.guild.members.cache.find( 24 | r => r.displayName.toLowerCase() === args[0].toLocaleLowerCase() 25 | ); 26 | if (!user) return message.channel.send("**Enter A Valid User!**"); 27 | 28 | let member = db.fetch(`money_${user2.id}`); 29 | 30 | let embed1 = new MessageEmbed() 31 | .setColor("GREEN") 32 | .setDescription(`❌ Mention someone to pay`); 33 | 34 | if (!args[0]) { 35 | return message.channel.send(embed1); 36 | } 37 | let embed2 = new MessageEmbed() 38 | .setColor("GREEN") 39 | .setDescription(`❌ You cannot pay yourself`); 40 | 41 | if (user.user.id === message.author.id) { 42 | return message.channel.send(embed2); 43 | } 44 | 45 | let embed3 = new MessageEmbed() 46 | .setColor("GREEN") 47 | .setDescription(`❌ Specify an amount to pay`); 48 | 49 | if (!args[1]) { 50 | return message.channel.send(embed3); 51 | } 52 | let embed4 = new MessageEmbed() 53 | .setColor("GREEN") 54 | .setDescription(`❌ Enter A Valid Amount!`); 55 | 56 | if (isNaN(args[1])) { 57 | return message.channel.send(embed4); 58 | } 59 | let embed5 = new MessageEmbed() 60 | .setColor("GREEN") 61 | .setDescription(`❌ You don't have that much money`); 62 | 63 | if (member < args[1]) { 64 | return message.channel.send(embed5); 65 | } 66 | 67 | let embed6 = new MessageEmbed() 68 | .setColor("GREEN") 69 | .setDescription(`✅ You have payed ${user.displayName} ${args[1]} coins`); 70 | 71 | message.channel.send(embed6); 72 | db.add(`money_${user.id}`, args[1]); 73 | db.subtract(`money_${user2.id}`, args[1]); 74 | } catch { 75 | 76 | } 77 | } 78 | }; 79 | -------------------------------------------------------------------------------- /commands/moderation/disableverification.js: -------------------------------------------------------------------------------- 1 | const db = require('quick.db'); 2 | 3 | module.exports = { 4 | config: { 5 | name: 'disableverification', 6 | aliases: ['dv', 'disableverify'], 7 | category: 'moderation', 8 | description: 'Disable\'s Server Verification System', 9 | usage: ' ', 10 | accessableby: 'Administrators' 11 | }, 12 | run: async (bot, message, args) => { 13 | if (!message.member.hasPermission("ADMINISTRATOR")) return message.channel.send("**You Do Not Have Required Permissions! - [ADMINISTRATOR]!**"); 14 | 15 | let verifychannel = db.fetch(`verificationchannel_${message.guild.id}`); 16 | if (!verifychannel || verifychannel === null) return; 17 | if(!message.guild.channels.cache.has(verifychannel)) return; 18 | 19 | let verifiedchannel = message.guild.channels.cache.get(verifychannel); 20 | if (!verifiedchannel) return; 21 | 22 | let verifyrole = db.fetch(`verificationrole_${message.guild.id}`); 23 | if (!verifyrole || verifyrole === null) return; 24 | if(!message.guild.roles.cache.has(verifyrole)) return; 25 | 26 | let role = message.guild.roles.cache.get(verifyrole); 27 | if (!role) return; 28 | 29 | try { 30 | message.guild.channels.cache.forEach(channel => { 31 | if (channel.type === 'category' && channel.id === verifiedchannel.id) return; 32 | let r = channel.permissionOverwrites.get(role.id); 33 | if (!r) return; 34 | if (r.deny.has("VIEW_CHANNEL") || r.deny.has("SEND_MESSAGES")) return; 35 | 36 | channel.createOverwrite(message.guild.id, { 37 | VIEW_CHANNEL: true 38 | }); 39 | 40 | channel.updateOverwrite(role, { 41 | VIEW_CHANNEL: null, 42 | SEND_MESSAGES: null 43 | }); 44 | }); 45 | 46 | verifiedchannel.updateOverwrite(role, { 47 | SEND_MESSAGES: null, 48 | VIEW_CHANNEL: null 49 | }); 50 | 51 | verifiedchannel.delete(); 52 | db.delete(`verificationchannel_${message.guild.id}`); 53 | db.delete(`verificationrole_${message.guild.id}`); 54 | return message.channel.send(`**Disabled Verification System in ${message.guild.name}!**`); 55 | } catch { 56 | return message.channel.send('**Something Went Wrong!**') 57 | } 58 | } 59 | }; -------------------------------------------------------------------------------- /commands/info/level.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const db = require('quick.db'); 3 | const { PREFIX } = require('../../config'); 4 | 5 | module.exports = { 6 | config: { 7 | name: "level", 8 | aliases: ['xp'], 9 | category: 'info', 10 | description: 'Shows A User\'s Current XP Level', 11 | usage: '[mention | username | nickname | ID] (optional)', 12 | accessableby: 'everyone' 13 | }, 14 | run: async (bot, message, args) => { 15 | try { 16 | let prefix; 17 | let fetched = await db.fetch(`prefix_${message.guild.id}`) 18 | if (fetched === null) { 19 | prefix = PREFIX 20 | } else { 21 | prefix = fetched 22 | } 23 | let user = 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()) || message.member; 24 | if (!user) return message.channel.send('**Please Enter A Valid User!**') 25 | if (user.user.bot) return message.channel.send(`**Bot's Dont Have XP Level!**`); 26 | 27 | let guildMessages = db.fetch(`guildMessages_${message.guild.id}`) 28 | if (guildMessages === null) return message.channel.send(`**Level Up Messages Are Currently Disabled!\n\`${prefix}setxp\` To Enable**`); 29 | 30 | let xp = db.fetch(`messages_${message.guild.id}_${user.id}`) 31 | let lvl = db.fetch(`level_${message.guild.id}_${user.id}`) 32 | 33 | if (lvl === null) lvl = 0 34 | if (xp === null) xp = 0 35 | 36 | let curxp = xp; 37 | let curlvl = lvl; 38 | let nxtLvlXp = curlvl * 100; 39 | let difference2 = nxtLvlXp + 100 - curxp; 40 | 41 | const embed = new MessageEmbed() 42 | .setTitle(`**${user.displayName}'s Level Information**`) 43 | .setColor("GREEN") 44 | .setDescription(`**Current Level - \`${curlvl}\` | Total XP - \`${curxp - 1}\` 45 | Needed XP To Reach Next Level - \`${difference2 + 1}\`** 46 | `) 47 | .setFooter(message.guild.name, message.guild.iconURL()) 48 | message.channel.send(embed) 49 | 50 | } catch { 51 | message.channel.send(`**Oh No! An Error Occurred!**`); 52 | } 53 | } 54 | }; 55 | -------------------------------------------------------------------------------- /commands/games/memory.js: -------------------------------------------------------------------------------- 1 | const { stripIndents } = require('common-tags'); 2 | const { delay } = require('../../functions'); 3 | const directions = ['up', 'down', 'left', 'right']; 4 | const colors = ['red', 'blue', 'green', 'yellow']; 5 | const fruits = ['apple', 'orange', 'pear', 'banana']; 6 | 7 | module.exports = { 8 | config: { 9 | name: 'memory', 10 | noalias: [''], 11 | category: 'games', 12 | usage: '[number](1 - 20)', 13 | description: 'Test Your Memory', 14 | accessableby: 'everyone' 15 | }, 16 | run: async (bot, message, args, ops) => { 17 | if (!args[0]) return message.channel.send('**How Many Directions Do You Want To Have To Memorize?**'); 18 | let level = args[0]; 19 | if (level < 1 || level > 20) return message.channel.send('**You Can Only Select Between 1 - 20!**'); 20 | const current = ops.games.get(message.channel.id); 21 | if (current) return message.channel.send(`**Please Wait Until The Current Game of \`${current.name}\` is Finished!**`); 22 | ops.games.set(message.channel.id, { name: 'memory' }); 23 | try { 24 | const memorize = genArray(level); 25 | const memorizeDisplay = memorize.map(word => `\`${word.toUpperCase()}\``).join(' '); 26 | const memorizemessage = await message.channel.send(stripIndents` 27 | **You Have 10 Seconds To Memorize -** 28 | ${memorizeDisplay} 29 | `); 30 | await delay(10000); 31 | await memorizemessage.edit('**Type What You Saw, Just The Words!**'); 32 | const memorizeType = memorize.join(' '); 33 | const messages = await message.channel.awaitMessages(res => message.author.id === res.author.id, { 34 | max: 1, 35 | time: 30000 36 | }); 37 | ops.games.delete(message.channel.id); 38 | if (!messages.size) return message.channel.send(`**Time Uup! It Was ${memorizeDisplay}!**`); 39 | const answer = messages.first().content.toLowerCase(); 40 | if (answer !== memorizeType) return message.channel.send(`**You Typed It Wrong, It Was ${memorizeDisplay}!**`); 41 | return message.channel.send('**You Won!**'); 42 | } catch (err) { 43 | ops.games.delete(message.channel.id); 44 | throw err; 45 | }; 46 | function genArray(level) { 47 | const sourceArr = [colors, directions, fruits][Math.floor(Math.random() * 3)]; 48 | const arr = []; 49 | for (let i = 0; i < level; i++) arr.push(sourceArr[Math.floor(Math.random() * sourceArr.length)]); 50 | return arr; 51 | }; 52 | } 53 | }; -------------------------------------------------------------------------------- /commands/economy/withdraw.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const db = require("quick.db"); 3 | 4 | module.exports = { 5 | config: { 6 | name: "withdraw", 7 | aliases: ["wd"], 8 | category: "economy", 9 | description: "Withdraws Money From Bank", 10 | usage: "" 11 | }, 12 | run: async (bot, message, args) => { 13 | let user = message.author; 14 | 15 | let member2 = db.fetch(`bank_${user.id}`) 16 | 17 | if (args.join(' ').toLocaleLowerCase() == 'all') { 18 | let money = await db.fetch(`bank_${user.id}`) 19 | let embed = new MessageEmbed() 20 | .setColor("GREEN") 21 | .setDescription(`❌**You Do Not Have Any Money To Withdraw!**`) 22 | if (!money) return message.channel.send(embed) 23 | db.subtract(`bank_${user.id}`, money) 24 | db.add(`money_${user.id}`, money) 25 | let embed5 = new MessageEmbed() 26 | .setColor("GREEN") 27 | .setDescription(`✅ You have withdrawn all your coins from your bank`); 28 | message.channel.send(embed5) 29 | 30 | } else { 31 | 32 | let embed2 = new MessageEmbed() 33 | .setColor("GREEN") 34 | .setDescription(`❌ Specify an amount to withdraw!`); 35 | 36 | if (!args[0]) { 37 | return message.channel.send(embed2) 38 | } 39 | let embed6 = new MessageEmbed() 40 | .setColor("GREEN") 41 | .setDescription(`❌ Your Amount Is Not A Number!`) 42 | 43 | if(isNaN(args[0])) { 44 | return message.channel.send(embed6) 45 | } 46 | let embed3 = new MessageEmbed() 47 | .setColor("GREEN") 48 | .setDescription(`❌ You can't withdraw negative money!`); 49 | 50 | if (message.content.includes('-')) { 51 | return message.channel.send(embed3) 52 | } 53 | let embed4 = new MessageEmbed() 54 | .setColor("GREEN") 55 | .setDescription(`❌ You don't have that much money in the bank!`); 56 | 57 | if (member2 < args[0]) { 58 | return message.channel.send(embed4) 59 | } 60 | 61 | let embed5 = new MessageEmbed() 62 | .setColor("GREEN") 63 | .setDescription(`✅ You have withdrawn ${args[0]} coins from your bank!`); 64 | 65 | message.channel.send(embed5) 66 | db.subtract(`bank_${user.id}`, args[0]) 67 | db.add(`money_${user.id}`, args[0]) 68 | } 69 | } 70 | } -------------------------------------------------------------------------------- /commands/image/avatarfusion.js: -------------------------------------------------------------------------------- 1 | const { createCanvas, loadImage } = require('canvas'); 2 | const request = require('node-superfetch'); 3 | 4 | module.exports = { 5 | config: { 6 | name: 'avatarfusion', 7 | aliases: ['avatarfuse', 'fuseavatar'], 8 | category: 'image', 9 | usage: '[first mention | first username | first ID | first nickname] ', 10 | description: 'Draws A User\'s Avatar Over Other User\'s Avatar', 11 | accessableby: 'everyone' 12 | }, 13 | run: async (bot, message, args) => { 14 | if (!message.guild.me.hasPermission('ATTACH_FILES')) return message.channel.send("**Missing Permissions - [ATTACH_FILES]!**"); 15 | if (!args[0]) return message.channel.send("**Which User Would You Like To Be The Base?**"); 16 | if (!args[1]) return message.channel.send("**Which User Would You Like To Put Over The Base?**"); 17 | let base = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args[0].toLocaleLowerCase()) || message.guild.members.cache.find(r => r.displayName === args[0].toLocaleLowerCase()); 18 | if (!base) return message.channel.send("**Base User Not Found!**"); 19 | let overlay = message.mentions.members.first(2)[1] || message.guild.members.cache.get(args[1]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args[1].toLocaleLowerCase()) || message.guild.members.cache.find(r => r.displayName === args[1].toLocaleLowerCase()); 20 | if (!overlay) return message.channel.send("**Overlay User Not Found!**"); 21 | const baseAvatarURL = base.user.displayAvatarURL({ format: 'png', size: 512 }); 22 | const overlayAvatarURL = overlay.user.displayAvatarURL({ format: 'png', size: 512 }); 23 | try { 24 | const baseAvatarData = await request.get(baseAvatarURL); 25 | const baseAvatar = await loadImage(baseAvatarData.body); 26 | const overlayAvatarData = await request.get(overlayAvatarURL); 27 | const overlayAvatar = await loadImage(overlayAvatarData.body); 28 | const canvas = createCanvas(baseAvatar.width, baseAvatar.height); 29 | const ctx = canvas.getContext('2d'); 30 | ctx.globalAlpha = 0.5; 31 | ctx.drawImage(baseAvatar, 0, 0); 32 | ctx.drawImage(overlayAvatar, 0, 0, baseAvatar.width, baseAvatar.height); 33 | return message.channel.send({ files: [{ attachment: canvas.toBuffer(), name: 'avatarfusion.png' }] }); 34 | } catch (err) { 35 | return message.channel.send(`Oh no, an error occurred: \`${err.message}\`. Try again later!`); 36 | }; 37 | } 38 | }; -------------------------------------------------------------------------------- /commands/economy/deposit.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const db = require("quick.db"); 3 | 4 | module.exports = { 5 | config: { 6 | name: "deposit", 7 | aliases: ["dep"], 8 | category: "economy", 9 | description: "Deposits money to bank", 10 | usage: "", 11 | accessableby: "everyone" 12 | }, 13 | run: async (bot, message, args) => { 14 | 15 | let user = message.author; 16 | 17 | let member = db.fetch(`money_${user.id}`) 18 | 19 | if (args[0] == 'all') { 20 | let money = await db.fetch(`money_${user.id}`) 21 | 22 | let embedbank = new MessageEmbed() 23 | .setColor('GREEN') 24 | .setDescription("❌ You don't have any money to deposit") 25 | 26 | if (!money) return message.channel.send(embedbank) 27 | 28 | db.subtract(`money_${user.id}`, money) 29 | db.add(`bank_${user.id}`, money) 30 | let sembed = new MessageEmbed() 31 | .setColor("GREEN") 32 | .setDescription(`✅ You have deposited all your coins into your bank`); 33 | message.channel.send(sembed) 34 | 35 | } else { 36 | 37 | let embed2 = new MessageEmbed() 38 | .setColor("GREEN") 39 | .setDescription(`❌ Specify an amount to deposit`); 40 | 41 | if (!args[0]) { 42 | return message.channel.send(embed2) 43 | .catch(err => message.channel.send(err.message)) 44 | } 45 | let embed6 = new MessageEmbed() 46 | .setColor("GREEN") 47 | .setDescription(`❌ Your Amount Is Not A Number!`) 48 | 49 | if(isNaN(args[0])) { 50 | return message.channel.send(embed6) 51 | 52 | } 53 | let embed3 = new MessageEmbed() 54 | .setColor("GREEN") 55 | .setDescription(`❌ You can't deposit negative money`); 56 | 57 | if (message.content.includes('-')) { 58 | return message.channel.send(embed3) 59 | } 60 | let embed4 = new MessageEmbed() 61 | .setColor("GREEN") 62 | .setDescription(`❌ You don't have that much money`); 63 | 64 | if (member < args[0]) { 65 | return message.channel.send(embed4) 66 | } 67 | 68 | let embed5 = new MessageEmbed() 69 | .setColor("GREEN") 70 | .setDescription(`✅ You have deposited ${args[0]} coins into your bank`); 71 | 72 | message.channel.send(embed5) 73 | db.subtract(`money_${user.id}`, args[0]) 74 | db.add(`bank_${user.id}`, args[0]) 75 | 76 | } 77 | } 78 | } -------------------------------------------------------------------------------- /commands/economy/rob.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const db = require("quick.db"); 3 | const ms = require("parse-ms"); 4 | 5 | module.exports = { 6 | config: { 7 | name: "rob", 8 | noalias: [""], 9 | category: "economy", 10 | description: "Robs someone", 11 | usage: "[username | nickname | mention | ID]", 12 | accessableby: "everyone" 13 | }, 14 | run: async (bot, message, args) => { 15 | if (!args[0]) return message.channel.send("**Enter A Name!**") 16 | let user2 = message.author 17 | 18 | let user = 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()); 19 | if (!user) return message.channel.send("**Enter A Valid User!**") 20 | 21 | let embed2 = new MessageEmbed() 22 | .setColor("GREEN") 23 | .setDescription(`❌ You cannot rob yourself`) 24 | 25 | if (user.user.id === message.author.id) { 26 | return message.channel.send(embed2) 27 | } 28 | 29 | let targetuser = await db.fetch(`money_${user.id}`) 30 | let author = await db.fetch(`rob_${user.id}`) 31 | let author2 = await db.fetch(`money_${user2.id}`) 32 | 33 | let timeout = 600000; 34 | 35 | if (author !== null && timeout - (Date.now() - author) > 0) { 36 | let time = ms(timeout - (Date.now() - author)); 37 | 38 | let timeEmbed = new MessageEmbed() 39 | .setColor("GREEN") 40 | .setDescription(`❌ You have already robbed someone\n\nTry again in ${time.minutes}m ${time.seconds}s `); 41 | message.channel.send(timeEmbed) 42 | } else { 43 | 44 | let moneyEmbed = new MessageEmbed() 45 | .setColor("GREEN") 46 | .setDescription(`❌ You need atleast 100 coins in your wallet to rob someone`); 47 | 48 | if (author2 < 100) { 49 | return message.channel.send(moneyEmbed) 50 | 51 | } 52 | let moneyEmbed2 = new MessageEmbed() 53 | .setColor("GREEN") 54 | .setDescription(`❌ ${user.user.username} does not have anything you can rob`); 55 | 56 | let random = Math.floor((Math.random() * 100)) + 1; 57 | 58 | if (targetuser < random) { 59 | return message.channel.send(moneyEmbed2) 60 | } else { 61 | 62 | let embed = new MessageEmbed() 63 | .setDescription(`✅ You robbed ${user.user.username} and got away with ${random} coins`) 64 | .setColor("GREEN") 65 | message.channel.send(embed) 66 | 67 | db.subtract(`money_${user.id}`, random) 68 | db.add(`money_${user2.id}`, random) 69 | db.set(`rob_${user.id}`, Date.now()) 70 | 71 | } 72 | }; 73 | } 74 | } -------------------------------------------------------------------------------- /commands/games/gunfight.js: -------------------------------------------------------------------------------- 1 | const { delay, randomRange, verify } = require('../../functions'); 2 | const words = ['fire', 'draw', 'shoot', 'bang', 'pull', 'boom']; 3 | 4 | module.exports = { 5 | config: { 6 | name: 'gunfight', 7 | noalias: [''], 8 | category: 'games', 9 | usage: '[mention | username | nickname | ID]', 10 | description: 'Engage In A Gunfight Against Another User', 11 | accessableby: 'everyone', 12 | }, 13 | 14 | run: async (bot, message, args, ops) => { 15 | if (!args[0]) return message.channel.send("**Please Enter A User To Play With!**") 16 | let opponent = 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()); 17 | if (!opponent) return message.channel.send("**Please Enter A Valid User!**") 18 | if (opponent.user.bot) return message.channel.send('**Cannot Fight Bots!**'); 19 | if (opponent.user.id === message.author.id) return message.channel.send('**Cannot Fight Yourself!**'); 20 | const current = ops.games.get(message.channel.id); 21 | if (current) return message.channel.send(`**Please Wait Until The Current Game of \`${current.name}\` is Finished!**`); 22 | ops.games.set(message.channel.id, { name: 'gunfight' }); 23 | try { 24 | await message.channel.send(`**${opponent}, Do You Accept This Challenge?**`); 25 | const verification = await verify(message.channel, opponent); 26 | if (!verification) { 27 | ops.games.delete(message.channel.id); 28 | return message.channel.send(`**Looks like ${opponent} Doesnt Wants To Play!**`); 29 | } 30 | await message.channel.send('**Get Ready, Game Will Start At Any Moment!**'); 31 | await delay(randomRange(1000, 10000)); 32 | const word = words[Math.floor(Math.random() * words.length)]; 33 | await message.channel.send(`TYPE \`${word.toUpperCase()}\` NOW!`); 34 | const filter = res => [opponent.user.id, message.author.id].includes(res.author.id) && res.content.toLowerCase() === word.toLocaleLowerCase(); 35 | const winner = await message.channel.awaitMessages(filter, { 36 | max: 1, 37 | time: 30000 38 | }); 39 | ops.games.delete(message.channel.id); 40 | if (!winner.size) return message.channel.send('**Nobody Won!*'); 41 | return message.channel.send(`**The Winner is ${winner.first().author}!**`); 42 | } catch (err) { 43 | ops.games.delete(message.channel.id); 44 | throw err; 45 | } 46 | } 47 | }; -------------------------------------------------------------------------------- /commands/moderation/setnick.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const db = require('quick.db'); 3 | 4 | module.exports = { 5 | config: { 6 | name: "setnick", 7 | aliases: ["sn"], 8 | category: "moderation", 9 | description: "Sets Or Changes Nickname Of An User", 10 | usage: "[mention | name | nickname | ID] ", 11 | accessableby: "everyone" 12 | }, 13 | run: async (bot, message, args) => { 14 | if (!message.member.hasPermission("MANAGE_GUILD")) return message.channel.send("**You Dont Have Permissions To Change Nickname! - [MANAGE_GUILD]**"); 15 | 16 | if (!message.guild.me.hasPermission("CHANGE_NICKNAME")) return message.channel.send("**I Dont Have Permissions To Change Nickname! - [CHANGE_NICKNAME]**"); 17 | 18 | if (!args[0]) return message.channel.send("**Please Enter A User!**") 19 | 20 | let member = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args[0].toLocaleLowerCase()) || message.guild.members.cache.find(ro => ro.displayName.toLowerCase() === args[0].toLocaleLowerCase()) || message.member; 21 | if (!member) return message.channel.send("**Please Enter A Username!**"); 22 | 23 | if (member.roles.highest.comparePositionTo(message.guild.me.roles.highest) >= 0) return message.channel.send('**Cannot Set or Change Nickname Of This User!**') 24 | 25 | if (!args[1]) return message.channel.send("**Please Enter A Nickname**"); 26 | 27 | let nick = args.slice(1).join(' '); 28 | 29 | try { 30 | member.setNickname(nick) 31 | const embed = new MessageEmbed() 32 | .setColor("GREEN") 33 | .setDescription(`**Changed Nickname of ${member.displayName} to ${nick}**`) 34 | .setAuthor(message.guild.name, message.guild.iconURL()) 35 | message.channel.send(embed) 36 | } catch { 37 | return message.channel.send("**Missing Permissions - [CHANGE_NICKNAME]") 38 | } 39 | 40 | let channel = db.fetch(`modlog_${message.guild.id}`) 41 | if (!channel) return; 42 | 43 | const sembed = new MessageEmbed() 44 | .setAuthor(`${message.guild.name} Modlogs`, message.guild.iconURL()) 45 | .setColor("#ff0000") 46 | .setThumbnail(member.user.displayAvatarURL({ dynamic: true })) 47 | .setFooter(message.guild.name, message.guild.iconURL()) 48 | .addField("**Moderation**", "setnick") 49 | .addField("**Nick Changed Of**", member.user.username) 50 | .addField("**Nick Changed By**", message.author.username) 51 | .addField("**Nick Changed To**", args[1]) 52 | .addField("**Date**", message.createdAt.toLocaleString()) 53 | .setTimestamp(); 54 | 55 | var sChannel = message.guild.channels.cache.get(channel) 56 | if (!sChannel) return; 57 | sChannel.send(sembed) 58 | } 59 | } -------------------------------------------------------------------------------- /commands/economy/fish.js: -------------------------------------------------------------------------------- 1 | const fishes = require('../../JSON/fishes.json'); 2 | let db = require('quick.db'); 3 | const ms = require("parse-ms"); 4 | const { randomRange } = require('../../functions'); 5 | const { MessageEmbed } = require('discord.js'); 6 | 7 | module.exports = { 8 | config: { 9 | name: 'fish', 10 | aliases: ['catchfish'], 11 | category: 'economy', 12 | description: 'Catch A Fish From A Vast Ocean', 13 | usage: '[list | rewards] (optional)', 14 | acessableby: 'everyone' 15 | }, 16 | run: async (bot, message, args) => { 17 | 18 | let user = message.author; 19 | 20 | let bal = db.fetch(`money_${user.id}`) 21 | 22 | let fish = await db.fetch(`fish_${user.id}`) 23 | if (!args[0]) { 24 | if (bal === null) bal = 0; 25 | 26 | if (fish == null) fish = 0; 27 | 28 | const fishID = Math.floor(Math.random() * 10) + 1; 29 | let rarity; 30 | if (fishID < 5) rarity = 'junk'; 31 | else if (fishID < 8) rarity = 'common'; 32 | else if (fishID < 9) rarity = 'uncommon'; 33 | else if (fishID < 10) rarity = 'rare'; 34 | else rarity = 'legendary'; 35 | const fishh = fishes[rarity]; 36 | const worth = randomRange(fishh.min, fishh.max); 37 | 38 | let timeout = 1800000; 39 | let fishtime = await db.fetch(`fishtime_${user.id}`); 40 | 41 | if (fishtime !== null && timeout - (Date.now() - fishtime) > 0) { 42 | let time = ms(timeout - (Date.now() - fishtime)); 43 | 44 | let timeEmbed = new MessageEmbed() 45 | .setColor("GREEN") 46 | .setDescription(`❌ You've Recently Casted A Line\n\nFish Again in ${time.minutes}m ${time.seconds}s `); 47 | return message.channel.send(timeEmbed) 48 | } 49 | 50 | let embed = new MessageEmbed() 51 | .setColor('GREEN') 52 | .setDescription(`**🎣 You Cast Out Your Line And Caught A ${fishh.symbol}, I Bet It'd Sell For Around ${worth}**!`) 53 | message.channel.send(embed); 54 | 55 | db.add(`money_${user.id}`, worth); 56 | db.add(`fish_${user.id}`, 1); 57 | db.set(`fishtime_${user.id}`, Date.now()) 58 | } 59 | if (args[0] === 'list' || args[0] === 'rewards') { 60 | 61 | let lEmbed = new MessageEmbed() 62 | .setColor('GREEN') 63 | .setTitle(`List Of Fish Names And Rewards You Can Get`) 64 | .setDescription(` 65 | \`\`\`🔧Junk :: Max Reward: 5, Min Reward: 1 66 | 🐟Common :: Max Reward: 25, Min Reward: 10 67 | 🐠Uncommon :: Max Reward: 50, Min Reward: 18 68 | 🦑Rare :: Max Reward: 75, Min Reward: 30 69 | 🐋Legendary :: Max Reward: 100, Min Reward: 50\`\`\` 70 | **All reward are random from max/min** 71 | ​ 72 | `) 73 | .setFooter(message.guild.name, message.guild.iconURL()) 74 | return message.channel.send(lEmbed); 75 | } 76 | } 77 | } -------------------------------------------------------------------------------- /commands/fun/soundboard.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const { list } = require('../../functions'); 3 | const sounds = require('../../JSON/soundboard.json'); 4 | 5 | module.exports = { 6 | config: { 7 | name: 'soundboard', 8 | aliases: ['sound'], 9 | category: 'fun', 10 | usage: `${list(sounds, 'or')}`, 11 | description: 'Plays A Sound in A Voice Channel', 12 | accessableby: 'everyone' 13 | }, 14 | run: async (bot, message, args) => { 15 | if (!message.guild.me.hasPermission(['CONNECT', 'SPEAK'])) return message.channel.send("**I Dont Have Permissions To Either - JOIN or SPEAK!**"); 16 | const { channel } = message.member.voice; 17 | if (!channel) return message.channel.send("**Please Join A VC To Play Sound!**"); 18 | 19 | if (!args[0]) { 20 | let soundlist = `${sounds[Math.floor(Math.random() * sounds.length)]}.mp3`; 21 | let sound = `${soundlist.toLowerCase()}`; 22 | 23 | try { 24 | const connection = message.guild ? await channel.join() : null; 25 | if (connection) { 26 | connection.play(path.join(__dirname, '..', '..', 'assets', 'sounds', sound)); 27 | if (message.channel.permissionsFor(bot.user).has(['ADD_REACTIONS', 'READ_MESSAGE_HISTORY'])) { 28 | await message.react('🔉'); 29 | } else { 30 | connection.dispatcher.end(); 31 | channel.leave(); 32 | return message.channel.send("**Missing Permission - [ADD_REACTIONS]!**"); 33 | } 34 | } else { 35 | return message.channel.send("**Could Not Join VC, Try Again!**"); 36 | } 37 | } catch { 38 | return message.channel.send("**Something Went Wrong Try Again!**"); 39 | } 40 | return null; 41 | } else { 42 | if (!sounds.includes(args[0])) return message.channel.send(`**Which Sound Do You Want To Play? Either ${list(sounds, 'or')}!**`); 43 | let sound = `${args[0].toLowerCase()}.mp3`; 44 | 45 | try { 46 | const connection = message.guild ? await channel.join() : null; 47 | if (connection) { 48 | try { 49 | connection.play(path.join(__dirname, '..', '..', 'assets', 'sounds', sound)); 50 | if (message.channel.permissionsFor(bot.user).has(['ADD_REACTIONS', 'READ_MESSAGE_HISTORY'])) { 51 | await message.react('🔉'); 52 | } else { 53 | connection.dispatcher.end(); 54 | channel.leave(); 55 | return message.channel.send("**Missing Permission - [ADD_REACTIONS]!**"); 56 | } 57 | } catch { 58 | return message.channel.send("**Something Went Wrong Try Again!**"); 59 | }; 60 | }; 61 | } catch { 62 | return message.channel.send("**Couldn't Join VC, Check My Permissions!**"); 63 | }; 64 | }; 65 | } 66 | }; -------------------------------------------------------------------------------- /commands/moderation/unban.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js") 2 | const db = require('quick.db'); 3 | 4 | module.exports = { 5 | config: { 6 | name: "unban", 7 | description: "Unban a user from the guild!", 8 | usage: "[name | tag | mention | ID] (optional)", 9 | category: "moderation", 10 | accessableby: "Administrator", 11 | aliases: ["ub", "unbanish"], 12 | }, 13 | run: async (bot, message, args) => { 14 | 15 | if (!message.member.hasPermission("BAN_MEMBERS")) return message.channel.send("**You Dont Have The Permissions To Unban Someone! - [BAN_MEMBERS]**") 16 | 17 | if (!args[0]) return message.channel.send("**Please Enter A Name!**") 18 | 19 | let bannedMemberInfo = await message.guild.fetchBans() 20 | 21 | let bannedMember; 22 | bannedMember = bannedMemberInfo.find(b => b.user.username.toLowerCase() === args[0].toLocaleLowerCase()) || bannedMemberInfo.get(args[0]) || bannedMemberInfo.find(bm => bm.user.tag.toLowerCase() === args[0].toLocaleLowerCase()); 23 | if (!bannedMember) return message.channel.send("**Please Provide A Valid Username, Tag Or ID Or The User Is Not Banned!**") 24 | 25 | let reason = args.slice(1).join(" ") 26 | 27 | if (!message.guild.me.hasPermission("BAN_MEMBERS")) return message.channel.send("**I Don't Have Permissions To Unban Someone! - [BAN_MEMBERS]**") 28 | try { 29 | if (reason) { 30 | message.guild.members.unban(bannedMember.user.id, reason) 31 | var sembed = new MessageEmbed() 32 | .setColor("GREEN") 33 | .setAuthor(message.guild.name, message.guild.iconURL()) 34 | .setDescription(`**${bannedMember.user.tag} has been unbanned for ${reason}**`) 35 | message.channel.send(sembed) 36 | } else { 37 | message.guild.members.unban(bannedMember.user.id, reason) 38 | var sembed2 = new MessageEmbed() 39 | .setColor("GREEN") 40 | .setAuthor(message.guild.name, message.guild.iconURL()) 41 | .setDescription(`**${bannedMember.user.tag} has been unbanned**`) 42 | message.channel.send(sembed2) 43 | } 44 | } catch { 45 | 46 | } 47 | 48 | let channel = db.fetch(`modlog_${message.guild.id}`) 49 | if (!channel) return; 50 | 51 | let embed = new MessageEmbed() 52 | .setColor("#ff0000") 53 | .setThumbnail(bannedMember.user.displayAvatarURL({ dynamic: true })) 54 | .setAuthor(`${message.guild.name} Modlogs`, message.guild.iconURL()) 55 | .addField("**Moderation**", "unban") 56 | .addField("**Unbanned**", `${bannedMember.user.username}`) 57 | .addField("**ID**", `${bannedMember.user.id}`) 58 | .addField("**Moderator**", message.author.username) 59 | .addField("**Reason**", `${reason}` || "**No Reason**") 60 | .addField("**Date**", message.createdAt.toLocaleString()) 61 | .setFooter(message.guild.name, message.guild.iconURL()) 62 | .setTimestamp(); 63 | 64 | var sChannel = message.guild.channels.cache.get(channel) 65 | if (!sChannel) return; 66 | sChannel.send(embed) 67 | } 68 | } -------------------------------------------------------------------------------- /commands/economy/sell.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const db = require('quick.db'); 3 | const { PREFIX } = require('../../config') 4 | 5 | module.exports = { 6 | config: { 7 | name: "sell", 8 | noalias: [""], 9 | category: "economy", 10 | description: "Sell to somebody", 11 | usage: "[mention | ID] ", 12 | accessableby: "everyone" 13 | }, 14 | run: async (bot, message, args) => { 15 | let prefix; 16 | let fetched = await db.fetch(`prefix_${message.guild.id}`); 17 | 18 | if (fetched === null) { 19 | prefix = PREFIX 20 | } else { 21 | prefix = fetched 22 | } 23 | let user = message.author; 24 | 25 | if (args.join(' ').toLocaleLowerCase() == 'nikes') { 26 | let embed1 = new MessageEmbed() 27 | .setColor("GREEN") 28 | .setDescription(`❌ You don't have Nikes to sell`); 29 | 30 | let nikees = await db.fetch(`nikes_${user.id}`) 31 | 32 | if (nikees < 1) return message.channel.send(embed1) 33 | 34 | db.fetch(`nikes_${user.id}`) 35 | db.subtract(`nikes_${user.id}`, 1) 36 | 37 | let embed2 = new MessageEmbed() 38 | .setColor("GREEN") 39 | .setDescription(`✅ Sold Fresh Nikes For 600 Coins`); 40 | 41 | db.add(`money_${user.id}`, 600) 42 | message.channel.send(embed2) 43 | } else if (args.join(' ').toLocaleLowerCase() == 'car') { 44 | let embed3 = new MessageEmbed() 45 | .setColor("GREEN") 46 | .setDescription(`❌ You don't have a Car to sell`); 47 | 48 | let cars = await db.fetch(`car_${user.id}`) 49 | 50 | if (cars < 1) return message.channel.send(embed3) 51 | 52 | db.fetch(`car_${user.id}`) 53 | db.subtract(`car_${user.id}`, 1) 54 | 55 | let embed4= new MessageEmbed() 56 | .setColor("GREEN") 57 | .setDescription(`✅ Sold a Car For 800 Coins`); 58 | 59 | db.add(`money_${user.id}`, 800) 60 | message.channel.send(embed4) 61 | } else if (args.join(' ').toLocaleLowerCase() == 'mansion') { 62 | let sembed2 = new MessageEmbed() 63 | .setColor("GREEN") 64 | .setDescription(`❌ You don't have a Mansion to sell`); 65 | 66 | let houses = await db.fetch(`house_${user.id}`) 67 | 68 | if (houses < 1) return message.channel.send(sembed2) 69 | 70 | db.fetch(`house_${user.id}`) 71 | db.subtract(`house_${user.id}`, 1) 72 | 73 | let sembed3 = new MessageEmbed() 74 | .setColor("GREEN") 75 | .setDescription(`✅ Sold a Mansion For 1200 Coins`); 76 | 77 | db.add(`money_${user.id}`, 1200) 78 | message.channel.send(sembed3) 79 | } else { 80 | if (message.content.toLowerCase() === `${prefix}sell`) { 81 | let embed9 = new MessageEmbed() 82 | .setColor("GREEN") 83 | .setDescription(`❌ Enter an item to sell. Type ${prefix}store to see list of items`) 84 | return message.channel.send(embed9) 85 | } else { 86 | return message.channel.send("**Not A Valid Item!**") 87 | } 88 | } 89 | } 90 | } -------------------------------------------------------------------------------- /commands/games/russianroulette.js: -------------------------------------------------------------------------------- 1 | const { stripIndents } = require('common-tags'); 2 | const { shuffle, verify } = require('../../functions'); 3 | const db = require('quick.db') 4 | 5 | module.exports = { 6 | config: { 7 | name: 'russianroulette', 8 | aliases: ['rroul', 'russianroul', 'rgun'], 9 | category: 'games', 10 | usage: '[username | nickname | mention | ID]', 11 | description: 'Who Will Pull The Trigger And Die First? You Can Play Against Bots Too!', 12 | accessableby: 'everyone' 13 | }, 14 | run: async (bot, message, args, ops) => { 15 | if (!args[0]) return message.channel.send('**Please Enter A User!**') 16 | let opponent = 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()); 17 | if (!opponent) return message.channel.send("**Please Enter A Valid User!**") 18 | if (opponent.user.id === message.author.id) return message.channel.send('**Cannot Play Against Yourself!**'); 19 | const current = ops.games.get(message.channel.id); 20 | if (current) return message.channel.send(`**Please Wait Until The Current Game Of \`${current.name}\` Is Finished!**`); 21 | ops.games.set(message.channel.id, { name: 'russian-roulette' }); 22 | try { 23 | if (!opponent.user.bot) { 24 | await message.channel.send(`**${opponent}, Do You Accept This Challenge?**`); 25 | const verification = await verify(message.channel, opponent); 26 | if (!verification) { 27 | ops.games.delete(message.channel.id); 28 | return message.channel.send(`**Looks Like ${opponent} Doesnt Wants To Play!**`); 29 | } 30 | } 31 | let userTurn = true; 32 | const gun = shuffle([true, false, false, false, false, false, false, false]); 33 | let round = 0; 34 | let winner = null; 35 | let quit = false; 36 | while (!winner) { 37 | const player = userTurn ? message.author : opponent 38 | const notPlayer = userTurn ? opponent : message.author; 39 | if (gun[round]) { 40 | message.channel.send(`**${player} Pulls The Trigger!**`).then( 41 | setTimeout(async function () { 42 | message.channel.send("**And Dies!**"); 43 | await message.channel.send(`**The Winner Is ${winner}!**`); 44 | }, 4000) 45 | ); 46 | winner = notPlayer; 47 | 48 | } else { 49 | await message.channel.send(`**${player} Pulls The Trigger!**`).then( 50 | setTimeout(function () { 51 | message.channel.send(stripIndents` 52 | **And lives...** 53 | ${opponent.user.bot ? '**Continue?' : `**Will You Take The Gun, ${notPlayer}?`}** \`(${8 - round - 1} Shots Left!\`) 54 | `) 55 | }, 4000) 56 | ); 57 | 58 | const keepGoing = await verify(message.channel, opponent.user.bot ? message.author : notPlayer); 59 | if (!keepGoing) { 60 | if (opponent.user.bot) winner = opponent; 61 | else winner = player; 62 | quit = true; 63 | } 64 | round++; 65 | userTurn = !userTurn; 66 | } 67 | } 68 | db.add(`games_${opponent.id}`, 1) 69 | db.add(`games_${message.author.id}`, 1) 70 | ops.games.delete(message.channel.id); 71 | if (quit) return message.channel.send(`**${winner} Wins, Because Their Opponent Was A Coward!**`); 72 | } catch (err) { 73 | ops.games.delete(message.channel.id); 74 | throw err; 75 | } 76 | } 77 | }; -------------------------------------------------------------------------------- /commands/moderation/addrole.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const db = require('quick.db'); 3 | 4 | module.exports = { 5 | config: { 6 | name: "addrole", 7 | aliases: ["ar"], 8 | description: "Adds role to a user", 9 | category: "moderation", 10 | usage: "[name | nickname | mention | ID] ", 11 | accessableby: "Administrator", 12 | }, 13 | run: async (bot, message, args) => { 14 | 15 | if (!message.member.hasPermission("MANAGE_ROLES")) return message.channel.send("**You Dont Have The Permissions To Add Roles To Users! - [MANAGE_ROLES]**"); 16 | if (!message.guild.me.hasPermission("MANAGE_ROLES")) return message.channel.send("**I Dont Have The Permissions To Add Roles To Users! - [MANAGE_ROLES]**"); 17 | 18 | if (!args[0]) return message.channel.send("**Please Enter A Role!**") 19 | 20 | let rMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args[0].toLocaleLowerCase()) || message.guild.members.cache.find(ro => ro.displayName.toLowerCase() === args[0].toLocaleLowerCase()); 21 | if (!rMember) return message.channel.send("**Please Enter A User Name!**"); 22 | if (rMember.roles.highest.comparePositionTo(message.guild.me.roles.highest) >= 0) return message.channel.send('**Cannot Add Role To This User!**') 23 | 24 | let role = message.mentions.roles.first() || message.guild.roles.cache.get(args[1]) || message.guild.roles.cache.find(rp => rp.name.toLowerCase() === args.slice(1).join(' ').toLocaleLowerCase()); 25 | if (!args[1]) return message.channel.send("**Please Enter A Role!**") 26 | 27 | if (!role) return message.channel.send("**Could Not Find That Role!**") 28 | 29 | if (role.managed) return message.channel.send("**Cannot Add That Role To The User!**") 30 | if (message.guild.me.roles.highest.comparePositionTo(role) <= 0) return message.channel.send('**Role Is Currently Higher Than Me Therefore Cannot Add It To The User!**') 31 | 32 | if (rMember.roles.cache.has(role.id)) return message.channel.send("**User Already Has The Role!**") 33 | if (!rMember.roles.cache.has(role.id)) await rMember.roles.add(role.id); 34 | var sembed = new MessageEmbed() 35 | .setColor("GREEN") 36 | .setAuthor(message.guild.name, message.guild.iconURL()) 37 | .setDescription(`Role has been added to ${rMember.user.username}`) 38 | message.channel.send(sembed) 39 | 40 | let channel = db.fetch(`modlog_${message.guild.id}`) 41 | if (!channel) return; 42 | 43 | const embed = new MessageEmbed() 44 | .setAuthor(`${message.guild.name} Modlogs`, message.guild.iconURL()) 45 | .setColor("#ff0000") 46 | .setThumbnail(rMember.user.displayAvatarURL({ dynamic: true })) 47 | .setFooter(message.guild.name, message.guild.iconURL()) 48 | .addField("**Moderation**", "addrole") 49 | .addField("**Added Role to**", rMember.user.username) 50 | .addField("**Role Added**", role.name) 51 | .addField("**Added By**", message.author.username) 52 | .addField("**Date**", message.createdAt.toLocaleString()) 53 | .setTimestamp(); 54 | 55 | let sChannel = message.guild.channels.cache.get(channel) 56 | if (!sChannel) return; 57 | sChannel.send(embed) 58 | } 59 | }; -------------------------------------------------------------------------------- /commands/moderation/removerole.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const db = require('quick.db'); 3 | 4 | module.exports = { 5 | config: { 6 | name: "removerole", 7 | category: "moderation", 8 | aliases: ["rr"], 9 | description: "Removes role from the user", 10 | accessableby: "Administrator", 11 | usage: "[name | nickname | mention | ID] ", 12 | }, 13 | run: async (bot, message, args) => { 14 | 15 | if (!message.member.hasPermission("MANAGE_ROLES")) return message.channel.send("**Your Dont Have The Permissions To Remove Role From Users! - [MANAGE_ROLES]**"); 16 | 17 | if (!message.guild.me.hasPermission("MANAGE_ROLES")) return message.channel.send("**I Dont Have The Permissions To Remove Roles From Users! - [MANAGE_ROLES]**"); 18 | 19 | if (!args[0]) return message.channel.send("**Please Enter A User!**") 20 | 21 | let rMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args[0].toLocaleLowerCase()) || message.guild.members.cache.find(ro => ro.displayName.toLowerCase() === args[0].toLocaleLowerCase()); 22 | if (!rMember) return message.channel.send("**Couldn't Find That User**"); 23 | 24 | let role = message.mentions.roles.first() || message.guild.roles.cache.get(args[1]) || message.guild.roles.cache.find(rp => rp.name.toLowerCase() === args.slice(1).join(' ').toLocaleLowerCase()); 25 | if (!args[1]) return message.channel.send("**Please Enter A Role!**"); 26 | 27 | if (!role) return message.channel.send("**Couldn't Find That Role**"); 28 | 29 | if (rMember.roles.highest.comparePositionTo(message.guild.me.roles.highest) >= 0) return message.channel.send('**Cannot Remove Role From This User! - [Higher Than Me In Role Hierachy]**') 30 | if (message.guild.me.roles.highest.comparePositionTo(role) < 0) return message.channel.send('**Role Is Currently Higher Than Me Therefore Cannot Remove It From The User!**') 31 | if (role.managed) return message.channel.send("**Cannot Remove That Role From This User!**") 32 | 33 | if (!rMember.roles.cache.has(role.id)) return message.channel.send("**User Doesnt Has The Role!**") 34 | if (rMember.roles.cache.has(role.id)) await (rMember.roles.remove(role.id)); 35 | 36 | const sembed = new MessageEmbed() 37 | .setColor("GREEN") 38 | .setAuthor(message.guild.name, message.guild.iconURL()) 39 | .setDescription(`Role has been removed from ${rMember.user.username}`) 40 | message.channel.send(sembed); 41 | 42 | let channel = db.fetch(`modlog_${message.guild.id}`) 43 | if (!channel) return; 44 | 45 | const embed = new MessageEmbed() 46 | .setAuthor(`${message.guild.name} Modlogs`, message.guild.iconURL()) 47 | .setColor("#ff0000") 48 | .setThumbnail(rMember.user.displayAvatarURL({ dynamic: true })) 49 | .setFooter(message.guild.name, message.guild.iconURL()) 50 | .addField("**Moderation**", "removerole") 51 | .addField("**Removed Role from**", rMember.user.username) 52 | .addField("**Role Added**", role.name) 53 | .addField("**Removed By**", message.author.username) 54 | .addField("**Date**", message.createdAt.toLocaleString()) 55 | .setTimestamp(); 56 | 57 | var sChannel = message.guild.channels.cache.get(channel) 58 | if (!sChannel) return; 59 | sChannel.send(embed) 60 | } 61 | } -------------------------------------------------------------------------------- /commands/moderation/warn.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const { redlight } = require('../../JSON/colours.json') 3 | const db = require('quick.db'); 4 | 5 | module.exports = { 6 | config: { 7 | name: "warn", 8 | aliases: ['report'], 9 | category: "moderation", 10 | description: "reports a user of the guild", 11 | usage: "[name | nickname | mention | ID] (optional)", 12 | accessableby: "Administrator", 13 | }, 14 | run: async (bot, message, args) => { 15 | if (!message.member.hasPermission("MANAGE_GUILD")) return message.channel.send("**You Dont Have The Permissions To Report Someone! - [MANAGE_GUILD]**"); 16 | if (!args[0]) return message.channel.send("**Please Enter A User!**") 17 | 18 | let target = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args[0].toLocaleLowerCase()) || message.guild.members.cache.find(ro => ro.displayName.toLowerCase() === args[0].toLocaleLowerCase()); 19 | if (!target) return message.channel.send("**Please Enter A User!**") 20 | if (target.id === message.member.id) return message.channel.send("**Cannot Warn Yourself!**") 21 | 22 | let reason = args.slice(1).join(" ") 23 | 24 | if (target.roles.highest.comparePositionTo(message.guild.me.roles.highest) >= 0) return message.channel.send('**Cannot Warn This User!**') 25 | if (target.hasPermission("MANAGE_GUILD") || target.user.bot) return message.channel.send("**Cannot Warn This User!**") 26 | try { 27 | const sembed2 = new MessageEmbed() 28 | .setColor("RED") 29 | .setDescription(`**Hello, You Have Been Warned In ${message.guild.name} for - ${reason || "No Reason!"}**`) 30 | .setFooter(message.guild.name, message.guild.iconURL()) 31 | target.send(sembed2) 32 | } catch { 33 | 34 | } 35 | if (reason) { 36 | const embed = new MessageEmbed() 37 | .setColor("GREEN") 38 | .setAuthor(`${message.guild.name}`, message.guild.iconURL()) 39 | .setDescription(`**${target.displayName} Has Been Warned for ${reason}!**`) 40 | message.channel.send(embed) 41 | } else { 42 | const embed = new MessageEmbed() 43 | .setColor("GREEN") 44 | .setAuthor(`${message.guild.name}`, message.guild.iconURL()) 45 | .setDescription(`**${target.displayName} Has Been Warned!**`) 46 | message.channel.send(embed) 47 | } 48 | 49 | let channel = db.fetch(`modlog_${message.guild.id}`) 50 | if (!channel) return; 51 | 52 | const sembed = new MessageEmbed() 53 | .setColor(redlight) 54 | .setTimestamp() 55 | .setThumbnail(target.user.displayAvatarURL({ dynamic: true })) 56 | .setFooter(message.guild.name, message.guild.iconURL()) 57 | .setAuthor(`${message.guild.name} Modlogs`, message.guild.iconURL()) 58 | .addField("**Moderation**", "report") 59 | .addField("**User Reported**", `${target}`) 60 | .addField("**User ID**", `${target.user.id}`) 61 | .addField("**Reported By**", `${message.member}`) 62 | .addField("**Reported in**", `${message.channel}`) 63 | .addField("**Reason**", `**${reason || "No Reason"}**`) 64 | .addField("**Date**", message.createdAt.toLocaleString()); 65 | 66 | var sChannel = message.guild.channels.cache.get(channel) 67 | if (!sChannel) return; 68 | sChannel.send(sembed) 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /commands/economy/roulette.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const db = require("quick.db"); 3 | const { PREFIX } = require('../../config'); 4 | 5 | module.exports = { 6 | config: { 7 | name: "roulette", 8 | aliases: ["roul"], 9 | category: "economy", 10 | description: "Bet a colour to win or lose", 11 | usage: "[colour]", 12 | accessableby: "everyone" 13 | }, 14 | run: async (bot, message, args) => { 15 | let prefix; 16 | let fetched = await db.fetch(`prefix_${message.guild.id}`); 17 | 18 | if (fetched === null) { 19 | prefix = PREFIX 20 | } else { 21 | prefix = fetched 22 | } 23 | 24 | let user = message.author; 25 | 26 | function isOdd(num) { 27 | if ((num % 2) == 0) return false; 28 | else if ((num % 2) == 1) return true; 29 | } 30 | 31 | let colour = args[0]; 32 | let money = parseInt(args[1]); 33 | let moneydb = await db.fetch(`money_${user.id}`) 34 | 35 | let random = Math.floor((Math.random() * 10)); 36 | 37 | let moneyhelp = new MessageEmbed() 38 | .setColor("GREEN") 39 | .setDescription(`❌ Specify an amount to gamble | ${prefix}roulette `); 40 | 41 | let moneymore = new MessageEmbed() 42 | .setColor("GREEN") 43 | .setDescription(`❌ You are betting more than you have`); 44 | 45 | let colorbad = new MessageEmbed() 46 | .setColor("GREEN") 47 | .setDescription(`❌ Specify a color | Red [1.5x] (normal) Black [2x] (hard) Green [15x](rare)`); 48 | 49 | if (!colour) return message.channel.send(colorbad); 50 | colour = colour.toLowerCase() 51 | if (!money) return message.channel.send(moneyhelp); 52 | if (money > moneydb) return message.channel.send(moneymore); 53 | 54 | if (colour == "b" || colour.includes("black")) colour = 0; 55 | else if (colour == "r" || colour.includes("red")) colour = 1; 56 | else if (colour == "g" || colour.includes("green")) colour = 2; 57 | else return message.channel.send(colorbad); 58 | 59 | if (random == 1 && colour == 2) { // Green 60 | money *= 15 61 | db.add(`money_${user.id}`, money) 62 | let moneyEmbed1 = new MessageEmbed() 63 | .setColor("GREEN") 64 | .setDescription(`✅ You won ${money} coins\n\nMultiplier: 15x`); 65 | message.channel.send(moneyEmbed1) 66 | } else if (isOdd(random) && colour == 1) { // Red 67 | money = parseInt(money * 1.5) 68 | db.add(`money_${user.id}`, money) 69 | let moneyEmbed2 = new MessageEmbed() 70 | .setColor("GREEN") 71 | .setDescription(`🔴 You won ${money} coins\n\nMultiplier: 1.5x`); 72 | message.channel.send(moneyEmbed2) 73 | } else if (!isOdd(random) && colour == 0) { // Black 74 | money = parseInt(money * 2) 75 | db.add(`money_${user.id}`, money) 76 | let moneyEmbed3 = new MessageEmbed() 77 | .setColor("GREEN") 78 | .setDescription(`⬛ You won ${money} coins\n\nMultiplier: 2x`); 79 | message.channel.send(moneyEmbed3) 80 | } else { // Wrong 81 | db.subtract(`money_${user.id}`, money) 82 | let moneyEmbed4 = new MessageEmbed() 83 | .setColor("GREEN") 84 | .setDescription(`❌ You lost ${money} coins\n\nMultiplier: 0x`); 85 | message.channel.send(moneyEmbed4) 86 | } 87 | db.add(`games_${user.id}`, 1) 88 | } 89 | } -------------------------------------------------------------------------------- /commands/info/help.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const { readdirSync } = require("fs"); 3 | const db = require('quick.db'); 4 | const { stripIndents } = require("common-tags"); 5 | const { cyan } = require("../../JSON/colours.json"); 6 | const { PREFIX } = require('../../config'); 7 | 8 | module.exports = { 9 | config: { 10 | name: "help", 11 | aliases: ["h"], 12 | usage: "[command name] (optional)", 13 | category: "info", 14 | description: "Displays all commands that the bot has.", 15 | accessableby: "everyone" 16 | }, 17 | run: async (bot, message, args) => { 18 | let prefix; 19 | let fetched = await db.fetch(`prefix_${message.guild.id}`); 20 | 21 | if (fetched === null) { 22 | prefix = PREFIX 23 | } else { 24 | prefix = fetched 25 | } 26 | 27 | const embed = new MessageEmbed() 28 | .setColor(cyan) 29 | .setAuthor(`${message.guild.me.displayName} Help`, message.guild.iconURL()) 30 | .setThumbnail(bot.user.displayAvatarURL()) 31 | 32 | if (!args[0]) { 33 | 34 | const sembed = new MessageEmbed() 35 | .setAuthor(`${message.guild.me.displayName}`, message.guild.iconURL()) 36 | .setColor("GREEN") 37 | .setDescription('**Message Has Been Sent to You In DMs!**') 38 | message.channel.send(sembed).then(msg => { 39 | msg.delete({ timeout: 10000 }); 40 | }) 41 | 42 | const categories = readdirSync("./commands/") 43 | 44 | embed.setDescription(`**These Are the Available Commands For ${message.guild.me.displayName}\nBot's Global Prefix Is \`${PREFIX}\`\nServer Prefix Is \`${prefix}\`\n\nFor Help Related To A Particular Command Type -\n\`${prefix}help [command name | alias]\`**`) 45 | embed.setFooter(`${message.guild.me.displayName} | Total Commands - ${bot.commands.size - 1}`, bot.user.displayAvatarURL()); 46 | 47 | categories.forEach(category => { 48 | const dir = bot.commands.filter(c => c.config.category === category) 49 | const capitalise = category.slice(0, 1).toUpperCase() + category.slice(1) 50 | try { 51 | embed.addField(` ${capitalise} [${dir.size}] - `, dir.map(c => `\`${c.config.name}\``).join(" ")) 52 | } catch (e) { 53 | console.log(e) 54 | } 55 | }) 56 | 57 | return message.author.send(embed) 58 | } else { 59 | let command = bot.commands.get(bot.aliases.get(args[0].toLowerCase()) || args[0].toLowerCase()) 60 | if (!command) return message.channel.send(embed.setTitle("**Invalid Command!**").setDescription(`**Do \`${prefix}help\` For the List Of the Commands!**`)) 61 | command = command.config 62 | 63 | embed.setDescription(stripIndents`**The Bot's Global Prefix Is \`${PREFIX}\`**\n 64 | **Server Prefix Is \`${prefix}\`**\n 65 | ** Command -** ${command.name.slice(0, 1).toUpperCase() + command.name.slice(1)}\n 66 | ** Description -** ${command.description || "No Description provided."}\n 67 | **Category -** ${command.category}\n 68 | ** Usage -** ${command.usage ? `\`${prefix}${command.name} ${command.usage}\`` : "No Usage"}\n 69 | ** Accessible by -** ${command.accessableby || "everyone"}\n 70 | ** Aliases -** ${command.aliases ? command.aliases.join(", ") : "None."}`) 71 | embed.setFooter(message.guild.name, message.guild.iconURL()) 72 | 73 | return message.channel.send(embed) 74 | } 75 | } 76 | }; 77 | -------------------------------------------------------------------------------- /commands/moderation/ban.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | const db = require('quick.db'); 3 | 4 | module.exports = { 5 | config: { 6 | name: "ban", 7 | aliases: ["b", "banish"], 8 | category: "moderation", 9 | description: "Bans the user", 10 | usage: "[name | nickname | mention | ID] (optional)", 11 | accessableby: "Administrator", 12 | }, 13 | run: async (bot, message, args) => { 14 | try { 15 | if (!message.member.hasPermission("BAN_MEMBERS")) return message.channel.send("**You Dont Have The Permissions To Ban Users! - [BAN_MEMBERS]**"); 16 | if (!message.guild.me.hasPermission("BAN_MEMBERS")) return message.channel.send("**I Dont Have The Permissions To Ban Users! - [BAN_MEMBERS]**"); 17 | if (!args[0]) return message.channel.send("**Please Provide A User To Ban!**") 18 | 19 | let banMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args[0].toLocaleLowerCase()) || message.guild.members.cache.find(ro => ro.displayName.toLowerCase() === args[0].toLocaleLowerCase()); 20 | if (!banMember) return message.channel.send("**User Is Not In The Guild**"); 21 | if (banMember === message.member) return message.channel.send("**You Cannot Ban Yourself**") 22 | 23 | var reason = args.slice(1).join(" "); 24 | 25 | if (!banMember.bannable) return message.channel.send("**Cant Kick That User**") 26 | try { 27 | banMember.send(`**Hello, You Have Been Banned From ${message.guild.name} for - ${reason || "No Reason"}**`).then(() => 28 | message.guild.members.ban(banMember, { days: 7, reason: reason })).catch(() => null) 29 | } catch { 30 | message.guild.members.ban(banMember, { days: 7, reason: reason }) 31 | } 32 | if (reason) { 33 | var sembed = new MessageEmbed() 34 | .setColor("GREEN") 35 | .setAuthor(message.guild.name, message.guild.iconURL()) 36 | .setDescription(`**${banMember.user.username}** has been banned for ${reason}`) 37 | message.channel.send(sembed) 38 | } else { 39 | var sembed2 = new MessageEmbed() 40 | .setColor("GREEN") 41 | .setAuthor(message.guild.name, message.guild.iconURL()) 42 | .setDescription(`**${banMember.user.username}** has been banned`) 43 | message.channel.send(sembed2) 44 | } 45 | let channel = db.fetch(`modlog_${message.guild.id}`) 46 | if (channel == null) return; 47 | 48 | if (!channel) return; 49 | 50 | const embed = new MessageEmbed() 51 | .setAuthor(`${message.guild.name} Modlogs`, message.guild.iconURL()) 52 | .setColor("#ff0000") 53 | .setThumbnail(banMember.user.displayAvatarURL({ dynamic: true })) 54 | .setFooter(message.guild.name, message.guild.iconURL()) 55 | .addField("**Moderation**", "ban") 56 | .addField("**Banned**", banMember.user.username) 57 | .addField("**ID**", `${banMember.id}`) 58 | .addField("**Banned By**", message.author.username) 59 | .addField("**Reason**", `${reason || "**No Reason**"}`) 60 | .addField("**Date**", message.createdAt.toLocaleString()) 61 | .setTimestamp(); 62 | 63 | var sChannel = message.guild.channels.cache.get(channel) 64 | if (!sChannel) return; 65 | sChannel.send(embed) 66 | } catch (e) { 67 | return message.channel.send(`**${e.message}**`) 68 | } 69 | } 70 | }; -------------------------------------------------------------------------------- /commands/games/horserace.js: -------------------------------------------------------------------------------- 1 | const { createCanvas, loadImage } = require('canvas'); 2 | const db = require('quick.db'); 3 | const { stripIndents } = require('common-tags'); 4 | const { shuffle, randomRange, drawImageWithTint } = require('../../functions'); 5 | const horses = require('../../JSON/horserace.json'); 6 | const colors = ['gold', 'silver', '#cd7f32']; 7 | 8 | module.exports = { 9 | config: { 10 | name: 'horserace', 11 | aliases: ['racehorse', 'hrace'], 12 | category: 'games', 13 | usage: 'Choose Horse Number', 14 | description: 'Bet On The Fastest Horse In A 6-Horse Race!', 15 | accessableby: 'everyone' 16 | }, 17 | run: async (bot, message, args) => { 18 | const chosenHorses = shuffle(horses).slice(0, 6); 19 | await message.channel.send(stripIndents` 20 | **Choose a horse to bet on:** _(Type the number)_ 21 | ${chosenHorses.map((horse, i) => `**${i + 1}.** ${horse.name}`).join('\n')} 22 | `); 23 | const filter = res => { 24 | if (res.author.id !== message.author.id) return false; 25 | const num = Number.parseInt(res.content, 10); 26 | if (!num) return false; 27 | return num > 0 && num <= chosenHorses.length; 28 | }; 29 | const messages = await message.channel.awaitMessages(filter, { 30 | max: 1, 31 | time: 30000 32 | }); 33 | if (!messages.size) return message.channel.send('Sorry, can\'t have a race with no bets!'); 34 | const pick = chosenHorses[Number.parseInt(messages.first().content, 10) - 1]; 35 | let results = []; 36 | for (const horse of chosenHorses) { 37 | results.push({ 38 | name: horse.name, 39 | time: randomRange(horse.minTime, horse.minTime + 5) + Math.random() 40 | }); 41 | } 42 | results = results.sort((a, b) => a.time - b.time); 43 | const leaderboard = await generateLeaderboard(chosenHorses, results); 44 | const win = results[0].name === pick.name; 45 | db.add(`games_${message.author.id}`, 1) 46 | return message.channel.send(win ? `Nice job! Your horse won!` : 'Better luck next time!', { files: [leaderboard] }); 47 | 48 | async function generateLeaderboard(chosenHorses, results) { 49 | const lb = await loadImage("https://cdn.glitch.com/ccfc9e2e-e1fa-4dd0-838d-c3b5bb122b10%2Fleaderboard.png?v=1588572142541"); 50 | const horseImg = await loadImage("https://cdn.glitch.com/ccfc9e2e-e1fa-4dd0-838d-c3b5bb122b10%2Fhorse.png?v=1588572375774"); 51 | const canvas = createCanvas(lb.width, lb.height); 52 | const ctx = canvas.getContext('2d'); 53 | ctx.drawImage(lb, 0, 0); 54 | ctx.fillStyle = 'white'; 55 | ctx.textAlign = 'center'; 56 | ctx.textBaseline = 'middle'; 57 | for (let i = 0; i < results.length; i++) { 58 | const result = results[i]; 59 | const horse = chosenHorses.find(hor => hor.name === result.name); 60 | if (colors[i]) drawImageWithTint(ctx, horseImg, colors[i], 37, 72 + (49 * i), 49, 49); 61 | ctx.font = '25px Impact'; 62 | ctx.fillText(formatTime(result.time), 755, 100 + (49 * i)); 63 | ctx.font = '25px Impact'; 64 | ctx.fillText(horse.name, 261, 88 + (51 * i)); 65 | } 66 | return { attachment: canvas.toBuffer(), name: 'leaderboard.png' }; 67 | } 68 | 69 | function formatTime(time) { 70 | const min = Math.floor(time / 60); 71 | const sec = Math.floor(time - (min * 60)); 72 | const ms = time - sec - (min * 60); 73 | return `${min}:${sec.toString().padStart(2, '0')}.${ms.toFixed(4).slice(2)}`; 74 | } 75 | } 76 | }; -------------------------------------------------------------------------------- /commands/moderation/unmute.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js") 2 | const { redlight } = require("../../JSON/colours.json"); 3 | const db = require('quick.db'); 4 | 5 | module.exports = { 6 | config: { 7 | name: "unmute", 8 | aliases: ["um"], 9 | description: "Unmutes a member in the discord!", 10 | usage: "[name | nickname | mention | ID] (optional)", 11 | accessableby: "Administrator", 12 | category: "moderation", 13 | }, 14 | run: async (bot, message, args) => { 15 | if (!message.member.hasPermission("MANAGE_GUILD")) return message.channel.send("**You Dont Have The Permissions To Unmute Someone!**"); 16 | 17 | if (!message.guild.me.hasPermission("MANAGE_GUILD")) return message.channel.send("**I Don't Have Permissions To Unmute Someone!**") 18 | if (!args[0]) return message.channel.send("**Please Enter A User!**") 19 | let mutee = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args[0].toLocaleLowerCase()) || message.guild.members.cache.find(ro => ro.displayName.toLowerCase() === args[0].toLocaleLowerCase()); 20 | if (!mutee) return message.channel.send("**Please Enter A Valid User!**"); 21 | 22 | let reason = args.slice(1).join(" "); 23 | 24 | let muterole; 25 | let dbmute = await db.fetch(`muterole_${message.guild.id}`); 26 | let muteerole = message.guild.roles.cache.find(r => r.name === "muted") 27 | 28 | if (!message.guild.roles.cache.has(dbmute)) { 29 | muterole = muteerole 30 | } else { 31 | muterole = message.guild.roles.cache.get(dbmute) 32 | } 33 | 34 | let rolefetched = db.fetch(`muteeid_${message.guild.id}_${mutee.id}`) 35 | if (!rolefetched) return; 36 | 37 | if (!muterole) return message.channel.send("**There Is No Mute Role To Remove!**") 38 | if (!mutee.roles.cache.has(muterole.id)) return message.channel.send("**User is not Muted!**") 39 | try { 40 | mutee.roles.remove(muterole.id).then(() => { 41 | mutee.send(`**Hello, You Have Been Unmuted In ${message.guild.name} for ${reason || "No Reason"}**`).catch(() => null) 42 | let roleadds = rolefetched 43 | if (!roleadds) return; 44 | mutee.roles.add(roleadds) 45 | }) 46 | } catch { 47 | let roleadds2 = rolefetched 48 | if (!roleadds2) return; 49 | mutee.roles.add(roleadds2) 50 | } 51 | const sembed = new MessageEmbed() 52 | .setColor("GREEN") 53 | .setAuthor(message.guild.name, message.guild.iconURL()) 54 | .setDescription(`${mutee.user.username} was successfully unmuted.`) 55 | message.channel.send(sembed); 56 | 57 | 58 | let channel = db.fetch(`modlog_${message.guild.id}`) 59 | if (!channel) return; 60 | 61 | let embed = new MessageEmbed() 62 | .setColor(redlight) 63 | .setThumbnail(mutee.user.displayAvatarURL({ dynamic: true })) 64 | .setAuthor(`${message.guild.name} Modlogs`, message.guild.iconURL()) 65 | .addField("**Moderation**", "unmute") 66 | .addField("**Unmuted**", mutee.user.username) 67 | .addField("**Moderator**", message.author.username) 68 | .addField("**Reason**", `${reason || "**No Reason**"}`) 69 | .addField("**Date**", message.createdAt.toLocaleString()) 70 | .setFooter(message.member.displayName, message.author.displayAvatarURL()) 71 | .setTimestamp(); 72 | 73 | var sChannel = message.guild.channels.cache.get(channel) 74 | if (!sChannel) return; 75 | sChannel.send(embed) 76 | 77 | } 78 | } -------------------------------------------------------------------------------- /commands/moderation/setverification.js: -------------------------------------------------------------------------------- 1 | const db = require('quick.db'); 2 | const { PREFIX } = require('../../config'); 3 | 4 | module.exports = { 5 | config: { 6 | name: 'setverification', 7 | aliases: ['sv', 'setv', 'setverify'], 8 | category: 'moderation', 9 | description: 'Sets Verification Channel And Role', 10 | usage: '[channel name | channel ID | channel mention] { 14 | let prefix; 15 | let fetched = await db.fetch(`prefix_${message.guild.id}`); 16 | 17 | if (fetched === null) { 18 | prefix = PREFIX 19 | } else { 20 | prefix = fetched 21 | } 22 | 23 | if (!message.member.hasPermission("ADMINISTRATOR")) return message.channel.send("**You Do Not Have Required Permissions! - [ADMINISTRATOR]!**"); 24 | 25 | if (!args[0]) return message.channel.send("**Please Enter A Channel Name Where The User Should Be Asked To Verify!**"); 26 | 27 | if (!args[1]) return message.channel.send("**Please Enter A Role Which Will Be Added After The User Is Verified!**"); 28 | 29 | let channel = message.mentions.channels.first() || message.guild.channels.cache.get(args[0]) || message.guild.channels.cache.find(c => c.name.toLowerCase() === args[0].toLocaleLowerCase()); 30 | if (!channel || channel.type !== 'text') return message.channel.send("**Please Enter A Valid Channel!**"); 31 | 32 | let role = message.mentions.roles.first() || message.guild.roles.cache.get(args[1]) || message.guild.roles.cache.find(r => r.name.toLowerCase() === args[1].toLocaleLowerCase()); 33 | if (!role) return message.channel.send("**Please Enter A Valid Role!**"); 34 | 35 | let verifiedchannel = channel; 36 | 37 | try { 38 | let a = await db.fetch(`verificationchannel_${message.guild.id}`); 39 | let b = await db.fetch(`verificationrole_${message.guild.id}`); 40 | 41 | if (channel.id === a && role.id === b) { 42 | return message.channel.send('**This Channel is Already Set As Verification Channel!**'); 43 | } else if (channel.id === a && role.id === b) { 44 | return message.channel.send("**This Role is Already Set As Verification Role!**"); 45 | } 46 | else { 47 | message.guild.channels.cache.forEach(channel => { 48 | if (channel.type === 'category' && channel.id === verifiedchannel.id) return; 49 | let r = channel.permissionOverwrites.get(role.id); 50 | if (!r) return; 51 | if (r.deny.has("VIEW_CHANNEL") || r.deny.has("SEND_MESSAGES")) return; 52 | 53 | channel.createOverwrite(message.guild.id, { 54 | VIEW_CHANNEL: false 55 | }); 56 | 57 | channel.updateOverwrite(role, { 58 | VIEW_CHANNEL: true, 59 | SEND_MESSAGES: true 60 | }); 61 | }); 62 | 63 | verifiedchannel.updateOverwrite(role, { 64 | SEND_MESSAGES: false, 65 | VIEW_CHANNEL: false 66 | }); 67 | bot.guilds.cache.get(message.guild.id).channels.cache.get(channel.id).send(`**Welcome To ${message.guild.name}!\nTo Get Verified Type - \`${prefix}verify\`**`); 68 | db.set(`verificationchannel_${message.guild.id}`, channel.id); 69 | db.set(`verificationrole_${message.guild.id}`, role.id); 70 | 71 | return message.channel.send(`**Verification Channel And Role Has Been Set Successfully in \`${channel.name}\`!**`); 72 | }; 73 | } catch { 74 | return message.channel.send("**Error - `Missing Permissions Or Channel Is Not A Text Channel!`**"); 75 | }; 76 | } 77 | }; -------------------------------------------------------------------------------- /commands/moderation/kick.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require("discord.js"); 2 | const db = require('quick.db'); 3 | 4 | module.exports = { 5 | config: { 6 | name: "kick", 7 | category: "moderation", 8 | description: "Kicks the user", 9 | accessableby: "Administrator", 10 | usage: "[name | nickname | mention | ID] (optional)", 11 | aliases: ["k"], 12 | }, 13 | run: async (bot, message, args) => { 14 | try { 15 | if (!message.member.hasPermission("KICK_MEMBERS")) return message.channel.send("**You Do Not Have Permissions To Kick Members! - [KICK_MEMBERS]**"); 16 | if (!message.guild.me.hasPermission("KICK_MEMBERS")) return message.channel.send("**I Do Not Have Permissions To Kick Members! - [KICK_MEMBERS]**"); 17 | 18 | if (!args[0]) return message.channel.send('**Enter A User To Kick!**') 19 | 20 | var kickMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args[0].toLocaleLowerCase()) || message.guild.members.cache.find(ro => ro.displayName.toLowerCase() === args[0].toLocaleLowerCase()); 21 | if (!kickMember) return message.channel.send("**User Is Not In The Guild!**"); 22 | 23 | if (kickMember.id === message.member.id) return message.channel.send("**You Cannot Kick Yourself!**") 24 | 25 | if (!kickMember.kickable) return message.channel.send("**Cannot Kick This User!**") 26 | if (kickMember.user.bot) return message.channel.send("**Cannot Kick A Bot!**") 27 | 28 | var reason = args.slice(1).join(" "); 29 | try { 30 | const sembed2 = new MessageEmbed() 31 | .setColor("RED") 32 | .setDescription(`**Hello, You Have Been Kicked From ${message.guild.name} for - ${reason || "No Reason!"}**`) 33 | .setFooter(message.guild.name, message.guild.iconURL()) 34 | kickMember.send(sembed2).then(() => 35 | kickMember.kick()).catch(() => null) 36 | } catch { 37 | kickMember.kick() 38 | } 39 | if (reason) { 40 | var sembed = new MessageEmbed() 41 | .setColor("GREEN") 42 | .setAuthor(message.guild.name, message.guild.iconURL()) 43 | .setDescription(`**${kickMember.user.username}** has been kicked for ${reason}`) 44 | message.channel.send(sembed); 45 | } else { 46 | var sembed2 = new MessageEmbed() 47 | .setColor("GREEN") 48 | .setAuthor(message.guild.name, message.guild.iconURL()) 49 | .setDescription(`**${kickMember.user.username}** has been kicked`) 50 | message.channel.send(sembed2); 51 | } 52 | let channel = db.fetch(`modlog_${message.guild.id}`) 53 | if (!channel) return; 54 | 55 | const embed = new MessageEmbed() 56 | .setAuthor(`${message.guild.name} Modlogs`, message.guild.iconURL()) 57 | .setColor("#ff0000") 58 | .setThumbnail(kickMember.user.displayAvatarURL({ dynamic: true })) 59 | .setFooter(message.guild.name, message.guild.iconURL()) 60 | .addField("**Moderation**", "kick") 61 | .addField("**User Kicked**", kickMember.user.username) 62 | .addField("**Kicked By**", message.author.username) 63 | .addField("**Reason**", `${reason || "**No Reason**"}`) 64 | .addField("**Date**", message.createdAt.toLocaleString()) 65 | .setTimestamp(); 66 | 67 | var sChannel = message.guild.channels.cache.get(channel) 68 | if (!sChannel) return; 69 | sChannel.send(embed) 70 | } catch (e) { 71 | return message.channel.send(`**${e.message}**`) 72 | } 73 | } 74 | } -------------------------------------------------------------------------------- /commands/economy/buy.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js') 2 | const db = require('quick.db') 3 | const { PREFIX } = require('../../config'); 4 | 5 | module.exports = { 6 | config: { 7 | name: "buy", 8 | noalias: [""], 9 | category: "economy", 10 | description: "buys items", 11 | usage: "[item]", 12 | accessableby: "everyone" 13 | }, 14 | run: async (bot, message, args) => { 15 | let user = message.author; 16 | 17 | let prefix; 18 | let fetched = await db.fetch(`prefix_${message.guild.id}`); 19 | 20 | if (fetched === null) { 21 | prefix = PREFIX 22 | } else { 23 | prefix = fetched 24 | } 25 | 26 | let author = db.fetch(`money_${user.id}`) 27 | 28 | let Embed = new MessageEmbed() 29 | .setColor("GREEN") 30 | .setDescription(`❌ You need 200 coins to purchase Bronze VIP`); 31 | 32 | 33 | if (args.join(' ').toLocaleLowerCase() == 'bronze') { 34 | if (author < 200) return message.channel.send(Embed) 35 | 36 | await db.fetch(`bronze_${user.id}`); 37 | db.set(`bronze_${user.id}`, true) 38 | 39 | let Embed2 = new MessageEmbed() 40 | .setColor("GREEN") 41 | .setDescription(`✅ Purchased Bronze VIP For 200 Coins`); 42 | 43 | db.subtract(`money_${user.id}`, 200) 44 | message.channel.send(Embed2) 45 | } else if (args.join(' ').toLocaleLowerCase() == 'nikes') { 46 | let Embed3 = new MessageEmbed() 47 | .setColor("GREEN") 48 | .setDescription(`❌ You need 600 coins to purchase some Nikes`); 49 | 50 | if (author < 600) return message.channel.send(Embed3) 51 | 52 | await db.fetch(`nikes_${user.id}`) 53 | db.add(`nikes_${user.id}`, 1) 54 | 55 | let Embed4 = new MessageEmbed() 56 | .setColor("GREEN") 57 | .setDescription(`✅ Purchased Fresh Nikes For 600 Coins`); 58 | 59 | db.subtract(`money_${user.id}`, 600) 60 | message.channel.send(Embed4) 61 | } else if (args.join(' ').toLocaleLowerCase() == 'car') { 62 | let Embed5 = new MessageEmbed() 63 | .setColor("GREEN") 64 | .setDescription(`❌ You need 800 coins to purchase a new car`); 65 | 66 | if (author < 800) return message.channel.send(Embed5) 67 | 68 | await db.fetch(`car_${user.id}`) 69 | db.add(`car_${user.id}`, 1) 70 | 71 | let Embed6 = new MessageEmbed() 72 | .setColor("GREEN") 73 | .setDescription(`✅ Purchased A New Car For 800 Coins`); 74 | 75 | db.subtract(`money_${message.guild.id}_${user.id}`, 800) 76 | message.channel.send(Embed6) 77 | } else if (args.join(' ').toLocaleLowerCase() == 'mansion') { 78 | let Embed7 = new MessageEmbed() 79 | .setColor("GREEN") 80 | .setDescription(`❌ You need 1200 coins to purchase a Mansion`); 81 | 82 | if (author < 1200) return message.channel.send(Embed7) 83 | 84 | await db.fetch(`house_${user.id}`) 85 | db.add(`house_${user.id}`, 1) 86 | 87 | let Embed8 = new MessageEmbed() 88 | .setColor("GREEN") 89 | .setDescription(`✅ Purchased A Mansion For 1200 Coins`); 90 | 91 | db.subtract(`money_${user.id}`, 1200) 92 | message.channel.send(Embed8) 93 | } else { 94 | if (message.content.toLowerCase() === `${prefix}buy`) { 95 | let embed9 = new MessageEmbed() 96 | .setColor("GREEN") 97 | .setDescription(`❌ Enter An Item To Buy!\nType ${prefix}store To See List Of Items!`) 98 | return message.channel.send(embed9) 99 | } 100 | } 101 | } 102 | } -------------------------------------------------------------------------------- /commands/fun/status.js: -------------------------------------------------------------------------------- 1 | const { MessageEmbed } = require('discord.js'); 2 | 3 | module.exports = { 4 | config: { 5 | name: "status", 6 | category: "fun", 7 | noalias: [""], 8 | description: "Shows status of users", 9 | usage: " ", 10 | accessableby: "everyone" 11 | }, 12 | run: async (bot, message, args) => { 13 | 14 | let user = 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(ro => ro.displayName.toLowerCase() === args.join(' ').toLocaleLowerCase()) || message.member; 15 | 16 | if (!user.presence.activities.length) { 17 | const sembed = new MessageEmbed() 18 | .setAuthor(user.user.username, user.user.displayAvatarURL({ dynamic: true })) 19 | .setColor("GREEN") 20 | .setThumbnail(user.user.displayAvatarURL()) 21 | .addField("**No Status**", 'This user does not have any custom status!') 22 | .setFooter(message.guild.name, message.guild.iconURL()) 23 | .setTimestamp() 24 | message.channel.send(sembed) 25 | return undefined; 26 | } 27 | 28 | user.presence.activities.forEach((activity) => { 29 | 30 | if (activity.type === 'CUSTOM_STATUS') { 31 | const embed = new MessageEmbed() 32 | .setAuthor(user.user.username, user.user.displayAvatarURL({ dynamic: true })) 33 | .setColor("GREEN") 34 | .addField("**Status**", `**Custom status** -\n${activity.emoji || "No Emoji"} | ${activity.state}`) 35 | .setThumbnail(user.user.displayAvatarURL()) 36 | .setFooter(message.guild.name, message.guild.iconURL()) 37 | .setTimestamp() 38 | message.channel.send(embed) 39 | } 40 | else if (activity.type === 'PLAYING') { 41 | let name1 = activity.name 42 | let details1 = activity.details 43 | let state1 = activity.state 44 | let image = user.user.displayAvatarURL({ dynamic: true }) 45 | 46 | const sembed = new MessageEmbed() 47 | .setAuthor(`${user.user.username}'s Activity`) 48 | .setColor(0xFFFF00) 49 | .setThumbnail(image) 50 | .addField("**Type**", "Playing") 51 | .addField("**App**", `${name1}`) 52 | .addField("**Details**", `${details1 || "No Details"}`) 53 | .addField("**Working on**", `${state1 || "No Details"}`) 54 | message.channel.send(sembed); 55 | } 56 | else if (activity.type === 'LISTENING' && activity.name === 'Spotify' && activity.assets !== null) { 57 | 58 | let trackIMG = `https://i.scdn.co/image/${activity.assets.largeImage.slice(8)}`; 59 | let trackURL = `https://open.spotify.com/track/${activity.syncID}`; 60 | 61 | let trackName = activity.details; 62 | let trackAuthor = activity.state; 63 | let trackAlbum = activity.assets.largeText; 64 | 65 | trackAuthor = trackAuthor.replace(/;/g, ",") 66 | 67 | const embed = new MessageEmbed() 68 | .setAuthor('Spotify Track Info', 'https://cdn.discordapp.com/emojis/408668371039682560.png') 69 | .setColor("GREEN") 70 | .setThumbnail(trackIMG) 71 | .addField('Song Name', trackName, true) 72 | .addField('Album', trackAlbum, true) 73 | .addField('Author', trackAuthor, false) 74 | .addField('Listen to Track', `${trackURL}`, false) 75 | .setFooter(user.displayName, user.user.displayAvatarURL({ dynamic: true })) 76 | message.channel.send(embed); 77 | } 78 | }) 79 | } 80 | } -------------------------------------------------------------------------------- /commands/games/trivia.js: -------------------------------------------------------------------------------- 1 | const request = require('node-superfetch'); 2 | const { createCanvas, registerFont } = require('canvas'); 3 | const path = require('path'); 4 | const { wrapText } = require('../../functions'); 5 | registerFont(path.join(__dirname, '..', '..', 'assets', 'fonts', 'Korrina.otf'), { family: 'Korinna' }); 6 | 7 | module.exports = { 8 | config: { 9 | name: 'trivia', 10 | aliases: ['quiz', 'singletrivia', 'jeopardy'], 11 | category: 'games', 12 | usage: ' ', 13 | description: 'Answer A Trivia Question, Join VC While Playing For More Fun (optional)\n Inspired By The Show Jeopardy', 14 | acessableby: 'everyone' 15 | }, 16 | run: async (bot, message, args, ops) => { 17 | const current = ops.games.get(message.channel.id); 18 | if (current) return message.channel.send(`**Please Wait Until The Current Game of \`${current.name}\` is Finished!**`); 19 | const { channel } = message.member.voice; 20 | try { 21 | ops.games.set(message.channel.id, { name: 'trivia' }); 22 | const question = await fetchQuestion(); 23 | const clueCard = await generateClueCard(question.question.replace(/<\/?i>/gi, '')); 24 | let connection; 25 | try { 26 | if (channel) { 27 | connection = message.guild ? await channel.join() : null; 28 | if (connection) { 29 | connection.play(path.join(__dirname, '..', '..', 'assets', 'sounds', 'jeopardy.mp3')); 30 | if (message.channel.permissionsFor(bot.user).has('ADD_REACTIONS')) { 31 | await message.react('🔉'); 32 | } else { 33 | return message.channel.send("**Missing Permissions - [ADD_REACTIONS]!**") 34 | } 35 | } 36 | } 37 | } catch { 38 | return message.channel.send("**Please Try Again - Connection Timed Out!**") 39 | } 40 | await message.channel.send(`**The Category is - \`${question.category.title.toUpperCase()}\`! 30 Seconds To Answer!**`, { 41 | files: [{ attachment: clueCard, name: 'clue-card.png' }] 42 | }); 43 | const messages = await message.channel.awaitMessages(res => res.author.id === message.author.id, { 44 | max: 1, 45 | time: 30000 46 | }); 47 | if (connection) { 48 | connection.dispatcher.end(); 49 | channel.leave(); 50 | } 51 | const answer = question.answer.replace(/<\/?i>/gi, '*'); 52 | ops.games.delete(message.channel.id); 53 | if (!messages.size) return message.channel.send(`**Time Up, The Answer Was \`${answer}\`!**`); 54 | const win = messages.first().content.toLowerCase() === answer.toLocaleLowerCase(); 55 | if (!win) return message.channel.send(`**The Answer Was ${answer}!**`); 56 | return message.channel.send(`**Correct Answer!**`); 57 | } catch (err) { 58 | console.log(err) 59 | ops.games.delete(message.channel.id); 60 | return message.channel.send(`**Oh No, An Error Occurred, Try Again Later!**`); 61 | } 62 | async function fetchQuestion() { 63 | const { body } = await request 64 | .get('http://jservice.io/api/random') 65 | .query({ count: 1 }); 66 | return body[0]; 67 | } 68 | 69 | async function generateClueCard(question) { 70 | const canvas = createCanvas(1280, 720); 71 | const ctx = canvas.getContext('2d'); 72 | ctx.fillStyle = '#030e78'; 73 | ctx.fillRect(0, 0, canvas.width, canvas.height); 74 | ctx.textAlign = 'center'; 75 | ctx.textBaseline = 'top'; 76 | ctx.fillStyle = 'white'; 77 | ctx.font = '62px Korinna'; 78 | const lines = await wrapText(ctx, question.toUpperCase(), 813); 79 | const topMost = (canvas.height / 2) - (((52 * lines.length) / 2) + ((20 * (lines.length - 1)) / 2)); 80 | for (let i = 0; i < lines.length; i++) { 81 | const height = topMost + ((52 + 20) * i); 82 | ctx.fillStyle = 'black'; 83 | ctx.fillText(lines[i], (canvas.width / 2) + 6, height + 6); 84 | ctx.fillStyle = 'white'; 85 | ctx.fillText(lines[i], canvas.width / 2, height); 86 | } 87 | return canvas.toBuffer(); 88 | } 89 | } 90 | }; -------------------------------------------------------------------------------- /commands/owner/serverlist.js: -------------------------------------------------------------------------------- 1 | const Discord = require("discord.js"); 2 | const ownerid = "457556815345877003"; 3 | 4 | module.exports = { 5 | config: { 6 | name: "serverlist", 7 | aliases: ["slt"], 8 | category: "owner", 9 | description: "Displays the list of servers the bot is in!", 10 | usage: " ", 11 | accessableby: "Owner" 12 | }, 13 | run: async (bot, message, args) => { 14 | if (message.author.id == ownerid) { 15 | if (!message.guild.me.hasPermission("ADMINISTRATOR")) 16 | return message.channel 17 | .send("I Dont Have Permissions") 18 | .then(msg => msg.delete({ timeout: 5000 })); 19 | 20 | let i0 = 0; 21 | let i1 = 10; 22 | let page = 1; 23 | 24 | let description = 25 | `Total Servers - ${bot.guilds.cache.size}\n\n` + 26 | bot.guilds.cache 27 | .sort((a, b) => b.memberCount - a.memberCount) 28 | .map(r => r) 29 | .map((r, i) => `**${i + 1}** - ${r.name} | ${r.memberCount} Members\nID - ${r.id}`) 30 | .slice(0, 10) 31 | .join("\n"); 32 | 33 | let embed = new Discord.MessageEmbed() 34 | .setAuthor( 35 | message.author.tag, 36 | message.author.displayAvatarURL({ dynamic: true }) 37 | ) 38 | .setColor("GREEN") 39 | .setFooter(bot.user.username) 40 | .setTitle(`Page - ${page}/${Math.ceil(bot.guilds.cache.size / 10)}`) 41 | .setDescription(description); 42 | 43 | let msg = await message.channel.send(embed); 44 | 45 | await msg.react("⬅"); 46 | await msg.react("➡"); 47 | await msg.react("❌"); 48 | 49 | let collector = msg.createReactionCollector( 50 | (reaction, user) => user.id === message.author.id 51 | ); 52 | 53 | collector.on("collect", async (reaction, user) => { 54 | if (reaction._emoji.name === "⬅") { 55 | // Updates variables 56 | i0 = i0 - 10; 57 | i1 = i1 - 10; 58 | page = page - 1; 59 | 60 | // if there is no guild to display, delete the message 61 | if (i0 + 1 < 0) { 62 | console.log(i0) 63 | return msg.delete(); 64 | } 65 | if (!i0 || !i1) { 66 | return msg.delete(); 67 | } 68 | 69 | description = 70 | `Total Servers - ${bot.guilds.cache.size}\n\n` + 71 | bot.guilds.cache 72 | .sort((a, b) => b.memberCount - a.memberCount) 73 | .map(r => r) 74 | .map( 75 | (r, i) => `**${i + 1}** - ${r.name} | ${r.memberCount} Members` 76 | ) 77 | .slice(i0, i1) 78 | .join("\n"); 79 | 80 | // Update the embed with new informations 81 | embed 82 | .setTitle( 83 | `Page - ${page}/${Math.round(bot.guilds.cache.size / 10 + 1)}` 84 | ) 85 | .setDescription(description); 86 | 87 | // Edit the message 88 | msg.edit(embed); 89 | } 90 | 91 | if (reaction._emoji.name === "➡") { 92 | // Updates variables 93 | i0 = i0 + 10; 94 | i1 = i1 + 10; 95 | page = page + 1; 96 | 97 | // if there is no guild to display, delete the message 98 | if (i1 > bot.guilds.cache.size + 10) { 99 | return msg.delete(); 100 | } 101 | if (!i0 || !i1) { 102 | return msg.delete(); 103 | } 104 | 105 | description = 106 | `Total Servers - ${bot.guilds.cache.size}\n\n` + 107 | bot.guilds.cache 108 | .sort((a, b) => b.memberCount - a.memberCount) 109 | .map(r => r) 110 | .map( 111 | (r, i) => `**${i + 1}** - ${r.name} | ${r.memberCount} Members` 112 | ) 113 | .slice(i0, i1) 114 | .join("\n"); 115 | 116 | // Update the embed with new informations 117 | embed 118 | .setTitle( 119 | `Page - ${page}/${Math.round(bot.guilds.cache.size / 10 + 1)}` 120 | ) 121 | .setDescription(description); 122 | 123 | // Edit the message 124 | msg.edit(embed); 125 | } 126 | 127 | if (reaction._emoji.name === "❌") { 128 | return msg.delete(); 129 | } 130 | 131 | // Remove the reaction when the user react to the message 132 | await reaction.users.remove(message.author.id); 133 | }); 134 | } else { 135 | return; 136 | } 137 | } 138 | }; 139 | -------------------------------------------------------------------------------- /commands/info/wikipedia.js: -------------------------------------------------------------------------------- 1 | const wiki = require("wikijs").default(); 2 | const { MessageEmbed } = require('discord.js'); 3 | 4 | module.exports = { 5 | config: { 6 | name: "wikipedia", 7 | aliases: ['wiki'], 8 | category: "info", 9 | description: "Shows Results From Wikipedia", 10 | usage: "[query]", 11 | accessableby: "everyone" 12 | }, 13 | run: async (bot, message, args) => { 14 | if (!args[0]) return message.channel.send("**Enter A Query!**") 15 | let m = await message.channel.send({ 16 | embed: { 17 | color: "GREEN", 18 | title: `Searching Wikipedia just for you ⌛`, 19 | description: `Please stand by...`, 20 | }, 21 | }); 22 | let result; 23 | const search = await wiki.search(args.join(' ')); 24 | if (!search.results.length) { 25 | return m.edit({ 26 | embed: { 27 | color: "GREEN", 28 | title: "What was that again? 📚🤓", 29 | description: "Even Wikipedia doesn't seem to know what you're talking about.", 30 | footer: { 31 | text: "Check for typos or try searching for something else!", 32 | }, 33 | }, 34 | }); 35 | } 36 | result = await wiki.page(search.results[0]); 37 | try { 38 | let description = await result.summary(); 39 | if (description.length > 8192) { 40 | const FirstEmbed = new MessageEmbed() 41 | .setAuthor(result.raw.title) 42 | .setColor("GREEN") 43 | .setDescription(`${description.substring(0, 1950)}...\nArticle is too long, click [**here**](${result.raw.fullurl}) to read more!`); 44 | return m.edit(FirstEmbed); 45 | } if (description.length < 2048) { 46 | const SecondEmbed = new MessageEmbed() 47 | .setAuthor(result.raw.title) 48 | .setColor("GREEN") 49 | .setDescription(`${description.slice(0, 2048)}`) 50 | return m.edit('', SecondEmbed) 51 | } if (description.length > 2048) { 52 | const ThirdEmbed = new MessageEmbed() 53 | .setAuthor(result.raw.title) 54 | .setColor("GREEN") 55 | .setDescription(description.slice(0, 2048)) 56 | const FourthEmbed = new MessageEmbed() 57 | .setColor("GREEN") 58 | .setDescription(description.slice(2048, 4096)) 59 | m.edit('', ThirdEmbed) 60 | message.channel.send('', FourthEmbed) 61 | } if (description.length > 4096 && description.length < 6144) { 62 | const FifthEmbed = new MessageEmbed() 63 | .setAuthor(result.raw.title) 64 | .setColor("GREEN") 65 | .setDescription(description.slice(0, 2048)) 66 | const SixthEmbed = new MessageEmbed() 67 | .setColor("GREEN") 68 | .setDescription(description.slice(2048, 4096)) 69 | const SeventhEmbed = new MessageEmbed() 70 | .setColor("GREEN") 71 | .setDescription(description.slice(4096, description.length)) 72 | await m.edit('', FifthEmbed) 73 | message.channel.send(SixthEmbed) 74 | message.channel.send(SeventhEmbed) 75 | } if (description.length > 6144 && description.length < 8192) { 76 | const EightEmbed = new MessageEmbed() 77 | .setColor('GREEN') 78 | .setDescription(description.slice(0, 2048)); 79 | const NinthEmbed = new MessageEmbed() 80 | .setColor('GREEN') 81 | .setDescription(description.slice(2048, 4096)); 82 | const TenthEmbed = new MessageEmbed() 83 | .setColor("GREEN") 84 | .setDescription(description.slice(4096, 6144)); 85 | const EleventhEmbed = new MessageEmbed() 86 | .setColor("GREEN") 87 | .setDescription(description.slice(6144, description.length)) 88 | await m.edit('', EightEmbed); 89 | message.channel.send(NinthEmbed); 90 | message.channel.send(TenthEmbed); 91 | message.channel.send(EleventhEmbed); 92 | } 93 | } catch (e){ 94 | return m.edit("Not Available!") 95 | } 96 | } 97 | }; 98 | -------------------------------------------------------------------------------- /structures/phone/PhoneCall.js: -------------------------------------------------------------------------------- 1 | const { shorten, stripInvites, verify } = require('../../functions'); 2 | const db = require('quick.db'); 3 | const { PREFIX } = require('../../config'); 4 | const { stripIndents } = require('common-tags'); 5 | 6 | module.exports = class PhoneCall { 7 | constructor(bot, origin, recipient) { 8 | Object.defineProperty(this, 'client', { value: bot }); 9 | 10 | this.id = `${origin.id}:${recipient.id}`; 11 | this.origin = origin; 12 | this.recipient = recipient; 13 | this.active = false; 14 | this.timeout = null; 15 | this.cooldown = new Set(); 16 | } 17 | 18 | async start() { 19 | await this.origin.send(`**☎️ Calling ${this.recipient.guild.name}!**`); 20 | await this.recipient.send(`**☎️ Incoming Call From ${this.origin.guild.name}! Pick up?**`); 21 | const validation = await verify(this.recipient, null); 22 | if (!validation) { 23 | await this.hangup('declined', validation); 24 | return this; 25 | } 26 | await this.accept(); 27 | return this; 28 | } 29 | 30 | async accept() { 31 | let prefix; 32 | let prefix2; 33 | let fetched = await db.fetch(`prefix_${this.recipient.guild.id}`); 34 | let fetched2 = await db.fetch(`prefix_${this.origin.guild.id}`); 35 | 36 | if (fetched2 === null) { 37 | prefix2 = PREFIX 38 | } else { 39 | prefix2 = fetched2 40 | } 41 | 42 | if (fetched === null) { 43 | prefix = PREFIX 44 | } else { 45 | prefix = fetched 46 | } 47 | this.active = true; 48 | this.setTimeout(); 49 | await this.origin.send(`**☎️ ${this.recipient.guild.name} Picked Up! Type \`${prefix2}hangup\` To Hang Up!**`); 50 | await this.recipient.send(`**☎️ Accepted Call From ${this.origin.guild.name}! Type \`${prefix}hangup\` To Hang Up!**`); 51 | return this; 52 | } 53 | 54 | async hangup(nonQuitter, validation) { 55 | this.active = false; 56 | clearTimeout(this.timeout); 57 | this.client.phone.delete(this.id); 58 | if (nonQuitter === 'time') { 59 | await this.origin.send('**☎️ Call Ended - 3minutes Over!**'); 60 | await this.recipient.send('**☎️ Call Ended - 3minutes Over!**'); 61 | } else if (nonQuitter === 'declined') { 62 | const recipientMsg = validation === 0 ? '**Sent To Voicemail!**' : '**Declined The Call!**'; 63 | await this.recipient.send(`☎️ ${recipientMsg}`); 64 | if (validation === 0) { 65 | await this.origin.send(`**☎️ ${this.recipient.guild.name} Didn't Answer! Leave A Voicemail?**`); 66 | const voicemailValidation = await verify(this.origin, null); 67 | if (!voicemailValidation) { 68 | await this.origin.send('**☎️ No Voicemail Will Be Left!**'); 69 | } else { 70 | await this.origin.send('**☎️ Please Leave Your Message!(max 280 characters)\nYou Have 30 Seconds!**') 71 | 72 | const voicemail = await this.origin.awaitMessages(res => res.content && res.content.length <= 280, { 73 | max: 1, 74 | time: 30000 75 | }); 76 | if (!voicemail.size) { 77 | await this.origin.send('**☎️ Timeout! No Voicemail Will Be Left!**'); 78 | } else { 79 | const voicemailMsg = voicemail.first(); 80 | await this.sendVoicemail(this.recipient, voicemailMsg.author, voicemailMsg.content); 81 | await this.origin.send('**☎️ Your Voicemail Has Been Sent!**'); 82 | } 83 | } 84 | } else { 85 | let originMsg = validation === 0 ? '**Didn\'t Answer!**' : '**Declined The Call!**'; 86 | await this.origin.send(`**☎️ ${this.recipient.guild.name} ${originMsg}**`); 87 | } 88 | } else { 89 | const quitter = nonQuitter.id === this.origin.id ? this.recipient : this.origin; 90 | await nonQuitter.send(`**☎️ ${quitter.guild.name} Disconnected!**`); 91 | await quitter.send('**☎️ Disconnected!**'); 92 | } 93 | return this; 94 | } 95 | 96 | send(channel, msg, hasText, hasImage, hasEmbed) { 97 | if (this.cooldown.has(msg.author.id)) { 98 | const badChannel = channel.id === this.origin.id ? this.recipient : this.origin; 99 | return badChannel.send(`**☎️ ${msg.author}, Please Wait \`5\` Seconds Between Messages!**`); 100 | } 101 | this.setTimeout(); 102 | this.cooldown.add(msg.author.id); 103 | setTimeout(() => this.cooldown.delete(msg.author.id), 5000); 104 | 105 | const attachments = hasImage ? msg.attachments.map(a => a.url).join('\n') : null; 106 | if (!hasText && hasImage) return channel.send(`**☎️ ${msg.author.tag} - **\n${attachments}`); 107 | if (!hasText && hasEmbed) return channel.send(`**☎️ ${msg.author.tag} Sent An Embed!**`); 108 | let content = stripInvites(msg.content); 109 | content = content.length > 1000 ? `${shorten(content, 500)} (Message too long)` : content; 110 | return channel.send(`☎️ **${msg.author.tag} -** ${content}\n${attachments || ''}`.trim()); 111 | } 112 | 113 | sendVoicemail(channel, author, message) { 114 | return channel.send(stripIndents` 115 | **☎️ New Voicemail from \`${this.origin.guild.name}\` - 116 | ${author.tag} -** ${message} 117 | `); 118 | } 119 | 120 | setTimeout() { 121 | this.origin 122 | } 123 | 124 | setTimeout() { 125 | if (this.timeout) clearTimeout(this.timeout); 126 | this.timeout = setTimeout(() => this.hangup('time'), 180000); 127 | return this.timeout; 128 | } 129 | }; --------------------------------------------------------------------------------