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