From 7b6a50a8594a59a454b95fdf94fdced96db22d67 Mon Sep 17 00:00:00 2001 From: "Mr.Bill_Hub" <75666113+Bill716@users.noreply.github.com> Date: Thu, 5 May 2022 15:39:24 +0200 Subject: [PATCH] Bot add --- README.md | 6 +- commands/NSFW expressions/spank.js | 44 + commands/NSFW/2danal.js | 38 + commands/NSFW/2dboobs.js | 38 + commands/NSFW/2dfeet.js | 38 + commands/NSFW/2dfeetgif.js | 38 + commands/NSFW/2dtits.js | 38 + commands/NSFW/2feetgif.js | 38 + commands/NSFW/ass.js | 41 + commands/NSFW/bj.js | 38 + commands/NSFW/blowjob.js | 38 + commands/NSFW/boobs.js | 41 + commands/NSFW/cumart.js | 38 + commands/NSFW/cumslut.js | 38 + commands/NSFW/danbooru.js | 51 + commands/NSFW/ero.js | 38 + commands/NSFW/erokitsune.js | 38 + commands/NSFW/eroyuri.js | 38 + commands/NSFW/feet.js | 38 + commands/NSFW/feetgif.js | 38 + commands/NSFW/femdom.js | 38 + commands/NSFW/futanari.js | 38 + commands/NSFW/gasm.js | 38 + commands/NSFW/gelbooru.js | 51 + commands/NSFW/girlsolo.js | 38 + commands/NSFW/girlsologif.js | 38 + commands/NSFW/hentai.js | 39 + commands/NSFW/hentaigif.js | 39 + commands/NSFW/holo.js | 38 + commands/NSFW/holoero.js | 38 + commands/NSFW/keta.js | 38 + commands/NSFW/kitsune.js | 38 + commands/NSFW/kuni.js | 38 + commands/NSFW/lesbian.js | 38 + commands/NSFW/lewdavatar.js | 38 + commands/NSFW/lewdneko.js | 39 + commands/NSFW/lewdnekogif.js | 39 + commands/NSFW/nekoapiclassic.js | 39 + commands/NSFW/pussy.js | 38 + commands/NSFW/pussyart.js | 38 + commands/NSFW/pussywankgif.js | 38 + commands/NSFW/r34.js | 51 + commands/NSFW/trap.js | 38 + commands/NSFW/yuri.js | 38 + commands/SFW/animalears.js | 27 + commands/SFW/cat.js | 27 + commands/SFW/dog.js | 27 + commands/SFW/fox.js | 27 + commands/SFW/foxgirl.js | 27 + commands/SFW/gecg.js | 27 + commands/SFW/goose.js | 27 + commands/SFW/lizard.js | 27 + commands/SFW/neko.js | 27 + commands/SFW/nekogif.js | 27 + commands/SFW/wallpaper.js | 27 + commands/economy/balance.js | 8 + commands/economy/coinflip.js | 8 + commands/economy/daily.js | 8 + commands/economy/dice.js | 8 + commands/economy/slots.js | 8 + commands/economy/transfer.js | 8 + commands/economy/work.js | 8 + commands/emotions/baka.js | 33 + commands/emotions/smug.js | 29 + commands/expressions/cuddle.js | 33 + commands/expressions/feed.js | 33 + commands/expressions/hug.js | 33 + commands/expressions/kiss.js | 33 + commands/expressions/pat.js | 33 + commands/expressions/poke.js | 33 + commands/expressions/slap.js | 33 + commands/expressions/tickle.js | 33 + commands/fun/8ball.js | 57 + commands/fun/ascii.js | 28 + commands/fun/cattext.js | 26 + commands/fun/fact.js | 26 + commands/fun/flip.js | 32 + commands/fun/meme.js | 21 + commands/fun/owoify.js | 28 + commands/fun/ratewaifu.js | 73 + commands/info/help.js | 78 + commands/info/ping.js | 12 + commands/moderation/ban.js | 10 + commands/moderation/kick.js | 10 + commands/moderation/purge.js | 10 + commands/utility/animesearch.js | 35 + commands/utility/avatar.js | 30 + commands/utility/botinfo.js | 45 + commands/utility/calc.js | 38 + commands/utility/osu.js | 42 + commands/utility/serverinfo.js | 27 + commands/utility/urban.js | 36 + commands/utility/whois.js | 36 + config.json | 6 + economy/economy.js | 187 ++ functions.js | 43 + handlers/command.js | 38 + index.js | 53 + npm-install.bat | 2 + npm-update.bat | 3 + package-lock.json | 2626 ++++++++++++++++++++++++++++ package.json | 73 + run.bat | 3 + utils.js | 184 ++ 104 files changed, 6290 insertions(+), 3 deletions(-) create mode 100644 commands/NSFW expressions/spank.js create mode 100644 commands/NSFW/2danal.js create mode 100644 commands/NSFW/2dboobs.js create mode 100644 commands/NSFW/2dfeet.js create mode 100644 commands/NSFW/2dfeetgif.js create mode 100644 commands/NSFW/2dtits.js create mode 100644 commands/NSFW/2feetgif.js create mode 100644 commands/NSFW/ass.js create mode 100644 commands/NSFW/bj.js create mode 100644 commands/NSFW/blowjob.js create mode 100644 commands/NSFW/boobs.js create mode 100644 commands/NSFW/cumart.js create mode 100644 commands/NSFW/cumslut.js create mode 100644 commands/NSFW/danbooru.js create mode 100644 commands/NSFW/ero.js create mode 100644 commands/NSFW/erokitsune.js create mode 100644 commands/NSFW/eroyuri.js create mode 100644 commands/NSFW/feet.js create mode 100644 commands/NSFW/feetgif.js create mode 100644 commands/NSFW/femdom.js create mode 100644 commands/NSFW/futanari.js create mode 100644 commands/NSFW/gasm.js create mode 100644 commands/NSFW/gelbooru.js create mode 100644 commands/NSFW/girlsolo.js create mode 100644 commands/NSFW/girlsologif.js create mode 100644 commands/NSFW/hentai.js create mode 100644 commands/NSFW/hentaigif.js create mode 100644 commands/NSFW/holo.js create mode 100644 commands/NSFW/holoero.js create mode 100644 commands/NSFW/keta.js create mode 100644 commands/NSFW/kitsune.js create mode 100644 commands/NSFW/kuni.js create mode 100644 commands/NSFW/lesbian.js create mode 100644 commands/NSFW/lewdavatar.js create mode 100644 commands/NSFW/lewdneko.js create mode 100644 commands/NSFW/lewdnekogif.js create mode 100644 commands/NSFW/nekoapiclassic.js create mode 100644 commands/NSFW/pussy.js create mode 100644 commands/NSFW/pussyart.js create mode 100644 commands/NSFW/pussywankgif.js create mode 100644 commands/NSFW/r34.js create mode 100644 commands/NSFW/trap.js create mode 100644 commands/NSFW/yuri.js create mode 100644 commands/SFW/animalears.js create mode 100644 commands/SFW/cat.js create mode 100644 commands/SFW/dog.js create mode 100644 commands/SFW/fox.js create mode 100644 commands/SFW/foxgirl.js create mode 100644 commands/SFW/gecg.js create mode 100644 commands/SFW/goose.js create mode 100644 commands/SFW/lizard.js create mode 100644 commands/SFW/neko.js create mode 100644 commands/SFW/nekogif.js create mode 100644 commands/SFW/wallpaper.js create mode 100644 commands/economy/balance.js create mode 100644 commands/economy/coinflip.js create mode 100644 commands/economy/daily.js create mode 100644 commands/economy/dice.js create mode 100644 commands/economy/slots.js create mode 100644 commands/economy/transfer.js create mode 100644 commands/economy/work.js create mode 100644 commands/emotions/baka.js create mode 100644 commands/emotions/smug.js create mode 100644 commands/expressions/cuddle.js create mode 100644 commands/expressions/feed.js create mode 100644 commands/expressions/hug.js create mode 100644 commands/expressions/kiss.js create mode 100644 commands/expressions/pat.js create mode 100644 commands/expressions/poke.js create mode 100644 commands/expressions/slap.js create mode 100644 commands/expressions/tickle.js create mode 100644 commands/fun/8ball.js create mode 100644 commands/fun/ascii.js create mode 100644 commands/fun/cattext.js create mode 100644 commands/fun/fact.js create mode 100644 commands/fun/flip.js create mode 100644 commands/fun/meme.js create mode 100644 commands/fun/owoify.js create mode 100644 commands/fun/ratewaifu.js create mode 100644 commands/info/help.js create mode 100644 commands/info/ping.js create mode 100644 commands/moderation/ban.js create mode 100644 commands/moderation/kick.js create mode 100644 commands/moderation/purge.js create mode 100644 commands/utility/animesearch.js create mode 100644 commands/utility/avatar.js create mode 100644 commands/utility/botinfo.js create mode 100644 commands/utility/calc.js create mode 100644 commands/utility/osu.js create mode 100644 commands/utility/serverinfo.js create mode 100644 commands/utility/urban.js create mode 100644 commands/utility/whois.js create mode 100644 config.json create mode 100644 economy/economy.js create mode 100644 functions.js create mode 100644 handlers/command.js create mode 100644 index.js create mode 100644 npm-install.bat create mode 100644 npm-update.bat create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 run.bat create mode 100644 utils.js diff --git a/README.md b/README.md index 526927f..e9d0989 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -# [Dorito Bot Discord.js](https://github.com/Aaronidk/Dorito-bot-discord.js) +# [Rias Gremory Bot Discord.js](https://github.com/Bill716/Rias-Gremory) A multipurpose Discord bot with many NSFW and fun commands as well as utility and moderation. UPDATE COMMING SOON FOR DISCORD JS 13 AND NEW DISCORD INTENT RULES * For a full command list run the bot and type .help * The default prefix is . so the help command would be .help -# [Invite the bot to your server!](https://discordapp.com/oauth2/authorize?client_id=546100087579738133&scope=bot&permissions=506588246) +# [Invite the bot to your server!](https://discordapp.com/oauth2/authorize?client_id=900279926874316871&scope=bot&permissions=506588246) * Use the above link if you don't want to follow the steps bellow. ### Requirements if not using the release page @@ -86,4 +86,4 @@ or you can try type this in the terminal for Linux and maybe Windows " npm i ffm * Once in the osu.js file you should see text telling you where to paste your api key. * Now that you finished setting the API key save the the file and run the bot. The osu command should now work. * If you don't care about the osu command or you don't want to get an api key go into the "/commands/utility/" folder and delete the osu.js command. -> This Bot was made by [nyeku/nyekuuu](). +> This Bot was made by [Bill_hub](https://github.com/Bill716). diff --git a/commands/NSFW expressions/spank.js b/commands/NSFW expressions/spank.js new file mode 100644 index 0000000..7a2f856 --- /dev/null +++ b/commands/NSFW expressions/spank.js @@ -0,0 +1,44 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); +const utils = require('../../utils'); + +module.exports = { + name: "spank", + category: "NSFW expressions", + description: "spanks a mentioned user", + usage: "[command] + [user]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + const user = message.mentions.users.first(); + if(!user) + return message.reply('Mention someone to spank'); + + async function work() { + let owo = (await neko.nsfw.spank()); + + const cuddleembed = new Discord.MessageEmbed() + .setTitle(user.username + " You have been spanked! ") + .setDescription((user.toString() + " has been spanked by " + message.author.toString() + "!")) + .setImage(owo.url) + .setColor(`#000000`) + .setURL(owo.url); + message.channel.send(cuddleembed); + +} + + work(); +} + }; diff --git a/commands/NSFW/2danal.js b/commands/NSFW/2danal.js new file mode 100644 index 0000000..17adac0 --- /dev/null +++ b/commands/NSFW/2danal.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "2danal", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.anal()); + + const anal = new Discord.MessageEmbed() + .setTitle("2D Anal") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(anal); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/2dboobs.js b/commands/NSFW/2dboobs.js new file mode 100644 index 0000000..9697a0c --- /dev/null +++ b/commands/NSFW/2dboobs.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "2dboobs", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.boobs()); + + const boobs = new Discord.MessageEmbed() + .setTitle("2D Boobs") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(boobs); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/2dfeet.js b/commands/NSFW/2dfeet.js new file mode 100644 index 0000000..e904d05 --- /dev/null +++ b/commands/NSFW/2dfeet.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "2dfeet", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.feet()); + + const feet = new Discord.MessageEmbed() + .setTitle("2D Feet") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(feet); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/2dfeetgif.js b/commands/NSFW/2dfeetgif.js new file mode 100644 index 0000000..634c43b --- /dev/null +++ b/commands/NSFW/2dfeetgif.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "2dfeetgif", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.feetGif()); + + const feetgif = new Discord.MessageEmbed() + .setTitle("2D Feet Gif") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(feetgif); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/2dtits.js b/commands/NSFW/2dtits.js new file mode 100644 index 0000000..333a338 --- /dev/null +++ b/commands/NSFW/2dtits.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "2dtits", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.tits()); + + const tits = new Discord.MessageEmbed() + .setTitle("2D Tits") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(tits); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/2feetgif.js b/commands/NSFW/2feetgif.js new file mode 100644 index 0000000..634c43b --- /dev/null +++ b/commands/NSFW/2feetgif.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "2dfeetgif", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.feetGif()); + + const feetgif = new Discord.MessageEmbed() + .setTitle("2D Feet Gif") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(feetgif); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/ass.js b/commands/NSFW/ass.js new file mode 100644 index 0000000..35da9b3 --- /dev/null +++ b/commands/NSFW/ass.js @@ -0,0 +1,41 @@ +const superagent = require("node-fetch"); +const Discord = require('discord.js') + +const rp = require('request-promise-native'); + +module.exports = { + name: "ass", + category: "NSFW", + description: "Sends ass", + run: async (client, message, args, level) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + return rp.get('http://api.obutts.ru/butts/0/1/random').then(JSON.parse).then(function(res) { + return rp.get({ + url:'http://media.obutts.ru/' + res[0].preview, + encoding: null + }); +}).then(function(res) { + +const ass = new Discord.MessageEmbed() + .setTitle("Ass") + .setColor(`#FF0000`) + .setImage("attachment://file.png").attachFiles([{ attachment: res, name: "file.png" }]) + + + message.channel.send(ass); +}); + } + }; \ No newline at end of file diff --git a/commands/NSFW/bj.js b/commands/NSFW/bj.js new file mode 100644 index 0000000..4298c41 --- /dev/null +++ b/commands/NSFW/bj.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "bj", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.bj()); + + const bj = new Discord.MessageEmbed() + .setTitle("Blow Job") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(bj); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/blowjob.js b/commands/NSFW/blowjob.js new file mode 100644 index 0000000..9fe93b4 --- /dev/null +++ b/commands/NSFW/blowjob.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "blowjob", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.blowjob()); + + const blowjob = new Discord.MessageEmbed() + .setTitle("Blowjob") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(blowjob); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/boobs.js b/commands/NSFW/boobs.js new file mode 100644 index 0000000..93f30d4 --- /dev/null +++ b/commands/NSFW/boobs.js @@ -0,0 +1,41 @@ +const superagent = require("node-fetch"); +const Discord = require('discord.js') + +const rp = require('request-promise-native'); + +module.exports = { + name: "boobs", + category: "NSFW", + description: "Sends boobs", + run: async (client, message, args, level) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + return rp.get('http://api.oboobs.ru/boobs/0/1/random').then(JSON.parse).then(function(res) { + return rp.get({ + url:'http://media.oboobs.ru/' + res[0].preview, + encoding: null + }); +}).then(function(res) { + +const boobs = new Discord.MessageEmbed() + .setTitle("Boobs") + .setColor(`#FF0000`) + .setImage("attachment://file.png").attachFiles([{ attachment: res, name: "file.png" }]) + + + message.channel.send(boobs); +}); + } + }; \ No newline at end of file diff --git a/commands/NSFW/cumart.js b/commands/NSFW/cumart.js new file mode 100644 index 0000000..0b50046 --- /dev/null +++ b/commands/NSFW/cumart.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "cumart", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.cumArts()); + + const cumslut = new Discord.MessageEmbed() + .setTitle("cumArts") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(cumslut); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/cumslut.js b/commands/NSFW/cumslut.js new file mode 100644 index 0000000..4179ddf --- /dev/null +++ b/commands/NSFW/cumslut.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "cumslut", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.cumsluts()); + + const cumslut = new Discord.MessageEmbed() + .setTitle("Cumslut") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(cumslut); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/danbooru.js b/commands/NSFW/danbooru.js new file mode 100644 index 0000000..314f377 --- /dev/null +++ b/commands/NSFW/danbooru.js @@ -0,0 +1,51 @@ +const randomPuppy = require('random-puppy'); +const request = require('node-fetch'); +const fs = require("fs") + +const Discord = require('discord.js'); +const booru = require('booru'); + +module.exports = { + name: "danbooru", + category: "NSFW", + description: "Searches danbooru image board", + run: async (bot, message, args, level) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + if (message.content.toUpperCase().includes('LOLI') || message.content.toUpperCase().includes('GORE')) return message.channel.send('That kind of stuff is not allowed! Not even in NSFW channels!'); + + var query = message.content.split(/\s+/g).slice(1).join(" "); + booru.search('db', [query], {random: true }) + .then(booru.commonfy) + .then(images => { + for (let image of images) { + const embed = new Discord.MessageEmbed() + .setTitle("Danbooru:") + .setImage(image.common.file_url) + .setColor('#FF0000') + .setFooter(`Tags: danbooru ${query}`) + .setURL(image.common.file_url); + return message.channel.send({ embed }); + } + + }).catch(err => { + if (err.name === 'booruError') { + return message.channel.send(`No results found for **${query}**!`); + } else { + return message.channel.send(`No results found for **${query}**!`); + } +}) + } + }; \ No newline at end of file diff --git a/commands/NSFW/ero.js b/commands/NSFW/ero.js new file mode 100644 index 0000000..29b2fcf --- /dev/null +++ b/commands/NSFW/ero.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "ero", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.ero()); + + const ero = new Discord.MessageEmbed() + .setTitle("Erotic") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(ero); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/erokitsune.js b/commands/NSFW/erokitsune.js new file mode 100644 index 0000000..3a50f2e --- /dev/null +++ b/commands/NSFW/erokitsune.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "erokitsune", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.eroKitsune()); + + const eroKitsune = new Discord.MessageEmbed() + .setTitle("Erotic Kitsune") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(eroKitsune); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/eroyuri.js b/commands/NSFW/eroyuri.js new file mode 100644 index 0000000..1388072 --- /dev/null +++ b/commands/NSFW/eroyuri.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "eroyuri", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.eroYuri()); + + const eroYuri = new Discord.MessageEmbed() + .setTitle("Erotic Yuri") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(eroYuri); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/feet.js b/commands/NSFW/feet.js new file mode 100644 index 0000000..f0e5c56 --- /dev/null +++ b/commands/NSFW/feet.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "feet", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.feet()); + + const cumslut = new Discord.MessageEmbed() + .setTitle("feet") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(cumslut); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/feetgif.js b/commands/NSFW/feetgif.js new file mode 100644 index 0000000..86bd370 --- /dev/null +++ b/commands/NSFW/feetgif.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "feetgif", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.feetGif()); + + const cumslut = new Discord.MessageEmbed() + .setTitle("feetGif") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(cumslut); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/femdom.js b/commands/NSFW/femdom.js new file mode 100644 index 0000000..efd28b3 --- /dev/null +++ b/commands/NSFW/femdom.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "femdom", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.femdom()); + + const femdom = new Discord.MessageEmbed() + .setTitle("Femdom") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(femdom); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/futanari.js b/commands/NSFW/futanari.js new file mode 100644 index 0000000..53af1b5 --- /dev/null +++ b/commands/NSFW/futanari.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "futanari", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.futanari()); + + const futanari = new Discord.MessageEmbed() + .setTitle("Futanari") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(futanari); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/gasm.js b/commands/NSFW/gasm.js new file mode 100644 index 0000000..4d1e63c --- /dev/null +++ b/commands/NSFW/gasm.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "gasm", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.gasm()); + + const gasm = new Discord.MessageEmbed() + .setTitle("Gasm") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(gasm); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/gelbooru.js b/commands/NSFW/gelbooru.js new file mode 100644 index 0000000..3e3be2c --- /dev/null +++ b/commands/NSFW/gelbooru.js @@ -0,0 +1,51 @@ +const randomPuppy = require('random-puppy'); +const request = require('node-fetch'); +const fs = require("fs") + +const Discord = require('discord.js'); +const booru = require('booru'); + +module.exports = { + name: "gelbooru", + category: "NSFW", + description: "Searches gelbooru image board", + run: async (bot, message, args, level) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + if (message.content.toUpperCase().includes('LOLI') || message.content.toUpperCase().includes('GORE')) return message.channel.send('That kind of stuff is not allowed! Not even in NSFW channels!'); + + var query = message.content.split(/\s+/g).slice(1).join(" "); + booru.search('gb', [query], {random: true }) + .then(booru.commonfy) + .then(images => { + for (let image of images) { + const embed = new Discord.MessageEmbed() + .setTitle("Gelbooru:") + .setImage(image.common.file_url) + .setColor('#FF0000') + .setFooter(`Tags: Gelbooru ${query}`) + .setURL(image.common.file_url); + return message.channel.send({ embed }); + } + + }).catch(err => { + if (err.name === 'booruError') { + return message.channel.send(`No results found for **${query}**!`); + } else { + return message.channel.send(`No results found for **${query}**!`); + } +}) + } + }; \ No newline at end of file diff --git a/commands/NSFW/girlsolo.js b/commands/NSFW/girlsolo.js new file mode 100644 index 0000000..7d104f7 --- /dev/null +++ b/commands/NSFW/girlsolo.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "girlsolo", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.girlSolo()); + + const keta = new Discord.MessageEmbed() + .setTitle("girlSolo") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(keta); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/girlsologif.js b/commands/NSFW/girlsologif.js new file mode 100644 index 0000000..bef1d87 --- /dev/null +++ b/commands/NSFW/girlsologif.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "girlsologif", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.girlSoloGif()); + + const keta = new Discord.MessageEmbed() + .setTitle("girlSoloGif") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(keta); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/hentai.js b/commands/NSFW/hentai.js new file mode 100644 index 0000000..b3e3ed7 --- /dev/null +++ b/commands/NSFW/hentai.js @@ -0,0 +1,39 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "hentai", + category: "NSFW", + description: "Sends random hentai", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.hentai()); + + const hentai = new Discord.MessageEmbed() + .setTitle("Hentai") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(hentai); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/hentaigif.js b/commands/NSFW/hentaigif.js new file mode 100644 index 0000000..e27b001 --- /dev/null +++ b/commands/NSFW/hentaigif.js @@ -0,0 +1,39 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "hentaigif", + category: "NSFW", + description: "Sends random hentai gif", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.randomHentaiGif()); + + const hentaigif = new Discord.MessageEmbed() + .setTitle("Hentai Gif") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(hentaigif); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/holo.js b/commands/NSFW/holo.js new file mode 100644 index 0000000..fe24eba --- /dev/null +++ b/commands/NSFW/holo.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "holo", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.holo()); + + const holo = new Discord.MessageEmbed() + .setTitle("Holo") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(holo); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/holoero.js b/commands/NSFW/holoero.js new file mode 100644 index 0000000..7457927 --- /dev/null +++ b/commands/NSFW/holoero.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "holoero", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.holoEro()); + + const holoero = new Discord.MessageEmbed() + .setTitle("Holo Ero") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(holoero); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/keta.js b/commands/NSFW/keta.js new file mode 100644 index 0000000..868759d --- /dev/null +++ b/commands/NSFW/keta.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "keta", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.keta()); + + const keta = new Discord.MessageEmbed() + .setTitle("Keta") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(keta); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/kitsune.js b/commands/NSFW/kitsune.js new file mode 100644 index 0000000..fee92d1 --- /dev/null +++ b/commands/NSFW/kitsune.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "kitsune", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.kitsune()); + + const kitsune = new Discord.MessageEmbed() + .setTitle("Kitsune") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(kitsune); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/kuni.js b/commands/NSFW/kuni.js new file mode 100644 index 0000000..9bac988 --- /dev/null +++ b/commands/NSFW/kuni.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "kuni", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.kuni()); + + const kuni = new Discord.MessageEmbed() + .setTitle("Kuni") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(kuni); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/lesbian.js b/commands/NSFW/lesbian.js new file mode 100644 index 0000000..30dd6c4 --- /dev/null +++ b/commands/NSFW/lesbian.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "lesbian", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.lesbian()); + + const keta = new Discord.MessageEmbed() + .setTitle("lesbian") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(keta); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/lewdavatar.js b/commands/NSFW/lewdavatar.js new file mode 100644 index 0000000..099c497 --- /dev/null +++ b/commands/NSFW/lewdavatar.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "lewdavatar", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.avatar()); + + const keta = new Discord.MessageEmbed() + .setTitle("avatar") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(keta); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/lewdneko.js b/commands/NSFW/lewdneko.js new file mode 100644 index 0000000..e7eb6d8 --- /dev/null +++ b/commands/NSFW/lewdneko.js @@ -0,0 +1,39 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "lewdneko", + category: "NSFW", + description: "Sends random nsfw neko", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.neko()); + + const lewdneko = new Discord.MessageEmbed() + .setTitle("NSFW Neko") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(lewdneko); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/lewdnekogif.js b/commands/NSFW/lewdnekogif.js new file mode 100644 index 0000000..e14039e --- /dev/null +++ b/commands/NSFW/lewdnekogif.js @@ -0,0 +1,39 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "lewdnekogif", + category: "NSFW", + description: "Sends random nsfw neko gfi", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.nekoGif()); + + const lewdnekogif = new Discord.MessageEmbed() + .setTitle("NSFW Neko Gif") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(lewdnekogif); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/nekoapiclassic.js b/commands/NSFW/nekoapiclassic.js new file mode 100644 index 0000000..5c8b6d0 --- /dev/null +++ b/commands/NSFW/nekoapiclassic.js @@ -0,0 +1,39 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "nekoapiclassic", + category: "NSFW", + description: "Sends a random image from the neko.life api nsfw classic endpoint", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.classic()); + + const nekoapiclassic = new Discord.MessageEmbed() + .setTitle("Neko.Life API Classic Endpoint") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(nekoapiclassic); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/pussy.js b/commands/NSFW/pussy.js new file mode 100644 index 0000000..408e39d --- /dev/null +++ b/commands/NSFW/pussy.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "pussy", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.pussy()); + + const keta = new Discord.MessageEmbed() + .setTitle("Pussy") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(keta); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/pussyart.js b/commands/NSFW/pussyart.js new file mode 100644 index 0000000..18c61bf --- /dev/null +++ b/commands/NSFW/pussyart.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "pussyart", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.pussyArt()); + + const cumslut = new Discord.MessageEmbed() + .setTitle("pussyArt") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(cumslut); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/pussywankgif.js b/commands/NSFW/pussywankgif.js new file mode 100644 index 0000000..3237cab --- /dev/null +++ b/commands/NSFW/pussywankgif.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "pussywankgif", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.pussyWankGif()); + + const keta = new Discord.MessageEmbed() + .setTitle("pussyWankGif") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(keta); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/r34.js b/commands/NSFW/r34.js new file mode 100644 index 0000000..e706eb8 --- /dev/null +++ b/commands/NSFW/r34.js @@ -0,0 +1,51 @@ +const randomPuppy = require('random-puppy'); +const request = require('node-fetch'); +const fs = require("fs") + +const Discord = require('discord.js'); +const booru = require('booru'); + +module.exports = { + name: "r34", + category: "NSFW", + description: "Searches rule34", + run: async (bot, message, args, level) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + if (message.content.toUpperCase().includes('LOLI') || message.content.toUpperCase().includes('GORE')) return message.channel.send('That kind of stuff is not allowed! Not even in NSFW channels!'); + + var query = message.content.split(/\s+/g).slice(1).join(" "); + booru.search('rule34', [query], {nsfw: true, limit: 1, random: true }) + .then(booru.commonfy) + .then(images => { + for (let image of images) { + const embed = new Discord.MessageEmbed() + .setTitle("Rule34:") + .setImage(image.common.file_url) + .setColor('#FF0000') + .setFooter(`Tags: r34 ${query}`) + .setURL(image.common.file_url); + return message.channel.send({ embed }); + } + + }).catch(err => { + if (err.name === 'booruError') { + return message.channel.send(`No results found for **${query}**!`); + } else { + return message.channel.send(`No results found for **${query}**!`); + } +}) + } + }; \ No newline at end of file diff --git a/commands/NSFW/trap.js b/commands/NSFW/trap.js new file mode 100644 index 0000000..8204d0e --- /dev/null +++ b/commands/NSFW/trap.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "trap", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.trap()); + + const trap = new Discord.MessageEmbed() + .setTitle("Trap") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(trap); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/NSFW/yuri.js b/commands/NSFW/yuri.js new file mode 100644 index 0000000..b4e9eba --- /dev/null +++ b/commands/NSFW/yuri.js @@ -0,0 +1,38 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "yuri", + category: "NSFW", + usage: "[command]", + run: async (client, message, args) => { + //command + + //Checks channel for nsfw + var errMessage = "This is not an NSFW Channel"; + if (!message.channel.nsfw) { + message.react('💢'); + + return message.reply(errMessage) + .then(msg => { + msg.delete({ timeout: 3000 }) + }) + + } + + async function work() { + let owo = (await neko.nsfw.yuri()); + + const yuri = new Discord.MessageEmbed() + .setTitle("Yuri") + .setImage(owo.url) + .setColor(`#FF0000`) + .setURL(owo.url); + message.channel.send(yuri); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/SFW/animalears.js b/commands/SFW/animalears.js new file mode 100644 index 0000000..679e607 --- /dev/null +++ b/commands/SFW/animalears.js @@ -0,0 +1,27 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "animalears", + category: "SFW", + description: "kemonomimi", + usage: "[command]", + run: async (client, message, args) => { + //command + + async function work() { + let owo = (await neko.sfw.kemonomimi()); + + const animalears = new Discord.MessageEmbed() + .setTitle("Kemonomimi") + .setImage(owo.url) + .setColor(`#000000`) + .setURL(owo.url); + message.channel.send(animalears); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/SFW/cat.js b/commands/SFW/cat.js new file mode 100644 index 0000000..81b040f --- /dev/null +++ b/commands/SFW/cat.js @@ -0,0 +1,27 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "cat", + category: "SFW", + description: "sends random cat image", + usage: "[command]", + run: async (client, message, args) => { + //command + + async function work() { + let owo = (await neko.sfw.meow()); + + const cat = new Discord.MessageEmbed() + .setTitle("Random Cat Image") + .setImage(owo.url) + .setColor(`#000000`) + .setURL(owo.url); + message.channel.send(cat); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/SFW/dog.js b/commands/SFW/dog.js new file mode 100644 index 0000000..6b81d61 --- /dev/null +++ b/commands/SFW/dog.js @@ -0,0 +1,27 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "dog", + category: "SFW", + description: "sends random dog image", + usage: "[command]", + run: async (client, message, args) => { + //command + + async function work() { + let owo = (await neko.sfw.woof()); + + const dog = new Discord.MessageEmbed() + .setTitle("Random dog Image") + .setImage(owo.url) + .setColor(`#000000`) + .setURL(owo.url); + message.channel.send(dog); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/SFW/fox.js b/commands/SFW/fox.js new file mode 100644 index 0000000..4c293b4 --- /dev/null +++ b/commands/SFW/fox.js @@ -0,0 +1,27 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "fox", + category: "SFW", + description: "sends random fox image", + usage: "[command]", + run: async (client, message, args) => { + //command + + async function work() { + let owo = (await neko.sfw.woof()); + + const dog = new Discord.MessageEmbed() + .setTitle("Random fox Image") + .setImage("https://foxapi.dev/foxes") + .setColor(`#000000`) + .setURL(owo.url); + message.channel.send(dog); + +} + + work(); +} + }; diff --git a/commands/SFW/foxgirl.js b/commands/SFW/foxgirl.js new file mode 100644 index 0000000..9b33c78 --- /dev/null +++ b/commands/SFW/foxgirl.js @@ -0,0 +1,27 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "foxgirl", + category: "SFW", + description: "sends random foxgirl", + usage: "[command]", + run: async (client, message, args) => { + //command + + async function work() { + let owo = (await neko.sfw.foxGirl()); + + const foxGirl = new Discord.MessageEmbed() + .setTitle("Random Fox Girl") + .setImage(owo.url) + .setColor(`#000000`) + .setURL(owo.url); + message.channel.send(foxGirl); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/SFW/gecg.js b/commands/SFW/gecg.js new file mode 100644 index 0000000..1235737 --- /dev/null +++ b/commands/SFW/gecg.js @@ -0,0 +1,27 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "gecg", + category: "SFW", + description: "Genetically engineered catgirl", + usage: "[command]", + run: async (client, message, args) => { + //command + + async function work() { + let owo = (await neko.sfw.gecg()); + + const wtf = new Discord.MessageEmbed() + .setTitle("Genetically engineered catgirl") + .setImage(owo.url) + .setColor(`#000000`) + .setURL(owo.url); + message.channel.send(wtf); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/SFW/goose.js b/commands/SFW/goose.js new file mode 100644 index 0000000..6d5ca07 --- /dev/null +++ b/commands/SFW/goose.js @@ -0,0 +1,27 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "goose", + category: "SFW", + description: "sends random goose image", + usage: "[command]", + run: async (client, message, args) => { + //command + + async function work() { + let owo = (await neko.sfw.goose()); + + const goose = new Discord.MessageEmbed() + .setTitle("Random goose Image") + .setImage(owo.url) + .setColor(`#000000`) + .setURL(owo.url); + message.channel.send(goose); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/SFW/lizard.js b/commands/SFW/lizard.js new file mode 100644 index 0000000..7518d53 --- /dev/null +++ b/commands/SFW/lizard.js @@ -0,0 +1,27 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "lizard", + category: "SFW", + description: "sends random lizard image", + usage: "[command]", + run: async (client, message, args) => { + //command + + async function work() { + let owo = (await neko.sfw.lizard()); + + const lizard = new Discord.MessageEmbed() + .setTitle("Random Lizard Image") + .setImage(owo.url) + .setColor(`#000000`) + .setURL(owo.url); + message.channel.send(lizard); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/SFW/neko.js b/commands/SFW/neko.js new file mode 100644 index 0000000..9ef6571 --- /dev/null +++ b/commands/SFW/neko.js @@ -0,0 +1,27 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "neko", + category: "SFW", + description: "sends random cute neko girl", + usage: "[command]", + run: async (client, message, args) => { + //command + + async function work() { + let owo = (await neko.sfw.neko()); + + const neko = new Discord.MessageEmbed() + .setTitle("Random neko Image") + .setImage(owo.url) + .setColor(`#000000`) + .setURL(owo.url); + message.channel.send(neko); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/SFW/nekogif.js b/commands/SFW/nekogif.js new file mode 100644 index 0000000..f0e993d --- /dev/null +++ b/commands/SFW/nekogif.js @@ -0,0 +1,27 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "nekogif", + category: "SFW", + description: "sends random neko gif", + usage: "[command]", + run: async (client, message, args) => { + //command + + async function work() { + let owo = (await neko.sfw.nekoGif()); + + const nekogif = new Discord.MessageEmbed() + .setTitle("Random Neko Gif") + .setImage(owo.url) + .setColor(`#000000`) + .setURL(owo.url); + message.channel.send(nekogif); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/SFW/wallpaper.js b/commands/SFW/wallpaper.js new file mode 100644 index 0000000..8ea587b --- /dev/null +++ b/commands/SFW/wallpaper.js @@ -0,0 +1,27 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); + +module.exports = { + name: "wallpaper", + category: "SFW", + description: "sends random wallpaper", + usage: "[command]", + run: async (client, message, args) => { + //command + + async function work() { + let owo = (await neko.sfw.wallpaper()); + + const wallpaper = new Discord.MessageEmbed() + .setTitle("Random Wallpaper") + .setImage(owo.url) + .setColor(`#000000`) + .setURL(owo.url); + message.channel.send(wallpaper); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/economy/balance.js b/commands/economy/balance.js new file mode 100644 index 0000000..8b2d72d --- /dev/null +++ b/commands/economy/balance.js @@ -0,0 +1,8 @@ +module.exports = { + name: "balance", + category: "economy", + description: "Lets you check how much money you have", + run: async (client, message, args) => { + //command + } + }; \ No newline at end of file diff --git a/commands/economy/coinflip.js b/commands/economy/coinflip.js new file mode 100644 index 0000000..20807e3 --- /dev/null +++ b/commands/economy/coinflip.js @@ -0,0 +1,8 @@ +module.exports = { + name: "coinflip", + category: "economy", + description: "Flips a coin", + run: async (client, message, args) => { + //command + } + }; \ No newline at end of file diff --git a/commands/economy/daily.js b/commands/economy/daily.js new file mode 100644 index 0000000..069c376 --- /dev/null +++ b/commands/economy/daily.js @@ -0,0 +1,8 @@ +module.exports = { + name: "daily", + category: "economy", + description: "ear your daily cash", + run: async (client, message, args) => { + //command + } + }; \ No newline at end of file diff --git a/commands/economy/dice.js b/commands/economy/dice.js new file mode 100644 index 0000000..1765491 --- /dev/null +++ b/commands/economy/dice.js @@ -0,0 +1,8 @@ +module.exports = { + name: "dice", + category: "economy", + description: "Rolls a dice", + run: async (client, message, args) => { + //command + } + }; \ No newline at end of file diff --git a/commands/economy/slots.js b/commands/economy/slots.js new file mode 100644 index 0000000..6c47763 --- /dev/null +++ b/commands/economy/slots.js @@ -0,0 +1,8 @@ +module.exports = { + name: "slots", + category: "economy", + description: "lets you play the slot machine", + run: async (client, message, args) => { + //command + } + }; \ No newline at end of file diff --git a/commands/economy/transfer.js b/commands/economy/transfer.js new file mode 100644 index 0000000..3e2e13b --- /dev/null +++ b/commands/economy/transfer.js @@ -0,0 +1,8 @@ +module.exports = { + name: "transfer", + category: "economy", + description: "Lets you transfer money to another user", + run: async (client, message, args) => { + //command + } + }; \ No newline at end of file diff --git a/commands/economy/work.js b/commands/economy/work.js new file mode 100644 index 0000000..16f552d --- /dev/null +++ b/commands/economy/work.js @@ -0,0 +1,8 @@ +module.exports = { + name: "work", + category: "economy", + description: "Lets you work a job", + run: async (client, message, args) => { + //command + } + }; \ No newline at end of file diff --git a/commands/emotions/baka.js b/commands/emotions/baka.js new file mode 100644 index 0000000..281a5a3 --- /dev/null +++ b/commands/emotions/baka.js @@ -0,0 +1,33 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); +const utils = require('../../utils'); + +module.exports = { + name: "baka", + category: "emotions", + description: "idiot", + usage: "[command] or [command] + [user]", + run: async (client, message, args) => { + //command + + const user = message.mentions.users.first(); + if(!user) + return message.reply('Mention someone call an idot to'); + + async function work() { + let owo = (await neko.sfw.baka()); + + const baka = new Discord.MessageEmbed() + .setTitle(" IDIOT! ") + .setDescription((" BAKA!!! " + user.toString())) + .setImage(owo.url) + .setColor(`#000000`) + .setURL(owo.url); + message.channel.send(baka); + +} + + work(); +} +}; \ No newline at end of file diff --git a/commands/emotions/smug.js b/commands/emotions/smug.js new file mode 100644 index 0000000..8de3dc9 --- /dev/null +++ b/commands/emotions/smug.js @@ -0,0 +1,29 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); +const utils = require('../../utils'); + +module.exports = { + name: "smug", + category: "emotions", + description: "shows that you are smug", + usage: "[command]", + run: async (client, message, args) => { + //command + + async function work() { + let owo = (await neko.sfw.smug()); + + const smug = new Discord.MessageEmbed() + .setTitle("Someone is smug") + .setDescription(( message.author.toString() + " is smug ")) + .setImage(owo.url) + .setColor(`#000000`) + .setURL(owo.url); + message.channel.send(smug); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/expressions/cuddle.js b/commands/expressions/cuddle.js new file mode 100644 index 0000000..3b05156 --- /dev/null +++ b/commands/expressions/cuddle.js @@ -0,0 +1,33 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); +const utils = require('../../utils'); + +module.exports = { + name: "cuddle", + category: "expressions", + description: "cuddles a mentioned user", + usage: "[command] + [user]", + run: async (client, message, args) => { + //command + + const user = message.mentions.users.first(); + if(!user) + return message.reply('Mention someone to cuddle'); + + async function work() { + let owo = (await neko.sfw.cuddle()); + + const cuddleembed = new Discord.MessageEmbed() + .setTitle(user.username + " You just got a cuddle! ") + .setDescription((user.toString() + " got a cuddle from " + message.author.toString())) + .setImage(owo.url) + .setColor(`#000000`) + .setURL(owo.url); + message.channel.send(cuddleembed); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/expressions/feed.js b/commands/expressions/feed.js new file mode 100644 index 0000000..ffc4da0 --- /dev/null +++ b/commands/expressions/feed.js @@ -0,0 +1,33 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); +const utils = require('../../utils'); + +module.exports = { + name: "feed", + category: "expressions", + description: "feeds a mentioned user", + usage: "[command] + [user]", + run: async (client, message, args) => { + //command + + const user = message.mentions.users.first(); + if(!user) + return message.reply('Mention someone to cuddle'); + + async function work() { + let owo = (await neko.sfw.feed()); + + const feedembed = new Discord.MessageEmbed() + .setTitle(user.username + " You have been fed! ") + .setDescription((user.toString() + " got fed by " + message.author.toString())) + .setImage(owo.url) + .setColor(`#000000`) + .setURL(owo.url); + message.channel.send(feedembed); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/expressions/hug.js b/commands/expressions/hug.js new file mode 100644 index 0000000..171b85b --- /dev/null +++ b/commands/expressions/hug.js @@ -0,0 +1,33 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); +const utils = require('../../utils'); + +module.exports = { + name: "hug", + category: "expressions", + description: "hugs a mentioned user", + usage: "[command] + [user]", + run: async (client, message, args) => { + //command + + const user = message.mentions.users.first(); + if(!user) + return message.reply('Mention someone to hug'); + + async function work() { + let owo = (await neko.sfw.hug()); + + const hugembed = new Discord.MessageEmbed() + .setTitle(user.username + " You have been hugged! ") + .setDescription((user.toString() + " got hugged by " + message.author.toString())) + .setImage(owo.url) + .setColor(`#000000`) + .setURL(owo.url); + message.channel.send(hugembed); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/expressions/kiss.js b/commands/expressions/kiss.js new file mode 100644 index 0000000..af270a6 --- /dev/null +++ b/commands/expressions/kiss.js @@ -0,0 +1,33 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); +const utils = require('../../utils'); + +module.exports = { + name: "kiss", + category: "expressions", + description: "kisses a mentioned user", + usage: "[command] + [user]", + run: async (client, message, args) => { + //command + + const user = message.mentions.users.first(); + if(!user) + return message.reply('Mention someone to kiss'); + + async function work() { + let owo = (await neko.sfw.kiss()); + + const kissembed = new Discord.MessageEmbed() + .setTitle(user.username + " You have been kissed! ") + .setDescription((user.toString() + " got kissed by " + message.author.toString())) + .setImage(owo.url) + .setColor(`#000000`) + .setURL(owo.url); + message.channel.send(kissembed); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/expressions/pat.js b/commands/expressions/pat.js new file mode 100644 index 0000000..e30e286 --- /dev/null +++ b/commands/expressions/pat.js @@ -0,0 +1,33 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); +const utils = require('../../utils'); + +module.exports = { + name: "pat", + category: "expressions", + description: "pats a mentioned user", + usage: "[command] + [user]", + run: async (client, message, args) => { + //command + + const user = message.mentions.users.first(); + if(!user) + return message.reply('Mention someone to pat'); + + async function work() { + let owo = (await neko.sfw.pat()); + + const patembed = new Discord.MessageEmbed() + .setTitle(user.username + " !!! ") + .setDescription((user.toString() + " got patted by " + message.author.toString())) + .setImage(owo.url) + .setColor(`#000000`) + .setURL(owo.url); + message.channel.send(patembed); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/expressions/poke.js b/commands/expressions/poke.js new file mode 100644 index 0000000..396f5cb --- /dev/null +++ b/commands/expressions/poke.js @@ -0,0 +1,33 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); +const utils = require('../../utils'); + +module.exports = { + name: "poke", + category: "expressions", + description: "pokes a mentioned user", + usage: "[command] + [user]", + run: async (client, message, args) => { + //command + + const user = message.mentions.users.first(); + if(!user) + return message.reply('Mention someone to poke'); + + async function work() { + let owo = (await neko.sfw.poke()); + + const pokeembed = new Discord.MessageEmbed() + .setTitle(user.username + " You have been poked ") + .setDescription((user.toString() + " got poked by " + message.author.toString())) + .setImage(owo.url) + .setColor(`#000000`) + .setURL(owo.url); + message.channel.send(pokeembed); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/expressions/slap.js b/commands/expressions/slap.js new file mode 100644 index 0000000..a37cb49 --- /dev/null +++ b/commands/expressions/slap.js @@ -0,0 +1,33 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); +const utils = require('../../utils'); + +module.exports = { + name: "slap", + category: "expressions", + description: "slaps a mentioned user", + usage: "[command] + [user]", + run: async (client, message, args) => { + //command + + const user = message.mentions.users.first(); + if(!user) + return message.reply('Mention someone to slap'); + + async function work() { + let owo = (await neko.sfw.slap()); + + const slapemebd = new Discord.MessageEmbed() + .setTitle(user.username + " You have been slapped ") + .setDescription((user.toString() + " got slapped by " + message.author.toString())) + .setImage(owo.url) + .setColor(`#000000`) + .setURL(owo.url); + message.channel.send(slapemebd); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/expressions/tickle.js b/commands/expressions/tickle.js new file mode 100644 index 0000000..48071fb --- /dev/null +++ b/commands/expressions/tickle.js @@ -0,0 +1,33 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); +const utils = require('../../utils'); + +module.exports = { + name: "tickle", + category: "expressions", + description: "tickles a mentioned user", + usage: "[command] + [user]", + run: async (client, message, args) => { + //command + + const user = message.mentions.users.first(); + if(!user) + return message.reply('Mention someone to tickle'); + + async function work() { + let owo = (await neko.sfw.poke()); + + const tickleembed = new Discord.MessageEmbed() + .setTitle(user.username + " You have been tickled ") + .setDescription((user.toString() + " got tickled by " + message.author.toString())) + .setImage(owo.url) + .setColor(`#000000`) + .setURL(owo.url); + message.channel.send(tickleembed); + +} + + work(); +} + }; \ No newline at end of file diff --git a/commands/fun/8ball.js b/commands/fun/8ball.js new file mode 100644 index 0000000..a7d358c --- /dev/null +++ b/commands/fun/8ball.js @@ -0,0 +1,57 @@ +const utils = require('../../utils'); + +module.exports = { + name: "8ball", + category: "fun", + description: "returns a response based on your question", + run: async (client, message, args) => { + //command + function doMagic8BallVoodoo() { + var rand = ['Yes', 'No', 'Why are you even trying?', 'What do you think? NO', 'Maybe', 'Never', 'Yep']; + + return rand[Math.floor(Math.random()*rand.length)]; +} + + function getRandomInt(min, max) { + min = Math.ceil(min); + max = Math.floor(max); + return Math.floor(Math.random() * (max - min)) + min; +} + +// Later in the code: +var msg1 = Array(5); + msg1[1] = "Yes"; + msg1[2] = "No"; + msg1[3] = "Maybe"; + msg1[4] = "Without a doubt."; + msg1[5] = "I don't care" + msg1[6] = ":)" + var x = getRandomInt(0, 20); + if (x < 5){ + if (x < 3){ + message.channel.send(msg1[1]); + } + else { + message.channel.send(msg1[3]); + } + } + else if (x<= 9) { + if (x >= 7){ + message.channel.send(msg1[2]); } + else{ + message.channel.send(msg1[4]); + } + } + else if (x <= 12 ) { + message.channel.send(msg1[5]); + } + else { + message.channel.send(msg1[6]) + } + + + + + + } + }; \ No newline at end of file diff --git a/commands/fun/ascii.js b/commands/fun/ascii.js new file mode 100644 index 0000000..8cafb0b --- /dev/null +++ b/commands/fun/ascii.js @@ -0,0 +1,28 @@ +var figlet = require('figlet'); +const utils = require('../../utils'); + +module.exports = { + name: "ascii", + category: "fun", +description: "Converts text info ASCII", +usage: "[command | your text]", +run: async (client, message, args) => { +//command +var maxLen = 100 // Kendiniz en y�ksek harf sayisini ayarlayabilirsiniz + + if(args.join(' ').length > maxLen) return message.channel.send(`The max length is ${maxLen}!`) + + if(!args[0]) return message.channel.send('Please enter some text.'); + + figlet(`${args.join(' ')}`, function(err, data) { + if (err) { + console.log('k...'); + console.dir(err); + return; + } + + message.channel.send(`${data}`, {code: 'AsciiArt'}); + }); + +} +}; \ No newline at end of file diff --git a/commands/fun/cattext.js b/commands/fun/cattext.js new file mode 100644 index 0000000..a907a99 --- /dev/null +++ b/commands/fun/cattext.js @@ -0,0 +1,26 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); +const utils = require('../../utils'); + + +module.exports = { + name: "cattext", + category: "fun", + description: "sends owo nya cute anime waifu text stuff", + usage: "[command]", + run: async (client, message, args) => { + //command + + async function work() { + + let owo = (await neko.sfw.catText()); + message.channel.send(owo.cat).catch(error => { + console.error(error); + }); + + } + + work(); + } + }; \ No newline at end of file diff --git a/commands/fun/fact.js b/commands/fun/fact.js new file mode 100644 index 0000000..f05a06b --- /dev/null +++ b/commands/fun/fact.js @@ -0,0 +1,26 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); +const utils = require('../../utils'); + + +module.exports = { + name: "fact", + category: "fun", + description: "sends a random fact", + usage: "[command]", + run: async (client, message, args) => { + //command + + async function work() { + + let owo = (await neko.sfw.fact()); + message.channel.send(owo.fact).catch(error => { + console.error(error); + }); + + } + + work(); + } + }; \ No newline at end of file diff --git a/commands/fun/flip.js b/commands/fun/flip.js new file mode 100644 index 0000000..6c79e2d --- /dev/null +++ b/commands/fun/flip.js @@ -0,0 +1,32 @@ + +const utils = require('../../utils'); + + +module.exports = { + name: "flip", + category: "fun", + description: "Flips a coin", + usage: "[command]", + run: async (client, message, args) => { + //command + function getRandomInt(min, max) { + min = Math.ceil(min); + max = Math.floor(max); + return Math.floor(Math.random() * (max - min)) + min; + } + + { + var msg2 = Array(2); + msg2[1] = "Heads"; + msg2[2] = "Tails"; + var x = getRandomInt(0, 8); + if (x < 4){ + message.channel.send(msg2[1]); + } + else{ + message.channel.send(msg2[2]); + } + } + + } + }; \ No newline at end of file diff --git a/commands/fun/meme.js b/commands/fun/meme.js new file mode 100644 index 0000000..08f5e31 --- /dev/null +++ b/commands/fun/meme.js @@ -0,0 +1,21 @@ +const { MessageEmbed } = require("discord.js"); +const randomPuppy = require("random-puppy"); + +module.exports = { + name: "meme", + category: "fun", + description: "Sends a random meme from Reddit", + run: async (client, message, args) => { + const subReddits = ["dankmeme", "meme", "me_irl"]; + const random = subReddits[Math.floor(Math.random() * subReddits.length)]; + + const img = await randomPuppy(random); + const embed = new MessageEmbed() + .setColor("RANDOM") + .setImage(img) + .setTitle(`From /r/${random}`) + .setURL(`https://reddit.com/r/${random}`); + + message.channel.send(embed); + } +} \ No newline at end of file diff --git a/commands/fun/owoify.js b/commands/fun/owoify.js new file mode 100644 index 0000000..feef5bf --- /dev/null +++ b/commands/fun/owoify.js @@ -0,0 +1,28 @@ +const client = require('nekos.life'); +const Discord = require('discord.js') +const neko = new client(); +const utils = require('../../utils'); + +module.exports = { +name: "owoify", +category: "fun", +description: "owoifys text", +usage: "[command | your text]", +run: async (client, message, args) => { +//command +async function work() { + + let coolusertext = args.join(" "); + if (!coolusertext) return message.channel.send('Please type some text to owoify.') + if (coolusertext.length > 200) return message.channel.send(`I can't owoify your text, it is over 200 characters long!`) + + let owo = await neko.sfw.OwOify({text: coolusertext}); + message.channel.send(owo.owo).catch(error => { + console.error(error); + }); + + } + + work(); +} +}; \ No newline at end of file diff --git a/commands/fun/ratewaifu.js b/commands/fun/ratewaifu.js new file mode 100644 index 0000000..f975e0f --- /dev/null +++ b/commands/fun/ratewaifu.js @@ -0,0 +1,73 @@ +const Discord = require('discord.js') +const cooldown = new Set() +const utils = require('../../utils'); + +module.exports = { + name: "ratewaifu", + aliases: ["rate"], + category: "fun", + description: "Allows you to rate a user or anyone or text", + usage: "[command | text/user]", +run: async (client, message, args) => { +//command +// This command was originally made by RyansHDs#4461. + // Thank you for letting me use this. -Aaron + + if (cooldown.has(message.author.id)) { + let cooldownemb = new Discord.MessageEmbed() + .setAuthor(`${message.author.username} Cooldown..`, message.author.displayAvatarURL) + .setDescription(`You need to wait 5 seconds!`) + .setColor(`RED`) + .setFooter(`This message will be deleted in 5 seconds..`) + return message.channel.send(cooldownemb).then(message => { + message.delete(5000) + }) + + } + cooldown.add(message.author.id); + + setTimeout(() => { + cooldown.delete(message.author.id); + }, 10000); + let m421 = args.join(" "); + if (!m421) return message.channel.send('Please define your waifus name.') + if (m421.length > 30) return message.channel.send(`I can't rate your waifu! It's over 30 text!`) + let result = Math.floor((Math.random() * 100) + 0); + + const happyrate = new Discord.MessageEmbed() + .setDescription(`I would rate **${m421}** ${result}/100 ?`) + .setColor(`GREEN`) + + const sadembed = new Discord.MessageEmbed() + .setDescription(`I would rate **${m421}** ${result}/100 ??`) + .setColor(`GREEN`) + + const idkembed = new Discord.MessageEmbed() + .setDescription(`I would rate **${m421}** ${result}/100 ??`) + .setColor(`GREEN`) + + const shrugembed = new Discord.MessageEmbed() + .setDescription(`I would rate **${m421}** ${result}/100 ??`) + .setColor(`GREEN`) + + const okembed = new Discord.MessageEmbed() + .setDescription(`I would rate **${m421}** ${result}/100 ??`) + .setColor(`GREEN`) + +const thumbupembed = new Discord.MessageEmbed() + .setDescription(`I would rate **${m421}** ${result}/100 ??`) + .setColor(`GREEN`) + +const eyesembed = new Discord.MessageEmbed() + .setDescription(`I would rate **${m421}** ${result}/100 ??`) + .setColor(`GREEN`) + + if (result > 90) return message.channel.send(happyrate) + if (result < 30) return message.channel.send(sadembed) + if (result > 40) return message.channel.send(idkembed) + if (result > 50) return message.channel.send(shrugembed) + if (result > 60) return message.channel.send(okembed) + if (result > 70) return message.channel.send(thumbupembed) + if (result > 80) return message.channel.send(eyesembed) +} +}; \ No newline at end of file diff --git a/commands/info/help.js b/commands/info/help.js new file mode 100644 index 0000000..8f599a2 --- /dev/null +++ b/commands/info/help.js @@ -0,0 +1,78 @@ +const { MessageEmbed } = require("discord.js"); +const { stripIndents } = require("common-tags"); +const utils = require('../../utils'); + +module.exports = { + name: "help", + aliases: ["h"], + category: "info", + description: "Returns all commands, or one specific command info", + usage: "[command | alias]", + run: async (client, message, args) => { + // If there's an args found + // Send the info of that command found + // If no info found, return not found embed. + if (args[0]) { + return getCMD(client, message, args[0]); + } else { + // Otherwise send all the commands available + // Without the cmd info + return getAll(client, message); + } + } +} + +function getAll(client, message) { + const embed = new MessageEmbed() + .setColor("#FFDFD3") + .setThumbnail("https://cdn.discordapp.com/app-icons/900279926874316871/510058fde6e6c9f172bf81fb61d0215e.png?size=256") + .setTitle('Help Menu') + .setURL('https://github.com/Bill716/Rias-Gremory') + .setFooter("To see command descriptions and usage type .help [CMD Name]") + + // Map all the commands + // with the specific category + const commands = (category) => { + return client.commands + .filter(cmd => cmd.category === category) + .map(cmd => `\`${cmd.name}\``) + .join(", "); + } + + // Map all the categories + const info = client.categories + .map(cat => stripIndents`**${cat[0].toUpperCase() + cat.slice(1)}** \n${commands(cat)}`) + .reduce((string, category) => string + "\n" + category); + + message.reply('Sent help to dms') + + + + return message.author.send(embed.setDescription(info)); + +} + +function getCMD(client, message, input) { + const embed = new MessageEmbed() + + // Get the cmd by the name or alias + const cmd = client.commands.get(input.toLowerCase()) || client.commands.get(client.aliases.get(input.toLowerCase())); + + let info = `No information found for command **${input.toLowerCase()}**`; + + // If no cmd is found, send not found embed + if (!cmd) { + return message.channel.send(embed.setColor("RED").setDescription(info)); + } + + // Add all cmd info to the embed + if (cmd.name) info = `**Command name**: ${cmd.name}`; + if (cmd.aliases) info += `\n**Aliases**: ${cmd.aliases.map(a => `\`${a}\``).join(", ")}`; + if (cmd.description) info += `\n**Description**: ${cmd.description}`; + if (cmd.usage) { + info += `\n**Usage**: ${cmd.usage}`; + embed.setFooter(`Syntax: <> = required, [] = optional`); + } + + return message.channel.send(embed.setColor("GREEN").setDescription(info)); +} \ No newline at end of file diff --git a/commands/info/ping.js b/commands/info/ping.js new file mode 100644 index 0000000..0e46ff4 --- /dev/null +++ b/commands/info/ping.js @@ -0,0 +1,12 @@ +module.exports = { + name: "ping", + aliases: ["latency"], + category: "info", + description: "Returns latency and API ping", + run: async (client, message, args) => { + const msg = await message.channel.send(`🏓 Pinging....`); + + msg.edit(`🏓 Pong! + API Latency is ${Math.round(client.ws.ping)}ms`); + } +} diff --git a/commands/moderation/ban.js b/commands/moderation/ban.js new file mode 100644 index 0000000..b91a1bd --- /dev/null +++ b/commands/moderation/ban.js @@ -0,0 +1,10 @@ +module.exports = { + name: "ban", + category: "moderation", + description: "bans a mentioned user", + usage: "[COMMAND] + [USER]", + run: async (client, message, args) => { + message.channel.send(`Command under construction!`); + + } +} diff --git a/commands/moderation/kick.js b/commands/moderation/kick.js new file mode 100644 index 0000000..a87184b --- /dev/null +++ b/commands/moderation/kick.js @@ -0,0 +1,10 @@ +module.exports = { + name: "kick", + category: "moderation", + description: "bans a mentioned user", + usage: "[COMMAND] + [USER]", + run: async (client, message, args) => { + message.channel.send(`Command under construction!`); + + } +} diff --git a/commands/moderation/purge.js b/commands/moderation/purge.js new file mode 100644 index 0000000..d9178be --- /dev/null +++ b/commands/moderation/purge.js @@ -0,0 +1,10 @@ +module.exports = { + name: "purge", + category: "moderation", + description: "Deletes messages in a text channel or specified number of messages in a text channel.", + usage: "[COMMAND] OR [COMMAND] + [number of messages]", + run: async (client, message, args) => { + message.channel.send(`Command under construction!`); + + } +} diff --git a/commands/utility/animesearch.js b/commands/utility/animesearch.js new file mode 100644 index 0000000..639ece8 --- /dev/null +++ b/commands/utility/animesearch.js @@ -0,0 +1,35 @@ +const Discord = require("discord.js"); +const malScraper = require('mal-scraper'); + +module.exports = { + name: "animesearch", + category: "utility", +description: "Get info about an anime", +usage: "[command | Anime]", +run: async (client, message, args) => { +//command +const search = `${args}`; +if(!search) +return message.reply('Please add a search query if invalid command will not work.'); + +malScraper.getInfoFromName(search) + .then((data) => { + const malEmbed = new Discord.MessageEmbed() + .setAuthor(`My Anime List search result for ${args}`.split(',').join(' ')) + .setThumbnail(data.picture) + .setColor('#ffc1cc') //I personally use bubblegum pink! + .addField('English Title', data.englishTitle, true) + .addField('Japanese Title', data.japaneseTitle, true) + .addField('Type', data.type, true) + .addField('Episodes', data.episodes, true) + .addField('Rating', data.rating, true) + .addField('Aired', data.aired, true) + .addField('Score', data.score, true) + .addField('Score Stats', data.scoreStats, true) + .addField('Link', data.url); + + message.channel.send(malEmbed); + + }) +} +}; \ No newline at end of file diff --git a/commands/utility/avatar.js b/commands/utility/avatar.js new file mode 100644 index 0000000..1cd3a64 --- /dev/null +++ b/commands/utility/avatar.js @@ -0,0 +1,30 @@ +const Discord = require("discord.js") + +module.exports = { + name: "avatar", + category: "utility", + description: "Gets the avatar of a user or yourself", + usage: "[command | user] or [command]", + run: async(client, message, args) => { + + //command + + /* If user isnt found it selects ur profile */ + const member = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(x => x.user.username.toLowerCase() === args.slice(0).join(' ') || x.user.username === args[0]) || message.member; + + if (!member.user.avatarURL) return message.channel.send(`That user does not have an avatar`); + + const avatar = new Discord.MessageEmbed() + .setTitle(`${member.user.username}'s Avatar`) + .setColor("RANDOM") + .setImage(member.user.avatarURL()) + .setColor(member.displayHexColor) + .setImage(member.user.displayAvatarURL({ dynamic: true, size: 2048 })) + .setURL(member.user.avatarURL()) + message.channel.send(avatar) + // If bot doesnt have embed perms + .catch(() => message.channel.send('**Error:** Missing permission `Embed link` ')); + + } + +}; \ No newline at end of file diff --git a/commands/utility/botinfo.js b/commands/utility/botinfo.js new file mode 100644 index 0000000..241bc07 --- /dev/null +++ b/commands/utility/botinfo.js @@ -0,0 +1,45 @@ +const Discord = require("discord.js") + +const { version } = require("discord.js"); +const moment = require("moment"); +const m = require("moment-duration-format"); +let os = require('os') +let cpuStat = require("cpu-stat") +const ms = require("ms") + + + + +module.exports = { + name: "botinfo", + category: "utility", + description: "Sends detailed info about the client", + usage: "[command]", + run: async (client, message, args) => { + //command + let cpuLol; + cpuStat.usagePercent(function(err, percent, seconds) { + if (err) { + return console.log(err); + } + const duration = moment.duration(client.uptime).format(" D [days], H [hrs], m [mins], s [secs]"); + const botinfo = new Discord.MessageEmbed() + .setAuthor(client.user.username) + .setTitle("__**Stats:**__") + .setColor("RANDOM") + .addField("⏳ Mem Usage", `${(process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2)} / ${(os.totalmem() / 1024 / 1024).toFixed(2)} MB`, true) + .addField("⌚️ Uptime ", `${duration}`, true) + .addField("📁 Users", `${client.users.cache.size}`, true) + .addField("📁 Servers", `${client.guilds.cache.size}`, true) + .addField("📁 Channels ", `${client.channels.cache.size}`, true) + .addField("👾 Discord.js", `v${version}`, true) + .addField("🤖 Node", `${process.version}`, true) + .addField("🤖 CPU", `\`\`\`md\n${os.cpus().map(i => `${i.model}`)[0]}\`\`\``) + .addField("🤖 CPU usage", `\`${percent.toFixed(2)}%\``, true) + .addField("🤖 Arch", `\`${os.arch()}\``, true) + .addField("💻 Platform", `\`\`${os.platform()}\`\``, true) + .addField("API Latency", `${(client.ws.ping)}ms`) + message.channel.send(botinfo) + }); + } + }; \ No newline at end of file diff --git a/commands/utility/calc.js b/commands/utility/calc.js new file mode 100644 index 0000000..a65bcb4 --- /dev/null +++ b/commands/utility/calc.js @@ -0,0 +1,38 @@ +const utils = require('../../utils'); + +const math = require('math-expression-evaluator'); +const stripIndents = require('common-tags').stripIndents; + +module.exports = { + name: "calc", + aliases: ["calculate"], + category: "utility", + description: "Calculates a math equation", + usage: "[command | input]", + run: async (client, message, args) => { + //command + + if(args.length < 1) + return message.reply(`You must provide a equation to be solved on the calculator`); + +const question = args.join(' '); + +let answer; +if(question.indexOf('9 + 10') > -1) { + answer = '21'; +} else { + try { + answer = math.eval(question); + } catch (err) { + message.channel.send(`Invalid math equation: ${err}`); + } +} + +message.channel.send({ + embed: utils.embed('', stripIndents` + **Equation:**\n\`\`\`\n${question}\n\`\`\` + **Answer:**\n\`\`\`\n${answer}\n\`\`\` + `) +}); + } + }; \ No newline at end of file diff --git a/commands/utility/osu.js b/commands/utility/osu.js new file mode 100644 index 0000000..223cf2b --- /dev/null +++ b/commands/utility/osu.js @@ -0,0 +1,42 @@ +const Discord = require('discord.js') +const osu = require('node-osu'); +//PUT YOUR OSU API KEY INSIDE THE QUOTATION MARKS +const api = new osu.Api("YOUR KEY HERE!" , { +// END OF OSU API KEY + notFoundAsError: true, + completeScores: false +}) + +module.exports = { + name: "osu", + category: "utility", +description: "Gets info about a user from Osu!", +usage: "[command | username]", +run: async (bot, message, args) => { +//command + +let username = args[0] + + +if (!args[0]) return message.channel.send('Please, provide a valid user\'s nickname! (osu!)') + +api.getUser({u: username}).then(user => { +const osu = new Discord.MessageEmbed() +.setTitle('User Osu Search System') +.setThumbnail(`http://s.ppy.sh/a/${user.id}}`) +.setColor("#D0436A") +.addField('Nickname', user.name) +.addField('PP', Math.round(user.pp.raw)) +.addField('Rank', user.pp.rank) +.addField('Level', Math.round(user.level)) +.addField('Country', user.country) +.addField('Country Rank', user.pp.countryRank) +.addField('Playcount', user.counts.plays) +.addField('Accuracy', `${user.accuracyFormatted}`) +.setFooter('Requested By ' + message.author.tag, message.author.avatarURL) +message.channel.send(osu) + +}) + +} +}; \ No newline at end of file diff --git a/commands/utility/serverinfo.js b/commands/utility/serverinfo.js new file mode 100644 index 0000000..7910ea7 --- /dev/null +++ b/commands/utility/serverinfo.js @@ -0,0 +1,27 @@ +const Discord = require("discord.js"); + +module.exports = { + name: "serverinfo", + category: "utility", +description: "Shows info about a server", +usage: "[command]", +run: async (client, message, args) => { +//command +let servericon = message.guild.iconURL; +let serverembed = new Discord.MessageEmbed() +.setTitle("Server Information") +.setColor("RANDOM") +.setThumbnail(servericon) +.addField("Server Name", message.guild.name) +.addField("Owner", `${message.guild.owner.user.username}#${message.guild.owner.user.discriminator}`, true) +.addField("Channels", message.guild.channels.cache.size, true) +.addField("Roles", message.guild.roles.cache.size, true) +.addField("Created On", message.guild.createdAt) +.addField("You Joined", message.member.joinedAt) +.addField("Total Members", message.guild.memberCount) +.setThumbnail(message.guild.iconURL()) +.setTimestamp() +.setFooter(message.author.username, message.author.avatarURL); +message.channel.send(serverembed); +} +}; \ No newline at end of file diff --git a/commands/utility/urban.js b/commands/utility/urban.js new file mode 100644 index 0000000..c7d00b4 --- /dev/null +++ b/commands/utility/urban.js @@ -0,0 +1,36 @@ +const Discord = require('discord.js') +const urban = require('urban.js') + +module.exports = { + name: "urban", + category: "utility", + description: "Shows you a deffinition from urban dictionary", + usage: "COMMAND [your word]", + run: async (client, message, args) => { + //command + const bargs = message.content.split(' '); + const searchString = bargs.slice(1).join(' ') + if(!searchString)return message.channel.send(`You have to type in word`) + + + +urban(searchString).then(urbans=>{ + + message.channel.send({embed: { + + description: `__**${urbans.word}**__\n\n**Definition**\n${urbans.definition}\n\n**Example**\n${urbans.example}\n\n**Tags:** ${urbans.tags}\n\n👍 **${urbans.thumbsUp}** *Thumbs Up* **|** 👎 **${urbans.thumbsDown}** *Thumbs Down*`, + author: { + name: message.author.username, + icon_url: message.author.avatarURL, + }, + color: 0xff0000, + + + timestamp: new Date(), + + } +}) +}) + + } + }; \ No newline at end of file diff --git a/commands/utility/whois.js b/commands/utility/whois.js new file mode 100644 index 0000000..4d6097c --- /dev/null +++ b/commands/utility/whois.js @@ -0,0 +1,36 @@ + const Discord = require("discord.js") + + module.exports = { + name: "whois", + aliases: ["info"], + category: "utility", + description: "Get information about a user", + usage: "[command | user] or [command]", + run: async (client, message, args) => { + //command + +{ + const user = message.mentions.users.first(); + if(!user) + return message.reply('Please mention the user who you want info about.'); + + var playing = ("[ " + user.presence.activities + " ]") + + const whothefuq = new Discord.MessageEmbed() + .setTitle("User Info:") + .addField("Full Username", `${user.tag}`) + .addField("ID", user.id) + .addField("Playing",playing, true) + .addField("Status", `${user.presence.status}`, true) + .addField("Joined Discord At", user.createdAt) + .setColor("RANDOM") + .setTimestamp() + .setThumbnail(user.avatarURL()) + message.channel.send(whothefuq) + + }; + } + + + + }; \ No newline at end of file diff --git a/config.json b/config.json new file mode 100644 index 0000000..9fe236c --- /dev/null +++ b/config.json @@ -0,0 +1,6 @@ +{ + "token": "INSERT YOUR TOKEN HERE", + "prefix": ".", + "clientID": "INSERT YOUR BOT ID HERE" + +} \ No newline at end of file diff --git a/economy/economy.js b/economy/economy.js new file mode 100644 index 0000000..30fea36 --- /dev/null +++ b/economy/economy.js @@ -0,0 +1,187 @@ +const config = require("../config.json"); +/* +If you want to make discord-economy guild based you have to use message.author.id + message.guild.id as ID for example: +eco.Daily(message.author.id + message.guild.id) + +This will create a unique ID for each guild member +*/ + + +//Requiring Packages +const Discord = require('discord.js'); //This can also be discord.js-commando or other node based packages! +const eco = require("discord-economy"); + +//Create the bot client +const client = new Discord.Client(); + +//Set the prefix and token of the bot. +const settings = { + prefix: (config.prefix), +} + +//Whenever someone types a message this gets activated. +//(If you use 'await' in your functions make sure you put async here) +client.on('message', async message => { + + //This reads the first part of your message behind your prefix to see which command you want to use. + var command = message.content.toLowerCase().slice(settings.prefix.length).split(' ')[0]; + + //These are the arguments behind the commands. + var args = message.content.split(' ').slice(1); + + //If the message does not start with your prefix return. + //If the user that types a message is a bot account return. + if (!message.content.startsWith(settings.prefix) || message.author.bot) return; + + if (command === 'balance') { + + var output = await eco.FetchBalance(message.author.id) + message.channel.send(`Hey ${message.author.tag}! You own ${output.balance} coins.`); + } + + if (command === 'daily') { + + var output = await eco.Daily(message.author.id) + //output.updated will tell you if the user already claimed his/her daily yes or no. + + if (output.updated) { + + var profile = await eco.AddToBalance(message.author.id, 100) + message.reply(`You claimed your daily coins successfully! You now own ${profile.newbalance} coins.`); + + } else { + message.channel.send(`Sorry, you already claimed your daily coins!\nBut no worries, over ${output.timetowait} you can daily again!`) + } + + } + + if (command === 'leaderboard') { + + //If you use discord-economy guild based you can use the filter() function to only allow the database within your guild + //(message.author.id + message.guild.id) can be your way to store guild based id's + //filter: x => x.userid.endsWith(message.guild.id) + + //If you put a mention behind the command it searches for the mentioned user in database and tells the position. + if (message.mentions.users.first()) { + + var output = await eco.Leaderboard({ + filter: x => x.balance > 50, + search: message.mentions.users.first().id + }) + message.channel.send(`The user ${message.mentions.users.first().tag} is number ${output} on my leaderboard!`); + + } else { + + eco.Leaderboard({ + limit: 3, //Only takes top 3 ( Totally Optional ) + filter: x => x.balance > 50 //Only allows people with more than 100 balance ( Totally Optional ) + }).then(async users => { //make sure it is async + + if (users[0]) var firstplace = await client.fetchUser(users[0].userid) //Searches for the user object in discord for first place + if (users[1]) var secondplace = await client.fetchUser(users[1].userid) //Searches for the user object in discord for second place + if (users[2]) var thirdplace = await client.fetchUser(users[2].userid) //Searches for the user object in discord for third place + + message.channel.send(`My Global leaderboard: + +1 - ${firstplace && firstplace.tag || 'Nobody Yet'} : ${users[0] && users[0].balance || 'None'} +2 - ${secondplace && secondplace.tag || 'Nobody Yet'} : ${users[1] && users[1].balance || 'None'} +3 - ${thirdplace && thirdplace.tag || 'Nobody Yet'} : ${users[2] && users[2].balance || 'None'}`) + + }) + + } + } + + if (command === 'transfer') { + + var user = message.mentions.users.first() + var amount = args[1] + + if (!user) return message.reply('Reply the user you want to send money to!') + if (!amount) return message.reply('Specify the amount you want to pay!') + + var output = await eco.FetchBalance(message.author.id) + if (output.balance < amount) return message.reply('You have fewer coins than the amount you want to transfer!') + + var transfer = await eco.Transfer(message.author.id, user.id, amount) + message.reply(`Transfering coins successfully done!\nBalance from ${message.author.tag}: ${transfer.FromUser}\nBalance from ${user.tag}: ${transfer.ToUser}`); + } + + if (command === 'coinflip') { + + var flip = args[0] //Heads or Tails + var amount = args[1] //Coins to gamble + + if (!flip || !['heads', 'tails'].includes(flip)) return message.reply('Please specify the flip, either heads or tails!') + if (!amount) return message.reply('Specify the amount you want to gamble!') + + var output = await eco.FetchBalance(message.author.id) + if (output.balance < amount) return message.reply('You have fewer coins than the amount you want to gamble!') + + var gamble = await eco.Coinflip(message.author.id, flip, amount).catch(console.error) + message.reply(`You ${gamble.output}! New balance: ${gamble.newbalance}`) + + } + + if (command === 'dice') { + + var roll = args[0] //Should be a number between 1 and 6 + var amount = args[1] //Coins to gamble + + if (!roll || ![1, 2, 3, 4, 5, 6].includes(parseInt(roll))) return message.reply('Specify the roll, it should be a number between 1-6') + if (!amount) return message.reply('Specify the amount you want to gamble!') + + var output = eco.FetchBalance(message.author.id) + if (output.balance < amount) return message.reply('You have fewer coins than the amount you want to gamble!') + + var gamble = await eco.Dice(message.author.id, roll, amount).catch(console.error) + message.reply(`The dice rolled ${gamble.dice}. So you ${gamble.output}! New balance: ${gamble.newbalance}`) + + } + + if (command === 'work') { //I made 2 examples for this command! Both versions will work! + + var output = await eco.Work(message.author.id) + //50% chance to fail and earn nothing. You earn between 1-100 coins. And you get one out of 20 random jobs. + if (output.earned == 0) return message.reply('Awh, you did not do your job well so you earned nothing!') + message.channel.send(`${message.author.username} +You worked as a \` ${output.job} \` and earned :money_with_wings: ${output.earned} +You now own :money_with_wings: ${output.balance}`) + + + var output = await eco.Work(message.author.id, { + failurerate: 30, + money: Math.floor(Math.random() * 500), + jobs: ['cashier', 'shopkeeper', 'stripper', 'manager', 'bartender', 'pornstar'] + }) + //10% chance to fail and earn nothing. You earn between 1-500 coins. And you get one of those 3 random jobs. + if (output.earned == 0) return message.reply('Awh, you did not do your job well so you earned nothing!') + + message.channel.send(`${message.author.username} +You worked as a \` ${output.job} \` and earned :money_with_wings: ${output.earned} +You now own :money_with_wings: ${output.balance}`) + + } + + if (command === 'slots') { + + var amount = args[0] //Coins to gamble + + if (!amount) return message.reply('Specify the amount you want to gamble!') + + var output = await eco.FetchBalance(message.author.id) + if (output.balance < amount) return message.reply('You have fewer coins than the amount you want to gamble!') + + var gamble = await eco.Slots(message.author.id, amount, { + width: 3, + height: 1 + }).catch(console.error) + message.channel.send(gamble.grid)//Grid checks for a 100% match vertical or horizontal. + message.reply(`You ${gamble.output}! New balance: ${gamble.newbalance}`) + + } + +}); + +//Your secret token to log the bot in. (never show this to anyone!) +client.login(config.token) \ No newline at end of file diff --git a/functions.js b/functions.js new file mode 100644 index 0000000..789a914 --- /dev/null +++ b/functions.js @@ -0,0 +1,43 @@ +module.exports = { + getMember: function(message, toFind = '') { + toFind = toFind.toLowerCase(); + + let target = message.guild.members.get(toFind); + + if (!target && message.mentions.members) + target = message.mentions.members.first(); + + if (!target && toFind) { + target = message.guild.members.find(member => { + return member.displayName.toLowerCase().includes(toFind) || + member.user.tag.toLowerCase().includes(toFind) + }); + } + + if (!target) + target = message.member; + + return target; + }, + + formatDate: function(date) { + return new Intl.DateTimeFormat('en-US').format(date) + }, + + promptMessage: async function (message, author, time, validReactions) { + // We put in the time as seconds, with this it's being transfered to MS + time *= 1000; + + // For every emoji in the function parameters, react in the good order. + for (const reaction of validReactions) await message.react(reaction); + + // Only allow reactions from the author, + // and the emoji must be in the array we provided. + const filter = (reaction, user) => validReactions.includes(reaction.emoji.name) && user.id === author.id; + + // And ofcourse, await the reactions + return message + .awaitReactions(filter, { max: 1, time: time}) + .then(collected => collected.first() && collected.first().emoji.name); + } +}; \ No newline at end of file diff --git a/handlers/command.js b/handlers/command.js new file mode 100644 index 0000000..78e79b4 --- /dev/null +++ b/handlers/command.js @@ -0,0 +1,38 @@ +const { readdirSync } = require("fs"); + +const ascii = require("ascii-table"); + +let table = new ascii("Commands"); +table.setHeading("Command", "Load status"); + +console.log("Welcome to [ DoritoBot ] // By https://github.com/Bill716 //") + + //Loads Discord economy module + console.log("-------Loading economy module-------") + const economy = require("../economy/economy.js"); + console.log("-------Loaded economy module-------") + +module.exports = (client) => { + readdirSync("./commands/").forEach(dir => { + const commands = readdirSync(`./commands/${dir}/`).filter(file => file.endsWith(".js")); + + for (let file of commands) { + let pull = require(`../commands/${dir}/${file}`); + + if (pull.name) { + client.commands.set(pull.name, pull); + table.addRow(file, 'Ready'); + } else { + table.addRow(file, `error -> missing a help.name, or help.name is not a string.`); + continue; + } + + if (pull.aliases && Array.isArray(pull.aliases)) pull.aliases.forEach(alias => client.aliases.set(alias, pull.name)); + } + }); + console.log(table.toString()); + console.log("Welcome to [ DoritoBot ] // By https://github.com/Bill716 // ") + + console.log("Logging into Bot User..."); + +} diff --git a/index.js b/index.js new file mode 100644 index 0000000..f986ed4 --- /dev/null +++ b/index.js @@ -0,0 +1,53 @@ +//Modules +const { Client, Collection } = require("discord.js"); +const config = require("./config.json"); +const fs = require("fs"); + +const client = new Client({ +//Stops the bot from mentioning @everyone +disableEveryone: true +}); + +//Command Handler +client.commands = new Collection(); +client.aliases = new Collection(); + +//Command Folder location +client.categories = fs.readdirSync("./commands/"); + +["command"].forEach(handler => { + require(`./handlers/${handler}`)(client); +}); + +//Bot Status +client.on("ready", () => { +console.log(`Bot User ${client.user.username} has been logged in and is ready to use!`); +client.user.setActivity('Naoto vibing | .help', { type: 'WATCHING' }); +}); + +client.on("message", async message => { + //Loads prefix from config.json + const prefix = (config.prefix); + //Makes sure bot wont respond to other bots including itself + if (message.author.bot) return; + //Checks if the command is from a server and not a dm + if (!message.guild) return; + //Checks if the command starts with a prefix + if (!message.content.startsWith(prefix)) return; + //Makes sure bot wont respond to other bots including itself + if (!message.member) message.member = await message.guild.fetchMember(message); + + const args = message.content.slice(prefix.length).trim().split(/ +/g); + const cmd = args.shift().toLowerCase(); + + if (cmd.length === 0) return; + + let command = client.commands.get(cmd); + if (!command) command = client.commands.get(client.aliases.get(cmd)); + + if (command) + command.run(client, message, args); +}); + +//Log into discord using the token in config.json +client.login(config.token); \ No newline at end of file diff --git a/npm-install.bat b/npm-install.bat new file mode 100644 index 0000000..8251163 --- /dev/null +++ b/npm-install.bat @@ -0,0 +1,2 @@ +call npm install +pause \ No newline at end of file diff --git a/npm-update.bat b/npm-update.bat new file mode 100644 index 0000000..81b7d15 --- /dev/null +++ b/npm-update.bat @@ -0,0 +1,3 @@ + +call npm update +pause \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..e60b469 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2626 @@ +{ + "name": "rias-gremory", + "version": "2.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/runtime": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@derhuerst/http-basic": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@derhuerst/http-basic/-/http-basic-8.2.1.tgz", + "integrity": "sha512-Rmn7qQQulw2sxJ8qGfZ7OuqMWuhz8V+L5xnYKMF5cXVcYqmgWqlVEAme90pF7Ya8OVhxVxLmhh0rI2k6t7ITWw==", + "requires": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + } + }, + "@discordjs/collection": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.6.tgz", + "integrity": "sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ==" + }, + "@discordjs/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "@jimp/bmp": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.16.1.tgz", + "integrity": "sha512-iwyNYQeBawrdg/f24x3pQ5rEx+/GwjZcCXd3Kgc+ZUd+Ivia7sIqBsOnDaMZdKCBPlfW364ekexnlOqyVa0NWg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "bmp-js": "^0.1.0" + } + }, + "@jimp/core": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.16.1.tgz", + "integrity": "sha512-la7kQia31V6kQ4q1kI/uLimu8FXx7imWVajDGtwUG8fzePLWDFJyZl0fdIXVCL1JW2nBcRHidUot6jvlRDi2+g==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "exif-parser": "^0.1.12", + "file-type": "^9.0.0", + "load-bmfont": "^1.3.1", + "mkdirp": "^0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" + } + }, + "@jimp/custom": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.16.1.tgz", + "integrity": "sha512-DNUAHNSiUI/j9hmbatD6WN/EBIyeq4AO0frl5ETtt51VN1SvE4t4v83ZA/V6ikxEf3hxLju4tQ5Pc3zmZkN/3A==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.16.1" + } + }, + "@jimp/gif": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.16.1.tgz", + "integrity": "sha512-r/1+GzIW1D5zrP4tNrfW+3y4vqD935WBXSc8X/wm23QTY9aJO9Lw6PEdzpYCEY+SOklIFKaJYUAq/Nvgm/9ryw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "gifwrap": "^0.9.2", + "omggif": "^1.0.9" + } + }, + "@jimp/jpeg": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.16.1.tgz", + "integrity": "sha512-8352zrdlCCLFdZ/J+JjBslDvml+fS3Z8gttdml0We759PnnZGqrnPRhkOEOJbNUlE+dD4ckLeIe6NPxlS/7U+w==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "jpeg-js": "0.4.2" + } + }, + "@jimp/plugin-blit": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.16.1.tgz", + "integrity": "sha512-fKFNARm32RoLSokJ8WZXHHH2CGzz6ire2n1Jh6u+XQLhk9TweT1DcLHIXwQMh8oR12KgjbgsMGvrMVlVknmOAg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-blur": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.16.1.tgz", + "integrity": "sha512-1WhuLGGj9MypFKRcPvmW45ht7nXkOKu+lg3n2VBzIB7r4kKNVchuI59bXaCYQumOLEqVK7JdB4glaDAbCQCLyw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-circle": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.16.1.tgz", + "integrity": "sha512-JK7yi1CIU7/XL8hdahjcbGA3V7c+F+Iw+mhMQhLEi7Q0tCnZ69YJBTamMiNg3fWPVfMuvWJJKOBRVpwNTuaZRg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-color": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.16.1.tgz", + "integrity": "sha512-9yQttBAO5SEFj7S6nJK54f+1BnuBG4c28q+iyzm1JjtnehjqMg6Ljw4gCSDCvoCQ3jBSYHN66pmwTV74SU1B7A==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "tinycolor2": "^1.4.1" + } + }, + "@jimp/plugin-contain": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.16.1.tgz", + "integrity": "sha512-44F3dUIjBDHN+Ym/vEfg+jtjMjAqd2uw9nssN67/n4FdpuZUVs7E7wadKY1RRNuJO+WgcD5aDQcsvurXMETQTg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-cover": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.16.1.tgz", + "integrity": "sha512-YztWCIldBAVo0zxcQXR+a/uk3/TtYnpKU2CanOPJ7baIuDlWPsG+YE4xTsswZZc12H9Kl7CiziEbDtvF9kwA/Q==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-crop": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.16.1.tgz", + "integrity": "sha512-UQdva9oQzCVadkyo3T5Tv2CUZbf0klm2cD4cWMlASuTOYgaGaFHhT9st+kmfvXjKL8q3STkBu/zUPV6PbuV3ew==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-displace": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.16.1.tgz", + "integrity": "sha512-iVAWuz2+G6Heu8gVZksUz+4hQYpR4R0R/RtBzpWEl8ItBe7O6QjORAkhxzg+WdYLL2A/Yd4ekTpvK0/qW8hTVw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-dither": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.16.1.tgz", + "integrity": "sha512-tADKVd+HDC9EhJRUDwMvzBXPz4GLoU6s5P7xkVq46tskExYSptgj5713J5Thj3NMgH9Rsqu22jNg1H/7tr3V9Q==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-fisheye": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.1.tgz", + "integrity": "sha512-BWHnc5hVobviTyIRHhIy9VxI1ACf4CeSuCfURB6JZm87YuyvgQh5aX5UDKtOz/3haMHXBLP61ZBxlNpMD8CG4A==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-flip": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.16.1.tgz", + "integrity": "sha512-KdxTf0zErfZ8DyHkImDTnQBuHby+a5YFdoKI/G3GpBl3qxLBvC+PWkS2F/iN3H7wszP7/TKxTEvWL927pypT0w==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-gaussian": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.1.tgz", + "integrity": "sha512-u9n4wjskh3N1mSqketbL6tVcLU2S5TEaFPR40K6TDv4phPLZALi1Of7reUmYpVm8mBDHt1I6kGhuCJiWvzfGyg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-invert": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.16.1.tgz", + "integrity": "sha512-2DKuyVXANH8WDpW9NG+PYFbehzJfweZszFYyxcaewaPLN0GxvxVLOGOPP1NuUTcHkOdMFbE0nHDuB7f+sYF/2w==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-mask": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.16.1.tgz", + "integrity": "sha512-snfiqHlVuj4bSFS0v96vo2PpqCDMe4JB+O++sMo5jF5mvGcGL6AIeLo8cYqPNpdO6BZpBJ8MY5El0Veckhr39Q==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-normalize": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.16.1.tgz", + "integrity": "sha512-dOQfIOvGLKDKXPU8xXWzaUeB0nvkosHw6Xg1WhS1Z5Q0PazByhaxOQkSKgUryNN/H+X7UdbDvlyh/yHf3ITRaw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-print": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.16.1.tgz", + "integrity": "sha512-ceWgYN40jbN4cWRxixym+csyVymvrryuKBQ+zoIvN5iE6OyS+2d7Mn4zlNgumSczb9GGyZZESIgVcBDA1ezq0Q==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "load-bmfont": "^1.4.0" + } + }, + "@jimp/plugin-resize": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.16.1.tgz", + "integrity": "sha512-u4JBLdRI7dargC04p2Ha24kofQBk3vhaf0q8FwSYgnCRwxfvh2RxvhJZk9H7Q91JZp6wgjz/SjvEAYjGCEgAwQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-rotate": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.16.1.tgz", + "integrity": "sha512-ZUU415gDQ0VjYutmVgAYYxC9Og9ixu2jAGMCU54mSMfuIlmohYfwARQmI7h4QB84M76c9hVLdONWjuo+rip/zg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-scale": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.16.1.tgz", + "integrity": "sha512-jM2QlgThIDIc4rcyughD5O7sOYezxdafg/2Xtd1csfK3z6fba3asxDwthqPZAgitrLgiKBDp6XfzC07Y/CefUw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-shadow": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.16.1.tgz", + "integrity": "sha512-MeD2Is17oKzXLnsphAa1sDstTu6nxscugxAEk3ji0GV1FohCvpHBcec0nAq6/czg4WzqfDts+fcPfC79qWmqrA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugin-threshold": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.16.1.tgz", + "integrity": "sha512-iGW8U/wiCSR0+6syrPioVGoSzQFt4Z91SsCRbgNKTAk7D+XQv6OI78jvvYg4o0c2FOlwGhqz147HZV5utoSLxA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1" + } + }, + "@jimp/plugins": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.16.1.tgz", + "integrity": "sha512-c+lCqa25b+4q6mJZSetlxhMoYuiltyS+ValLzdwK/47+aYsq+kcJNl+TuxIEKf59yr9+5rkbpsPkZHLF/V7FFA==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.16.1", + "@jimp/plugin-blur": "^0.16.1", + "@jimp/plugin-circle": "^0.16.1", + "@jimp/plugin-color": "^0.16.1", + "@jimp/plugin-contain": "^0.16.1", + "@jimp/plugin-cover": "^0.16.1", + "@jimp/plugin-crop": "^0.16.1", + "@jimp/plugin-displace": "^0.16.1", + "@jimp/plugin-dither": "^0.16.1", + "@jimp/plugin-fisheye": "^0.16.1", + "@jimp/plugin-flip": "^0.16.1", + "@jimp/plugin-gaussian": "^0.16.1", + "@jimp/plugin-invert": "^0.16.1", + "@jimp/plugin-mask": "^0.16.1", + "@jimp/plugin-normalize": "^0.16.1", + "@jimp/plugin-print": "^0.16.1", + "@jimp/plugin-resize": "^0.16.1", + "@jimp/plugin-rotate": "^0.16.1", + "@jimp/plugin-scale": "^0.16.1", + "@jimp/plugin-shadow": "^0.16.1", + "@jimp/plugin-threshold": "^0.16.1", + "timm": "^1.6.1" + } + }, + "@jimp/png": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.16.1.tgz", + "integrity": "sha512-iyWoCxEBTW0OUWWn6SveD4LePW89kO7ZOy5sCfYeDM/oTPLpR8iMIGvZpZUz1b8kvzFr27vPst4E5rJhGjwsdw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.16.1", + "pngjs": "^3.3.3" + } + }, + "@jimp/tiff": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.16.1.tgz", + "integrity": "sha512-3K3+xpJS79RmSkAvFMgqY5dhSB+/sxhwTFA9f4AVHUK0oKW+u6r52Z1L0tMXHnpbAdR9EJ+xaAl2D4x19XShkQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "utif": "^2.0.1" + } + }, + "@jimp/types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.16.1.tgz", + "integrity": "sha512-g1w/+NfWqiVW4CaXSJyD28JQqZtm2eyKMWPhBBDCJN9nLCN12/Az0WFF3JUAktzdsEC2KRN2AqB1a2oMZBNgSQ==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.16.1", + "@jimp/gif": "^0.16.1", + "@jimp/jpeg": "^0.16.1", + "@jimp/png": "^0.16.1", + "@jimp/tiff": "^0.16.1", + "timm": "^1.6.1" + } + }, + "@jimp/utils": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.16.1.tgz", + "integrity": "sha512-8fULQjB0x4LzUSiSYG6ZtQl355sZjxbv8r9PPAuYHzS9sGiSHJQavNqK/nKnpDsVkU88/vRGcE7t3nMU0dEnVw==", + "requires": { + "@babel/runtime": "^7.7.2", + "regenerator-runtime": "^0.13.3" + } + }, + "@sindresorhus/is": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.1.tgz", + "integrity": "sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g==" + }, + "@szmarczak/http-timer": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", + "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", + "requires": { + "defer-to-connect": "^2.0.0" + } + }, + "@types/cacheable-request": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", + "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", + "requires": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } + }, + "@types/http-cache-semantics": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", + "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==" + }, + "@types/keyv": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", + "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", + "requires": { + "@types/node": "*" + } + }, + "@types/node": { + "version": "15.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.6.0.tgz", + "integrity": "sha512-gCYSfQpy+LYhOFTKAeE8BkyGqaxmlFxe+n4DKM6DR0wzw/HISUE/hAmkC/KT8Sw5PCJblqg062b3z9gucv3k0A==" + }, + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "requires": { + "@types/node": "*" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "any-base": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", + "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "ascii-table": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/ascii-table/-/ascii-table-0.0.9.tgz", + "integrity": "sha1-BqZgTWpV1L9BqaR9mHLXp42jHnM=" + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" + }, + "axios": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "requires": { + "follow-redirects": "^1.10.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "requires": { + "tweetnacl": "^0.14.3" + }, + "dependencies": { + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + } + } + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "optional": true, + "requires": { + "inherits": "~2.0.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "bmp-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", + "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=" + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "booru": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/booru/-/booru-2.4.0.tgz", + "integrity": "sha512-CYawPyAd4l7JA5tq4HmTbu9xAB146aFyQ2xfhU+lHvg28+fsIP8XD2Al/VY9rgQqdE78EvaR2Lvc1AhbsSdSbA==", + "requires": { + "fast-xml-parser": "^3.17.4", + "node-fetch": "^2.6.1" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==" + }, + "cacheable-request": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", + "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^2.0.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "cheerio": { + "version": "1.0.0-rc.9", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.9.tgz", + "integrity": "sha512-QF6XVdrLONO6DXRF5iaolY+odmhj2CLj+xzNod7INPWMi/x9X4SOylH0S/vaPpX+AUU6t04s34SQNh7DbkuCng==", + "requires": { + "cheerio-select": "^1.4.0", + "dom-serializer": "^1.3.1", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + } + }, + "cheerio-select": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.4.0.tgz", + "integrity": "sha512-sobR3Yqz27L553Qa7cK6rtJlMDbiKPdNywtR95Sj/YgfpLfy0u6CGJuaBKe5YE/vTc23SCRKxWSdlon/w6I/Ew==", + "requires": { + "css-select": "^4.1.2", + "css-what": "^5.0.0", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "cls-bluebird": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-2.1.0.tgz", + "integrity": "sha1-N+8eCAqP+1XC9BZPU28ZGeeWiu4=", + "requires": { + "is-bluebird": "^1.0.2", + "shimmer": "^1.1.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "common-tags": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", + "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "cookiejar": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", + "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cpu-stat": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cpu-stat/-/cpu-stat-2.0.1.tgz", + "integrity": "sha1-UB6NbdLUTO9dhCk5w40YIsB4/Kw=" + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "css-select": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.2.tgz", + "integrity": "sha512-nu5ye2Hg/4ISq4XqdLY2bEatAcLIdt3OYGFc9Tm9n7VSlFBcfRv0gBNksHRgSdUDQGtN3XrZ94ztW+NfzkFSUw==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + } + }, + "css-what": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", + "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==" + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-uri-to-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", + "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==" + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "requires": { + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" + } + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + }, + "discord-economy": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/discord-economy/-/discord-economy-1.2.2.tgz", + "integrity": "sha512-IQQqbdcLsNft52jOClGe39U3nUABalPPa1P1YzUc+75pea82T3t8/foG+WHK+2SticL8NWeVIwgwCNBoyW/Plw==", + "requires": { + "sequelize": "^5.18.0", + "sqlite3": "^4.1.0" + }, + "dependencies": { + "sqlite3": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.2.0.tgz", + "integrity": "sha512-roEOz41hxui2Q7uYnWsjMOTry6TcNUNmp8audCx18gF10P2NknwdpF+E+HKvz/F2NvPKGGBF4NGc+ZPQ+AABwg==", + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.11.0" + } + } + } + }, + "discord-rpc": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/discord-rpc/-/discord-rpc-3.2.0.tgz", + "integrity": "sha512-KJv0EVbGMlr04HoG6f5b3wD7X9kSHzQ2Ed2qfHSDvYJ1MkE8RbCQmMcQQrSvAxpfsqZgUjB/bsfi/mjyicCH+A==", + "requires": { + "node-fetch": "^2.6.1", + "ws": "^7.3.1" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + } + } + }, + "discord.js": { + "version": "12.5.3", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz", + "integrity": "sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw==", + "requires": { + "@discordjs/collection": "^0.1.6", + "@discordjs/form-data": "^3.0.1", + "abort-controller": "^3.0.0", + "node-fetch": "^2.6.1", + "prism-media": "^1.2.9", + "setimmediate": "^1.0.5", + "tweetnacl": "^1.0.3", + "ws": "^7.4.4" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + } + } + }, + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + }, + "domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", + "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dottie": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", + "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==" + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "duration-format": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duration-format/-/duration-format-0.0.2.tgz", + "integrity": "sha1-6kraLyTQE1pZYTQSyIP5GRVjWL4=" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, + "eventemitter3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=" + }, + "exif-parser": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", + "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=" + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + }, + "fast-xml-parser": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz", + "integrity": "sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==" + }, + "fetch-blob": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.4.tgz", + "integrity": "sha512-Eq5Xv5+VlSrYWEqKrusxY1C3Hm/hjeAsCGVG3ft7pZahlUAChpGZT/Ms1WmSLnEAisEXszjzu/s+ce6HZB2VHA==", + "requires": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + } + }, + "ffmpeg-static": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ffmpeg-static/-/ffmpeg-static-4.3.0.tgz", + "integrity": "sha512-w/tXYGlOSeAkPHjypjzylaChLrG5wRzHFyB47KFRDsGyBxUJJWiq9I/39/e6r9Y4aY1gzpejTLg5Aa0aqb0XXA==", + "requires": { + "@derhuerst/http-basic": "^8.2.0", + "env-paths": "^2.2.0", + "https-proxy-agent": "^5.0.0", + "progress": "^2.0.3" + } + }, + "figlet": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.0.tgz", + "integrity": "sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww==" + }, + "file-type": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", + "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==" + }, + "follow-redirects": { + "version": "1.14.8", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", + "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "requires": { + "fetch-blob": "^3.1.2" + } + }, + "formidable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", + "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==" + }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "optional": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "gifwrap": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.9.2.tgz", + "integrity": "sha512-fcIswrPaiCDAyO8xnWvHSZdWChjKXUanKKpAiWWJ/UTkEi/aYKn5+90e7DE820zbEaVR9CE2y4z9bzhQijZ0BA==", + "requires": { + "image-q": "^1.1.1", + "omggif": "^1.0.10" + } + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "got": { + "version": "11.8.2", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz", + "integrity": "sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==", + "requires": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.1", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "optional": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "requires": { + "@types/node": "^10.0.3" + }, + "dependencies": { + "@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore-walk": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "requires": { + "minimatch": "^3.0.4" + } + }, + "image-q": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/image-q/-/image-q-1.1.1.tgz", + "integrity": "sha1-/IQJlmRGC5DKhi2TALa/u7+/gFY=" + }, + "inflection": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", + "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "is-bluebird": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bluebird/-/is-bluebird-1.0.2.tgz", + "integrity": "sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" + }, + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "optional": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jimp": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.16.1.tgz", + "integrity": "sha512-+EKVxbR36Td7Hfd23wKGIeEyHbxShZDX6L8uJkgVW3ESA9GiTEPK08tG1XI2r/0w5Ch0HyJF5kPqF9K7EmGjaw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.16.1", + "@jimp/plugins": "^0.16.1", + "@jimp/types": "^0.16.1", + "regenerator-runtime": "^0.13.3" + } + }, + "jpeg-js": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.2.tgz", + "integrity": "sha512-+az2gi/hvex7eLTMTlbRLOhH6P6WFdk2ITI8HJsaH2VqYO0I594zXSYEP+tf4FW+8Cy68ScDXoAsQdyQanv3sw==" + }, + "js2xmlparser": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.1.tgz", + "integrity": "sha512-KrPTolcw6RocpYjdC7pL7v62e55q7qOMHvLX1UCLc5AAS8qeJ6nukarEJAF2KL2PZxlbGueEbINqZR2bDe/gUw==", + "requires": { + "xmlcreate": "^2.0.3" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "keyv": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", + "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==", + "requires": { + "json-buffer": "3.0.1" + } + }, + "load-bmfont": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", + "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", + "requires": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "mal-scraper": { + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/mal-scraper/-/mal-scraper-2.11.3.tgz", + "integrity": "sha512-OzWDPet6e0f7ijthlNoYEOSJH8ggVvJzm5aUXA7BACtL9np+7acQpnHou90vShOwCx4VR4ofkut5RO/oD2wOAg==", + "requires": { + "axios": "^0.21.1", + "cheerio": "^1.0.0-rc.3", + "js2xmlparser": "^4.0.0", + "match-sorter": "^4.0.2", + "request": "^2.88.0", + "xml2js": "^0.4.22" + } + }, + "match-sorter": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-4.2.1.tgz", + "integrity": "sha512-s+3h9TiZU9U1pWhIERHf8/f4LmBN6IXaRgo2CI17+XGByGS1GvG5VvXK9pcGyCjGe3WM3mSYRC3ipGrd5UEVgw==", + "requires": { + "@babel/runtime": "^7.10.5", + "remove-accents": "0.4.2" + } + }, + "math-expression-evaluator": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.3.7.tgz", + "integrity": "sha512-nrbaifCl42w37hYd6oRLvoymFK42tWB+WQTMFtksDGQMi5GvlJwnz/CsS30FFAISFLtX+A0csJ0xLiuuyyec7w==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==" + }, + "mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "requires": { + "mime-db": "1.47.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "requires": { + "dom-walk": "^0.1.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "moment-duration-format": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/moment-duration-format/-/moment-duration-format-2.3.2.tgz", + "integrity": "sha512-cBMXjSW+fjOb4tyaVHuaVE/A5TqkukDWiOfxxAjY+PEqmmBQlLwn+8OzwPiG3brouXKY5Un4pBjAeB6UToXHaQ==" + }, + "moment-timezone": { + "version": "0.5.33", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz", + "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==", + "requires": { + "moment": ">= 2.9.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + }, + "needle": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", + "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "nekos.life": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/nekos.life/-/nekos.life-2.0.7.tgz", + "integrity": "sha512-kL5sYOqaDTIdVH40YVrtWQPX60bGK3Ri/j2jnHugZ86lxc4xIytUmGelspFwKAs4TOHDSZh4jiJGGL8dQ55HNA==" + }, + "node-addon-api": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.0.tgz", + "integrity": "sha512-kcwSAWhPi4+QzAtsL2+2s/awvDo2GKLsvMCwNRxb5BUshteXU8U97NCyvQDsGKs/m0He9WcG4YWew/BnuLx++w==" + }, + "node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" + }, + "node-fetch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.1.1.tgz", + "integrity": "sha512-SMk+vKgU77PYotRdWzqZGTZeuFKlsJ0hu4KPviQKkfY+N3vn2MIzr0rvpnYpR8MtB3IEuhlEcuOLbGvLRlA+yg==", + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.3", + "formdata-polyfill": "^4.0.10" + } + }, + "node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "optional": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "optional": true, + "requires": { + "abbrev": "1" + } + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "optional": true + }, + "tar": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "optional": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + } + } + } + }, + "node-osu": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-osu/-/node-osu-2.2.1.tgz", + "integrity": "sha512-SM9kj+7q7j/Y5nkMSRchQi9g2RxgDQ8JjC/zds7VyzUWQPokGQW3KuiskPLHwITn3RW3V98k7Y3RB3zkLIX9jA==", + "requires": { + "superagent": "^5.2.1" + } + }, + "node-pre-gyp": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", + "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" + }, + "npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" + }, + "npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "requires": { + "boolbase": "^1.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-inspect": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==" + }, + "omggif": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", + "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "parse-bmfont-ascii": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", + "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=" + }, + "parse-bmfont-binary": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", + "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=" + }, + "parse-bmfont-xml": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", + "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", + "requires": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.4.5" + } + }, + "parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=" + }, + "parse-headers": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", + "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "requires": { + "parse5": "^6.0.1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "phin": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", + "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" + }, + "pixelmatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", + "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", + "requires": { + "pngjs": "^3.0.0" + } + }, + "pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "prism-media": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.9.tgz", + "integrity": "sha512-UHCYuqHipbTR1ZsXr5eg4JUmHER8Ss4YEb9Azn+9zzJ7/jlTtD1h0lc4g6tNx3eMlB8Mp6bfll0LPMAV4R6r3Q==" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" + }, + "random-puppy": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/random-puppy/-/random-puppy-1.1.0.tgz", + "integrity": "sha1-GtqjTA83bVArWdb9gifqYaRUmTs=", + "requires": { + "eventemitter3": "^1.2.0", + "got": "^6.3.0", + "unique-random-array": "^1.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + } + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "remove-accents": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", + "integrity": "sha1-CkPTqq4egNuRngeuJUsoXZ4ce7U=" + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "requires": { + "lodash": "^4.17.19" + } + }, + "request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "requires": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "resolve-alpn": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.1.2.tgz", + "integrity": "sha512-8OyfzhAtA32LVUsJSke3auIyINcwdh5l3cvYKdKO0nvsYSKuiLfTM5i78PJswFPT8y6cPW+L1v6/hE95chcpDA==" + }, + "responselike": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "requires": { + "lowercase-keys": "^2.0.0" + } + }, + "retry-as-promised": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-3.2.0.tgz", + "integrity": "sha512-CybGs60B7oYU/qSQ6kuaFmRd9sTZ6oXSc0toqePvV74Ac6/IFZSI1ReFQmtCN+uvW1Mtqdwpvt/LGOiCBAY2Mg==", + "requires": { + "any-promise": "^1.3.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "sequelize": { + "version": "5.22.4", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.22.4.tgz", + "integrity": "sha512-xFQQ38HPg7EyDRDA+NdzMSRWbo9m6Z/RxpjnkBl3ggyQG+jRrup48x0jaw4Ox42h56wFnXOBC2NZOkTJfZeWCw==", + "requires": { + "bluebird": "^3.5.0", + "cls-bluebird": "^2.1.0", + "debug": "^4.1.1", + "dottie": "^2.0.0", + "inflection": "1.12.0", + "lodash": "^4.17.15", + "moment": "^2.24.0", + "moment-timezone": "^0.5.21", + "retry-as-promised": "^3.2.0", + "semver": "^6.3.0", + "sequelize-pool": "^2.3.0", + "toposort-class": "^1.0.1", + "uuid": "^3.3.3", + "validator": "^10.11.0", + "wkx": "^0.4.8" + } + }, + "sequelize-pool": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-2.3.0.tgz", + "integrity": "sha512-Ibz08vnXvkZ8LJTiUOxRcj1Ckdn7qafNZ2t59jYHMX1VIebTAOYefWdRYFt6z6+hy52WGthAHAoLc9hvk3onqA==" + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "snekfetch": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/snekfetch/-/snekfetch-3.6.4.tgz", + "integrity": "sha512-NjxjITIj04Ffqid5lqr7XdgwM7X61c/Dns073Ly170bPQHLm6jkmelye/eglS++1nfTWktpP6Y2bFXjdPlQqdw==" + }, + "sqlite3": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.2.tgz", + "integrity": "sha512-1SdTNo+BVU211Xj1csWa8lV6KM0CtucDwRyA0VHl91wEH1Mgh7RxUpI4rVvG7OhHrzCSGaVyW5g8vKvlrk9DJA==", + "requires": { + "node-addon-api": "^3.0.0", + "node-gyp": "3.x", + "node-pre-gyp": "^0.11.0" + } + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "dependencies": { + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + } + } + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "superagent": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-5.3.1.tgz", + "integrity": "sha512-wjJ/MoTid2/RuGCOFtlacyGNxN9QLMgcpYLDQlWFIhhdJ93kNscFonGvrpAHSCVjRVj++DGCglocF7Aej1KHvQ==", + "requires": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.2", + "debug": "^4.1.1", + "fast-safe-stringify": "^2.0.7", + "form-data": "^3.0.0", + "formidable": "^1.2.2", + "methods": "^1.1.2", + "mime": "^2.4.6", + "qs": "^6.9.4", + "readable-stream": "^3.6.0", + "semver": "^7.3.2" + }, + "dependencies": { + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" + }, + "qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "timm": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", + "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==" + }, + "tinycolor2": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==" + }, + "toposort-class": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", + "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "unique-random": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-random/-/unique-random-1.0.0.tgz", + "integrity": "sha1-zj4iTIJCzTOg53sNcYDXfmti0MQ=" + }, + "unique-random-array": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unique-random-array/-/unique-random-array-1.0.1.tgz", + "integrity": "sha512-z9J/SV8CUIhIRROcHe9YUoAT6XthUJt0oUyLGgobiXJprDP9O9dsErNevvSaAv5BkhwFEVPn6nIEOKeNE6Ck1Q==", + "requires": { + "unique-random": "^1.0.0" + } + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=" + }, + "urban.js": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/urban.js/-/urban.js-2.4.3.tgz", + "integrity": "sha512-z0/pIIxQitwkHW4hpTFhOK56wNZVgtTHv2doJlO5mNkh1D6lAMOw9363Sz4la1IPKoiT3sYSBG8HiLZBs9mhdA==", + "requires": { + "snekfetch": "^3.5.2" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "^1.0.1" + } + }, + "utif": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", + "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", + "requires": { + "pako": "^1.0.5" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "validator": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", + "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "web-streams-polyfill": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz", + "integrity": "sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "optional": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wkx": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.8.tgz", + "integrity": "sha512-ikPXMM9IR/gy/LwiOSqWlSL3X/J5uk9EO2hHNRXS41eTLXaUFEVw9fn/593jW/tE5tedNg8YjT5HkCa4FqQZyQ==", + "requires": { + "@types/node": "*" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" + }, + "xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "requires": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "xml-parse-from-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", + "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=" + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, + "xmlcreate": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.3.tgz", + "integrity": "sha512-HgS+X6zAztGa9zIK3Y3LXuJes33Lz9x+YyTxgrkIdabu2vqcGOWwdfCpf1hWLRrd553wd4QCDf6BBO6FfdsRiQ==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..e59b977 --- /dev/null +++ b/package.json @@ -0,0 +1,73 @@ +{ + "name": "rias-gremory", + "version": "2.0.0", + "description": "A multipurpose Discord bot with many NSFW and fun commands as well as utility, moderation SFW commands and more.", + "main": "index.js", + "dependencies": { + "ascii-table": "^0.0.9", + "booru": "^2.4.0", + "common-tags": "^1.8.0", + "cpu-stat": "^2.0.1", + "discord-economy": "^1.2.2", + "discord-rpc": "^3.2.0", + "discord.js": "^12.5.3", + "duration-format": "^0.0.2", + "ffmpeg-static": "^4.3.0", + "figlet": "^1.5.0", + "got": "^11.8.2", + "jimp": "^0.16.1", + "mal-scraper": "^2.11.3", + "math-expression-evaluator": "^1.3.7", + "moment": "^2.29.1", + "moment-duration-format": "^2.3.2", + "nekos.life": "^2.0.7", + "node-fetch": "^3.1.1", + "node-osu": "^2.2.1", + "random-puppy": "^1.1.0", + "request-promise-native": "^1.0.9", + "sqlite3": "^5.0.2", + "urban.js": "^2.4.3", + "ws": "^7.4.6" + }, + "devDependencies": {}, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/Bill716/Rias-Gremory.git" + }, + "keywords": [ + "doritos", + "dorito", + "discord", + "discord-js", + "discord.js", + "discord-api", + "discord-music-bot", + "discord-bot", + "discordbot", + "youtube", + "music", + "hentai", + "nsfw", + "hentai-bot", + "hentai-sites", + "booru", + "booru-websites", + "music-bot", + "nodejs", + "npm", + "node-js", + "porn", + "multipurpose", + "gaming", + "utility" + ], + "author": "Aaronidk", + "license": "ISC", + "bugs": { + "url": "https://github.com/Bill716/Rias-Gremory/issues" + }, + "homepage": "https://github.com/Bill716/Rias-Gremory#readme" +} diff --git a/run.bat b/run.bat new file mode 100644 index 0000000..6e082fb --- /dev/null +++ b/run.bat @@ -0,0 +1,3 @@ + +node index.js +pause \ No newline at end of file diff --git a/utils.js b/utils.js new file mode 100644 index 0000000..7f74770 --- /dev/null +++ b/utils.js @@ -0,0 +1,184 @@ +const client = require('./index'); +const MessageEmbed = require('discord.js').MessageEmbed; +const got = require('got'); +const url = require('url'); + +exports.randomSelection = (choices) => { + return choices[Math.floor(Math.random() * choices.length)]; +}; + +exports.randomColor = () => { + return [Math.floor(Math.random() * 256), Math.floor(Math.random() * 256), Math.floor(Math.random() * 256)]; +}; + +exports.formatNumber = (number) => { + if (isNaN(number)) return NaN; + let input = `${number}`; + if (number < 1e4) return input; + let out = []; + while (input.length > 3) { + out.push(input.substr(input.length - 3, input.length)); + input = input.substr(0, input.length - 3); + } + return `${input},${out.reverse().join(',')}`; +}; + +const randomFooter = () => { + return exports.randomSelection([ + '420 weed', + 'hi', + ]); +}; + +exports.embed = (title, description = '', fields = [], options = {}) => { + let url = options.url || ''; + let color = options.color || this.randomColor(); + + if (options.inline) { + if (fields.length % 3 === 2) { + fields.push({ name: '\u200b', value: '\u200b' }); + } + fields.forEach(obj => { + obj.inline = true; + }); + } + + return new MessageEmbed({ fields, video: options.video || url }) + .setTitle(title) + .setColor(color) + .setDescription(description) + .setURL(url) + .setImage(options.image) + .setTimestamp(options.timestamp ? timestampToDate(options.timestamp) : null) + + // .setFooter(randomFooter()) + + .setAuthor(options.author === undefined ? '' : options.author) + .setThumbnail(options.thumbnail); +}; + +function timestampToDate(timestamp) { + if (timestamp === true) { + return new Date(); + } + if (typeof timestamp === 'number') { + return new Date(timestamp); + } + return timestamp; +} + +exports.parseArgs = (args, options) => { + if (!options) + return args; + if (typeof options === 'string') + options = [options]; + + let optionValues = {}; + + let i; + for (i = 0; i < args.length; i++) { + let arg = args[i]; + if (!arg.startsWith('-')) { + break; + } + + let label = arg.substr(1); + + if (options.indexOf(label + ':') > -1) { + let leftover = args.slice(i + 1).join(' '); + let matches = leftover.match(/^"(.+?)"/); + if (matches) { + optionValues[label] = matches[1]; + i += matches[0].split(' ').length; + } else { + i++; + optionValues[label] = args[i]; + } + } else if (options.indexOf(label) > -1) { + optionValues[label] = true; + } else { + break; + } + } + + return { + options: optionValues, + leftover: args.slice(i) + }; +}; + +exports.multiSend = (channel, messages, delay) => { + delay = delay || 100; + messages.forEach((m, i) => { + setTimeout(() => { + channel.send(m); + }, delay * i); + }); +}; + +exports.sendLarge = (channel, largeMessage, options = {}) => { + let message = largeMessage; + let messages = []; + let prefix = options.prefix || ''; + let suffix = options.suffix || ''; + + let max = 2000 - prefix.length - suffix.length; + + while (message.length >= max) { + let part = message.substr(0, max); + let cutTo = max; + if (options.cutOn) { + /* + Prevent infinite loop where lastIndexOf(cutOn) is the first char in `part` + Later, we will correct by +1 since we did lastIndexOf on all but the first char in `part` + We *dont* correct immediately, since if cutOn is not found, cutTo will be -1, and we dont want that + to become 0 + */ + cutTo = part.slice(1).lastIndexOf(options.cutOn); + + // Prevent infinite loop when cutOn isnt found in message + if (cutTo === -1) { + cutTo = max; + } else { + // Correction necessary from a few lines above + cutTo += 1; + + if (options.cutAfter) { + cutTo += 1; + } + part = part.substr(0, cutTo); + } + } + messages.push(prefix + part + suffix); + message = message.substr(cutTo); + } + + if (message.length > 1) { + messages.push(prefix + message + suffix); + } + + this.multiSend(channel, messages, options.delay); +}; + +exports.now = () => { + let now = process.hrtime(); + return now[0] * 1e3 + now[1] / 1e6; +}; + +exports.playAnimation = (msg, delay, list) => { + if (list.length < 1) + return; + + let next = list.shift(); + let start = this.now(); + + msg.channel.send(next).then(() => { + let elapsed = this.now() - start; + + setTimeout(() => { + this.playAnimation(msg, delay, list); + }, Math.max(50, delay - elapsed)); + }); +}; + +exports.quoteRegex = (input) => `${input}`.replace(/[.?*+^$[\]\\(){}|-]/g, '\\$&');