From cc3bcfa137fcab337e509b380784fbe7ed6bb240 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Fri, 3 Jan 2020 14:44:02 -0500 Subject: added eslint --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'package.json') diff --git a/package.json b/package.json index 25c377a..d5fea3a 100644 --- a/package.json +++ b/package.json @@ -31,5 +31,7 @@ "readline": "^1.3.0", "ytdl-core": "^0.20.4" }, - "devDependencies": {} + "devDependencies": { + "eslint": "^6.8.0" + } } -- cgit v1.2.3 From 0f2233a529d80b242732bd40ebaecf3fbb56cecf Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Sun, 5 Jan 2020 14:19:48 -0500 Subject: removed eslint and fixes --- .eslintrc.js | 17 ----------------- CONTRIBUTING.md | 2 +- bot_discord.js | 3 ++- commands/invite.js | 2 +- package.json | 4 ++-- 5 files changed, 6 insertions(+), 22 deletions(-) delete mode 100644 .eslintrc.js (limited to 'package.json') diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index edadc67..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = { - "env": { - "browser": true, - "es6": true - }, - "extends": "eslint:recommended", - "globals": { - "Atomics": "readonly", - "SharedArrayBuffer": "readonly" - }, - "parserOptions": { - "ecmaVersion": 2018, - "sourceType": "module" - }, - "rules": { - } -}; \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 576f325..473704a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -41,7 +41,7 @@ exports.help = { # Testing the bot First get NodeJS then clone this repo then do `npm install` or `yarn install` in the AleeBot folder. Now add a file called `tokens.json` then copy and paste this follow code. -``` +```json { "abtoken": "token" } diff --git a/bot_discord.js b/bot_discord.js index e8d18e1..4a9b109 100644 --- a/bot_discord.js +++ b/bot_discord.js @@ -210,7 +210,7 @@ client.on('ready', () => { }); }, 200000); client.user.setStatus('online'); - //client.channels.find('id', '606602551634296968').send("**AleeBot Status:** AleeBot has started."); + client.channels.find('id', '606602551634296968').send("**AleeBot Status:** AleeBot has started."); rl.prompt(); }); @@ -324,4 +324,5 @@ client.on('reconnecting', function() { client.on('disconnect', function() { log("[X] AleeBot has disconnected from Discord and will not attempt to reconnect.".red); console.log("At this point, you'll need to restart AleeBot.".red); + process.exit(0); }); diff --git a/commands/invite.js b/commands/invite.js index b0d3ec3..38094b4 100644 --- a/commands/invite.js +++ b/commands/invite.js @@ -25,7 +25,7 @@ module.exports.run = async (client, message) => { title: "Invite Command", fields: [{ name: "Invite AleeBot", - value: "[Invite AleeBot to your server.](https://discordapp.com/api/oauth2/authorize?client_id=282547024547545109&permissions=2080375863&scope=bot)" + value: "[Invite AleeBot to your server.](https://top.gg/bot/282547024547545109)" }, { name: "Join the Alee Productions Community", diff --git a/package.json b/package.json index d5fea3a..9631ca5 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "src/bot.js", "scripts": { "start": "node bot_discord.js", - "dev": "node bot_discord.js --beta" + "dev": "nodemon bot_discord.js --beta" }, "repository": { "type": "git", @@ -32,6 +32,6 @@ "ytdl-core": "^0.20.4" }, "devDependencies": { - "eslint": "^6.8.0" + "nodemon": "^2.0.2" } } -- cgit v1.2.3 From fc76d7c73ae9ffec6be86fc7d9d9e8c9a14605ab Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Fri, 22 May 2020 20:36:26 -0400 Subject: Added more ALP exclusive logs & cleaning up code --- To be worked on/leave.js | 39 ++- To be worked on/play.js | 159 +++++---- To be worked on/queue.js | 48 ++- To be worked on/skip.js | 60 ++-- bot_discord.js | 790 ++++++++++++++++++++++++--------------------- commands/addquote.js | 46 +-- commands/ask.js | 63 ++-- commands/avatarurl.js | 10 +- commands/balance.js | 59 ++-- commands/ban.js | 32 +- commands/eval.js | 98 +++--- commands/git.js | 86 ++--- commands/help.js | 140 ++++---- commands/info.js | 47 ++- commands/interrogate.js | 39 ++- commands/invite.js | 62 ++-- commands/jail.js | 39 ++- commands/kick.js | 34 +- commands/leaveguild.js | 37 ++- commands/pay.js | 84 ++--- commands/ping.js | 66 ++-- commands/poweroff.js | 49 ++- commands/purge.js | 41 ++- commands/quote.js | 37 ++- commands/say.js | 39 ++- commands/setprefix.js | 59 ++-- commands/suggest.js | 53 ++- commands/suggestfeature.js | 1 + commands/uptime.js | 88 +++-- commands/userinfo.js | 50 ++- commands/vtquote.js | 95 +++--- deprecated/buy.js | 49 ++- deprecated/daily.js | 63 ++-- package.json | 1 + 34 files changed, 1342 insertions(+), 1321 deletions(-) (limited to 'package.json') diff --git a/To be worked on/leave.js b/To be worked on/leave.js index e1584f0..6712a8d 100644 --- a/To be worked on/leave.js +++ b/To be worked on/leave.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * Leave: Command for AleeBot * Copyright (C) 2018 AleeCorp * @@ -15,29 +15,28 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message, args) => { - if (!message.member.voiceChannel) return message.reply('You need a voice channel to perform this action.'); + if (!message.member.voiceChannel) return message.reply('You need a voice channel to perform this action.'); - if (!message.guild.me.voiceChannel) return message.reply('Error: The bot isn\'t connected to a voice channel.') + if (!message.guild.me.voiceChannel) return message.reply('Error: The bot isn\'t connected to a voice channel.'); - if (message.guild.me.voiceChannelID !== message.member.voiceChannelID) return message.reply('Error: You aren\'t connected in the same voice channel as the bot...'); + if (message.guild.me.voiceChannelID !== message.member.voiceChannelID) return message.reply('Error: You aren\'t connected in the same voice channel as the bot...'); - message.guild.me.voiceChannel.leave(); + message.guild.me.voiceChannel.leave(); - message.channel.send("Leaving channel...") + message.channel.send('Leaving channel...'); +}; - }; - - exports.conf = { - aliases: [], - guildOnly: false, - }; - exports.help = { - name: 'leave', - description: 'Leaves voice chat.', - usage: 'leave', - category: '- Music Commands', - }; \ No newline at end of file +exports.conf = { + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'leave', + description: 'Leaves voice chat.', + usage: 'leave', + category: '- Music Commands', +}; diff --git a/To be worked on/play.js b/To be worked on/play.js index ddf80db..d885ee2 100644 --- a/To be worked on/play.js +++ b/To be worked on/play.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * Play: Command for AleeBot * Copyright (C) 2018 AleeCorp * @@ -15,108 +15,101 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message, args, ops) => { - const ytdl = require('ytdl-core'); + const ytdl = require('ytdl-core'); - if (!message.member.voiceChannel) return message.reply('Please connect to a voice channel...'); + if (!message.member.voiceChannel) return message.reply('Please connect to a voice channel...'); - if (!args[0]) return message.reply('Please input a url.'); + if (!args[0]) return message.reply('Please input a url.'); - let vaildate = await ytdl.validateURL(args[0]); + const vaildate = await ytdl.validateURL(args[0]); - if (!vaildate) return message.reply('Please input a **valid** url.'); + if (!vaildate) return message.reply('Please input a **valid** url.'); - let info = await ytdl.getInfo(args[0]); + const info = await ytdl.getInfo(args[0]); - let data = ops.active.get(message.guild.id) || {}; + const data = ops.active.get(message.guild.id) || {}; - if (!data.connection) data.connection = await message.member.voiceChannel.join(); - if (!data.queue) data.queue = []; - data.guildID = message.guild.id; + if (!data.connection) data.connection = await message.member.voiceChannel.join(); + if (!data.queue) data.queue = []; + data.guildID = message.guild.id; - data.queue.push({ - songTitle: info.title, - requester: message.author.tag, - url: args[0], - announceChannel: message.channel.id - }); - if (!data.dispatcher) play(client, ops, data); - else { - const { RichEmbed } = require('discord.js'); - const embed = new RichEmbed() - .setTitle('This music has been added to the queue!') - .setAuthor(info.title, client.user.avatarURL) + data.queue.push({ + songTitle: info.title, + requester: message.author.tag, + url: args[0], + announceChannel: message.channel.id, + }); + if (!data.dispatcher) play(client, ops, data); + else { + const {RichEmbed} = require('discord.js'); + const embed = new RichEmbed() + .setTitle('This music has been added to the queue!') + .setAuthor(info.title, client.user.avatarURL) + .setColor(0x00afff) + .setTimestamp() + .addField('Title', info.title) + .addField('Requested by:', message.author.tag) + .setFooter('AleeBot Music Player'); + + message.channel.send({embed}); + } + + ops.active.set(message.guild.id, data); +}; + +async function play(client, ops, data) { + const ytdl = require('ytdl-core'); + const {RichEmbed} = require('discord.js'); + const embed = new RichEmbed() + .setTitle('Now playing!') + .setAuthor(data.queue[0].songTitle, client.user.avatarURL) .setColor(0x00afff) .setTimestamp() - .addField('Title', info.title) - .addField('Requested by:', message.author.tag) + .addField('Title', data.queue[0].songTitle) + .addField('Requested by:', data.queue[0].requester) + // .addField('Link', info.url) + // .addField('Duration', time) .setFooter('AleeBot Music Player'); - - message.channel.send({embed}) - } - - ops.active.set(message.guild.id, data); - - }; - - async function play(client, ops, data) { - const ytdl = require('ytdl-core'); - const { RichEmbed } = require('discord.js'); - const embed = new RichEmbed() - .setTitle('Now playing!') - .setAuthor(data.queue[0].songTitle, client.user.avatarURL) - .setColor(0x00afff) - .setTimestamp() - .addField('Title', data.queue[0].songTitle) - .addField('Requested by:', data.queue[0].requester) - // .addField('Link', info.url) - // .addField('Duration', time) - .setFooter('AleeBot Music Player'); - - client.channels.get(data.queue[0].announceChannel).send({embed}) - - data.dispatcher = await data.connection.playStream(ytdl(data.queue[0].url, { filter: 'audioonly'})); - data.dispatcher.guildID = data.guildID; - - data.dispatcher.once('finish', function () { - finish(client, ops, this); - }); - - }; - - function finish(client, ops, dispatcher) { - let fetched = ops.active.get(dispatcher.guildID); + client.channels.get(data.queue[0].announceChannel).send({embed}); - fetched.queue.shift(); + data.dispatcher = await data.connection.playStream(ytdl(data.queue[0].url, {filter: 'audioonly'})); + data.dispatcher.guildID = data.guildID; - if (fetched.queue.length > 0) { + data.dispatcher.once('finish', function() { + finish(client, ops, this); + }); +}; - ops.active.set(dispatcher.guildID, fetched); +function finish(client, ops, dispatcher) { + const fetched = ops.active.get(dispatcher.guildID); - play(client, ops, fetched); + fetched.queue.shift(); - } else { - ops.active.delete(dispatcher.guildID); + if (fetched.queue.length > 0) { + ops.active.set(dispatcher.guildID, fetched); - let vc = client.guild.get(dispatcher.guildID).me.voiceChannel; + play(client, ops, fetched); + } else { + ops.active.delete(dispatcher.guildID); - if (vc) vc.leave(); + const vc = client.guild.get(dispatcher.guildID).me.voiceChannel; - } + if (vc) vc.leave(); + } +} - } - - exports.conf = { - aliases: [], - guildOnly: false, - }; - exports.help = { - name: 'play', - description: 'Plays music.', - usage: 'play [url]', - category: '- Music Commands', - }; \ No newline at end of file +exports.conf = { + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'play', + description: 'Plays music.', + usage: 'play [url]', + category: '- Music Commands', +}; diff --git a/To be worked on/queue.js b/To be worked on/queue.js index 77d86b7..e1ef7c6 100644 --- a/To be worked on/queue.js +++ b/To be worked on/queue.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * Queue: Command for AleeBot * Copyright (C) 2018 AleeCorp * @@ -15,35 +15,33 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message, args, ops) => { - - let fetched = ops.active.get(message.guild.id); + const fetched = ops.active.get(message.guild.id); - if (!fetched) return message.reply('Currently, there isn\'t any music playing in this guild.'); + if (!fetched) return message.reply('Currently, there isn\'t any music playing in this guild.'); - let queue = fetched.queue - let nowPlaying = queue[0]; + const queue = fetched.queue; + const nowPlaying = queue[0]; - let resp = `__**Now Playing**__\n**${nowPlaying.songTitle}** -- **Requested By:** *${nowPlaying.requester}*\n\n__**Queue**__\n`; + let resp = `__**Now Playing**__\n**${nowPlaying.songTitle}** -- **Requested By:** *${nowPlaying.requester}*\n\n__**Queue**__\n`; - for (var i = 1; i < queue.length; i++) { - resp += `${i}. **${queue[i].songTitle}** -- **Requested By:** *${queue[i].requester}*\n` - } + for (let i = 1; i < queue.length; i++) { + resp += `${i}. **${queue[i].songTitle}** -- **Requested By:** *${queue[i].requester}*\n`; + } - message.channel.send(resp); + message.channel.send(resp); +}; - }; - - exports.conf = { - aliases: [], - guildOnly: false, - }; - exports.help = { - name: 'queue', - description: 'Checks what music is in queue.', - usage: 'queue', - category: '- Music Commands', - }; \ No newline at end of file +exports.conf = { + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'queue', + description: 'Checks what music is in queue.', + usage: 'queue', + category: '- Music Commands', +}; diff --git a/To be worked on/skip.js b/To be worked on/skip.js index 5a6d2b7..44880bd 100644 --- a/To be worked on/skip.js +++ b/To be worked on/skip.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * Skip: Command for AleeBot * Copyright (C) 2018 AleeCorp * @@ -15,48 +15,44 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message, args, ops) => { + const fetched = ops.active.get(message.guild.id); - let fetched = ops.active.get(message.guild.id); - - if (!fetched) return message.reply('Currently, there isn\'t any music playing in this guild.'); - - if (message.member.voiceChannel !== message.guild.me.voiceChannel) return message.reply('Sorry, you are currently not in the same channel as the bot.') - - let userCount = message.member.voiceChannel.members.size; + if (!fetched) return message.reply('Currently, there isn\'t any music playing in this guild.'); - let required = Math.ceil(userCount/2); + if (message.member.voiceChannel !== message.guild.me.voiceChannel) return message.reply('Sorry, you are currently not in the same channel as the bot.'); - if (!fetched.queue[0].voteSkips) fetched.queue[0].voteSkips = []; + const userCount = message.member.voiceChannel.members.size; - if (fetched.queue[0].voteSkips.includes(message.member.id)) return message.reply(`Sorry, you have already voted to skip! ${fetched.queue[0].voteSkips.length}/${required} required.`) + const required = Math.ceil(userCount/2); - fetched.queue[0].voteSkips.push(message.member.id); + if (!fetched.queue[0].voteSkips) fetched.queue[0].voteSkips = []; - ops.active.set(message.guild.id, fetched); + if (fetched.queue[0].voteSkips.includes(message.member.id)) return message.reply(`Sorry, you have already voted to skip! ${fetched.queue[0].voteSkips.length}/${required} required.`); - if (fetched.queue[0].voteSkips.length >= required) { + fetched.queue[0].voteSkips.push(message.member.id); - message.channel.send('Successfully skipped song!'); + ops.active.set(message.guild.id, fetched); - return fetched.dispatcher.emit('finish'); + if (fetched.queue[0].voteSkips.length >= required) { + message.channel.send('Successfully skipped song!'); - } + return fetched.dispatcher.emit('finish'); + } - message.channel.send(`Successfully voted to skip! ${fetched.queue[0].voteSkips.length}/${required} required.`) + message.channel.send(`Successfully voted to skip! ${fetched.queue[0].voteSkips.length}/${required} required.`); +}; - }; - - exports.conf = { - aliases: [], - guildOnly: false, - }; - exports.help = { - name: 'skip', - description: 'Skips a music.', - usage: 'skip', - category: '- Music Commands', - }; \ No newline at end of file +exports.conf = { + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'skip', + description: 'Skips a music.', + usage: 'skip', + category: '- Music Commands', +}; diff --git a/bot_discord.js b/bot_discord.js index 5380db6..5c437c9 100644 --- a/bot_discord.js +++ b/bot_discord.js @@ -1,366 +1,424 @@ -/**************************************** - * - * AleeBot: Made for discord servers - * Copyright (C) 2017-2020 Alee Productions - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * *************************************/ -const Discord = require('discord.js'); -const moment = require('moment'); -const readline = require('readline'); -const colors = require('colors'); -const DBL = require("dblapi.js"); -const client = new Discord.Client({ - disableEveryone: true -}); -const settings = require('./storage/settings.json') -const fs = require('fs'); -const api = require('./tokens.json'); -const dbl = new DBL(api.dbltoken, client); -const active = new Map(); -const ownerID = "242775871059001344"; - -const log = message => { - - console.log(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] ${message}`.white); - -}; - -const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout, - prompt: '> '.gray -}); - -console.log(`AleeBot ${settings.abVersion}: Copyright (C) 2017-2020 Alee Productions`.gray); -console.log('This program comes with ABSOLUTELY NO WARRANTY; for details type `show w\'.'.gray); -console.log ('This is free software, and you are welcome to redistribute it'.gray); -console.log ('under certain conditions; type `show c\' for details.\n'.gray) - -if (process.argv.indexOf("--debug") == -1) { - console.log("Running AleeBot without --debug command line flag. Debug output disabled.\n".yellow); -} else { - console.log('[!] Entering debug mode...'.yellow) - client.on('debug', function(info) { - log(info.gray); - }); - client.on('warn', function(info) { - log(info.red); - }); -} - -if (process.argv.indexOf("--beta") == -1) { - client.login(api.abtoken).catch(function() { - console.log('[X] Login failed. The token that you put in is invalid, please put in a new one...'.red); - process.exit(0); - }); - -} else { - client.login(api.abbtoken).catch(function() { - console.log('[X] Login failed. The token that you put in is invalid, please put in a new one...'.red); - process.exit(0); - }); -} - -client.commands = new Discord.Collection(); -client.aliases = new Discord.Collection(); - -fs.readdir('./commands', (err, files) => { - if (err) console.error(err); - log(`[!] Attempting to load a total of ${files.length} commands into the memory.`.cyan); - files.forEach(file => { - try { - const command = require(`./commands/${file}`); - log(`[!] Attempting to load the command "${command.help.name}".`.cyan); - client.commands.set(command.help.name, command); - command.conf.aliases.forEach(alias => { - client.aliases.set(alias, command.help.name); - log(`[!] Attempting to load "${alias}" as an alias for "${command.help.name}"`.cyan); - }); - } - catch (err) { - log('[X] An error has occured trying to load a command. Here is the error.'.red); - console.log(err.stack); - } - }); - log('[>] Command Loading complete!'.green); - console.log('\n'); -}); - -rl.on('line', function(cmd){ - var args = cmd.split(" "); - switch(args[0]) { - case "guilds": - if (client.guilds.size === 0) { - console.log(('[!] No guilds found.'.yellow)); - } else { - console.log('[i] Here\'s the servers that AleeBot is connected to:') - for ([id, guild] of client.guilds) { - console.log(` Guild Name: ${guild.name} - ID: ${guild.id}`.blue); - } - } - break; - case "channels": - if (!args[1]) { - console.log('[!] Please insert the guild\'s ID.'.yellow) - } else { - var guild = client.guilds.get(args[1]); - console.log('[i] Here\'s the channels that this guild have:'.blue) - for ([id, channel, guild] of guild && client.channels) { - console.log(` Channel: #${channel.name} - ID: ${channel.id}`.blue); - } - } - break; - case "leave": - if (!args[1]) { - console.log('[!] Please insert the guild\'s ID.'.yellow); - } else { - var guild = client.guilds.get(args[1]); - guild.leave(); - } - break; - case "broadcast": - if (!args[1]) { - console.log('[!] Usage: broadcast [guildID] [channelID].'.yellow); - } else { - let broadcast = args.join(" ").slice(48); - var guild = null; - guild = client.guilds.get(args[1]); - var channel = null; - channel = guild.channels.get(args[2]) - if (channel != null) { - channel.send(broadcast); - } - } - break; - case "uptime": - let uptime = parseInt(client.uptime); - uptime = Math.floor(uptime / 1000); - let uptimeMinutes = Math.floor(uptime / 60); - const minutes = uptime % 60; - let hours = 0; - while (uptimeMinutes >= 60) { - hours++; - uptimeMinutes = uptimeMinutes - 60; - } - const uptimeSeconds = minutes % 60; - console.log(`[i] AleeBot has been up for ${hours} hours, ${uptimeMinutes} minutes, and ${uptimeSeconds} seconds.`.blue); - break; - case "exit": - console.log('[i] AleeBot will now exit!'.blue) - const embed = new Discord.RichEmbed() - .setAuthor("AleeBot Status", client.user.avatarURL) - .setDescription("AleeBot is now going offline...") - .setColor("#ff3333") - client.channels.find('id', '606602551634296968').send({embed}); - client.destroy(); - process.exit(0); - break; - case "help": - var msg = (`AleeBot `+ settings.abVersion +` Console Help\n\n`); - msg += (`guilds - Shows all guilds that AleeBot's on.\n`) - msg += (`channels - Shows all the channels that the guilds have.\n`) - msg += (`leave - Leaves a guild.\n`) - msg += (`broadcast - Broadcasts a message to a server.\n`) - msg += (`uptime - Shows the uptime for AleeBot.\n`) - msg += (`help - Shows this command.\n`) - msg += (`exit - Exits AleeBot.\n`) - console.log(msg.cyan); - break; - default: - console.log('Unknown command, type \'help\' to list the commands...'.yellow) - } - rl.prompt(); -}); - - -client.on('ready', () => { - log('[>] AleeBot is now ready!'.green); - log(`[i] Logged in as ${client.user.tag}`.green); - log(`[i] Default Prefix: ${settings.prefix}`.green) - log(`[i] Bot ID: ${client.user.id}`.green); - log(`[i] Token: ${api.abtoken}`.green); - log(`[i] Running version ${settings.abVersion} and in ${client.guilds.size} guilds`.green); - - client.setInterval(function() { - const games = [ - 'AleeBot ' + settings.abVersion + ' | ' + settings.prefix + 'help', - 'Annoying Alee', - 'Coding stuff', - 'Drawing shapes', - 'Fighting AstralMod', - ]; - setInterval(() => { - dbl.postStats(client.guilds.size, client.shards.Id, client.shards.total); - }, 1800000); - client.user.setPresence({ - status: 'online', - afk: false, - game: { - type: 0, - name: games[Math.floor(Math.random() * games.length)], - }, - }); - }, 200000); - client.user.setStatus('online'); - const embed = new Discord.RichEmbed() - .setAuthor("AleeBot Status", client.user.avatarURL) - .setDescription("AleeBot has started") - .setColor("#5cd65c") - client.channels.find('id', '606602551634296968').send({embed}); - rl.prompt(); -}); - -client.on('guildMemberAdd', member => { - if (member.guild.id != '243022206437687296') return 0 - var role = member.guild.roles.find((role) => role.name === "Member"); - member.addRole(role); - log(`[i] ${member.user.username} joined Alee Productions.`.green); - log(`[i] I gave ${member.user.username} the "Member" role.`.green); -}); - -client.on('messageUpdate', async(oldMessage, newMessage) => { - if (oldMessage.guild.id != '243022206437687296') return 0 - if (oldMessage.content === newMessage.content){ - return; - } - const logEmbed = new Discord.RichEmbed() - .setAuthor("AleeBot Logging", client.user.avatarURL) - .setDescription(`A message from ${oldMessage.author.username} was edited`) - .addField("Before: ", `\`\`\`${oldMessage.content}\`\`\``) - .addField("After: ", `\`\`\`${newMessage.content}\`\`\``) - .setColor("#ffff1a") - .setTimestamp() - - let editmessage = newMessage.guild.channels.find(ch => ch.name === "logs") - if(!editmessage) return; - - editmessage.send(logEmbed); - - -}) - -client.on('guildCreate', guild => { - - log(`[i] New guild joined: ${guild.name} (id: ${guild.id}). This guild has ${guild.memberCount} members!`.blue); - -}); - - -client.on('guildDelete', guild => { - - log(`[i] I have been removed from: ${guild.name} (id: ${guild.id})`.red); - -}); - -dbl.on('posted', () => { - log('Server count posted!'.blue); -}); - -dbl.on('error', e => { - log(`[X | DBL ERROR] ${e}`.red); -}); - -client.on('message', (msg) => { - if (msg.author.bot) return; - - if (msg.mentions != null && msg.mentions.users != null) { - if (msg.mentions.users.has("282547024547545109")){ - if (msg.content.toLowerCase().includes("hello") || (msg.content.toLowerCase().includes("hi"))) { - msg.reply(`Hello ${msg.author.username}!`); - } else { - if (msg.content.toLowerCase().includes("shut") && msg.content.toLowerCase().includes("up")) { - switch (Math.floor(Math.random() * 1000) % 3) { - case 0: - msg.reply("Hey, Can you not speak to me in that tone...") - break; - case 1: - msg.reply("NO! I can talk as much I can!"); - break; - case 2: - msg.reply("Nah I won't...."); - break; - } - } else if (msg.content.toLowerCase().includes("how") && msg.content.toLowerCase().includes("are") && msg.content.toLowerCase().includes("you")) { - msg.reply("I'm doing OK, I suppose..."); - } else if (msg.content.toLowerCase().includes("ok") && msg.content.toLowerCase().includes("google")) { - msg.reply("Erm... I am not google, if you want to use Google here's the link: https://www.google.com"); - } else if (msg.content.toLowerCase().includes("f") && msg.content.toLowerCase().includes("off")) { - msg.reply("Do you want a hammer? :hammer:"); - } else if (msg.content.toLowerCase().includes("aleearmy")) { - msg.reply("Oh yeah.. that thing Alee made..."); - } - } - } - }; - - - let prefixes = JSON.parse(fs.readFileSync("./storage/prefixes.json", "utf8")); - - if(!prefixes[msg.guild.id]){ - prefixes[msg.guild.id] = { - prefixes: settings.prefix - }; - } - - let prefix = prefixes[msg.guild.id].prefixes - - - if (!msg.content.startsWith(prefix)) return; - const args = msg.content.slice(prefix.length).trim().split(/ +/g); - const command = args.shift(); - let cmd; - - if (client.commands.has(command)) { - cmd = client.commands.get(command); - } else if (client.aliases.has(command)) { - cmd = client.commands.get(client.aliases.get(command)); - } - - if (cmd) { - if (cmd.conf.guildOnly == true) { - if (!msg.channel.guild) { - return msg.channel.createMessage('This command can only be ran in a guild.'); - } - } - try { - - let ops = { - ownerID: ownerID, - active: active - } - - cmd.run(client, msg, args, ops); - } - catch (e) { - console.error(e); - } - } -}); - -process.on('unhandledRejection', function(err, p) { - -log("[X | UNCAUGHT PROMISE] " + err.stack.red); - -}); -client.on('reconnecting', function() { - log("[!] AleeBot has disconnected from Discord and is now attempting to reconnect.".yellow); -}); - -client.on('disconnect', function() { - log("[X] AleeBot has disconnected from Discord and will not attempt to reconnect.".red); - console.log("At this point, you'll need to restart AleeBot.".red); - process.exit(0); -}); +/** ************************************** + * + * AleeBot: Made for discord servers + * Copyright (C) 2017-2020 Alee Productions + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * *************************************/ +const Discord = require('discord.js'); +const moment = require('moment'); +const readline = require('readline'); +const colors = require('colors'); +const DBL = require('dblapi.js'); +const i18next = require('i18next'); +const client = new Discord.Client({ + disableEveryone: true, +}); +const settings = require('./storage/settings.json'); +const fs = require('fs'); +const api = require('./tokens.json'); +const dbl = new DBL(api.dbltoken, client); +const active = new Map(); +const ownerID = '242775871059001344'; + +const log = (message) => { + console.log(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] ${message}`.white); +}; + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + prompt: '> '.gray, +}); + +console.log(`AleeBot ${settings.abVersion}: Copyright (C) 2017-2020 Alee Productions`.gray); +console.log('This program comes with ABSOLUTELY NO WARRANTY; for details type `show w\'.'.gray); +console.log('This is free software, and you are welcome to redistribute it'.gray); +console.log('under certain conditions; type `show c\' for details.\n'.gray); + +if (process.argv.indexOf('--debug') == -1) { + console.log('Running AleeBot without --debug command line flag. Debug output disabled.\n'.yellow); +} else { + console.log('[!] Entering debug mode...'.yellow); + client.on('debug', function(info) { + log(info.gray); + }); + client.on('warn', function(info) { + log(info.red); + }); +} + +if (process.argv.indexOf('--beta') == -1) { + client.login(api.abtoken).catch(function() { + console.log('[X] Login failed. The token that you put in is invalid, please put in a new one...'.red); + process.exit(0); + }); +} else { + client.login(api.abbtoken).catch(function() { + console.log('[X] Login failed. The token that you put in is invalid, please put in a new one...'.red); + process.exit(0); + }); +} + +client.commands = new Discord.Collection(); +client.aliases = new Discord.Collection(); + +fs.readdir('./commands', (err, files) => { + if (err) console.error(err); + log(`[!] Attempting to load a total of ${files.length} commands into the memory.`.cyan); + files.forEach((file) => { + try { + const command = require(`./commands/${file}`); + log(`[!] Attempting to load the command "${command.help.name}".`.cyan); + client.commands.set(command.help.name, command); + command.conf.aliases.forEach((alias) => { + client.aliases.set(alias, command.help.name); + log(`[!] Attempting to load "${alias}" as an alias for "${command.help.name}"`.cyan); + }); + } catch (err) { + log('[X] An error has occured trying to load a command. Here is the error.'.red); + console.log(err.stack); + } + }); + log('[>] Command Loading complete!'.green); + console.log('\n'); +}); + +rl.on('line', function(cmd) { + const args = cmd.split(' '); + switch (args[0]) { + case 'guilds': + if (client.guilds.size === 0) { + console.log(('[!] No guilds found.'.yellow)); + } else { + console.log('[i] Here\'s the servers that AleeBot is connected to:'); + for ([id, guild] of client.guilds) { + console.log(` Guild Name: ${guild.name} - ID: ${guild.id}`.blue); + } + } + break; + case 'channels': + if (!args[1]) { + console.log('[!] Please insert the guild\'s ID.'.yellow); + } else { + var guild = client.guilds.get(args[1]); + console.log('[i] Here\'s the channels that this guild have:'.blue); + for ([id, channel, guild] of guild && client.channels) { + console.log(` Channel: #${channel.name} - ID: ${channel.id}`.blue); + } + } + break; + case 'leave': + if (!args[1]) { + console.log('[!] Please insert the guild\'s ID.'.yellow); + } else { + var guild = client.guilds.get(args[1]); + guild.leave(); + } + break; + case 'broadcast': + if (!args[1]) { + console.log('[!] Usage: broadcast [guildID] [channelID].'.yellow); + } else { + const broadcast = args.join(' ').slice(48); + var guild = null; + guild = client.guilds.get(args[1]); + var channel = null; + channel = guild.channels.get(args[2]); + if (channel != null) { + channel.send(broadcast); + } + } + break; + case 'uptime': + let uptime = parseInt(client.uptime); + uptime = Math.floor(uptime / 1000); + let uptimeMinutes = Math.floor(uptime / 60); + const minutes = uptime % 60; + let hours = 0; + while (uptimeMinutes >= 60) { + hours++; + uptimeMinutes = uptimeMinutes - 60; + } + const uptimeSeconds = minutes % 60; + console.log(`[i] AleeBot has been up for ${hours} hours, ${uptimeMinutes} minutes, and ${uptimeSeconds} seconds.`.blue); + break; + case 'exit': + console.log('[i] AleeBot will now exit!'.blue); + const asyncPowerOff = async () => { + const embed = new Discord.RichEmbed() + .setAuthor('AleeBot Status', client.user.avatarURL) + .setDescription('AleeBot is now going offline...') + .setColor('#ff3333'); + await client.channels.find('id', '606602551634296968').send({embed}); + }; + asyncPowerOff(); + client.destroy(); + process.exit(0); + break; + case 'help': + let msg = (`AleeBot `+ settings.abVersion +` Console Help\n\n`); + msg += (`guilds - Shows all guilds that AleeBot's on.\n`); + msg += (`channels - Shows all the channels that the guilds have.\n`); + msg += (`leave - Leaves a guild.\n`); + msg += (`broadcast - Broadcasts a message to a server.\n`); + msg += (`uptime - Shows the uptime for AleeBot.\n`); + msg += (`help - Shows this command.\n`); + msg += (`exit - Exits AleeBot.\n`); + console.log(msg.cyan); + break; + default: + console.log('Unknown command, type \'help\' to list the commands...'.yellow); + } + rl.prompt(); +}); + + +client.on('ready', () => { + log('[>] AleeBot is now ready!'.green); + log(`[i] Logged in as ${client.user.tag}`.green); + log(`[i] Default Prefix: ${settings.prefix}`.green); + log(`[i] Bot ID: ${client.user.id}`.green); + log(`[i] Token: ${api.abtoken}`.green); + log(`[i] Running version ${settings.abVersion} and in ${client.guilds.size} guilds`.green); + + client.setInterval(function() { + const games = [ + 'AleeBot ' + settings.abVersion + ' | ' + settings.prefix + 'help', + 'Annoying Alee', + 'Coding stuff', + 'Drawing shapes', + 'Fighting AstralMod', + ]; + /* + setInterval(() => { + dbl.postStats(client.guilds.size, client.shards.Id, client.shards.total); + }, 1800000);*/ + client.user.setPresence({ + status: 'online', + afk: false, + game: { + type: 0, + name: games[Math.floor(Math.random() * games.length)], + }, + }); + }, 200000); + client.user.setStatus('online'); + const embed = new Discord.RichEmbed() + .setAuthor('AleeBot Status', client.user.avatarURL) + .setDescription('AleeBot has started') + .setColor('#5cd65c'); + client.channels.find('id', '606602551634296968').send({embed}); + rl.prompt(); +}); + +client.on('guildMemberAdd', (member) => { + if (member.guild.id != '243022206437687296') return 0; + const role = member.guild.roles.find((role) => role.name === 'Member'); + member.addRole(role); + log(`[i] ${member.user.username} joined Alee Productions.`.green); + log(`[i] I gave ${member.user.username} the "Member" role.`.green); +}); + +client.on('messageUpdate', async (oldMessage, newMessage) => { + if (oldMessage.guild.id != '243022206437687296') return 0; + if (oldMessage.content === newMessage.content) { + return; + } + const logEmbed = new Discord.RichEmbed() + .setAuthor('AleeBot Logging', client.user.avatarURL) + .setDescription(`A message from ${oldMessage.author.username} was edited`) + .addField('Before: ', `\`\`\`${oldMessage.content}\`\`\``) + .addField('After: ', `\`\`\`${newMessage.content}\`\`\``) + .setColor('#ffff1a') + .setTimestamp() + .setFooter(`Author ID: ${oldMessage.author.id}`); + + const editMessage = newMessage.guild.channels.find((ch) => ch.name === 'logs'); + if (!editMessage) return; + + editMessage.send(logEmbed); +}); + +client.on('messageDelete', (message) => { + if (message.guild.id != '243022206437687296') return 0; + const logEmbed = new Discord.RichEmbed() + .setAuthor('AleeBot Logging', client.user.avatarURL) + .setDescription(`A message from ${message.author.username} was deleted`) + .addField('Deleted Message: ', `\`\`\`${message.content}\`\`\``) + .setColor('#ff021b') + .setTimestamp() + .setFooter(`Author ID: ${message.author.id}`); + + const deleteMessage = message.guild.channels.find((ch) => ch.name === 'logs'); + if (!deleteMessage) return; + + deleteMessage.send(logEmbed); +}); + +client.on('guildBanAdd', (guild, user) => { + if (guild.id != '243022206437687296') return 0; + const logEmbed = new Discord.RichEmbed() + .setAuthor('AleeBot Logging', client.user.avatarURL) + .setDescription(`This user got banned from ${guild.name}`) + .addField(`User:`, `${user.tag}`) + .addField(`User ID:`, `${user.id}`) + .setColor('#ff021b') + .setTimestamp(); + + const banMessage = guild.channels.find((ch) => ch.name === 'logs'); + if (!banMessage) return; + + banMessage.send(logEmbed); +}); + +client.on('guildBanRemove', (guild, user) => { + if (guild.id != '243022206437687296') return 0; + const logEmbed = new Discord.RichEmbed() + .setAuthor('AleeBot Logging', client.user.avatarURL) + .setDescription(`This user got unbanned from ${guild.name}`) + .addField(`User:`, `${user.tag}`) + .addField(`User ID:`, `${user.id}`) + .setColor('#ff021b') + .setTimestamp(); + + const banMessage = guild.channels.find((ch) => ch.name === 'logs'); + if (!banMessage) return; + + banMessage.send(logEmbed); +}); + +client.on('guildCreate', (guild) => { + log(`[i] New guild joined: ${guild.name} (id: ${guild.id}). This guild has ${guild.memberCount} members!`.blue); + /* + const logEmbed = new Discord.RichEmbed() + .setAuthor("AleeBot", client.user.avatarURL) + .setDescription(`I got added to this server!`) + .addField(`Server Name:`, `${guild.name}`) + .addField(`Server ID:`, `${guild.id}`) + .setColor("#5cd65c") + + client.channels.find('id', '606602551634296968').send({logEmbed});*/ +}); + + +client.on('guildDelete', (guild) => { + log(`[i] I have been removed from: ${guild.name} (id: ${guild.id})`.red); + /* + const logEmbed = new Discord.RichEmbed() + .setAuthor("AleeBot", client.user.avatarURL) + .setDescription(`I got removed from server...`) + .addField(`Server Name:`, `${guild.name}`) + .addField(`Server ID:`, `${guild.id}`) + .setColor("#5cd65c") + + client.channels.find('id', '606602551634296968').send({logEmbed});*/ +}); + +dbl.on('posted', () => { + log('Server count posted!'.blue); +}); + +dbl.on('error', (e) => { + log(`[X | DBL ERROR] ${e}`.red); +}); + +client.on('message', (msg) => { + if (msg.author.bot) return; + + if (msg.mentions != null && msg.mentions.users != null) { + if (msg.mentions.users.has('282547024547545109')) { + if (msg.content.toLowerCase().includes('hello') || (msg.content.toLowerCase().includes('hi'))) { + msg.reply(`Hello ${msg.author.username}!`); + } else { + if (msg.content.toLowerCase().includes('shut') && msg.content.toLowerCase().includes('up')) { + switch (Math.floor(Math.random() * 1000) % 3) { + case 0: + msg.reply('Hey, Can you not speak to me in that tone...'); + break; + case 1: + msg.reply('NO! I can talk as much I can!'); + break; + case 2: + msg.reply('Nah I won\'t....'); + break; + } + } else if (msg.content.toLowerCase().includes('how') && msg.content.toLowerCase().includes('are') && msg.content.toLowerCase().includes('you')) { + msg.reply('I\'m doing OK, I suppose...'); + } else if (msg.content.toLowerCase().includes('ok') && msg.content.toLowerCase().includes('google')) { + msg.reply('Erm... I am not google, if you want to use Google here\'s the link: https://www.google.com'); + } else if (msg.content.toLowerCase().includes('f') && msg.content.toLowerCase().includes('off')) { + msg.reply('Do you want a hammer? :hammer:'); + } else if (msg.content.toLowerCase().includes('aleearmy')) { + msg.reply('Oh yeah.. that thing Alee made...'); + } + } + } + }; + + + const prefixes = JSON.parse(fs.readFileSync('./storage/prefixes.json', 'utf8')); + + if (!prefixes[msg.guild.id]) { + prefixes[msg.guild.id] = { + prefixes: settings.prefix, + }; + } + + const prefix = prefixes[msg.guild.id].prefixes; + + + if (!msg.content.startsWith(prefix)) return; + const args = msg.content.slice(prefix.length).trim().split(/ +/g); + const command = args.shift(); + let cmd; + + if (client.commands.has(command)) { + cmd = client.commands.get(command); + } else if (client.aliases.has(command)) { + cmd = client.commands.get(client.aliases.get(command)); + } + + if (cmd) { + if (cmd.conf.guildOnly == true) { + if (!msg.channel.guild) { + return msg.channel.createMessage('This command can only be ran in a guild.'); + } + } + try { + const ops = { + ownerID: ownerID, + active: active, + }; + + cmd.run(client, msg, args, ops); + } catch (e) { + console.error(e); + } + } +}); + +process.on('unhandledRejection', function(err, p) { + log('[X | UNCAUGHT PROMISE] ' + err.stack.red); +}); +client.on('reconnecting', function() { + log('[!] AleeBot has disconnected from Discord and is now attempting to reconnect.'.yellow); +}); + +client.on('disconnect', function() { + log('[X] AleeBot has disconnected from Discord and will not attempt to reconnect.'.red); + console.log('At this point, you\'ll need to restart AleeBot.'.red); + process.exit(0); +}); diff --git a/commands/addquote.js b/commands/addquote.js index 04df3f4..7782b91 100644 --- a/commands/addquote.js +++ b/commands/addquote.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * AddQuote: Command for AleeBot * Copyright (C) 2017-2020 Alee Productions * @@ -15,19 +15,19 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message, args) => { /* const moment = require('moment'); const log = message => { - + console.log(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] ${message}`); - + }; const fs = require('fs'); if(!args[0]) return message.reply(`Usage: ab:addquote [author] [authorImage] [quote] [year]`); - + let quotes = JSON.parse(fs.readFileSync("./storage/quotes.json", "utf8")); quotes = { @@ -36,25 +36,25 @@ module.exports.run = async (client, message, args) => { quote: args[2], year: args[3] }; - + fs.writeFile("./storage/quotes.json", JSON.stringify(quotes), (err) =>{ if (err) log(err) }) - + message.reply(`You just added a new quote!`); - log(`[i] A quote has been added to quotes.json...`) + log(`[i] A quote has been added to quotes.json...`) */ - message.reply('Command is broken for now'); - }; - - exports.conf = { - aliases: [], - guildOnly: true, - }; - exports.help = { - name: 'addquote', - description: 'Sets the guild prefix.', - usage: 'addquote [author] [authorImage] [quote] [year]', - category: '- Quote Commands', - }; - + message.reply('Command is broken for now'); +}; + +exports.conf = { + aliases: [], + guildOnly: true, +}; +exports.help = { + name: 'addquote', + description: 'Sets the guild prefix.', + usage: 'addquote [author] [authorImage] [quote] [year]', + category: '- Quote Commands', +}; + diff --git a/commands/ask.js b/commands/ask.js index db9e10e..0bc0761 100644 --- a/commands/ask.js +++ b/commands/ask.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * Ask: Command for AleeBot * Copyright (C) 2017-2020 Alee Productions * @@ -15,35 +15,34 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message, args) => { - let abaskanswer = [ - "Yes.", - "Nope. Just kidding :P", - "Definitely!", - "No.", - "Yep. Just kidding :P", - "I doubt it.", - "Maybe?", - "I don't know?", - "Hmm let me think :thinking:" - ]; - if (args[1]) { - message.channel.sendMessage(abaskanswer[Math.floor(Math.random() * abaskanswer.length)]); - } else { - message.channel.sendMessage("Sorry, I don't know what your saying.") - } - }; - - exports.conf = { - aliases: ['8ball'], - guildOnly: false, - }; - exports.help = { - name: 'ask', - description: 'Give AleeBot a question!', - usage: 'ask [args]', - category: '- Fun Commands', - }; - \ No newline at end of file + const abaskanswer = [ + 'Yes.', + 'Nope. Just kidding :P', + 'Definitely!', + 'No.', + 'Yep. Just kidding :P', + 'I doubt it.', + 'Maybe?', + 'I don\'t know?', + 'Hmm let me think :thinking:', + ]; + if (args[1]) { + message.channel.sendMessage(abaskanswer[Math.floor(Math.random() * abaskanswer.length)]); + } else { + message.channel.sendMessage('Sorry, I don\'t know what your saying.'); + } +}; + +exports.conf = { + aliases: ['8ball'], + guildOnly: false, +}; +exports.help = { + name: 'ask', + description: 'Give AleeBot a question!', + usage: 'ask [args]', + category: '- Fun Commands', +}; diff --git a/commands/avatarurl.js b/commands/avatarurl.js index 018bc7a..7f9c256 100644 --- a/commands/avatarurl.js +++ b/commands/avatarurl.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * AvatarURL: Command for AleeBot * Copyright (C) 2017-2020 Alee Productions * @@ -15,12 +15,12 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message) => { - message.reply(message.author.avatarURL); + message.reply(message.author.avatarURL); }; - + exports.conf = { aliases: [], guildOnly: false, diff --git a/commands/balance.js b/commands/balance.js index ae575cc..7b340b2 100644 --- a/commands/balance.js +++ b/commands/balance.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * Balance: Command for AleeBot * Copyright (C) 2017-2020 Alee Productions * @@ -15,37 +15,36 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message) => { - const db = require('quick.db'); - const { RichEmbed } = require('discord.js'); + const db = require('quick.db'); + const {RichEmbed} = require('discord.js'); + + const user = message.mentions.users.first() || message.author; - let user = message.mentions.users.first() || message.author; + let balance = await db.fetch(`userBalance_${user.id}`); - let balance = await db.fetch(`userBalance_${user.id}`); + if (balance === null) { + db.set(`userBalance_${message.author.id}`, 0); + balance = 0; + } + const embed = new RichEmbed() + .setDescription(`**AleeCorp Bank**`) + .addField('Account Holder: ', user.username, true) + .addField('Account Balance: ', balance, true) + .setColor('#1fd619'); - if (balance === null) { - db.set(`userBalance_${message.author.id}`, 0); - balance = 0; - } - const embed = new RichEmbed() - .setDescription(`**AleeCorp Bank**`) - .addField('Account Holder: ', user.username, true) - .addField('Account Balance: ', balance, true) - .setColor('#1fd619') + message.channel.send({embed}); +}; - message.channel.send({embed}) - }; - - exports.conf = { - aliases: ['bal', 'money'], - guildOnly: false, - }; - exports.help = { - name: 'balance', - description: 'Checks the balance of AleeBot', - usage: 'balance [@someone (optional)]', - category: '- Economy Commands', - }; - \ No newline at end of file +exports.conf = { + aliases: ['bal', 'money'], + guildOnly: false, +}; +exports.help = { + name: 'balance', + description: 'Checks the balance of AleeBot', + usage: 'balance [@someone (optional)]', + category: '- Economy Commands', +}; diff --git a/commands/ban.js b/commands/ban.js index 6331347..354dcaa 100644 --- a/commands/ban.js +++ b/commands/ban.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * Ban: Command for AleeBot * Copyright (C) 2017-2020 Alee Productions * @@ -15,22 +15,22 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message, args) => { - const Discord = require('discord.js'); - const mreason = args.join(" ").slice(22); - if (!message.member.permissions.has('BAN_MEMBERS')) return message.reply("It looks like that you don't have the permissions to ban people.") - if (!message.guild.member(client.user).hasPermission('BAN_MEMBERS')) return message.reply('Uhh... I don\'t have permission to ban members.'); - const member = message.mentions.members.first(); - if (!member) return message.reply("Uhh... Please mention a member first."); - member.ban(`Banned by ${message.author.tag} Reason: ` + mreason); - const embed = new Discord.RichEmbed() - .setTitle('User Banned!') - .setColor('#1fd619') - .addField('**User:**', `${member.user.tag}`) - .addField('**Reason:**', `\`\`\`${mreason}\`\`\``) - await message.channel.send({ embed }); + const Discord = require('discord.js'); + const mreason = args.join(' ').slice(22); + if (!message.member.permissions.has('BAN_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to ban people.'); + if (!message.guild.member(client.user).hasPermission('BAN_MEMBERS')) return message.reply('Uhh... I don\'t have permission to ban members.'); + const member = message.mentions.members.first(); + if (!member) return message.reply('Uhh... Please mention a member first.'); + member.ban(`Banned by ${message.author.tag} Reason: ` + mreason); + const embed = new Discord.RichEmbed() + .setTitle('User Banned!') + .setColor('#1fd619') + .addField('**User:**', `${member.user.tag}`) + .addField('**Reason:**', `\`\`\`${mreason}\`\`\``); + await message.channel.send({embed}); }; exports.conf = { diff --git a/commands/eval.js b/commands/eval.js index 90b7030..2147376 100644 --- a/commands/eval.js +++ b/commands/eval.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * Eval: Command for AleeBot * Copyright (C) 2017-2020 Alee Productions & jtsshieh + PokeWorld * @@ -15,72 +15,70 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message, args) => { - if (!['242775871059001344',].includes(message.author.id)) return message.reply('Nope! You need the person who created this bot to use this command.'); - const { RichEmbed } = require('discord.js'); - const code = args.join(' '); - - let evaled; - let remove; - - try { - remove = text => { - if (typeof(text) === 'string') { - return text.replace(/`/g, '`' + String.fromCharCode(8203)).replace(/@/g, '@' + String.fromCharCode(8203)); - } else { - return text; - } - }; - - evaled = eval(code); - - if (typeof evaled !== 'string') { - evaled = require('util').inspect(evaled); + if (!['242775871059001344'].includes(message.author.id)) return message.reply('Nope! You need the person who created this bot to use this command.'); + const {RichEmbed} = require('discord.js'); + const code = args.join(' '); + + let evaled; + let remove; + + try { + remove = (text) => { + if (typeof(text) === 'string') { + return text.replace(/`/g, '`' + String.fromCharCode(8203)).replace(/@/g, '@' + String.fromCharCode(8203)); + } else { + return text; } - - } catch (err) { - const embed = new RichEmbed() + }; + + evaled = eval(code); + + if (typeof evaled !== 'string') { + evaled = require('util').inspect(evaled); + } + } catch (err) { + const embed = new RichEmbed() .setAuthor('Eval Error') .setDescription('Eval\'s result') .addField(':inbox_tray: Input:', `\`\`\`js\n${code}\n\`\`\``) .addField(':outbox_tray: Output:', `\`\`\`${err}\`\`\``) .setFooter('Eval', client.user.avatarURL) .setColor('RED'); - return message.channel.send({ embed }); - } - - try { - const embed = new RichEmbed() + return message.channel.send({embed}); + } + + try { + const embed = new RichEmbed() .setAuthor('Eval Success') .setDescription('Eval\'s result') .addField(':inbox_tray: Input:', `\`\`\`js\n${code}\n\`\`\``) .addField(':outbox_tray: Output:', `\`\`\`js\n${remove(evaled)}\n\`\`\``) .setFooter('Eval', client.user.avatarURL) .setColor('GREEN'); - - return message.channel.send({ embed }); - } catch (err) { - const embed = new RichEmbed() + + return message.channel.send({embed}); + } catch (err) { + const embed = new RichEmbed() .setAuthor('Eval Error') .setDescription('Eval\'s result') .addField(':inbox_tray: Input:', `\`\`\`js\n${code}\n\`\`\``) .addField(':outbox_tray: Output:', `\`\`\`${err}\`\`\``) .setFooter('Eval', client.user.avatarURL) .setColor('RED'); - return message.channel.send({ embed }); - } - }; - - exports.conf = { - aliases: [], - guildOnly: false, - }; - exports.help = { - name: 'eval', - description: 'Evalulates commands.', - usage: '', - category: '- Owners Only', - }; - \ No newline at end of file + return message.channel.send({embed}); + } +}; + +exports.conf = { + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'eval', + description: 'Evalulates commands.', + usage: '', + category: '- Owners Only', +}; diff --git a/commands/git.js b/commands/git.js index d6bed8b..cf754f4 100644 --- a/commands/git.js +++ b/commands/git.js @@ -1,43 +1,43 @@ -/**************************************** - * - * Git: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * *************************************/ -module.exports.run = async (client, message) => { - const Discord = require('discord.js'); - const git = require('git-last-commit'); - git.getLastCommit(function(err, commit) { - const embed = new Discord.RichEmbed() - .setTitle('GitHub Information') - .addField('**Repository:**', 'https://github.com/aleeproductions/AleeBot-JS') - .addField('**Last Commit:**', commit.subject) - .addField('**Commited By:**', commit.author.name) - .setColor('#1fd619') - message.channel.send({ embed }); - }) -}; - -exports.conf = { - aliases: [], - guildOnly: false, -}; -exports.help = { - name: 'git', - description: 'Get the git info.', - usage: 'git', - category: '- General Commands', -}; +/** ************************************** + * + * Git: Command for AleeBot + * Copyright (C) 2017-2020 Alee Productions + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * *************************************/ +module.exports.run = async (client, message) => { + const Discord = require('discord.js'); + const git = require('git-last-commit'); + git.getLastCommit(function(err, commit) { + const embed = new Discord.RichEmbed() + .setTitle('GitHub Information') + .addField('**Repository:**', 'https://github.com/aleeproductions/AleeBot-JS') + .addField('**Last Commit:**', commit.subject) + .addField('**Commited By:**', commit.author.name) + .setColor('#1fd619'); + message.channel.send({embed}); + }); +}; + +exports.conf = { + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'git', + description: 'Get the git info.', + usage: 'git', + category: '- General Commands', +}; diff --git a/commands/help.js b/commands/help.js index eb53b40..9d94c80 100644 --- a/commands/help.js +++ b/commands/help.js @@ -1,70 +1,70 @@ -/**************************************** - * - * Help: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * *************************************/ -const Discord = require('discord.js'); -const fs = require('fs'); -module.exports.run = async (client, message) => { - const categories = []; - const commands = Array.from(client.commands.keys()); - const settings = require('../storage/settings.json'); - commands.forEach(function(x) { - if (!categories.includes(client.commands.get(x).help.category)) { - categories.push(client.commands.get(x).help.category); - } - }); - - let prefixes = JSON.parse(fs.readFileSync("./storage/prefixes.json", "utf8")); - - if(!prefixes[message.guild.id]){ - prefixes[message.guild.id] = { - prefixes: settings.prefix - }; - } - - let prefix = prefixes[message.guild.id].prefixes - if (!message.guild.member(client.user).hasPermission('EMBED_LINKS')) return message.reply('ERROR: AleeBot doesn\'t have the permission to send embed links please enable them to use the full help.'); - const embed = new Discord.RichEmbed() - .setAuthor('AleeBot ' + require('../storage/settings.json').abVersion + ` Help and on ${client.guilds.size} servers`, client.user.avatarURL) - .setDescription('Every command you input into AleeBot is `' + prefix + '`') - .setColor('#1fd619') - .setFooter('© Copyright 2017-2020 Alee Productions, Licensed with GPL-3.0'); - - categories.forEach(function(x) { - let cat = ''; - commands.forEach(function(command) { - if (client.commands.get(command).help.category == x) { - cat = cat + command + '\n'; - } - }); - embed.addField(x, cat, true); - }); - - await message.channel.send({ embed }); -}; - -exports.conf = { - aliases: ['h'], - guildOnly: false, -}; -exports.help = { - name: 'help', - description: 'Displays all the commands or a page with information for 1 command.', - usage: 'help (command:command-name)', - category: '- General Commands', -}; +/** ************************************** + * + * Help: Command for AleeBot + * Copyright (C) 2017-2020 Alee Productions + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * *************************************/ +const Discord = require('discord.js'); +const fs = require('fs'); +module.exports.run = async (client, message) => { + const categories = []; + const commands = Array.from(client.commands.keys()); + const settings = require('../storage/settings.json'); + commands.forEach(function(x) { + if (!categories.includes(client.commands.get(x).help.category)) { + categories.push(client.commands.get(x).help.category); + } + }); + + const prefixes = JSON.parse(fs.readFileSync('./storage/prefixes.json', 'utf8')); + + if (!prefixes[message.guild.id]) { + prefixes[message.guild.id] = { + prefixes: settings.prefix, + }; + } + + const prefix = prefixes[message.guild.id].prefixes; + if (!message.guild.member(client.user).hasPermission('EMBED_LINKS')) return message.reply('ERROR: AleeBot doesn\'t have the permission to send embed links please enable them to use the full help.'); + const embed = new Discord.RichEmbed() + .setAuthor('AleeBot ' + require('../storage/settings.json').abVersion + ` Help and on ${client.guilds.size} servers`, client.user.avatarURL) + .setDescription('Every command you input into AleeBot is `' + prefix + '`') + .setColor('#1fd619') + .setFooter('© Copyright 2017-2020 Alee Productions, Licensed with GPL-3.0'); + + categories.forEach(function(x) { + let cat = ''; + commands.forEach(function(command) { + if (client.commands.get(command).help.category == x) { + cat = cat + command + '\n'; + } + }); + embed.addField(x, cat, true); + }); + + await message.channel.send({embed}); +}; + +exports.conf = { + aliases: ['h'], + guildOnly: false, +}; +exports.help = { + name: 'help', + description: 'Displays all the commands or a page with information for 1 command.', + usage: 'help (command:command-name)', + category: '- General Commands', +}; diff --git a/commands/info.js b/commands/info.js index 162a1cf..5487a14 100644 --- a/commands/info.js +++ b/commands/info.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * Info: Command for AleeBot * Copyright (C) 2017-2020 Alee Productions * @@ -15,29 +15,28 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message) => { - const Discord = require('discord.js'); - const os = require('os'); - const embed = new Discord.RichEmbed() + const Discord = require('discord.js'); + const os = require('os'); + const embed = new Discord.RichEmbed() .setTitle('Information on AleeBot\'s Host') - .addField('OS Hostname: ', os.hostname() , true) - .addField('NodeJS Version: ', process.versions.node , true) - .addField('OS Platform: ', os.platform() , true) - .addField('OS Version: ', os.release() , true) + .addField('OS Hostname: ', os.hostname(), true) + .addField('NodeJS Version: ', process.versions.node, true) + .addField('OS Platform: ', os.platform(), true) + .addField('OS Version: ', os.release(), true) .setColor('#1fd619'); - message.channel.send({embed}); - }; - - exports.conf = { - aliases: [], - guildOnly: false, - }; - exports.help = { - name: 'info', - description: 'Tells you information about the bot', - usage: 'info', - category: '- Information Commands', - }; - \ No newline at end of file + message.channel.send({embed}); +}; + +exports.conf = { + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'info', + description: 'Tells you information about the bot', + usage: 'info', + category: '- Information Commands', +}; diff --git a/commands/interrogate.js b/commands/interrogate.js index ea7de53..c015f2c 100644 --- a/commands/interrogate.js +++ b/commands/interrogate.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * Interrogate: Command for AleeBot * Copyright (C) 2017-2020 Alee Productions * @@ -15,29 +15,28 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message, args) => { - if (message.guild.id != '243022206437687296') return message.reply ('This is a ALP exclusive command.'); + if (message.guild.id != '243022206437687296') return message.reply('This is a ALP exclusive command.'); - if (!message.member.hasPermission('BAN_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to jail members.'); - if (!message.guild.member(client.user).hasPermission('MANAGE_ROLES')) return message.reply('Uhh... I don\'t have permission to jail members.'); + if (!message.member.hasPermission('BAN_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to jail members.'); + if (!message.guild.member(client.user).hasPermission('MANAGE_ROLES')) return message.reply('Uhh... I don\'t have permission to jail members.'); - const member = message.mentions.members.first(); - if (!member) return await message.reply('Uhh... Please mention a member first.'); + const member = message.mentions.members.first(); + if (!member) return await message.reply('Uhh... Please mention a member first.'); - member.addRole(message.guild.roles.find('name', 'Interrogation')); - message.reply(`Alright, I just interrogated ${member.user.tag}.`) + member.addRole(message.guild.roles.find('name', 'Interrogation')); + message.reply(`Alright, I just interrogated ${member.user.tag}.`); }; exports.conf = { - aliases: [], - guildOnly: false, - }; - exports.help = { - name: 'interrogate', - description: 'Interrogates a member', - usage: 'interrogate [user]', - category: '- ALP Exclusive Commands', - }; - \ No newline at end of file + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'interrogate', + description: 'Interrogates a member', + usage: 'interrogate [user]', + category: '- ALP Exclusive Commands', +}; diff --git a/commands/invite.js b/commands/invite.js index 38094b4..a6ce5a8 100644 --- a/commands/invite.js +++ b/commands/invite.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * Invite: Command for AleeBot * Copyright (C) 2017-2020 Alee Productions * @@ -15,37 +15,37 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message) => { - const Discord = require('discord.js'); - const embed = new Discord.RichEmbed() - message.channel.send({embed: { + const Discord = require('discord.js'); + const embed = new Discord.RichEmbed(); + message.channel.send({embed: { color: 2086425, - title: "Invite Command", + title: 'Invite Command', fields: [{ - name: "Invite AleeBot", - value: "[Invite AleeBot to your server.](https://top.gg/bot/282547024547545109)" - }, - { - name: "Join the Alee Productions Community", - value: "[If there's any bugs you can join Alee Community guild and explain the bug...](https://discord.gg/EFhRDqG)" - } + name: 'Invite AleeBot', + value: '[Invite AleeBot to your server.](https://top.gg/bot/282547024547545109)', + }, + { + name: 'Join the Alee Productions Community', + value: '[If there\'s any bugs you can join Alee Community guild and explain the bug...](https://discord.gg/EFhRDqG)', + }, ], - } -}); - - // message.channel.send('Want AleeBot in your server? Here\'s the link: https://discordapp.com/api/oauth2/authorize?client_id=282547024547545109&permissions=2080375863&scope=bot'); - }; - - exports.conf = { - aliases: [], - guildOnly: false, - }; - exports.help = { - name: 'invite', - description: 'Gives you an invite to the guild and the bot.', - usage: 'invite', - category: '- General Commands', - }; - + }, + }); + + // message.channel.send('Want AleeBot in your server? Here\'s the link: https://discordapp.com/api/oauth2/authorize?client_id=282547024547545109&permissions=2080375863&scope=bot'); +}; + +exports.conf = { + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'invite', + description: 'Gives you an invite to the guild and the bot.', + usage: 'invite', + category: '- General Commands', +}; + diff --git a/commands/jail.js b/commands/jail.js index e1ba85f..199ae20 100644 --- a/commands/jail.js +++ b/commands/jail.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * Jail: Command for AleeBot * Copyright (C) 2017-2020 Alee Productions * @@ -15,29 +15,28 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message, args) => { - if (message.guild.id != '243022206437687296') return message.reply ('This is a ALP exclusive command.'); + if (message.guild.id != '243022206437687296') return message.reply('This is a ALP exclusive command.'); - if (!message.member.hasPermission('BAN_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to jail members.'); - if (!message.guild.member(client.user).hasPermission('MANAGE_ROLES')) return message.reply('Uhh... I don\'t have permission to jail members.'); + if (!message.member.hasPermission('BAN_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to jail members.'); + if (!message.guild.member(client.user).hasPermission('MANAGE_ROLES')) return message.reply('Uhh... I don\'t have permission to jail members.'); - const member = message.mentions.members.first(); - if (!member) return await message.reply('Uhh... Please mention a member first.'); + const member = message.mentions.members.first(); + if (!member) return await message.reply('Uhh... Please mention a member first.'); - member.addRole(message.guild.roles.find('name', 'Jail')); - message.reply(`Alright, I just jailed ${member.user.tag}.`) + member.addRole(message.guild.roles.find('name', 'Jail')); + message.reply(`Alright, I just jailed ${member.user.tag}.`); }; exports.conf = { - aliases: [], - guildOnly: false, - }; - exports.help = { - name: 'jail', - description: 'Jails a member', - usage: 'jail [user]', - category: '- ALP Exclusive Commands', - }; - \ No newline at end of file + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'jail', + description: 'Jails a member', + usage: 'jail [user]', + category: '- ALP Exclusive Commands', +}; diff --git a/commands/kick.js b/commands/kick.js index dbb1eb1..bfacd92 100644 --- a/commands/kick.js +++ b/commands/kick.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * Kick: Command for AleeBot * Copyright (C) 2017-2020 Alee Productions * @@ -15,23 +15,23 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message, args) => { - const Discord = require('discord.js'); - const mreason = args.join(" ").slice(22); - if (!message.member.permissions.has('KICK_MEMBERS')) return message.reply("It looks like that you don't have the permissions to ban people."); - if (!message.guild.member(client.user).hasPermission('KICK_MEMBERS')) return message.reply('Uhh... I don\'t have permission to kick members.'); - const member = message.mentions.members.first(); - if (!member) return message.reply("Uhh... Please mention a member first."); - member.kick(`Kicked by: ${message.author.tag} Reason: ` + mreason); - const embed = new Discord.RichEmbed() - .setTitle('User Kicked!') - .setColor('#1fd619') - .addField('**User:**', `${member.user.tag}`) - .addField('**Reason:**', `\`\`\`${mreason}\`\`\``) - await message.channel.send({ embed }); - }; + const Discord = require('discord.js'); + const mreason = args.join(' ').slice(22); + if (!message.member.permissions.has('KICK_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to ban people.'); + if (!message.guild.member(client.user).hasPermission('KICK_MEMBERS')) return message.reply('Uhh... I don\'t have permission to kick members.'); + const member = message.mentions.members.first(); + if (!member) return message.reply('Uhh... Please mention a member first.'); + member.kick(`Kicked by: ${message.author.tag} Reason: ` + mreason); + const embed = new Discord.RichEmbed() + .setTitle('User Kicked!') + .setColor('#1fd619') + .addField('**User:**', `${member.user.tag}`) + .addField('**Reason:**', `\`\`\`${mreason}\`\`\``); + await message.channel.send({embed}); +}; exports.conf = { aliases: [], diff --git a/commands/leaveguild.js b/commands/leaveguild.js index 4a77b0c..fd77509 100644 --- a/commands/leaveguild.js +++ b/commands/leaveguild.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * LeaveGuild: Command for AleeBot * Copyright (C) 2017-2020 Alee Productions * @@ -15,22 +15,21 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message) => { - if (!['242775871059001344', message.guild.owner.user.id].includes(message.author.id)) return message.reply('Nope! You need the person who created this bot or the owner of this guild to use this command.'); - message.channel.send('Alright, I\'m leaving the server now. Bye everyone!') - message.guild.leave(); - }; - - exports.conf = { - aliases: [], - guildOnly: false, - }; - exports.help = { - name: 'leaveguild', - description: 'Makes the bot leave the server', - usage: 'leaveguild', - category: '- Owners Only', - }; - \ No newline at end of file + if (!['242775871059001344', message.guild.owner.user.id].includes(message.author.id)) return message.reply('Nope! You need the person who created this bot or the owner of this guild to use this command.'); + message.channel.send('Alright, I\'m leaving the server now. Bye everyone!'); + message.guild.leave(); +}; + +exports.conf = { + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'leaveguild', + description: 'Makes the bot leave the server', + usage: 'leaveguild', + category: '- Owners Only', +}; diff --git a/commands/pay.js b/commands/pay.js index 633e4db..2d0aa89 100644 --- a/commands/pay.js +++ b/commands/pay.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * Pay: Command for AleeBot * Copyright (C) 2017-2020 Alee Productions * @@ -15,46 +15,46 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message, args) => { - const db = require('quick.db'); - if (!message.mentions.members.first()) return message.reply('Please mention a user...'); - - let targetMember = message.mentions.members.first(), - amount = parseInt(args.join(' ').replace(targetMember, '')); - - if (isNaN(amount)) return message.reply('Please define an amount.') - - let targetBalance = await db.fetch(`userBalance_${targetMember.id}`), - selfBalance = await db.fetch(`userBalance_${message.author.id}`); - - if (targetBalance === null) { - db.set(`userBalance_${targetMember.id}`, 0); - targetBalance = 0 - } - - if (selfBalance === null) { - db.set(`userBalance_${message.author.id}`, 0); - selfBalance = 0 - } - - if (amount > selfBalance) return message.reply('Sorry you don\'t have enough money.'); - - db.add(`userBalance_${targetMember.id}`, amount); - db.subtract(`userBalance_${message.author.id}`, amount); - - message.reply(`Successfully transfered $${amount} to ${targetMember.user}`) - }; - - exports.conf = { - aliases: ['transfer'], - guildOnly: false, - }; - exports.help = { - name: 'pay', - description: 'You can pay others!', - usage: 'pay [@user] [interger]', - category: '- Economy Commands', - }; \ No newline at end of file + const db = require('quick.db'); + if (!message.mentions.members.first()) return message.reply('Please mention a user...'); + + const targetMember = message.mentions.members.first(); + const amount = parseInt(args.join(' ').replace(targetMember, '')); + + if (isNaN(amount)) return message.reply('Please define an amount.'); + + let targetBalance = await db.fetch(`userBalance_${targetMember.id}`); + let selfBalance = await db.fetch(`userBalance_${message.author.id}`); + + if (targetBalance === null) { + db.set(`userBalance_${targetMember.id}`, 0); + targetBalance = 0; + } + + if (selfBalance === null) { + db.set(`userBalance_${message.author.id}`, 0); + selfBalance = 0; + } + + if (amount > selfBalance) return message.reply('Sorry you don\'t have enough money.'); + + db.add(`userBalance_${targetMember.id}`, amount); + db.subtract(`userBalance_${message.author.id}`, amount); + + message.reply(`Successfully transfered $${amount} to ${targetMember.user}`); +}; + +exports.conf = { + aliases: ['transfer'], + guildOnly: false, +}; +exports.help = { + name: 'pay', + description: 'You can pay others!', + usage: 'pay [@user] [interger]', + category: '- Economy Commands', +}; diff --git a/commands/ping.js b/commands/ping.js index fa1fd10..afb3807 100644 --- a/commands/ping.js +++ b/commands/ping.js @@ -1,33 +1,33 @@ -/**************************************** - * - * Ping: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * *************************************/ -module.exports.run = async (client, message) => { - message.reply('**PONG!** :ping_pong: ' + Math.round(client.ping) + ' ms'); -}; - -exports.conf = { - aliases: [], - guildOnly: false, -}; -exports.help = { - name: 'ping', - description: 'Ping the bot.', - usage: 'ping', - category: '- General Commands', -}; +/** ************************************** + * + * Ping: Command for AleeBot + * Copyright (C) 2017-2020 Alee Productions + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * *************************************/ +module.exports.run = async (client, message) => { + message.reply('**PONG!** :ping_pong: ' + Math.round(client.ping) + ' ms'); +}; + +exports.conf = { + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'ping', + description: 'Ping the bot.', + usage: 'ping', + category: '- General Commands', +}; diff --git a/commands/poweroff.js b/commands/poweroff.js index 3af23b8..3f60f8a 100644 --- a/commands/poweroff.js +++ b/commands/poweroff.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * Poweroff: Command for AleeBot * Copyright (C) 2017-2020 Alee Productions * @@ -15,29 +15,28 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message, args) => { const Discord = require('discord.js'); - if (!['242775871059001344',].includes(message.author.id)) return message.reply('Nope! You need the person who created this bot to use this command.'); - const embed = new Discord.RichEmbed() - .setAuthor("AleeBot Status", client.user.avatarURL) - .setDescription("AleeBot is now going offline...") - .setColor("#ff3333") - await client.channels.find('id', '606602551634296968').send({embed}); - await message.reply(':warning: AleeBot will now exit!'); - client.destroy(); - process.exit(0); - }; - - exports.conf = { - aliases: ['reboot'], - guildOnly: false, - }; - exports.help = { - name: 'poweroff', - description: 'Turns off AleeBot.', - usage: 'poweroff', - category: '- Owners Only', - }; - \ No newline at end of file + if (!['242775871059001344'].includes(message.author.id)) return message.reply('Nope! You need the person who created this bot to use this command.'); + const embed = new Discord.RichEmbed() + .setAuthor('AleeBot Status', client.user.avatarURL) + .setDescription('AleeBot is now going offline...') + .setColor('#ff3333'); + await client.channels.find('id', '606602551634296968').send({embed}); + await message.reply(':warning: AleeBot will now exit!'); + client.destroy(); + process.exit(0); +}; + +exports.conf = { + aliases: ['reboot'], + guildOnly: false, +}; +exports.help = { + name: 'poweroff', + description: 'Turns off AleeBot.', + usage: 'poweroff', + category: '- Owners Only', +}; diff --git a/commands/purge.js b/commands/purge.js index 9a510f9..6122083 100644 --- a/commands/purge.js +++ b/commands/purge.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * Purge: Command for AleeBot * Copyright (C) 2017-2020 Alee Productions * @@ -15,26 +15,25 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message, args) => { - if (!message.member.permissions.has('MANAGE_MESSAGES')) return message.reply("It looks like that you don't have the permissions to delete messages.") - if (isNaN(args[0])) return message.reply("Please put the valid number of messages to purge."); + if (!message.member.permissions.has('MANAGE_MESSAGES')) return message.reply('It looks like that you don\'t have the permissions to delete messages.'); + if (isNaN(args[0])) return message.reply('Please put the valid number of messages to purge.'); + + if (args[0] > 100) return message.channel.send('Please put a number less than 100.'); - if (args[0] > 100) return message.channel.send("Please put a number less than 100."); + message.channel.bulkDelete(args[0]) + .then( (messages) => message.channel.send(`Successfully deleted ${messages.size} messages.`)); +}; - message.channel.bulkDelete(args[0]) - .then( messages => message.channel.send(`Successfully deleted ${messages.size} messages.`)) - }; - - exports.conf = { - aliases: ['rm'], - guildOnly: false, - }; - exports.help = { - name: 'purge', - description: 'Removes messages in a bulk.', - usage: 'purge [number]', - category: '- Moderation Commands', - }; - \ No newline at end of file +exports.conf = { + aliases: ['rm'], + guildOnly: false, +}; +exports.help = { + name: 'purge', + description: 'Removes messages in a bulk.', + usage: 'purge [number]', + category: '- Moderation Commands', +}; diff --git a/commands/quote.js b/commands/quote.js index 9aa9be0..ce7b56a 100644 --- a/commands/quote.js +++ b/commands/quote.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * Quote: Command for AleeBot * Copyright (C) 2017-2020 Alee Productions * @@ -15,16 +15,16 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message) => { -const Discord = require('discord.js'); + const Discord = require('discord.js'); -let NewQuote; + let NewQuote; function GetNewQuote(quoteNum = -1) { NewQuote = new Discord.RichEmbed(); - + let quo = require('../storage/quotes.json').quotes; if (quoteNum == -1) { @@ -47,19 +47,18 @@ let NewQuote; return NewQuote; } - const newquote = GetNewQuote(); - message.reply('Alright, here\'s your quote.') - message.channel.send(newquote); + const newquote = GetNewQuote(); + message.reply('Alright, here\'s your quote.'); + message.channel.send(newquote); }; exports.conf = { - aliases: [], - guildOnly: false, - }; - exports.help = { - name: 'quote', - description: 'Tells you quotes', - usage: 'quote', - category: '- Quote Commands', - }; - \ No newline at end of file + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'quote', + description: 'Tells you quotes', + usage: 'quote', + category: '- Quote Commands', +}; diff --git a/commands/say.js b/commands/say.js index 4f25aec..774e9e3 100644 --- a/commands/say.js +++ b/commands/say.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * Say: Command for AleeBot * Copyright (C) 2017-2020 Alee Productions * @@ -15,23 +15,22 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message, args) => { - if (!['242775871059001344',].includes(message.author.id)) return message.reply('Nope! You need the person who created this bot to use this command.'); - let absay = args.join(" "); - message.delete().catch(); - message.channel.send(absay); - }; - - exports.conf = { - aliases: [], - guildOnly: false, - }; - exports.help = { - name: 'say', - description: 'You can control AleeBot now!', - usage: 'say [context]', - category: '- Owners Only', - }; - \ No newline at end of file + if (!['242775871059001344'].includes(message.author.id)) return message.reply('Nope! You need the person who created this bot to use this command.'); + const absay = args.join(' '); + message.delete().catch(); + message.channel.send(absay); +}; + +exports.conf = { + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'say', + description: 'You can control AleeBot now!', + usage: 'say [context]', + category: '- Owners Only', +}; diff --git a/commands/setprefix.js b/commands/setprefix.js index f9aac08..1c53509 100644 --- a/commands/setprefix.js +++ b/commands/setprefix.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * SetPrefix: Command for AleeBot * Copyright (C) 2017-2020 Alee Productions * @@ -15,41 +15,38 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message, args) => { const moment = require('moment'); - const log = message => { - + const log = (message) => { console.log(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] ${message}`); - }; - const fs = require('fs'); - if(!message.member.hasPermission("ADMINISTRATOR")) return message.reply('Sorry you need admin to set my prefix') - if(!args[0] || args[0 == "help"]) return message.reply(`Usage: setprefix `) + const fs = require('fs'); + if (!message.member.hasPermission('ADMINISTRATOR')) return message.reply('Sorry you need admin to set my prefix'); + if (!args[0] || args[0 == 'help']) return message.reply(`Usage: setprefix `); - let prefixes = JSON.parse(fs.readFileSync("./storage/prefixes.json", "utf8")); + const prefixes = JSON.parse(fs.readFileSync('./storage/prefixes.json', 'utf8')); - prefixes[message.guild.id] = { - prefixes: args[0] - }; + prefixes[message.guild.id] = { + prefixes: args[0], + }; - fs.writeFile("./storage/prefixes.json", JSON.stringify(prefixes), (err) =>{ - if (err) log(err) - }) + fs.writeFile('./storage/prefixes.json', JSON.stringify(prefixes), (err) =>{ + if (err) log(err); + }); - message.reply(`AleeBot's Prefix in this guild is now \`${args[0]}\``); - log(`[i] The guild ${message.guild.name} has changed AleeBot's prefix to ${args[0]}`) - }; - - exports.conf = { - aliases: [], - guildOnly: true, - }; - exports.help = { - name: 'setprefix', - description: 'Sets the guild prefix.', - usage: 'setprefix [prefix]', - category: '- Settings Commands', - }; - \ No newline at end of file + message.reply(`AleeBot's Prefix in this guild is now \`${args[0]}\``); + log(`[i] The guild ${message.guild.name} has changed AleeBot's prefix to ${args[0]}`); +}; + +exports.conf = { + aliases: [], + guildOnly: true, +}; +exports.help = { + name: 'setprefix', + description: 'Sets the guild prefix.', + usage: 'setprefix [prefix]', + category: '- Settings Commands', +}; diff --git a/commands/suggest.js b/commands/suggest.js index 1b2d814..6fb4289 100644 --- a/commands/suggest.js +++ b/commands/suggest.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * Suggest: Command for AleeBot * Copyright (C) 2017-2020 Alee Productions * @@ -15,32 +15,31 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message, args) => { - if (message.guild.id != '243022206437687296') return message.reply ('This is a ALP exclusive command.'); - const { RichEmbed } = require('discord.js'); - client.channels.find('id', '427495678390960148').send( - new RichEmbed() - .setColor ('#1fd619') + if (message.guild.id != '243022206437687296') return message.reply('This is a ALP exclusive command.'); + const {RichEmbed} = require('discord.js'); + client.channels.find('id', '427495678390960148').send( + new RichEmbed() + .setColor('#1fd619') .setTitle('Suggestion') .setDescription(`This is a suggestion from `+ message.author.username +` please react to it using the following emojis.`) - .addField('Suggestion Contents', args.join(' ')) - ).then(message => { - message.react('\u2705'); - message.react('\u274E'); - }); - message.reply("Your suggestion has been shown in the suggestions channel.") - }; - - exports.conf = { - aliases: [], - guildOnly: false, - }; - exports.help = { - name: 'suggest', - description: 'Suggest a feature in ACN.', - usage: 'suggest [suggestion]', - category: '- ALP Exclusive Commands', - }; - \ No newline at end of file + .addField('Suggestion Contents', args.join(' ')), + ).then((message) => { + message.react('\u2705'); + message.react('\u274E'); + }); + message.reply('Your suggestion has been shown in the suggestions channel.'); +}; + +exports.conf = { + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'suggest', + description: 'Suggest a feature in ACN.', + usage: 'suggest [suggestion]', + category: '- ALP Exclusive Commands', +}; diff --git a/commands/suggestfeature.js b/commands/suggestfeature.js index 95e1c2d..fac82a6 100644 --- a/commands/suggestfeature.js +++ b/commands/suggestfeature.js @@ -19,6 +19,7 @@ * *************************************/ module.exports.run = async (client, message, args) => { const { RichEmbed } = require('discord.js'); + client.channels.find('id', '427495678390960148').send( new RichEmbed() .setColor ('#1fd619') diff --git a/commands/uptime.js b/commands/uptime.js index 7c8d9fe..8f97d02 100644 --- a/commands/uptime.js +++ b/commands/uptime.js @@ -1,45 +1,43 @@ -/**************************************** - * - * Uptime: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions & OfficialRain - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * *************************************/ -module.exports.run = async (client, message) => { - - let uptime = parseInt(client.uptime); - uptime = Math.floor(uptime / 1000); - let uptimeMinutes = Math.floor(uptime / 60); - const minutes = uptime % 60; - let hours = 0; - while (uptimeMinutes >= 60) { - hours++; - uptimeMinutes = uptimeMinutes - 60; - } - const uptimeSeconds = minutes % 60; - message.channel.send(':clock3: AleeBot has been up for ' + hours + ' hours, ' + uptimeMinutes + ' minutes, and ' + uptimeSeconds + ' seconds.'); - -}; - -exports.conf = { - aliases: [], - guildOnly: false, -}; -exports.help = { - name: 'uptime', - description: 'Displays Uptime.', - usage: 'uptime', - category: '- General Commands', -}; +/** ************************************** + * + * Uptime: Command for AleeBot + * Copyright (C) 2017-2020 Alee Productions & OfficialRain + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * *************************************/ +module.exports.run = async (client, message) => { + let uptime = parseInt(client.uptime); + uptime = Math.floor(uptime / 1000); + let uptimeMinutes = Math.floor(uptime / 60); + const minutes = uptime % 60; + let hours = 0; + while (uptimeMinutes >= 60) { + hours++; + uptimeMinutes = uptimeMinutes - 60; + } + const uptimeSeconds = minutes % 60; + message.channel.send(':clock3: AleeBot has been up for ' + hours + ' hours, ' + uptimeMinutes + ' minutes, and ' + uptimeSeconds + ' seconds.'); +}; + +exports.conf = { + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'uptime', + description: 'Displays Uptime.', + usage: 'uptime', + category: '- General Commands', +}; diff --git a/commands/userinfo.js b/commands/userinfo.js index 2eebd8b..3b79beb 100644 --- a/commands/userinfo.js +++ b/commands/userinfo.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * UserInfo: Command for AleeBot * Copyright (C) 2017-2020 Alee Productions * @@ -15,30 +15,28 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message) => { - const Discord = require('discord.js'); - var embed = new Discord.RichEmbed() - .setAuthor(message.author.tag, message.author.avatarURL) - .setDescription("User Information") - .setThumbnail(message.author.avatarURL) - .addField("Names", "**Username:** " + message.author.username + "\n**Current Nickname:** " + message.member.displayName) - .addField("Identity", `**User ID:** ${message.author.id} `) - .addField("Create and Join Times", "**Created At:** " + message.member.user.createdAt.toUTCString() + "\n**Joined Guild At:** " + message.member.joinedAt.toUTCString()) - .setColor('#1fd619') - message.channel.send({embed}); + const Discord = require('discord.js'); + const embed = new Discord.RichEmbed() + .setAuthor(message.author.tag, message.author.avatarURL) + .setDescription('User Information') + .setThumbnail(message.author.avatarURL) + .addField('Names', '**Username:** ' + message.author.username + '\n**Current Nickname:** ' + message.member.displayName) + .addField('Identity', `**User ID:** ${message.author.id} `) + .addField('Create and Join Times', '**Created At:** ' + message.member.user.createdAt.toUTCString() + '\n**Joined Guild At:** ' + message.member.joinedAt.toUTCString()) + .setColor('#1fd619'); + message.channel.send({embed}); +}; - }; - - exports.conf = { - aliases: ['uinfo'], - guildOnly: false, - }; - exports.help = { - name: 'userinfo', - description: 'Tells your info.', - usage: 'userinfo', - category: '- Information Commands', - }; - \ No newline at end of file +exports.conf = { + aliases: ['uinfo'], + guildOnly: false, +}; +exports.help = { + name: 'userinfo', + description: 'Tells your info.', + usage: 'userinfo', + category: '- Information Commands', +}; diff --git a/commands/vtquote.js b/commands/vtquote.js index e21db08..7d1ccd0 100644 --- a/commands/vtquote.js +++ b/commands/vtquote.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * VTQuote: Command for AleeBot * Copyright (C) 2017-2020 Alee Productions * @@ -15,51 +15,50 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message) => { - const Discord = require('discord.js'); - - let VictorQuote; - - function GetVictorQuote(quoteNum = -1) { - VictorQuote = new Discord.RichEmbed(); - - let quo = require('../storage/vtquotes.json').quotes - - if (quoteNum == -1) { - quoteNum = Math.floor(Math.random() * 1000) % quo.length; - quo=quo[quoteNum]; - } - - const author = quo.author; - const authorImage = quo.authorImage; - const quote = quo.quote; - const year = quo.year; - const url = quo.url; - - VictorQuote.setAuthor(author, authorImage); - VictorQuote.setColor('#1fd619'); - VictorQuote.setDescription(quote); - VictorQuote.setFooter('- ' + year); - VictorQuote.setURL(url); - - return VictorQuote; - } - - const victorquote = GetVictorQuote(); - message.reply('Alright, here\'s your Victor quote.') - message.channel.send(victorquote); - }; - - exports.conf = { - aliases: [], - guildOnly: false, - }; - exports.help = { - name: 'vtquote', - description: 'Tells you quotes when victor accidentaly swore.', - usage: 'vtquote', - category: '- Quote Commands', - }; - \ No newline at end of file + const Discord = require('discord.js'); + + let VictorQuote; + + function GetVictorQuote(quoteNum = -1) { + VictorQuote = new Discord.RichEmbed(); + + let quo = require('../storage/vtquotes.json').quotes; + + if (quoteNum == -1) { + quoteNum = Math.floor(Math.random() * 1000) % quo.length; + quo=quo[quoteNum]; + } + + const author = quo.author; + const authorImage = quo.authorImage; + const quote = quo.quote; + const year = quo.year; + const url = quo.url; + + VictorQuote.setAuthor(author, authorImage); + VictorQuote.setColor('#1fd619'); + VictorQuote.setDescription(quote); + VictorQuote.setFooter('- ' + year); + VictorQuote.setURL(url); + + return VictorQuote; + } + + const victorquote = GetVictorQuote(); + message.reply('Alright, here\'s your Victor quote.'); + message.channel.send(victorquote); +}; + +exports.conf = { + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'vtquote', + description: 'Tells you quotes when victor accidentaly swore.', + usage: 'vtquote', + category: '- Quote Commands', +}; diff --git a/deprecated/buy.js b/deprecated/buy.js index e5b8fee..8e52f08 100644 --- a/deprecated/buy.js +++ b/deprecated/buy.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * Buy: Command for AleeBot * Copyright (C) 2018 AleeCorp * @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message, args) => { /* @@ -23,27 +23,27 @@ const Discord = require('discord.js'); const fs = require('fs') const db = require('quick.db'); const items = JSON.parse(fs.readFileSync('./storage/items.json', 'utf8')); - - let categories = []; - if (!args.join(" ")) { + let categories = []; + + if (!args.join(" ")) { + + + for (var i in items) { - - for (var i in items) { - if (!categories.includes(items[i].type)) { categories.push(items[i].type) } } - + const embed = new Discord.RichEmbed() .setDescription(`Available Items`) .setColor('#1fd619') - for (var i = 0; i < categories.length; i++) { + for (var i = 0; i < categories.length; i++) { var tempDesc = ''; @@ -60,7 +60,7 @@ const items = JSON.parse(fs.readFileSync('./storage/items.json', 'utf8')); } - + return message.channel.send({ embed }); @@ -72,15 +72,15 @@ const items = JSON.parse(fs.readFileSync('./storage/items.json', 'utf8')); let itemPrice = 0; let itemDesc = ''; - for (var i in items) { - if (args.join(" ").trim().toUpperCase() === items[i].name.toUpperCase()) { + for (var i in items) { + if (args.join(" ").trim().toUpperCase() === items[i].name.toUpperCase()) { itemName = items[i].name; itemPrice = items[i].price; itemDesc = items[i].desc; } } - + if (itemName === '') { return message.channel.send(`Item ${args.join(" ").trim()} not found.`) } @@ -90,10 +90,10 @@ const items = JSON.parse(fs.readFileSync('./storage/items.json', 'utf8')); if (selfBalance === null) { db.set(`userBalance_${message.author.id}`, 0); selfBalance = 0 - } + } if (itemPrice > selfBalance) return message.reply('You don\'t have enough money for this item.') - + db.subtract(`userBalance_${message.author.id}`, itemPrice); if (itemName === 'Programmer Role') { @@ -102,17 +102,16 @@ const items = JSON.parse(fs.readFileSync('./storage/items.json', 'utf8')); message.channel.send('You bought ' + itemName + '!'); */ - message.reply('Command is broken for now'); + message.reply('Command is broken for now'); }; exports.conf = { - aliases: [], - guildOnly: false, + aliases: [], + guildOnly: false, }; exports.help = { - name: 'buy', - description: 'Buy things.', - usage: 'buy [item]', - category: '- Economy Commands', + name: 'buy', + description: 'Buy things.', + usage: 'buy [item]', + category: '- Economy Commands', }; - \ No newline at end of file diff --git a/deprecated/daily.js b/deprecated/daily.js index 0d844a2..efb6c2e 100644 --- a/deprecated/daily.js +++ b/deprecated/daily.js @@ -1,5 +1,5 @@ -/**************************************** - * +/** ************************************** + * * Daily: Command for AleeBot * Copyright (C) 2018 AleeCorp * @@ -15,45 +15,42 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ const db = require('quick.db'); - ms = require('parse-ms'); +ms = require('parse-ms'); module.exports.run = async (client, message) => { + const cooldown = 8.64e+7; + const amount = 100; - let cooldown = 8.64e+7, - amount = 100; - - let lastDaily = await db.fetch(`lastDaily_${message.author.id}`); - - if (lastDaily !== null && cooldown - (Date.now() - lastDaily) > 0) { - let timeObj = ms(cooldown - (Date.now() - lastDaily)); + const lastDaily = await db.fetch(`lastDaily_${message.author.id}`); - message.reply(`You already collected your money, please wait **${timeObj.hours}h ${timeObj.minutes}m**!`) - } else { - message.channel.send(`You have successfully collected $${amount} dollars!`); + if (lastDaily !== null && cooldown - (Date.now() - lastDaily) > 0) { + const timeObj = ms(cooldown - (Date.now() - lastDaily)); - let balance = await db.fetch(`userBalance_${message.author.id}`); + message.reply(`You already collected your money, please wait **${timeObj.hours}h ${timeObj.minutes}m**!`); + } else { + message.channel.send(`You have successfully collected $${amount} dollars!`); - if (balance == null) { - db.set(`userBalance_${message.author.id}`, 0); - } + const balance = await db.fetch(`userBalance_${message.author.id}`); - db.set(`lastDaily_${message.author.id}`, Date.now()); - db.add(`userBalance_${message.author.id}`, 100); + if (balance == null) { + db.set(`userBalance_${message.author.id}`, 0); } - }; - - exports.conf = { - aliases: [], - guildOnly: false, - }; - exports.help = { - name: 'daily', - description: 'This gives you money everyday.', - usage: 'daily', - category: '- Economy Commands', - }; - \ No newline at end of file + db.set(`lastDaily_${message.author.id}`, Date.now()); + db.add(`userBalance_${message.author.id}`, 100); + } +}; + +exports.conf = { + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'daily', + description: 'This gives you money everyday.', + usage: 'daily', + category: '- Economy Commands', +}; diff --git a/package.json b/package.json index 9631ca5..c982509 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "discord.js": "^11.3.1", "fs": "0.0.1-security", "git-last-commit": "^0.3.0", + "i18next": "^19.4.4", "moment": "^2.21.0", "node-opus": "^0.3.0", "os": "^0.1.1", -- cgit v1.2.3 From ed456ef581c5acd852a924d9cc274a259b2d8ce5 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Thu, 23 Jul 2020 11:41:02 -0400 Subject: Converted to Discord.JS v12, starting database --- To be worked on/leave.js | 22 +- To be worked on/play.js | 136 +++++----- To be worked on/queue.js | 30 +-- To be worked on/skip.js | 40 +-- bot_discord.js | 635 +++++++++++++++++++++++---------------------- commands/addquote.js | 16 +- commands/ask.js | 44 ++-- commands/avatarurl.js | 16 +- commands/balance.js | 50 ---- commands/ban.js | 38 +-- commands/eval.js | 104 ++++---- commands/git.js | 34 +-- commands/help.js | 74 +++--- commands/info.js | 32 +-- commands/interrogate.js | 26 +- commands/invite.js | 44 ++-- commands/jail.js | 26 +- commands/kick.js | 38 +-- commands/leaveguild.js | 18 +- commands/pay.js | 60 ----- commands/ping.js | 14 +- commands/poweroff.js | 38 +-- commands/purge.js | 22 +- commands/quote.js | 60 ++--- commands/reload.js | 55 ++++ commands/say.js | 20 +- commands/setprefix.js | 44 ++-- commands/setup.js | 45 ++++ commands/suggest.js | 38 +-- commands/suggestfeature.js | 40 +-- commands/uptime.js | 34 +-- commands/userinfo.js | 32 +-- commands/vtquote.js | 64 ----- deprecated/balance.js | 50 ++++ deprecated/buy.js | 17 +- deprecated/daily.js | 42 +-- deprecated/pay.js | 60 +++++ package.json | 11 +- storage/items.json | 20 -- 39 files changed, 1104 insertions(+), 1085 deletions(-) delete mode 100644 commands/balance.js delete mode 100644 commands/pay.js create mode 100644 commands/reload.js create mode 100644 commands/setup.js delete mode 100644 commands/vtquote.js create mode 100644 deprecated/balance.js create mode 100644 deprecated/pay.js delete mode 100644 storage/items.json (limited to 'package.json') diff --git a/To be worked on/leave.js b/To be worked on/leave.js index 63915c8..da0b4cc 100644 --- a/To be worked on/leave.js +++ b/To be worked on/leave.js @@ -19,24 +19,24 @@ * *************************************/ module.exports.run = async (client, message, args) => { - if (!message.member.voiceChannel) return message.reply('You need a voice channel to perform this action.'); + if (!message.member.voiceChannel) return message.reply('You need a voice channel to perform this action.'); - if (!message.guild.me.voiceChannel) return message.reply('Error: The bot isn\'t connected to a voice channel.'); + if (!message.guild.me.voiceChannel) return message.reply('Error: The bot isn\'t connected to a voice channel.'); - if (message.guild.me.voiceChannelID !== message.member.voiceChannelID) return message.reply('Error: You aren\'t connected in the same voice channel as the bot...'); + if (message.guild.me.voiceChannelID !== message.member.voiceChannelID) return message.reply('Error: You aren\'t connected in the same voice channel as the bot...'); - message.guild.me.voiceChannel.leave(); + message.guild.me.voiceChannel.leave(); - message.channel.send('Leaving channel...'); + message.channel.send('Leaving channel...'); }; exports.conf = { - aliases: [], - guildOnly: false, + aliases: [], + guildOnly: false, }; exports.help = { - name: 'leave', - description: 'Leaves voice chat.', - usage: 'leave', - category: '- Music Commands', + name: 'leave', + description: 'Leaves voice chat.', + usage: 'leave', + category: '- Music Commands', }; diff --git a/To be worked on/play.js b/To be worked on/play.js index 71112e1..abebc8b 100644 --- a/To be worked on/play.js +++ b/To be worked on/play.js @@ -19,97 +19,97 @@ * *************************************/ module.exports.run = async (client, message, args, ops) => { - const ytdl = require('ytdl-core'); + const ytdl = require('ytdl-core'); - if (!message.member.voiceChannel) return message.reply('Please connect to a voice channel...'); + if (!message.member.voiceChannel) return message.reply('Please connect to a voice channel...'); - if (!args[0]) return message.reply('Please input a url.'); + if (!args[0]) return message.reply('Please input a url.'); - const vaildate = await ytdl.validateURL(args[0]); + const vaildate = await ytdl.validateURL(args[0]); - if (!vaildate) return message.reply('Please input a **valid** url.'); + if (!vaildate) return message.reply('Please input a **valid** url.'); - const info = await ytdl.getInfo(args[0]); + const info = await ytdl.getInfo(args[0]); - const data = ops.active.get(message.guild.id) || {}; + const data = ops.active.get(message.guild.id) || {}; - if (!data.connection) data.connection = await message.member.voiceChannel.join(); - if (!data.queue) data.queue = []; - data.guildID = message.guild.id; + if (!data.connection) data.connection = await message.member.voiceChannel.join(); + if (!data.queue) data.queue = []; + data.guildID = message.guild.id; - data.queue.push({ - songTitle: info.title, - requester: message.author.tag, - url: args[0], - announceChannel: message.channel.id, - }); - if (!data.dispatcher) play(client, ops, data); - else { - const {RichEmbed} = require('discord.js'); - const embed = new RichEmbed() - .setTitle('This music has been added to the queue!') - .setAuthor(info.title, client.user.avatarURL) - .setColor(0x00afff) - .setTimestamp() - .addField('Title', info.title) - .addField('Requested by:', message.author.tag) - .setFooter('AleeBot Music Player'); + data.queue.push({ + songTitle: info.title, + requester: message.author.tag, + url: args[0], + announceChannel: message.channel.id, + }); + if (!data.dispatcher) play(client, ops, data); + else { + const {MessageEmbed} = require('discord.js'); + const embed = new MessageEmbed() + .setTitle('This music has been added to the queue!') + .setAuthor(info.title, client.user.avatarURL()) + .setColor(0x00afff) + .setTimestamp() + .addField('Title', info.title) + .addField('Requested by:', message.author.tag) + .setFooter('AleeBot Music Player'); - message.channel.send({embed}); - } + message.channel.send({embed}); + } - ops.active.set(message.guild.id, data); + ops.active.set(message.guild.id, data); }; async function play(client, ops, data) { - const ytdl = require('ytdl-core'); - const {RichEmbed} = require('discord.js'); - const embed = new RichEmbed() - .setTitle('Now playing!') - .setAuthor(data.queue[0].songTitle, client.user.avatarURL) - .setColor(0x00afff) - .setTimestamp() - .addField('Title', data.queue[0].songTitle) - .addField('Requested by:', data.queue[0].requester) - // .addField('Link', info.url) - // .addField('Duration', time) - .setFooter('AleeBot Music Player'); - - client.channels.get(data.queue[0].announceChannel).send({embed}); - - data.dispatcher = await data.connection.playStream(ytdl(data.queue[0].url, {filter: 'audioonly'})); - data.dispatcher.guildID = data.guildID; - - data.dispatcher.once('finish', function() { - finish(client, ops, this); - }); -}; + const ytdl = require('ytdl-core'); + const {MessageEmbed} = require('discord.js'); + const embed = new MessageEmbed() + .setTitle('Now playing!') + .setAuthor(data.queue[0].songTitle, client.user.avatarURL()) + .setColor(0x00afff) + .setTimestamp() + .addField('Title', data.queue[0].songTitle) + .addField('Requested by:', data.queue[0].requester) + // .addField('Link', info.url) + // .addField('Duration', time) + .setFooter('AleeBot Music Player'); + + client.channels.get(data.queue[0].announceChannel).send({embed}); + + data.dispatcher = await data.connection.playStream(ytdl(data.queue[0].url, {filter: 'audioonly'})); + data.dispatcher.guildID = data.guildID; + + data.dispatcher.once('finish', function() { + finish(client, ops, this); + }); +} function finish(client, ops, dispatcher) { - const fetched = ops.active.get(dispatcher.guildID); + const fetched = ops.active.get(dispatcher.guildID); - fetched.queue.shift(); + fetched.queue.shift(); - if (fetched.queue.length > 0) { - ops.active.set(dispatcher.guildID, fetched); + if (fetched.queue.length > 0) { + ops.active.set(dispatcher.guildID, fetched); - play(client, ops, fetched); - } else { - ops.active.delete(dispatcher.guildID); + play(client, ops, fetched); + } else { + ops.active.delete(dispatcher.guildID); - const vc = client.guild.get(dispatcher.guildID).me.voiceChannel; + const vc = client.guild.get(dispatcher.guildID).me.voiceChannel; - if (vc) vc.leave(); - } + if (vc) vc.leave(); + } } exports.conf = { - aliases: [], - guildOnly: false, + aliases: [], + guildOnly: false, }; exports.help = { - name: 'play', - description: 'Plays music.', - usage: 'play [url]', - category: '- Music Commands', + name: 'play', + description: 'Plays music.', + usage: 'play [url]', + category: '- Music Commands', }; diff --git a/To be worked on/queue.js b/To be worked on/queue.js index f5f0ae9..1208ddf 100644 --- a/To be worked on/queue.js +++ b/To be worked on/queue.js @@ -19,29 +19,29 @@ * *************************************/ module.exports.run = async (client, message, args, ops) => { - const fetched = ops.active.get(message.guild.id); + const fetched = ops.active.get(message.guild.id); - if (!fetched) return message.reply('Currently, there isn\'t any music playing in this guild.'); + if (!fetched) return message.reply('Currently, there isn\'t any music playing in this guild.'); - const queue = fetched.queue; - const nowPlaying = queue[0]; + const queue = fetched.queue; + const nowPlaying = queue[0]; - let resp = `__**Now Playing**__\n**${nowPlaying.songTitle}** -- **Requested By:** *${nowPlaying.requester}*\n\n__**Queue**__\n`; + let resp = `__**Now Playing**__\n**${nowPlaying.songTitle}** -- **Requested By:** *${nowPlaying.requester}*\n\n__**Queue**__\n`; - for (let i = 1; i < queue.length; i++) { - resp += `${i}. **${queue[i].songTitle}** -- **Requested By:** *${queue[i].requester}*\n`; - } + for (let i = 1; i < queue.length; i++) { + resp += `${i}. **${queue[i].songTitle}** -- **Requested By:** *${queue[i].requester}*\n`; + } - message.channel.send(resp); + message.channel.send(resp); }; exports.conf = { - aliases: [], - guildOnly: false, + aliases: [], + guildOnly: false, }; exports.help = { - name: 'queue', - description: 'Checks what music is in queue.', - usage: 'queue', - category: '- Music Commands', + name: 'queue', + description: 'Checks what music is in queue.', + usage: 'queue', + category: '- Music Commands', }; diff --git a/To be worked on/skip.js b/To be worked on/skip.js index 965b013..371e7e7 100644 --- a/To be worked on/skip.js +++ b/To be worked on/skip.js @@ -19,40 +19,40 @@ * *************************************/ module.exports.run = async (client, message, args, ops) => { - const fetched = ops.active.get(message.guild.id); + const fetched = ops.active.get(message.guild.id); - if (!fetched) return message.reply('Currently, there isn\'t any music playing in this guild.'); + if (!fetched) return message.reply('Currently, there isn\'t any music playing in this guild.'); - if (message.member.voiceChannel !== message.guild.me.voiceChannel) return message.reply('Sorry, you are currently not in the same channel as the bot.'); + if (message.member.voiceChannel !== message.guild.me.voiceChannel) return message.reply('Sorry, you are currently not in the same channel as the bot.'); - const userCount = message.member.voiceChannel.members.size; + const userCount = message.member.voiceChannel.members.size; - const required = Math.ceil(userCount/2); + const required = Math.ceil(userCount/2); - if (!fetched.queue[0].voteSkips) fetched.queue[0].voteSkips = []; + if (!fetched.queue[0].voteSkips) fetched.queue[0].voteSkips = []; - if (fetched.queue[0].voteSkips.includes(message.member.id)) return message.reply(`Sorry, you have already voted to skip! ${fetched.queue[0].voteSkips.length}/${required} required.`); + if (fetched.queue[0].voteSkips.includes(message.member.id)) return message.reply(`Sorry, you have already voted to skip! ${fetched.queue[0].voteSkips.length}/${required} required.`); - fetched.queue[0].voteSkips.push(message.member.id); + fetched.queue[0].voteSkips.push(message.member.id); - ops.active.set(message.guild.id, fetched); + ops.active.set(message.guild.id, fetched); - if (fetched.queue[0].voteSkips.length >= required) { - message.channel.send('Successfully skipped song!'); + if (fetched.queue[0].voteSkips.length >= required) { + message.channel.send('Successfully skipped song!'); - return fetched.dispatcher.emit('finish'); - } + return fetched.dispatcher.emit('finish'); + } - message.channel.send(`Successfully voted to skip! ${fetched.queue[0].voteSkips.length}/${required} required.`); + message.channel.send(`Successfully voted to skip! ${fetched.queue[0].voteSkips.length}/${required} required.`); }; exports.conf = { - aliases: [], - guildOnly: false, + aliases: [], + guildOnly: false, }; exports.help = { - name: 'skip', - description: 'Skips a music.', - usage: 'skip', - category: '- Music Commands', + name: 'skip', + description: 'Skips a music.', + usage: 'skip', + category: '- Music Commands', }; diff --git a/bot_discord.js b/bot_discord.js index 5c437c9..dfaf6fc 100644 --- a/bot_discord.js +++ b/bot_discord.js @@ -19,12 +19,13 @@ * *************************************/ const Discord = require('discord.js'); const moment = require('moment'); +const Sequelize = require('sequelize'); const readline = require('readline'); const colors = require('colors'); const DBL = require('dblapi.js'); const i18next = require('i18next'); const client = new Discord.Client({ - disableEveryone: true, + disableEveryone: true, }); const settings = require('./storage/settings.json'); const fs = require('fs'); @@ -32,15 +33,18 @@ const api = require('./tokens.json'); const dbl = new DBL(api.dbltoken, client); const active = new Map(); const ownerID = '242775871059001344'; +var autoRole = true; +var logChannel = '318874545593384970'; +let statusChannelID = '606602551634296968'; const log = (message) => { - console.log(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] ${message}`.white); + console.log(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] ${message}`.white); }; const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout, - prompt: '> '.gray, + input: process.stdin, + output: process.stdout, + prompt: '> '.gray, }); console.log(`AleeBot ${settings.abVersion}: Copyright (C) 2017-2020 Alee Productions`.gray); @@ -49,376 +53,373 @@ console.log('This is free software, and you are welcome to redistribute it'.gray console.log('under certain conditions; type `show c\' for details.\n'.gray); if (process.argv.indexOf('--debug') == -1) { - console.log('Running AleeBot without --debug command line flag. Debug output disabled.\n'.yellow); + console.log('Running AleeBot without --debug command line flag. Debug output disabled.\n'.yellow); } else { - console.log('[!] Entering debug mode...'.yellow); - client.on('debug', function(info) { - log(info.gray); - }); - client.on('warn', function(info) { - log(info.red); - }); + console.log('[!] Entering debug mode...'.yellow); + client.on('debug', function(info) { + log(info.gray); + }); + client.on('warn', function(info) { + log(info.red); + }); } if (process.argv.indexOf('--beta') == -1) { - client.login(api.abtoken).catch(function() { - console.log('[X] Login failed. The token that you put in is invalid, please put in a new one...'.red); - process.exit(0); - }); + client.login(api.abtoken).catch(function() { + console.log('[X] Login failed. The token that you put in is invalid, please put in a new one...'.red); + process.exit(0); + }); } else { - client.login(api.abbtoken).catch(function() { - console.log('[X] Login failed. The token that you put in is invalid, please put in a new one...'.red); - process.exit(0); - }); + client.login(api.abbtoken).catch(function() { + console.log('[X] Login failed. The token that you put in is invalid, please put in a new one...'.red); + process.exit(0); + }); } client.commands = new Discord.Collection(); client.aliases = new Discord.Collection(); fs.readdir('./commands', (err, files) => { - if (err) console.error(err); - log(`[!] Attempting to load a total of ${files.length} commands into the memory.`.cyan); - files.forEach((file) => { - try { - const command = require(`./commands/${file}`); - log(`[!] Attempting to load the command "${command.help.name}".`.cyan); - client.commands.set(command.help.name, command); - command.conf.aliases.forEach((alias) => { - client.aliases.set(alias, command.help.name); - log(`[!] Attempting to load "${alias}" as an alias for "${command.help.name}"`.cyan); - }); - } catch (err) { - log('[X] An error has occured trying to load a command. Here is the error.'.red); - console.log(err.stack); - } - }); - log('[>] Command Loading complete!'.green); - console.log('\n'); + if (err) console.error(err); + log(`[!] Attempting to load a total of ${files.length} commands into the memory.`.cyan); + files.forEach((file) => { + try { + const command = require(`./commands/${file}`); + log(`[!] Attempting to load the command "${command.help.name}".`.cyan); + client.commands.set(command.help.name, command); + command.conf.aliases.forEach((alias) => { + client.aliases.set(alias, command.help.name); + log(`[!] Attempting to load "${alias}" as an alias for "${command.help.name}"`.cyan); + }); + } catch (err) { + log('[X] An error has occured trying to load a command. Here is the error.'.red); + console.log(err.stack); + } + }); + log('[>] Command Loading complete!'.green); + console.log('\n'); }); rl.on('line', function(cmd) { - const args = cmd.split(' '); - switch (args[0]) { - case 'guilds': - if (client.guilds.size === 0) { - console.log(('[!] No guilds found.'.yellow)); - } else { - console.log('[i] Here\'s the servers that AleeBot is connected to:'); - for ([id, guild] of client.guilds) { - console.log(` Guild Name: ${guild.name} - ID: ${guild.id}`.blue); - } - } - break; - case 'channels': - if (!args[1]) { - console.log('[!] Please insert the guild\'s ID.'.yellow); - } else { - var guild = client.guilds.get(args[1]); - console.log('[i] Here\'s the channels that this guild have:'.blue); - for ([id, channel, guild] of guild && client.channels) { - console.log(` Channel: #${channel.name} - ID: ${channel.id}`.blue); - } - } - break; - case 'leave': - if (!args[1]) { - console.log('[!] Please insert the guild\'s ID.'.yellow); - } else { - var guild = client.guilds.get(args[1]); - guild.leave(); - } - break; - case 'broadcast': - if (!args[1]) { - console.log('[!] Usage: broadcast [guildID] [channelID].'.yellow); - } else { - const broadcast = args.join(' ').slice(48); - var guild = null; - guild = client.guilds.get(args[1]); - var channel = null; - channel = guild.channels.get(args[2]); - if (channel != null) { - channel.send(broadcast); - } - } - break; - case 'uptime': - let uptime = parseInt(client.uptime); - uptime = Math.floor(uptime / 1000); - let uptimeMinutes = Math.floor(uptime / 60); - const minutes = uptime % 60; - let hours = 0; - while (uptimeMinutes >= 60) { - hours++; - uptimeMinutes = uptimeMinutes - 60; - } - const uptimeSeconds = minutes % 60; - console.log(`[i] AleeBot has been up for ${hours} hours, ${uptimeMinutes} minutes, and ${uptimeSeconds} seconds.`.blue); - break; - case 'exit': - console.log('[i] AleeBot will now exit!'.blue); - const asyncPowerOff = async () => { - const embed = new Discord.RichEmbed() - .setAuthor('AleeBot Status', client.user.avatarURL) - .setDescription('AleeBot is now going offline...') - .setColor('#ff3333'); - await client.channels.find('id', '606602551634296968').send({embed}); - }; - asyncPowerOff(); - client.destroy(); - process.exit(0); - break; - case 'help': - let msg = (`AleeBot `+ settings.abVersion +` Console Help\n\n`); - msg += (`guilds - Shows all guilds that AleeBot's on.\n`); - msg += (`channels - Shows all the channels that the guilds have.\n`); - msg += (`leave - Leaves a guild.\n`); - msg += (`broadcast - Broadcasts a message to a server.\n`); - msg += (`uptime - Shows the uptime for AleeBot.\n`); - msg += (`help - Shows this command.\n`); - msg += (`exit - Exits AleeBot.\n`); - console.log(msg.cyan); - break; - default: - console.log('Unknown command, type \'help\' to list the commands...'.yellow); - } - rl.prompt(); + const args = cmd.split(' '); + switch (args[0]) { + case 'guilds': + if (client.guilds.size === 0) { + console.log(('[!] No guilds found.'.yellow)); + } else { + console.log('[i] Here\'s the servers that AleeBot is connected to:'); + for ([id, guild] of client.guilds) { + console.log(` Guild Name: ${guild.name} - ID: ${guild.id}`.blue); + } + } + break; + case 'channels': + if (!args[1]) { + console.log('[!] Please insert the guild\'s ID.'.yellow); + } else { + var guild = client.guilds.get(args[1]); + console.log('[i] Here\'s the channels that this guild have:'.blue); + for ([id, channel, guild] of guild && client.channels) { + console.log(` Channel: #${channel.name} - ID: ${channel.id}`.blue); + } + } + break; + case 'leave': + if (!args[1]) { + console.log('[!] Please insert the guild\'s ID.'.yellow); + } else { + var guild = client.guilds.get(args[1]); + guild.leave(); + } + break; + case 'broadcast': + if (!args[1]) { + console.log('[!] Usage: broadcast [guildID] [channelID].'.yellow); + } else { + const broadcast = args.join(' ').slice(48); + var guild = null; + guild = client.guilds.get(args[1]); + var channel = null; + channel = guild.channels.get(args[2]); + if (channel != null) { + channel.send(broadcast); + } + } + break; + case 'uptime': + let uptime = parseInt(client.uptime); + uptime = Math.floor(uptime / 1000); + let uptimeMinutes = Math.floor(uptime / 60); + const minutes = uptime % 60; + let hours = 0; + while (uptimeMinutes >= 60) { + hours++; + uptimeMinutes = uptimeMinutes - 60; + } + const uptimeSeconds = minutes % 60; + console.log(`[i] AleeBot has been up for ${hours} hours, ${uptimeMinutes} minutes, and ${uptimeSeconds} seconds.`.blue); + break; + case 'exit': + console.log('[i] AleeBot will now exit!'.blue); + const asyncPowerOff = async () => { + const readyEmbed = new Discord.MessageEmbed() + .setAuthor('AleeBot Status', client.user.avatarURL()) + .setDescription('AleeBot is now going offline...') + .setColor('#ff3333'); + let statusChannel = client.channels.cache.get(statusChannelID); + if (!statusChannel) return console.error('The status channel does not exist! Skipping.'); + await statusChannel.send(readyEmbed); + }; + asyncPowerOff(); + client.destroy(); + process.exit(0); + break; + case 'help': + let msg = ('AleeBot '+ settings.abVersion +' Console Help\n\n'); + msg += ('guilds - Shows all guilds that AleeBot\'s on.\n'); + msg += ('channels - Shows all the channels that the guilds have.\n'); + msg += ('leave - Leaves a guild.\n'); + msg += ('broadcast - Broadcasts a message to a server.\n'); + msg += ('uptime - Shows the uptime for AleeBot.\n'); + msg += ('help - Shows this command.\n'); + msg += ('exit - Exits AleeBot.\n'); + console.log(msg.cyan); + break; + default: + console.log('Unknown command, type \'help\' to list the commands...'.yellow); + } + rl.prompt(); +}); + +const sequelize = new Sequelize('database', 'user', 'password', { + host: 'localhost', + dialect: 'sqlite', + logging: false, + // SQLite only + storage: 'database.sqlite', }); client.on('ready', () => { - log('[>] AleeBot is now ready!'.green); - log(`[i] Logged in as ${client.user.tag}`.green); - log(`[i] Default Prefix: ${settings.prefix}`.green); - log(`[i] Bot ID: ${client.user.id}`.green); - log(`[i] Token: ${api.abtoken}`.green); - log(`[i] Running version ${settings.abVersion} and in ${client.guilds.size} guilds`.green); - - client.setInterval(function() { - const games = [ - 'AleeBot ' + settings.abVersion + ' | ' + settings.prefix + 'help', - 'Annoying Alee', - 'Coding stuff', - 'Drawing shapes', - 'Fighting AstralMod', - ]; - /* + log('[>] AleeBot is now ready!'.green); + log(`[i] Logged in as ${client.user.tag}`.green); + log(`[i] Default Prefix: ${settings.prefix}`.green); + log(`[i] Bot ID: ${client.user.id}`.green); + log(`[i] Token: ${api.abtoken}`.green); + log(`[i] Running version ${settings.abVersion} and in ${client.guilds.cache.size} guilds`.green); + + client.setInterval(function() { + const games = [ + 'AleeBot ' + settings.abVersion + ' | ' + settings.prefix + 'help', + 'Coding stuff', + 'Drawing shapes', + 'Fighting AstralMod', + ]; + /* setInterval(() => { dbl.postStats(client.guilds.size, client.shards.Id, client.shards.total); }, 1800000);*/ - client.user.setPresence({ - status: 'online', - afk: false, - game: { - type: 0, - name: games[Math.floor(Math.random() * games.length)], - }, - }); - }, 200000); - client.user.setStatus('online'); - const embed = new Discord.RichEmbed() - .setAuthor('AleeBot Status', client.user.avatarURL) - .setDescription('AleeBot has started') - .setColor('#5cd65c'); - client.channels.find('id', '606602551634296968').send({embed}); - rl.prompt(); + client.user.setPresence({ + status: 'online', + afk: false, + game: { + type: 0, + name: games[Math.floor(Math.random() * games.length)], + }, + }); + }, 200000); + client.user.setStatus('online'); + const readyEmbed = new Discord.MessageEmbed() + .setAuthor('AleeBot Status', client.user.avatarURL()) + .setDescription('AleeBot has started') + .addField('Prefix', `\`${settings.prefix}\``, true) + .setColor('#5cd65c'); + let statusChannel = client.channels.cache.get(statusChannelID); + if (!statusChannel) return console.error('The status channel does not exist! Skipping.'); + statusChannel.send(readyEmbed); + client.user.setStatus('online'); + rl.prompt(); }); client.on('guildMemberAdd', (member) => { - if (member.guild.id != '243022206437687296') return 0; - const role = member.guild.roles.find((role) => role.name === 'Member'); - member.addRole(role); - log(`[i] ${member.user.username} joined Alee Productions.`.green); - log(`[i] I gave ${member.user.username} the "Member" role.`.green); + if (autoRole = true) { + if (member.guild.id != '243022206437687296') return 0; + const role = member.guild.roles.cache.get('657426918416580614'); + member.roles.add(role); + log(`[i] ${member.user.username} joined Alee Productions.`.green); + log(`[i] I gave ${member.user.username} the "Member" role.`.green); + } else { + return; + } }); +/* +client.on('guildMemberRemove', (member) =>{ + +}) +*/ client.on('messageUpdate', async (oldMessage, newMessage) => { - if (oldMessage.guild.id != '243022206437687296') return 0; - if (oldMessage.content === newMessage.content) { - return; - } - const logEmbed = new Discord.RichEmbed() - .setAuthor('AleeBot Logging', client.user.avatarURL) - .setDescription(`A message from ${oldMessage.author.username} was edited`) - .addField('Before: ', `\`\`\`${oldMessage.content}\`\`\``) - .addField('After: ', `\`\`\`${newMessage.content}\`\`\``) - .setColor('#ffff1a') - .setTimestamp() - .setFooter(`Author ID: ${oldMessage.author.id}`); - - const editMessage = newMessage.guild.channels.find((ch) => ch.name === 'logs'); - if (!editMessage) return; - - editMessage.send(logEmbed); + if (oldMessage.guild.id != '243022206437687296') return 0; + if (oldMessage.content === newMessage.content) { + return; + } + const logEmbed = new Discord.MessageEmbed() + .setAuthor('AleeBot Logging', client.user.avatarURL()) + .setDescription(`A message from ${oldMessage.author.username} was edited`) + .addField('Before: ', `\`\`\`${oldMessage.content}\`\`\``) + .addField('After: ', `\`\`\`${newMessage.content}\`\`\``) + .setColor('#ffff1a') + .setTimestamp() + .setFooter(`Author ID: ${oldMessage.author.id}`); + + let editMessage = client.channels.cache.get(logChannel); + if (!editMessage) return; + + editMessage.send(logEmbed); }); client.on('messageDelete', (message) => { - if (message.guild.id != '243022206437687296') return 0; - const logEmbed = new Discord.RichEmbed() - .setAuthor('AleeBot Logging', client.user.avatarURL) - .setDescription(`A message from ${message.author.username} was deleted`) - .addField('Deleted Message: ', `\`\`\`${message.content}\`\`\``) - .setColor('#ff021b') - .setTimestamp() - .setFooter(`Author ID: ${message.author.id}`); - - const deleteMessage = message.guild.channels.find((ch) => ch.name === 'logs'); - if (!deleteMessage) return; - - deleteMessage.send(logEmbed); + if (message.guild.id != '243022206437687296') return 0; + const logEmbed = new Discord.MessageEmbed() + .setAuthor('AleeBot Logging', client.user.avatarURL()) + .setDescription(`A message from ${message.author.username} was deleted`) + .addField('Deleted Message: ', `\`\`\`${message.content}\`\`\``) + .setColor('#ff021b') + .setTimestamp() + .setFooter(`Author ID: ${message.author.id}`); + + let deleteMessage = client.channels.cache.get(logChannel); + if (!deleteMessage) return; + + deleteMessage.send(logEmbed); }); client.on('guildBanAdd', (guild, user) => { - if (guild.id != '243022206437687296') return 0; - const logEmbed = new Discord.RichEmbed() - .setAuthor('AleeBot Logging', client.user.avatarURL) - .setDescription(`This user got banned from ${guild.name}`) - .addField(`User:`, `${user.tag}`) - .addField(`User ID:`, `${user.id}`) - .setColor('#ff021b') - .setTimestamp(); - - const banMessage = guild.channels.find((ch) => ch.name === 'logs'); - if (!banMessage) return; - - banMessage.send(logEmbed); + if (guild.id != '243022206437687296') return 0; + const logEmbed = new Discord.MessageEmbed() + .setAuthor('AleeBot Logging', client.user.avatarURL()) + .setDescription(`This user got banned from ${guild.name}`) + .addField('User:', `${user.tag}`) + .addField('User ID:', `${user.id}`) + .setColor('#ff021b') + .setTimestamp(); + + let banMessage = client.channels.cache.get(logChannel); + if (!banMessage) return; + + banMessage.send(logEmbed); }); client.on('guildBanRemove', (guild, user) => { - if (guild.id != '243022206437687296') return 0; - const logEmbed = new Discord.RichEmbed() - .setAuthor('AleeBot Logging', client.user.avatarURL) - .setDescription(`This user got unbanned from ${guild.name}`) - .addField(`User:`, `${user.tag}`) - .addField(`User ID:`, `${user.id}`) - .setColor('#ff021b') - .setTimestamp(); - - const banMessage = guild.channels.find((ch) => ch.name === 'logs'); - if (!banMessage) return; - - banMessage.send(logEmbed); + if (guild.id != '243022206437687296') return 0; + const logEmbed = new Discord.MessageEmbed() + .setAuthor('AleeBot Logging', client.user.avatarURL()) + .setDescription(`This user got unbanned from ${guild.name}`) + .addField('User:', `${user.tag}`) + .addField('User ID:', `${user.id}`) + .setColor('#ff021b') + .setTimestamp(); + + let banMessage = client.channels.cache.get(logChannel); + if (!banMessage) return; + + banMessage.send(logEmbed); }); client.on('guildCreate', (guild) => { - log(`[i] New guild joined: ${guild.name} (id: ${guild.id}). This guild has ${guild.memberCount} members!`.blue); - /* - const logEmbed = new Discord.RichEmbed() - .setAuthor("AleeBot", client.user.avatarURL) - .setDescription(`I got added to this server!`) - .addField(`Server Name:`, `${guild.name}`) - .addField(`Server ID:`, `${guild.id}`) - .setColor("#5cd65c") - - client.channels.find('id', '606602551634296968').send({logEmbed});*/ + log(`[i] New guild joined: ${guild.name} (id: ${guild.id}). This guild has ${guild.memberCount} members!`.blue); + const logEmbed = new Discord.MessageEmbed() + .setAuthor('AleeBot', client.user.avatarURL()) + .setDescription('I got added to a server!') + .addField('Server Name:', `${guild.name}`, true) + .addField('Server ID:', `${guild.id}`, true) + .addField('Members', guild.memberCount, true) + .setColor('#5cd65c') + .setFooter(`We now run on ${client.guilds.cache.size} guilds.`); + + let statusChannel = client.channels.cache.get(statusChannelID); + if (!statusChannel) return; + statusChannel.send(logEmbed); }); client.on('guildDelete', (guild) => { - log(`[i] I have been removed from: ${guild.name} (id: ${guild.id})`.red); - /* - const logEmbed = new Discord.RichEmbed() - .setAuthor("AleeBot", client.user.avatarURL) - .setDescription(`I got removed from server...`) - .addField(`Server Name:`, `${guild.name}`) - .addField(`Server ID:`, `${guild.id}`) - .setColor("#5cd65c") - - client.channels.find('id', '606602551634296968').send({logEmbed});*/ + log(`[i] I have been removed from: ${guild.name} (id: ${guild.id})`.red); + const logEmbed = new Discord.MessageEmbed() + .setAuthor('AleeBot', client.user.avatarURL()) + .setDescription('I got removed from a server...') + .addField('Server Name:', `${guild.name}`, true) + .addField('Server ID:', `${guild.id}`, true) + .setColor('#ff021b') + .setFooter(`We now run on ${client.guilds.cache.size} guilds.`); + + let statusChannel = client.channels.cache.get(statusChannelID); + if (!statusChannel) return; + statusChannel.send(logEmbed); }); dbl.on('posted', () => { - log('Server count posted!'.blue); + log('Server count posted!'.blue); }); dbl.on('error', (e) => { - log(`[X | DBL ERROR] ${e}`.red); + log(`[X | DBL ERROR] ${e}`.red); }); client.on('message', (msg) => { - if (msg.author.bot) return; - - if (msg.mentions != null && msg.mentions.users != null) { - if (msg.mentions.users.has('282547024547545109')) { - if (msg.content.toLowerCase().includes('hello') || (msg.content.toLowerCase().includes('hi'))) { - msg.reply(`Hello ${msg.author.username}!`); - } else { - if (msg.content.toLowerCase().includes('shut') && msg.content.toLowerCase().includes('up')) { - switch (Math.floor(Math.random() * 1000) % 3) { - case 0: - msg.reply('Hey, Can you not speak to me in that tone...'); - break; - case 1: - msg.reply('NO! I can talk as much I can!'); - break; - case 2: - msg.reply('Nah I won\'t....'); - break; - } - } else if (msg.content.toLowerCase().includes('how') && msg.content.toLowerCase().includes('are') && msg.content.toLowerCase().includes('you')) { - msg.reply('I\'m doing OK, I suppose...'); - } else if (msg.content.toLowerCase().includes('ok') && msg.content.toLowerCase().includes('google')) { - msg.reply('Erm... I am not google, if you want to use Google here\'s the link: https://www.google.com'); - } else if (msg.content.toLowerCase().includes('f') && msg.content.toLowerCase().includes('off')) { - msg.reply('Do you want a hammer? :hammer:'); - } else if (msg.content.toLowerCase().includes('aleearmy')) { - msg.reply('Oh yeah.. that thing Alee made...'); - } - } - } - }; - - - const prefixes = JSON.parse(fs.readFileSync('./storage/prefixes.json', 'utf8')); - - if (!prefixes[msg.guild.id]) { - prefixes[msg.guild.id] = { - prefixes: settings.prefix, - }; - } - - const prefix = prefixes[msg.guild.id].prefixes; - - - if (!msg.content.startsWith(prefix)) return; - const args = msg.content.slice(prefix.length).trim().split(/ +/g); - const command = args.shift(); - let cmd; - - if (client.commands.has(command)) { - cmd = client.commands.get(command); - } else if (client.aliases.has(command)) { - cmd = client.commands.get(client.aliases.get(command)); - } - - if (cmd) { - if (cmd.conf.guildOnly == true) { - if (!msg.channel.guild) { - return msg.channel.createMessage('This command can only be ran in a guild.'); - } - } - try { - const ops = { - ownerID: ownerID, - active: active, - }; - - cmd.run(client, msg, args, ops); - } catch (e) { - console.error(e); - } - } + if (msg.author.bot) return; + + const prefixes = JSON.parse(fs.readFileSync('./storage/prefixes.json', 'utf8')); + + if (!prefixes[msg.guild.id]) { + prefixes[msg.guild.id] = { + prefixes: settings.prefix, + }; + } + + const prefix = prefixes[msg.guild.id].prefixes; + + + if (!msg.content.startsWith(prefix)) return; + const args = msg.content.slice(prefix.length).trim().split(/ +/g); + const command = args.shift(); + let cmd; + + if (client.commands.has(command)) { + cmd = client.commands.get(command); + } else if (client.aliases.has(command)) { + cmd = client.commands.get(client.aliases.get(command)); + } + + if (cmd) { + if (cmd.conf.guildOnly == true) { + if (!msg.channel.guild) { + return msg.channel.createMessage('This command can only be ran in a guild.'); + } + } + try { + const ops = { + ownerID: ownerID, + active: active, + autoRole: autoRole, + }; + + cmd.run(client, msg, args, ops); + } catch (e) { + console.error(e); + } + } }); process.on('unhandledRejection', function(err, p) { - log('[X | UNCAUGHT PROMISE] ' + err.stack.red); + log('[X | UNCAUGHT PROMISE] ' + err.stack.red); }); client.on('reconnecting', function() { - log('[!] AleeBot has disconnected from Discord and is now attempting to reconnect.'.yellow); + log('[!] AleeBot has disconnected from Discord and is now attempting to reconnect.'.yellow); }); client.on('disconnect', function() { - log('[X] AleeBot has disconnected from Discord and will not attempt to reconnect.'.red); - console.log('At this point, you\'ll need to restart AleeBot.'.red); - process.exit(0); + log('[X] AleeBot has disconnected from Discord and will not attempt to reconnect.'.red); + console.log('At this point, you\'ll need to restart AleeBot.'.red); + process.exit(0); }); diff --git a/commands/addquote.js b/commands/addquote.js index 7782b91..7b7221e 100644 --- a/commands/addquote.js +++ b/commands/addquote.js @@ -18,7 +18,7 @@ * * *************************************/ module.exports.run = async (client, message, args) => { - /* + /* const moment = require('moment'); const log = message => { @@ -44,17 +44,17 @@ module.exports.run = async (client, message, args) => { message.reply(`You just added a new quote!`); log(`[i] A quote has been added to quotes.json...`) */ - message.reply('Command is broken for now'); + message.reply('Command is broken for now'); }; exports.conf = { - aliases: [], - guildOnly: true, + aliases: [], + guildOnly: true, }; exports.help = { - name: 'addquote', - description: 'Sets the guild prefix.', - usage: 'addquote [author] [authorImage] [quote] [year]', - category: '- Quote Commands', + name: 'addquote', + description: 'Sets the guild prefix.', + usage: 'addquote [author] [authorImage] [quote] [year]', + category: '- Quote Commands', }; diff --git a/commands/ask.js b/commands/ask.js index 0bc0761..3b1efd5 100644 --- a/commands/ask.js +++ b/commands/ask.js @@ -18,31 +18,31 @@ * * *************************************/ module.exports.run = async (client, message, args) => { - const abaskanswer = [ - 'Yes.', - 'Nope. Just kidding :P', - 'Definitely!', - 'No.', - 'Yep. Just kidding :P', - 'I doubt it.', - 'Maybe?', - 'I don\'t know?', - 'Hmm let me think :thinking:', - ]; - if (args[1]) { - message.channel.sendMessage(abaskanswer[Math.floor(Math.random() * abaskanswer.length)]); - } else { - message.channel.sendMessage('Sorry, I don\'t know what your saying.'); - } + const abaskanswer = [ + 'Yes.', + 'Nope. Just kidding :P', + 'Definitely!', + 'No.', + 'Yep. Just kidding :P', + 'I doubt it.', + 'Maybe?', + 'I don\'t know?', + 'Hmm let me think :thinking:', + ]; + if (args[1]) { + message.channel.send(abaskanswer[Math.floor(Math.random() * abaskanswer.length)]); + } else { + message.channel.send('Sorry, I don\'t know what your saying.'); + } }; exports.conf = { - aliases: ['8ball'], - guildOnly: false, + aliases: ['8ball'], + guildOnly: false, }; exports.help = { - name: 'ask', - description: 'Give AleeBot a question!', - usage: 'ask [args]', - category: '- Fun Commands', + name: 'ask', + description: 'Give AleeBot a question!', + usage: 'ask [args]', + category: '- Fun Commands', }; diff --git a/commands/avatarurl.js b/commands/avatarurl.js index 7f9c256..293a1a4 100644 --- a/commands/avatarurl.js +++ b/commands/avatarurl.js @@ -1,6 +1,6 @@ /** ************************************** * - * AvatarURL: Command for AleeBot + * avatarurl: Command for AleeBot * Copyright (C) 2017-2020 Alee Productions * * This program is free software: you can redistribute it and/or modify @@ -18,16 +18,16 @@ * * *************************************/ module.exports.run = async (client, message) => { - message.reply(message.author.avatarURL); + message.reply(message.author.avatarURL()); }; exports.conf = { - aliases: [], - guildOnly: false, + aliases: [], + guildOnly: false, }; exports.help = { - name: 'avatarurl', - description: 'Sends you your avatar picture.', - usage: 'avatarurl', - category: '- Fun Commands', + name: 'avatarurl', + description: 'Sends you your avatar picture.', + usage: 'avatarurl', + category: '- Fun Commands', }; diff --git a/commands/balance.js b/commands/balance.js deleted file mode 100644 index 7b340b2..0000000 --- a/commands/balance.js +++ /dev/null @@ -1,50 +0,0 @@ -/** ************************************** - * - * Balance: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * *************************************/ -module.exports.run = async (client, message) => { - const db = require('quick.db'); - const {RichEmbed} = require('discord.js'); - - const user = message.mentions.users.first() || message.author; - - let balance = await db.fetch(`userBalance_${user.id}`); - - if (balance === null) { - db.set(`userBalance_${message.author.id}`, 0); - balance = 0; - } - const embed = new RichEmbed() - .setDescription(`**AleeCorp Bank**`) - .addField('Account Holder: ', user.username, true) - .addField('Account Balance: ', balance, true) - .setColor('#1fd619'); - - message.channel.send({embed}); -}; - -exports.conf = { - aliases: ['bal', 'money'], - guildOnly: false, -}; -exports.help = { - name: 'balance', - description: 'Checks the balance of AleeBot', - usage: 'balance [@someone (optional)]', - category: '- Economy Commands', -}; diff --git a/commands/ban.js b/commands/ban.js index 354dcaa..0f2f011 100644 --- a/commands/ban.js +++ b/commands/ban.js @@ -18,28 +18,28 @@ * * *************************************/ module.exports.run = async (client, message, args) => { - const Discord = require('discord.js'); - const mreason = args.join(' ').slice(22); - if (!message.member.permissions.has('BAN_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to ban people.'); - if (!message.guild.member(client.user).hasPermission('BAN_MEMBERS')) return message.reply('Uhh... I don\'t have permission to ban members.'); - const member = message.mentions.members.first(); - if (!member) return message.reply('Uhh... Please mention a member first.'); - member.ban(`Banned by ${message.author.tag} Reason: ` + mreason); - const embed = new Discord.RichEmbed() - .setTitle('User Banned!') - .setColor('#1fd619') - .addField('**User:**', `${member.user.tag}`) - .addField('**Reason:**', `\`\`\`${mreason}\`\`\``); - await message.channel.send({embed}); + const Discord = require('discord.js'); + const mreason = args.join(' ').slice(22); + if (!message.member.permissions.has('BAN_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to ban people.'); + if (!message.guild.member(client.user).hasPermission('BAN_MEMBERS')) return message.reply('Uhh... I don\'t have permission to ban members.'); + const member = message.mentions.members.first(); + if (!member) return message.reply('Uhh... Please mention a member first.'); + member.ban(`Banned by ${message.author.tag} Reason: ` + mreason); + const embed = new Discord.MessageEmbed() + .setTitle('User Banned!') + .setColor('#1fd619') + .addField('**User:**', `${member.user.tag}`) + .addField('**Reason:**', `\`\`\`${mreason}\`\`\``); + await message.channel.send({embed}); }; exports.conf = { - aliases: [], - guildOnly: false, + aliases: [], + guildOnly: false, }; exports.help = { - name: 'ban', - description: 'Bans a member', - usage: 'ban [user] [reason]', - category: '- Moderation Commands', + name: 'ban', + description: 'Bans a member', + usage: 'ban [user] [reason]', + category: '- Moderation Commands', }; diff --git a/commands/eval.js b/commands/eval.js index 2147376..ef8fc97 100644 --- a/commands/eval.js +++ b/commands/eval.js @@ -18,67 +18,67 @@ * * *************************************/ module.exports.run = async (client, message, args) => { - if (!['242775871059001344'].includes(message.author.id)) return message.reply('Nope! You need the person who created this bot to use this command.'); - const {RichEmbed} = require('discord.js'); - const code = args.join(' '); + if (!['242775871059001344'].includes(message.author.id)) return message.reply('Nope! You need the person who created this bot to use this command.'); + const {MessageEmbed} = require('discord.js'); + const code = args.join(' '); - let evaled; - let remove; + let evaled; + let remove; - try { - remove = (text) => { - if (typeof(text) === 'string') { - return text.replace(/`/g, '`' + String.fromCharCode(8203)).replace(/@/g, '@' + String.fromCharCode(8203)); - } else { - return text; - } - }; + try { + remove = (text) => { + if (typeof(text) === 'string') { + return text.replace(/`/g, '`' + String.fromCharCode(8203)).replace(/@/g, '@' + String.fromCharCode(8203)); + } else { + return text; + } + }; - evaled = eval(code); + evaled = eval(code); - if (typeof evaled !== 'string') { - evaled = require('util').inspect(evaled); - } - } catch (err) { - const embed = new RichEmbed() - .setAuthor('Eval Error') - .setDescription('Eval\'s result') - .addField(':inbox_tray: Input:', `\`\`\`js\n${code}\n\`\`\``) - .addField(':outbox_tray: Output:', `\`\`\`${err}\`\`\``) - .setFooter('Eval', client.user.avatarURL) - .setColor('RED'); - return message.channel.send({embed}); - } + if (typeof evaled !== 'string') { + evaled = require('util').inspect(evaled); + } + } catch (err) { + const embed = new MessageEmbed() + .setAuthor('Eval Error') + .setDescription('Eval\'s result') + .addField(':inbox_tray: Input:', `\`\`\`js\n${code}\n\`\`\``) + .addField(':outbox_tray: Output:', `\`\`\`${err}\`\`\``) + .setFooter('Eval', client.user.avatarURL()) + .setColor('RED'); + return message.channel.send({embed}); + } - try { - const embed = new RichEmbed() - .setAuthor('Eval Success') - .setDescription('Eval\'s result') - .addField(':inbox_tray: Input:', `\`\`\`js\n${code}\n\`\`\``) - .addField(':outbox_tray: Output:', `\`\`\`js\n${remove(evaled)}\n\`\`\``) - .setFooter('Eval', client.user.avatarURL) - .setColor('GREEN'); + try { + const embed = new MessageEmbed() + .setAuthor('Eval Success') + .setDescription('Eval\'s result') + .addField(':inbox_tray: Input:', `\`\`\`js\n${code}\n\`\`\``) + .addField(':outbox_tray: Output:', `\`\`\`js\n${remove(evaled)}\n\`\`\``) + .setFooter('Eval', client.user.avatarURL()) + .setColor('GREEN'); - return message.channel.send({embed}); - } catch (err) { - const embed = new RichEmbed() - .setAuthor('Eval Error') - .setDescription('Eval\'s result') - .addField(':inbox_tray: Input:', `\`\`\`js\n${code}\n\`\`\``) - .addField(':outbox_tray: Output:', `\`\`\`${err}\`\`\``) - .setFooter('Eval', client.user.avatarURL) - .setColor('RED'); - return message.channel.send({embed}); - } + return message.channel.send({embed}); + } catch (err) { + const embed = new MessageEmbed() + .setAuthor('Eval Error') + .setDescription('Eval\'s result') + .addField(':inbox_tray: Input:', `\`\`\`js\n${code}\n\`\`\``) + .addField(':outbox_tray: Output:', `\`\`\`${err}\`\`\``) + .setFooter('Eval', client.user.avatarURL()) + .setColor('RED'); + return message.channel.send({embed}); + } }; exports.conf = { - aliases: [], - guildOnly: false, + aliases: [], + guildOnly: false, }; exports.help = { - name: 'eval', - description: 'Evalulates commands.', - usage: '', - category: '- Owners Only', + name: 'eval', + description: 'Evalulates commands.', + usage: '', + category: '- Owners Only', }; diff --git a/commands/git.js b/commands/git.js index cf754f4..ed98ebf 100644 --- a/commands/git.js +++ b/commands/git.js @@ -18,26 +18,26 @@ * * *************************************/ module.exports.run = async (client, message) => { - const Discord = require('discord.js'); - const git = require('git-last-commit'); - git.getLastCommit(function(err, commit) { - const embed = new Discord.RichEmbed() - .setTitle('GitHub Information') - .addField('**Repository:**', 'https://github.com/aleeproductions/AleeBot-JS') - .addField('**Last Commit:**', commit.subject) - .addField('**Commited By:**', commit.author.name) - .setColor('#1fd619'); - message.channel.send({embed}); - }); + const Discord = require('discord.js'); + const git = require('git-last-commit'); + git.getLastCommit(function(err, commit) { + const embed = new Discord.MessageEmbed() + .setTitle('GitHub Information') + .addField('**Repository:**', 'https://github.com/aleeproductions/AleeBot') + .addField('**Last Commit:**', commit.subject) + .addField('**Commited By:**', commit.author.name) + .setColor('#1fd619'); + message.channel.send({embed}); + }); }; exports.conf = { - aliases: [], - guildOnly: false, + aliases: [], + guildOnly: false, }; exports.help = { - name: 'git', - description: 'Get the git info.', - usage: 'git', - category: '- General Commands', + name: 'git', + description: 'Get the git info.', + usage: 'git', + category: '- General Commands', }; diff --git a/commands/help.js b/commands/help.js index 9d94c80..36d4630 100644 --- a/commands/help.js +++ b/commands/help.js @@ -20,51 +20,51 @@ const Discord = require('discord.js'); const fs = require('fs'); module.exports.run = async (client, message) => { - const categories = []; - const commands = Array.from(client.commands.keys()); - const settings = require('../storage/settings.json'); - commands.forEach(function(x) { - if (!categories.includes(client.commands.get(x).help.category)) { - categories.push(client.commands.get(x).help.category); - } - }); + const categories = []; + const commands = Array.from(client.commands.keys()); + const settings = require('../storage/settings.json'); + commands.forEach(function(x) { + if (!categories.includes(client.commands.get(x).help.category)) { + categories.push(client.commands.get(x).help.category); + } + }); - const prefixes = JSON.parse(fs.readFileSync('./storage/prefixes.json', 'utf8')); + const prefixes = JSON.parse(fs.readFileSync('./storage/prefixes.json', 'utf8')); - if (!prefixes[message.guild.id]) { - prefixes[message.guild.id] = { - prefixes: settings.prefix, - }; - } + if (!prefixes[message.guild.id]) { + prefixes[message.guild.id] = { + prefixes: settings.prefix, + }; + } - const prefix = prefixes[message.guild.id].prefixes; - if (!message.guild.member(client.user).hasPermission('EMBED_LINKS')) return message.reply('ERROR: AleeBot doesn\'t have the permission to send embed links please enable them to use the full help.'); - const embed = new Discord.RichEmbed() - .setAuthor('AleeBot ' + require('../storage/settings.json').abVersion + ` Help and on ${client.guilds.size} servers`, client.user.avatarURL) - .setDescription('Every command you input into AleeBot is `' + prefix + '`') - .setColor('#1fd619') - .setFooter('© Copyright 2017-2020 Alee Productions, Licensed with GPL-3.0'); + const prefix = prefixes[message.guild.id].prefixes; + if (!message.guild.member(client.user).hasPermission('EMBED_LINKS')) return message.reply('ERROR: AleeBot doesn\'t have the permission to send embed links please enable them to use the full help.'); + const embed = new Discord.MessageEmbed() + .setAuthor('AleeBot ' + require('../storage/settings.json').abVersion + ` Help and on ${client.guilds.cache.size} servers`, client.user.avatarURL()) + .setDescription('Every command you input into AleeBot is `' + prefix + '`') + .setColor('#1fd619') + .setFooter('© Copyright 2017-2020 Alee Productions, Licensed with GPL-3.0'); - categories.forEach(function(x) { - let cat = ''; - commands.forEach(function(command) { - if (client.commands.get(command).help.category == x) { - cat = cat + command + '\n'; - } - }); - embed.addField(x, cat, true); - }); + categories.forEach(function(x) { + let cat = ''; + commands.forEach(function(command) { + if (client.commands.get(command).help.category == x) { + cat = cat + command + '\n'; + } + }); + embed.addField(x, cat, true); + }); - await message.channel.send({embed}); + await message.channel.send({embed}); }; exports.conf = { - aliases: ['h'], - guildOnly: false, + aliases: ['h'], + guildOnly: false, }; exports.help = { - name: 'help', - description: 'Displays all the commands or a page with information for 1 command.', - usage: 'help (command:command-name)', - category: '- General Commands', + name: 'help', + description: 'Displays all the commands or a page with information for 1 command.', + usage: 'help (command:command-name)', + category: '- General Commands', }; diff --git a/commands/info.js b/commands/info.js index 5487a14..3de7ecd 100644 --- a/commands/info.js +++ b/commands/info.js @@ -18,25 +18,25 @@ * * *************************************/ module.exports.run = async (client, message) => { - const Discord = require('discord.js'); - const os = require('os'); - const embed = new Discord.RichEmbed() - .setTitle('Information on AleeBot\'s Host') - .addField('OS Hostname: ', os.hostname(), true) - .addField('NodeJS Version: ', process.versions.node, true) - .addField('OS Platform: ', os.platform(), true) - .addField('OS Version: ', os.release(), true) - .setColor('#1fd619'); - message.channel.send({embed}); + const Discord = require('discord.js'); + const os = require('os'); + const embed = new Discord.MessageEmbed() + .setTitle('Information on AleeBot\'s Host') + .addField('OS Hostname: ', os.hostname(), true) + .addField('NodeJS Version: ', process.versions.node, true) + .addField('OS Platform: ', os.platform(), true) + .addField('OS Version: ', os.release(), true) + .setColor('#1fd619'); + message.channel.send({embed}); }; exports.conf = { - aliases: [], - guildOnly: false, + aliases: [], + guildOnly: false, }; exports.help = { - name: 'info', - description: 'Tells you information about the bot', - usage: 'info', - category: '- Information Commands', + name: 'info', + description: 'Tells you information about the bot', + usage: 'info', + category: '- Information Commands', }; diff --git a/commands/interrogate.js b/commands/interrogate.js index c015f2c..54e8cb2 100644 --- a/commands/interrogate.js +++ b/commands/interrogate.js @@ -18,25 +18,25 @@ * * *************************************/ module.exports.run = async (client, message, args) => { - if (message.guild.id != '243022206437687296') return message.reply('This is a ALP exclusive command.'); + if (message.guild.id != '243022206437687296') return message.reply('This is a ALP exclusive command.'); - if (!message.member.hasPermission('BAN_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to jail members.'); - if (!message.guild.member(client.user).hasPermission('MANAGE_ROLES')) return message.reply('Uhh... I don\'t have permission to jail members.'); + if (!message.member.hasPermission('BAN_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to jail members.'); + if (!message.guild.member(client.user).hasPermission('MANAGE_ROLES')) return message.reply('Uhh... I don\'t have permission to jail members.'); - const member = message.mentions.members.first(); - if (!member) return await message.reply('Uhh... Please mention a member first.'); + const member = message.mentions.members.first(); + if (!member) return await message.reply('Uhh... Please mention a member first.'); - member.addRole(message.guild.roles.find('name', 'Interrogation')); - message.reply(`Alright, I just interrogated ${member.user.tag}.`); + member.roles.add(message.guild.roles.cache.get('431973193608200193')); + message.reply(`Alright, I just interrogated ${member.user.tag}.`); }; exports.conf = { - aliases: [], - guildOnly: false, + aliases: [], + guildOnly: false, }; exports.help = { - name: 'interrogate', - description: 'Interrogates a member', - usage: 'interrogate [user]', - category: '- ALP Exclusive Commands', + name: 'interrogate', + description: 'Interrogates a member', + usage: 'interrogate [user]', + category: '- ALP Exclusive Commands', }; diff --git a/commands/invite.js b/commands/invite.js index a6ce5a8..e6f538f 100644 --- a/commands/invite.js +++ b/commands/invite.js @@ -18,34 +18,32 @@ * * *************************************/ module.exports.run = async (client, message) => { - const Discord = require('discord.js'); - const embed = new Discord.RichEmbed(); - message.channel.send({embed: { - color: 2086425, - title: 'Invite Command', - fields: [{ - name: 'Invite AleeBot', - value: '[Invite AleeBot to your server.](https://top.gg/bot/282547024547545109)', - }, - { - name: 'Join the Alee Productions Community', - value: '[If there\'s any bugs you can join Alee Community guild and explain the bug...](https://discord.gg/EFhRDqG)', - }, - ], - }, - }); + message.channel.send({embed: { + color: 2086425, + title: 'Invite Command', + fields: [{ + name: 'Invite AleeBot', + value: '[Invite AleeBot to your server.](https://top.gg/bot/282547024547545109)', + }, + { + name: 'Join the Alee Productions Community', + value: '[Discord Server](https://discord.gg/EFhRDqG)', + }, + ], + }, + }); - // message.channel.send('Want AleeBot in your server? Here\'s the link: https://discordapp.com/api/oauth2/authorize?client_id=282547024547545109&permissions=2080375863&scope=bot'); + // message.channel.send('Want AleeBot in your server? Here\'s the link: https://discordapp.com/api/oauth2/authorize?client_id=282547024547545109&permissions=2080375863&scope=bot'); }; exports.conf = { - aliases: [], - guildOnly: false, + aliases: [], + guildOnly: false, }; exports.help = { - name: 'invite', - description: 'Gives you an invite to the guild and the bot.', - usage: 'invite', - category: '- General Commands', + name: 'invite', + description: 'Gives you an invite to the guild and the bot.', + usage: 'invite', + category: '- General Commands', }; diff --git a/commands/jail.js b/commands/jail.js index 199ae20..432f60a 100644 --- a/commands/jail.js +++ b/commands/jail.js @@ -18,25 +18,25 @@ * * *************************************/ module.exports.run = async (client, message, args) => { - if (message.guild.id != '243022206437687296') return message.reply('This is a ALP exclusive command.'); + if (message.guild.id != '243022206437687296') return message.reply('This is a ALP exclusive command.'); - if (!message.member.hasPermission('BAN_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to jail members.'); - if (!message.guild.member(client.user).hasPermission('MANAGE_ROLES')) return message.reply('Uhh... I don\'t have permission to jail members.'); + if (!message.member.hasPermission('BAN_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to jail members.'); + if (!message.guild.member(client.user).hasPermission('MANAGE_ROLES')) return message.reply('Uhh... I don\'t have permission to jail members.'); - const member = message.mentions.members.first(); - if (!member) return await message.reply('Uhh... Please mention a member first.'); + const member = message.mentions.members.first(); + if (!member) return await message.reply('Uhh... Please mention a member first.'); - member.addRole(message.guild.roles.find('name', 'Jail')); - message.reply(`Alright, I just jailed ${member.user.tag}.`); + member.roles.add(message.guild.roles.cache.get('428205205155217418')); + message.reply(`Alright, I just jailed ${member.user.tag}.`); }; exports.conf = { - aliases: [], - guildOnly: false, + aliases: [], + guildOnly: false, }; exports.help = { - name: 'jail', - description: 'Jails a member', - usage: 'jail [user]', - category: '- ALP Exclusive Commands', + name: 'jail', + description: 'Jails a member', + usage: 'jail [user]', + category: '- ALP Exclusive Commands', }; diff --git a/commands/kick.js b/commands/kick.js index bfacd92..3cbaaf8 100644 --- a/commands/kick.js +++ b/commands/kick.js @@ -18,28 +18,28 @@ * * *************************************/ module.exports.run = async (client, message, args) => { - const Discord = require('discord.js'); - const mreason = args.join(' ').slice(22); - if (!message.member.permissions.has('KICK_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to ban people.'); - if (!message.guild.member(client.user).hasPermission('KICK_MEMBERS')) return message.reply('Uhh... I don\'t have permission to kick members.'); - const member = message.mentions.members.first(); - if (!member) return message.reply('Uhh... Please mention a member first.'); - member.kick(`Kicked by: ${message.author.tag} Reason: ` + mreason); - const embed = new Discord.RichEmbed() - .setTitle('User Kicked!') - .setColor('#1fd619') - .addField('**User:**', `${member.user.tag}`) - .addField('**Reason:**', `\`\`\`${mreason}\`\`\``); - await message.channel.send({embed}); + const Discord = require('discord.js'); + const mreason = args.join(' ').slice(22); + if (!message.member.permissions.has('KICK_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to kick people.'); + if (!message.guild.member(client.user).hasPermission('KICK_MEMBERS')) return message.reply('Uhh... I don\'t have permission to kick members.'); + const member = message.mentions.members.first(); + if (!member) return message.reply('Uhh... Please mention a member first.'); + member.kick(`Kicked by: ${message.author.tag} Reason: ` + mreason); + const embed = new Discord.MessageEmbed() + .setTitle('User Kicked!') + .setColor('#1fd619') + .addField('**User:**', `${member.user.tag}`) + .addField('**Reason:**', `\`\`\`${mreason}\`\`\``); + await message.channel.send({embed}); }; exports.conf = { - aliases: [], - guildOnly: false, + aliases: [], + guildOnly: false, }; exports.help = { - name: 'kick', - description: 'Kicks a member', - usage: 'kick [user]', - category: '- Moderation Commands', + name: 'kick', + description: 'Kicks a member', + usage: 'kick [user]', + category: '- Moderation Commands', }; diff --git a/commands/leaveguild.js b/commands/leaveguild.js index fd77509..5108436 100644 --- a/commands/leaveguild.js +++ b/commands/leaveguild.js @@ -18,18 +18,18 @@ * * *************************************/ module.exports.run = async (client, message) => { - if (!['242775871059001344', message.guild.owner.user.id].includes(message.author.id)) return message.reply('Nope! You need the person who created this bot or the owner of this guild to use this command.'); - message.channel.send('Alright, I\'m leaving the server now. Bye everyone!'); - message.guild.leave(); + if (!['242775871059001344', message.guild.owner.user.id].includes(message.author.id)) return message.reply('Nope! You need the person who created this bot or the owner of this guild to use this command.'); + message.channel.send('Alright, I\'m leaving the server now. Bye everyone!'); + message.guild.leave(); }; exports.conf = { - aliases: [], - guildOnly: false, + aliases: [], + guildOnly: false, }; exports.help = { - name: 'leaveguild', - description: 'Makes the bot leave the server', - usage: 'leaveguild', - category: '- Owners Only', + name: 'leaveguild', + description: 'Makes the bot leave the server', + usage: 'leaveguild', + category: '- Owners Only', }; diff --git a/commands/pay.js b/commands/pay.js deleted file mode 100644 index 2d0aa89..0000000 --- a/commands/pay.js +++ /dev/null @@ -1,60 +0,0 @@ -/** ************************************** - * - * Pay: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * *************************************/ - -module.exports.run = async (client, message, args) => { - const db = require('quick.db'); - if (!message.mentions.members.first()) return message.reply('Please mention a user...'); - - const targetMember = message.mentions.members.first(); - const amount = parseInt(args.join(' ').replace(targetMember, '')); - - if (isNaN(amount)) return message.reply('Please define an amount.'); - - let targetBalance = await db.fetch(`userBalance_${targetMember.id}`); - let selfBalance = await db.fetch(`userBalance_${message.author.id}`); - - if (targetBalance === null) { - db.set(`userBalance_${targetMember.id}`, 0); - targetBalance = 0; - } - - if (selfBalance === null) { - db.set(`userBalance_${message.author.id}`, 0); - selfBalance = 0; - } - - if (amount > selfBalance) return message.reply('Sorry you don\'t have enough money.'); - - db.add(`userBalance_${targetMember.id}`, amount); - db.subtract(`userBalance_${message.author.id}`, amount); - - message.reply(`Successfully transfered $${amount} to ${targetMember.user}`); -}; - -exports.conf = { - aliases: ['transfer'], - guildOnly: false, -}; -exports.help = { - name: 'pay', - description: 'You can pay others!', - usage: 'pay [@user] [interger]', - category: '- Economy Commands', -}; diff --git a/commands/ping.js b/commands/ping.js index afb3807..b8d2779 100644 --- a/commands/ping.js +++ b/commands/ping.js @@ -18,16 +18,16 @@ * * *************************************/ module.exports.run = async (client, message) => { - message.reply('**PONG!** :ping_pong: ' + Math.round(client.ping) + ' ms'); + message.reply('**PONG!** :ping_pong: ' + Math.round(client.ws.ping) + ' ms'); }; exports.conf = { - aliases: [], - guildOnly: false, + aliases: [], + guildOnly: false, }; exports.help = { - name: 'ping', - description: 'Ping the bot.', - usage: 'ping', - category: '- General Commands', + name: 'ping', + description: 'Ping the bot.', + usage: 'ping', + category: '- General Commands', }; diff --git a/commands/poweroff.js b/commands/poweroff.js index 3f60f8a..8067c5f 100644 --- a/commands/poweroff.js +++ b/commands/poweroff.js @@ -17,26 +17,30 @@ * along with this program. If not, see . * * *************************************/ -module.exports.run = async (client, message, args) => { - const Discord = require('discord.js'); - if (!['242775871059001344'].includes(message.author.id)) return message.reply('Nope! You need the person who created this bot to use this command.'); - const embed = new Discord.RichEmbed() - .setAuthor('AleeBot Status', client.user.avatarURL) - .setDescription('AleeBot is now going offline...') - .setColor('#ff3333'); - await client.channels.find('id', '606602551634296968').send({embed}); - await message.reply(':warning: AleeBot will now exit!'); - client.destroy(); - process.exit(0); +module.exports.run = async (client, message) => { + const Discord = require('discord.js'); + if (!['242775871059001344'].includes(message.author.id)) return message.reply('Nope! You need the person who created this bot to use this command.'); + const stopEmbed = new Discord.MessageEmbed() + .setAuthor('AleeBot Status', client.user.avatarURL()) + .setDescription('AleeBot is now going offline...') + .setColor('#ff3333'); + + let statusChannel = client.channels.cache.get('606602551634296968'); + if (!statusChannel) return console.error('The status channel does not exist! Skipping.'); + await statusChannel.send(stopEmbed); + await message.reply(':warning: AleeBot will now exit!'); + console.log('[i] AleeBot will now exit!'.blue); + client.destroy(); + process.exit(0); }; exports.conf = { - aliases: ['reboot'], - guildOnly: false, + aliases: ['reboot'], + guildOnly: false, }; exports.help = { - name: 'poweroff', - description: 'Turns off AleeBot.', - usage: 'poweroff', - category: '- Owners Only', + name: 'poweroff', + description: 'Turns off AleeBot.', + usage: 'poweroff', + category: '- Owners Only', }; diff --git a/commands/purge.js b/commands/purge.js index 6122083..97c1be6 100644 --- a/commands/purge.js +++ b/commands/purge.js @@ -18,22 +18,22 @@ * * *************************************/ module.exports.run = async (client, message, args) => { - if (!message.member.permissions.has('MANAGE_MESSAGES')) return message.reply('It looks like that you don\'t have the permissions to delete messages.'); - if (isNaN(args[0])) return message.reply('Please put the valid number of messages to purge.'); + if (!message.member.permissions.has('MANAGE_MESSAGES')) return message.reply('It looks like that you don\'t have the permissions to delete messages.'); + if (isNaN(args[0])) return message.reply('Please put the valid number of messages to purge.'); - if (args[0] > 100) return message.channel.send('Please put a number less than 100.'); + if (args[0] > 100) return message.channel.send('Please put a number less than 100.'); - message.channel.bulkDelete(args[0]) - .then( (messages) => message.channel.send(`Successfully deleted ${messages.size} messages.`)); + message.channel.bulkDelete(args[0]) + .then( (messages) => message.channel.send(`Successfully deleted ${messages.size} messages.`)); }; exports.conf = { - aliases: ['rm'], - guildOnly: false, + aliases: ['rm'], + guildOnly: false, }; exports.help = { - name: 'purge', - description: 'Removes messages in a bulk.', - usage: 'purge [number]', - category: '- Moderation Commands', + name: 'purge', + description: 'Removes messages in a bulk.', + usage: 'purge [number]', + category: '- Moderation Commands', }; diff --git a/commands/quote.js b/commands/quote.js index ce7b56a..149fe37 100644 --- a/commands/quote.js +++ b/commands/quote.js @@ -18,47 +18,47 @@ * * *************************************/ module.exports.run = async (client, message) => { - const Discord = require('discord.js'); + const Discord = require('discord.js'); - let NewQuote; + let NewQuote; - function GetNewQuote(quoteNum = -1) { - NewQuote = new Discord.RichEmbed(); + function GetNewQuote(quoteNum = -1) { + NewQuote = new Discord.MessageEmbed(); - let quo = require('../storage/quotes.json').quotes; + let quo = require('../storage/quotes.json').quotes; - if (quoteNum == -1) { - quoteNum = Math.floor(Math.random() * 1000) % quo.length; - quo=quo[quoteNum]; - } + if (quoteNum == -1) { + quoteNum = Math.floor(Math.random() * 1000) % quo.length; + quo=quo[quoteNum]; + } - const author = quo.author; - const authorImage = quo.authorImage; - const quote = quo.quote; - const year = quo.year; - const url = quo.url; + const author = quo.author; + const authorImage = quo.authorImage; + const quote = quo.quote; + const year = quo.year; + const url = quo.url; - NewQuote.setAuthor(author, authorImage); - NewQuote.setColor('#1fd619'); - NewQuote.setDescription(quote); - NewQuote.setFooter('- ' + year); - NewQuote.setURL(url); + NewQuote.setAuthor(author, authorImage); + NewQuote.setColor('#1fd619'); + NewQuote.setDescription(quote); + NewQuote.setFooter('- ' + year); + NewQuote.setURL(url); - return NewQuote; - } + return NewQuote; + } - const newquote = GetNewQuote(); - message.reply('Alright, here\'s your quote.'); - message.channel.send(newquote); + const newquote = GetNewQuote(); + message.reply('Alright, here\'s your quote.'); + message.channel.send(newquote); }; exports.conf = { - aliases: [], - guildOnly: false, + aliases: [], + guildOnly: false, }; exports.help = { - name: 'quote', - description: 'Tells you quotes', - usage: 'quote', - category: '- Quote Commands', + name: 'quote', + description: 'Tells you quotes', + usage: 'quote', + category: '- Quote Commands', }; diff --git a/commands/reload.js b/commands/reload.js new file mode 100644 index 0000000..118aae4 --- /dev/null +++ b/commands/reload.js @@ -0,0 +1,55 @@ +/** ************************************** + * + * Invite: Command for AleeBot + * Copyright (C) 2017-2020 Alee Productions + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * *************************************/ +// eslint-disable-next-line no-unused-vars +module.exports.run = async (client, message, args) => { + /* + if (!['242775871059001344'].includes(message.author.id)) return message.reply('Nope! You need the person who created this bot to use this command.'); + if (!args.length) return message.channel.send(`You didn't pass any command to reload, ${message.author}!`); + const commandName = args[0].toLowerCase(); + const command = message.client.commands.get(commandName) + || message.client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName)); + + if (!command) return message.channel.send(`There is no command with name or alias \`${commandName}\`, ${message.author}!`); + delete require.cache[require.resolve(`./${command.name}.js`)]; + try { + const newCommand = require(`./${command.name}.js`); + message.client.commands.set(newCommand.name, newCommand); + } catch (error) { + console.log(error); + message.channel.send(`There was an error while reloading a command \`${command.name}\`:\n\`${error.message}\``); + } + message.channel.send(`Command \`${command.name}\` was reloaded!`);*/ + + message.reply('Coming soon.'); + +}; + +exports.conf = { + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'reload', + description: 'Reloads command.', + usage: 'reload [command]', + category: '- Owners Only', +}; + + \ No newline at end of file diff --git a/commands/say.js b/commands/say.js index 774e9e3..fe17b42 100644 --- a/commands/say.js +++ b/commands/say.js @@ -18,19 +18,19 @@ * * *************************************/ module.exports.run = async (client, message, args) => { - if (!['242775871059001344'].includes(message.author.id)) return message.reply('Nope! You need the person who created this bot to use this command.'); - const absay = args.join(' '); - message.delete().catch(); - message.channel.send(absay); + if (!['242775871059001344'].includes(message.author.id)) return message.reply('Nope! You need the person who created this bot to use this command.'); + const absay = args.join(' '); + message.delete().catch(); + message.channel.send(absay); }; exports.conf = { - aliases: [], - guildOnly: false, + aliases: [], + guildOnly: false, }; exports.help = { - name: 'say', - description: 'You can control AleeBot now!', - usage: 'say [context]', - category: '- Owners Only', + name: 'say', + description: 'You can control AleeBot now!', + usage: 'say [context]', + category: '- Owners Only', }; diff --git a/commands/setprefix.js b/commands/setprefix.js index 1c53509..edb42c9 100644 --- a/commands/setprefix.js +++ b/commands/setprefix.js @@ -18,35 +18,35 @@ * * *************************************/ module.exports.run = async (client, message, args) => { - const moment = require('moment'); - const log = (message) => { - console.log(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] ${message}`); - }; - const fs = require('fs'); - if (!message.member.hasPermission('ADMINISTRATOR')) return message.reply('Sorry you need admin to set my prefix'); - if (!args[0] || args[0 == 'help']) return message.reply(`Usage: setprefix `); + const moment = require('moment'); + const log = (message) => { + console.log(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] ${message}`); + }; + const fs = require('fs'); + if (!message.member.hasPermission('ADMINISTRATOR')) return message.reply('Sorry you need admin to set my prefix'); + if (!args[0] || args[0 == 'help']) return message.reply('Usage: setprefix '); - const prefixes = JSON.parse(fs.readFileSync('./storage/prefixes.json', 'utf8')); + const prefixes = JSON.parse(fs.readFileSync('./storage/prefixes.json', 'utf8')); - prefixes[message.guild.id] = { - prefixes: args[0], - }; + prefixes[message.guild.id] = { + prefixes: args[0], + }; - fs.writeFile('./storage/prefixes.json', JSON.stringify(prefixes), (err) =>{ - if (err) log(err); - }); + fs.writeFile('./storage/prefixes.json', JSON.stringify(prefixes), (err) =>{ + if (err) log(err); + }); - message.reply(`AleeBot's Prefix in this guild is now \`${args[0]}\``); - log(`[i] The guild ${message.guild.name} has changed AleeBot's prefix to ${args[0]}`); + message.reply(`AleeBot's Prefix in this guild is now \`${args[0]}\``); + log(`[i] The guild ${message.guild.name} has changed AleeBot's prefix to ${args[0]}`); }; exports.conf = { - aliases: [], - guildOnly: true, + aliases: [], + guildOnly: true, }; exports.help = { - name: 'setprefix', - description: 'Sets the guild prefix.', - usage: 'setprefix [prefix]', - category: '- Settings Commands', + name: 'setprefix', + description: 'Sets the guild prefix.', + usage: 'setprefix [prefix]', + category: '- Settings Commands', }; diff --git a/commands/setup.js b/commands/setup.js new file mode 100644 index 0000000..c45fbae --- /dev/null +++ b/commands/setup.js @@ -0,0 +1,45 @@ +/**************************************** + * + * Setup: Command for AleeBot + * Copyright (C) 2017-2020 Alee Productions + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * *************************************/ + +module.exports.run = async (client, message) => { + if (!['242775871059001344', message.guild.owner.user.id].includes(message.author.id)) return message.reply(':warning: You must be a server owner or be the creator of the bot to access this command.'); + message.reply('Look at your DMs.'); + //message.reply("This feature is coming soon. Stay tuned!"); + const Discord = require('discord.js'); + const setupEmbed = new Discord.MessageEmbed() + .setTitle('AleeBot Setup', client.user.avatarURL()) + .setDescription('Select the options') + .addField('Chat Logs', 'placeholder', true) + .addField('Chat Logs', 'placeholder', true) + .addField('Chat Logs', 'placeholder', true); + + message.author.send(setupEmbed); +}; + +exports.conf = { + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'setup', + description: 'Setting up AleeBot.', + usage: 'setup', + category: '- Settings Commands', +}; \ No newline at end of file diff --git a/commands/suggest.js b/commands/suggest.js index 6fb4289..3adaa31 100644 --- a/commands/suggest.js +++ b/commands/suggest.js @@ -18,28 +18,28 @@ * * *************************************/ module.exports.run = async (client, message, args) => { - if (message.guild.id != '243022206437687296') return message.reply('This is a ALP exclusive command.'); - const {RichEmbed} = require('discord.js'); - client.channels.find('id', '427495678390960148').send( - new RichEmbed() - .setColor('#1fd619') - .setTitle('Suggestion') - .setDescription(`This is a suggestion from `+ message.author.username +` please react to it using the following emojis.`) - .addField('Suggestion Contents', args.join(' ')), - ).then((message) => { - message.react('\u2705'); - message.react('\u274E'); - }); - message.reply('Your suggestion has been shown in the suggestions channel.'); + if (message.guild.id != '243022206437687296') return message.reply('This is a ALP exclusive command.'); + const {MessageEmbed} = require('discord.js'); + client.channels.cache.get('427495678390960148').send( + new MessageEmbed() + .setColor('#1fd619') + .setTitle('Suggestion') + .setDescription('This is a suggestion from '+ message.author.username +' please react to it using the following emojis.') + .addField('Suggestion Contents', args.join(' ')), + ).then((message) => { + message.react('\u2705'); + message.react('\u274E'); + }); + message.reply('Your suggestion has been shown in the suggestions channel.'); }; exports.conf = { - aliases: [], - guildOnly: false, + aliases: [], + guildOnly: false, }; exports.help = { - name: 'suggest', - description: 'Suggest a feature in ACN.', - usage: 'suggest [suggestion]', - category: '- ALP Exclusive Commands', + name: 'suggest', + description: 'Suggest a feature in ALP.', + usage: 'suggest [suggestion]', + category: '- ALP Exclusive Commands', }; diff --git a/commands/suggestfeature.js b/commands/suggestfeature.js index fac82a6..8b8b3c7 100644 --- a/commands/suggestfeature.js +++ b/commands/suggestfeature.js @@ -18,27 +18,27 @@ * * *************************************/ module.exports.run = async (client, message, args) => { - const { RichEmbed } = require('discord.js'); + const { MessageEmbed } = require('discord.js'); - client.channels.find('id', '427495678390960148').send( - new RichEmbed() - .setColor ('#1fd619') - .setTitle('AleeBot Feature Suggestion') - .setDescription(`This is an AleeBot feature suggestion from `+ message.author.username +` sending from ${message.guild.name}.`) - .addField('Suggestion Contents', args.join(' ')) - ) - await message.reply("Your suggestion has been shown to the ALP discord server!") + client.channels.cache.get('427495678390960148').send( + new MessageEmbed() + .setColor ('#1fd619') + .setTitle('AleeBot Feature Suggestion') + .setDescription('This is an AleeBot feature suggestion from '+ message.author.username +` sending from ${message.guild.name}.`) + .addField('Suggestion Contents', args.join(' ')) + ); + await message.reply('Your suggestion has been shown to the ALP discord server!'); - }; +}; - exports.conf = { - aliases: [], - guildOnly: false, - }; - exports.help = { - name: 'suggestfeature', - description: 'Suggest features in AleeBot.', - usage: 'suggestfeature [suggestion]', - category: '- General Commands', - }; +exports.conf = { + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'suggestfeature', + description: 'Suggest features in AleeBot.', + usage: 'suggestfeature [suggestion]', + category: '- General Commands', +}; diff --git a/commands/uptime.js b/commands/uptime.js index 8f97d02..90afc81 100644 --- a/commands/uptime.js +++ b/commands/uptime.js @@ -18,26 +18,26 @@ * * *************************************/ module.exports.run = async (client, message) => { - let uptime = parseInt(client.uptime); - uptime = Math.floor(uptime / 1000); - let uptimeMinutes = Math.floor(uptime / 60); - const minutes = uptime % 60; - let hours = 0; - while (uptimeMinutes >= 60) { - hours++; - uptimeMinutes = uptimeMinutes - 60; - } - const uptimeSeconds = minutes % 60; - message.channel.send(':clock3: AleeBot has been up for ' + hours + ' hours, ' + uptimeMinutes + ' minutes, and ' + uptimeSeconds + ' seconds.'); + let uptime = parseInt(client.uptime); + uptime = Math.floor(uptime / 1000); + let uptimeMinutes = Math.floor(uptime / 60); + const minutes = uptime % 60; + let hours = 0; + while (uptimeMinutes >= 60) { + hours++; + uptimeMinutes = uptimeMinutes - 60; + } + const uptimeSeconds = minutes % 60; + message.channel.send(':clock3: AleeBot has been up for ' + hours + ' hours, ' + uptimeMinutes + ' minutes, and ' + uptimeSeconds + ' seconds.'); }; exports.conf = { - aliases: [], - guildOnly: false, + aliases: [], + guildOnly: false, }; exports.help = { - name: 'uptime', - description: 'Displays Uptime.', - usage: 'uptime', - category: '- General Commands', + name: 'uptime', + description: 'Displays Uptime.', + usage: 'uptime', + category: '- General Commands', }; diff --git a/commands/userinfo.js b/commands/userinfo.js index 3b79beb..c03dfed 100644 --- a/commands/userinfo.js +++ b/commands/userinfo.js @@ -18,25 +18,25 @@ * * *************************************/ module.exports.run = async (client, message) => { - const Discord = require('discord.js'); - const embed = new Discord.RichEmbed() - .setAuthor(message.author.tag, message.author.avatarURL) - .setDescription('User Information') - .setThumbnail(message.author.avatarURL) - .addField('Names', '**Username:** ' + message.author.username + '\n**Current Nickname:** ' + message.member.displayName) - .addField('Identity', `**User ID:** ${message.author.id} `) - .addField('Create and Join Times', '**Created At:** ' + message.member.user.createdAt.toUTCString() + '\n**Joined Guild At:** ' + message.member.joinedAt.toUTCString()) - .setColor('#1fd619'); - message.channel.send({embed}); + const Discord = require('discord.js'); + const embed = new Discord.MessageEmbed() + .setAuthor(message.author.tag, message.author.avatarURL()) + .setDescription('User Information') + .setThumbnail(message.author.avatarURL()) + .addField('Names', '**Username:** ' + message.author.username + '\n**Current Nickname:** ' + message.member.displayName) + .addField('Identity', `**User ID:** ${message.author.id} `) + .addField('Create and Join Times', '**Created At:** ' + message.member.user.createdAt.toUTCString() + '\n**Joined Guild At:** ' + message.member.joinedAt.toUTCString()) + .setColor('#1fd619'); + message.channel.send({embed}); }; exports.conf = { - aliases: ['uinfo'], - guildOnly: false, + aliases: ['uinfo'], + guildOnly: false, }; exports.help = { - name: 'userinfo', - description: 'Tells your info.', - usage: 'userinfo', - category: '- Information Commands', + name: 'userinfo', + description: 'Tells your info.', + usage: 'userinfo', + category: '- Information Commands', }; diff --git a/commands/vtquote.js b/commands/vtquote.js deleted file mode 100644 index 7d1ccd0..0000000 --- a/commands/vtquote.js +++ /dev/null @@ -1,64 +0,0 @@ -/** ************************************** - * - * VTQuote: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * *************************************/ -module.exports.run = async (client, message) => { - const Discord = require('discord.js'); - - let VictorQuote; - - function GetVictorQuote(quoteNum = -1) { - VictorQuote = new Discord.RichEmbed(); - - let quo = require('../storage/vtquotes.json').quotes; - - if (quoteNum == -1) { - quoteNum = Math.floor(Math.random() * 1000) % quo.length; - quo=quo[quoteNum]; - } - - const author = quo.author; - const authorImage = quo.authorImage; - const quote = quo.quote; - const year = quo.year; - const url = quo.url; - - VictorQuote.setAuthor(author, authorImage); - VictorQuote.setColor('#1fd619'); - VictorQuote.setDescription(quote); - VictorQuote.setFooter('- ' + year); - VictorQuote.setURL(url); - - return VictorQuote; - } - - const victorquote = GetVictorQuote(); - message.reply('Alright, here\'s your Victor quote.'); - message.channel.send(victorquote); -}; - -exports.conf = { - aliases: [], - guildOnly: false, -}; -exports.help = { - name: 'vtquote', - description: 'Tells you quotes when victor accidentaly swore.', - usage: 'vtquote', - category: '- Quote Commands', -}; diff --git a/deprecated/balance.js b/deprecated/balance.js new file mode 100644 index 0000000..ca32081 --- /dev/null +++ b/deprecated/balance.js @@ -0,0 +1,50 @@ +/** ************************************** + * + * Balance: Command for AleeBot + * Copyright (C) 2017-2020 Alee Productions + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * *************************************/ +module.exports.run = async (client, message) => { + const db = require('quick.db'); + const {MessageEmbed} = require('discord.js'); + + const user = message.mentions.users.first() || message.author; + + let balance = await db.fetch(`userBalance_${user.id}`); + + if (balance === null) { + db.set(`userBalance_${message.author.id}`, 0); + balance = 0; + } + const embed = new MessageEmbed() + .setDescription('**AleeCorp Bank**') + .addField('Account Holder: ', user.username, true) + .addField('Account Balance: ', balance, true) + .setColor('#1fd619'); + + message.channel.send({embed}); +}; + +exports.conf = { + aliases: ['bal', 'money'], + guildOnly: false, +}; +exports.help = { + name: 'balance', + description: 'Checks the balance of AleeBot', + usage: 'balance [@someone (optional)]', + category: '- Economy Commands', +}; diff --git a/deprecated/buy.js b/deprecated/buy.js index 9757d51..25f2589 100644 --- a/deprecated/buy.js +++ b/deprecated/buy.js @@ -18,7 +18,6 @@ * * *************************************/ module.exports.run = async (client, message, args) => { -/* const Discord = require('discord.js'); const fs = require('fs') const db = require('quick.db'); @@ -39,7 +38,7 @@ const items = JSON.parse(fs.readFileSync('./storage/items.json', 'utf8')); } - const embed = new Discord.RichEmbed() + const embed = new Discord.MessageEmbed() .setDescription(`Available Items`) .setColor('#1fd619') @@ -101,17 +100,15 @@ const items = JSON.parse(fs.readFileSync('./storage/items.json', 'utf8')); } message.channel.send('You bought ' + itemName + '!'); - */ - message.reply('Command is broken for now'); }; exports.conf = { - aliases: [], - guildOnly: false, + aliases: [], + guildOnly: false, }; exports.help = { - name: 'buy', - description: 'Buy things.', - usage: 'buy [item]', - category: '- Economy Commands', + name: 'buy', + description: 'Buy things.', + usage: 'buy [item]', + category: '- Economy Commands', }; diff --git a/deprecated/daily.js b/deprecated/daily.js index c58928c..c0f04f9 100644 --- a/deprecated/daily.js +++ b/deprecated/daily.js @@ -21,36 +21,36 @@ const db = require('quick.db'); ms = require('parse-ms'); module.exports.run = async (client, message) => { - const cooldown = 8.64e+7; - const amount = 100; + const cooldown = 8.64e+7; + const amount = 100; - const lastDaily = await db.fetch(`lastDaily_${message.author.id}`); + const lastDaily = await db.fetch(`lastDaily_${message.author.id}`); - if (lastDaily !== null && cooldown - (Date.now() - lastDaily) > 0) { - const timeObj = ms(cooldown - (Date.now() - lastDaily)); + if (lastDaily !== null && cooldown - (Date.now() - lastDaily) > 0) { + const timeObj = ms(cooldown - (Date.now() - lastDaily)); - message.reply(`You already collected your money, please wait **${timeObj.hours}h ${timeObj.minutes}m**!`); - } else { - message.channel.send(`You have successfully collected $${amount} dollars!`); + message.reply(`You already collected your money, please wait **${timeObj.hours}h ${timeObj.minutes}m**!`); + } else { + message.channel.send(`You have successfully collected $${amount} dollars!`); - const balance = await db.fetch(`userBalance_${message.author.id}`); + const balance = await db.fetch(`userBalance_${message.author.id}`); - if (balance == null) { - db.set(`userBalance_${message.author.id}`, 0); - } + if (balance == null) { + db.set(`userBalance_${message.author.id}`, 0); + } - db.set(`lastDaily_${message.author.id}`, Date.now()); - db.add(`userBalance_${message.author.id}`, 100); - } + db.set(`lastDaily_${message.author.id}`, Date.now()); + db.add(`userBalance_${message.author.id}`, 100); + } }; exports.conf = { - aliases: [], - guildOnly: false, + aliases: [], + guildOnly: false, }; exports.help = { - name: 'daily', - description: 'This gives you money everyday.', - usage: 'daily', - category: '- Economy Commands', + name: 'daily', + description: 'This gives you money everyday.', + usage: 'daily', + category: '- Economy Commands', }; diff --git a/deprecated/pay.js b/deprecated/pay.js new file mode 100644 index 0000000..bc27a4b --- /dev/null +++ b/deprecated/pay.js @@ -0,0 +1,60 @@ +/** ************************************** + * + * Pay: Command for AleeBot + * Copyright (C) 2017-2020 Alee Productions + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * *************************************/ + +module.exports.run = async (client, message, args) => { + const db = require('quick.db'); + if (!message.mentions.members.first()) return message.reply('Please mention a user...'); + + const targetMember = message.mentions.members.first(); + const amount = parseInt(args.join(' ').replace(targetMember, '')); + + if (isNaN(amount)) return message.reply('Please define an amount.'); + + let targetBalance = await db.fetch(`userBalance_${targetMember.id}`); + let selfBalance = await db.fetch(`userBalance_${message.author.id}`); + + if (targetBalance === null) { + db.set(`userBalance_${targetMember.id}`, 0); + targetBalance = 0; + } + + if (selfBalance === null) { + db.set(`userBalance_${message.author.id}`, 0); + selfBalance = 0; + } + + if (amount > selfBalance) return message.reply('Sorry you don\'t have enough money.'); + + db.add(`userBalance_${targetMember.id}`, amount); + db.subtract(`userBalance_${message.author.id}`, amount); + + message.reply(`Successfully transfered $${amount} to ${targetMember.user}`); +}; + +exports.conf = { + aliases: ['transfer'], + guildOnly: false, +}; +exports.help = { + name: 'pay', + description: 'You can pay others!', + usage: 'pay [@user] [interger]', + category: '- Economy Commands', +}; diff --git a/package.json b/package.json index c982509..ad4eb3f 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "aleebot", "version": "2.0.0", "description": "A chat bot for discord written in discord.js.", - "main": "src/bot.js", + "main": "bot_discord.js", "scripts": { "start": "node bot_discord.js", "dev": "nodemon bot_discord.js --beta" @@ -14,14 +14,15 @@ "author": "Alee Productions", "license": "GPL-3.0", "bugs": { - "url": "https://github.com/aleeproductions/AleeBot-JS/issues" + "url": "https://github.com/aleeproductions/AleeBot/issues" }, - "homepage": "https://github.com/aleeproductions/AleeBot-JS#readme", + "homepage": "https://github.com/aleeproductions/AleeBot#readme", "dependencies": { "blessed": "^0.1.81", "colors": "^1.3.0", "dblapi.js": "^2.0.0", - "discord.js": "^11.3.1", + "discord.js": "^12.2.0", + "eslint": "^7.1.0", "fs": "0.0.1-security", "git-last-commit": "^0.3.0", "i18next": "^19.4.4", @@ -30,6 +31,8 @@ "os": "^0.1.1", "parse-ms": "^1.0.1", "readline": "^1.3.0", + "sequelize": "^6.2.3", + "sqlite3": "^4.2.0", "ytdl-core": "^0.20.4" }, "devDependencies": { diff --git a/storage/items.json b/storage/items.json deleted file mode 100644 index 1d57718..0000000 --- a/storage/items.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "Programmer" : { - "name": "Programmer Role", - "price": "100", - "type": "Roles", - "desc": "Buying this gives you the programmer role." - }, - "AleeOS" : { - "name": "AleeOS", - "price": "400", - "type": "OS", - "desc": "Buying this gives you AleeOS." - }, - "theSlate" : { - "name": "theSlate", - "price": "400", - "type": "Tools", - "desc": "Buying this gives you theSlate." - } -} \ No newline at end of file -- cgit v1.2.3 From f644eaf3a59160380d864e287d74f7d8fe763120 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Tue, 22 Dec 2020 16:37:17 -0500 Subject: Added member joining and leaving --- bot_discord.js | 61 +++++++++++++++++++++++++++++++++++++++++----------------- package.json | 2 +- 2 files changed, 44 insertions(+), 19 deletions(-) (limited to 'package.json') diff --git a/bot_discord.js b/bot_discord.js index 6a51452..9758b86 100644 --- a/bot_discord.js +++ b/bot_discord.js @@ -33,9 +33,10 @@ const api = require('./tokens.json'); const dbl = new DBL(api.dbltoken, client); const active = new Map(); const ownerID = '242775871059001344'; -var autoRole = true; -var logChannel = '318874545593384970'; +let autoRole = true; +let logChannel = '318874545593384970'; let statusChannelID = '606602551634296968'; +let readyEmbedMessage = true; const log = (message) => { console.log(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] ${message}`.white); @@ -245,9 +246,9 @@ client.on('ready', () => { client.setInterval(function() { const activities = [ 'AleeBot ' + settings.abVersion + ' | ' + settings.prefix + 'help', - 'Coding stuff', + 'Coding bytes', 'Drawing shapes', - 'Fighting AstralMod', + 'Fighting Quad', ]; /* setInterval(() => { @@ -262,34 +263,58 @@ client.on('ready', () => { }); }, 200000); client.user.setStatus('online'); - const readyEmbed = new Discord.MessageEmbed() - .setAuthor('AleeBot Status', client.user.avatarURL()) - .setDescription('AleeBot has started') - .addField('Prefix', `\`${settings.prefix}\``, true) - .setColor('#5cd65c'); - let statusChannel = client.channels.cache.get(statusChannelID); - if (!statusChannel) return console.error('The status channel does not exist! Skipping.'); - statusChannel.send(readyEmbed); + if (readyEmbedMessage === true) { + const readyEmbed = new Discord.MessageEmbed() + .setAuthor('AleeBot Status', client.user.avatarURL()) + .setDescription('AleeBot has started') + .addField('Prefix', `\`${settings.prefix}\``, true) + .setColor('#5cd65c'); + let statusChannel = client.channels.cache.get(statusChannelID); + if (!statusChannel) return console.error('The status channel does not exist! Skipping.'); + statusChannel.send(readyEmbed); + } client.user.setStatus('online'); rl.prompt(); }); client.on('guildMemberAdd', (member) => { - if (autoRole = true) { + const logEmbed = new Discord.MessageEmbed() + .setAuthor('AleeBot Logging', client.user.avatarURL()) + .setDescription(`A user has joined this server!`) + .addField('Username: ', `${member.displayName}`, true) + .addField('User ID: ', `${member.id}`, true) + .addField('Joined At: ', `${member.joinedAt}`) + .setColor('#4bff31') + .setTimestamp(); + + let guildMember = client.channels.cache.get(logChannel); + if (!guildMember) return; + + guildMember.send(logEmbed); + if (autoRole === true) { if (member.guild.id !== '243022206437687296') return; const role = member.guild.roles.cache.get('657426918416580614'); member.roles.add(role); log(`[i] ${member.user.username} joined Alee Productions.`.green); log(`[i] I gave ${member.user.username} the "Member" role.`.green); - } else { - return; } }); -/* -client.on('guildMemberRemove', (member) =>{ +client.on('guildMemberRemove', (member) => { + const logEmbed = new Discord.MessageEmbed() + .setAuthor('AleeBot Logging', client.user.avatarURL()) + .setDescription(`A user has left this server!`) + .addField('Username: ', `${member.displayName}`, true) + .addField('User ID: ', `${member.id}`, true) + .setColor('#ec2727') + .setTimestamp(); + + let guildMember = client.channels.cache.get(logChannel); + if (!guildMember) return; + + guildMember.send(logEmbed); }) -*/ + client.on('messageUpdate', async (oldMessage, newMessage) => { if (oldMessage.guild.id !== '243022206437687296') return; diff --git a/package.json b/package.json index ad4eb3f..7d8ac45 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "parse-ms": "^1.0.1", "readline": "^1.3.0", "sequelize": "^6.2.3", - "sqlite3": "^4.2.0", + "sqlite3": "^5.0.0", "ytdl-core": "^0.20.4" }, "devDependencies": { -- cgit v1.2.3 From 06dd6383d7a239817c2a9724465896ef7da70bc2 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Thu, 29 Jul 2021 16:00:22 -0400 Subject: Big changes --- CONTRIBUTING.md | 8 +- To be worked on/leave.js | 2 +- To be worked on/play.js | 2 +- To be worked on/queue.js | 2 +- To be worked on/skip.js | 2 +- bot_discord.js | 59 ++++++---- commands/about.js | 4 +- commands/addquote.js | 82 ++++++++++---- commands/ask.js | 2 +- commands/avatarurl.js | 12 ++- commands/ban.js | 4 +- commands/eval.js | 2 +- commands/git.js | 2 +- commands/help.js | 4 +- commands/info.js | 6 +- commands/interrogate.js | 2 +- commands/invite.js | 12 ++- commands/jail.js | 2 +- commands/kick.js | 4 +- commands/leaveguild.js | 2 +- commands/nick.js | 2 +- commands/ping.js | 2 +- commands/poweroff.js | 2 +- commands/purge.js | 2 +- commands/quote.js | 44 ++++++-- commands/say.js | 2 +- commands/serverinfo.js | 51 +++++++++ commands/setlogchannel.js | 63 +++++++++++ commands/setprefix.js | 2 +- commands/setup.js | 45 -------- commands/slowdown.js | 2 +- commands/suggest.js | 2 +- commands/suggestfeature.js | 2 +- commands/uptime.js | 2 +- commands/userinfo.js | 2 +- deprecated/balance.js | 2 +- deprecated/buy.js | 2 +- deprecated/daily.js | 2 +- deprecated/pay.js | 2 +- deprecated/setup.js | 45 ++++++++ package.json | 7 +- plugins/mongo.js | 10 ++ schema/logging-schema.js | 13 +++ schema/quote-schema.js | 17 +++ storage/quotes.json | 260 --------------------------------------------- storage/quotes.json.bak | 260 --------------------------------------------- storage/vtquotes.json | 60 ----------- 47 files changed, 402 insertions(+), 718 deletions(-) create mode 100644 commands/serverinfo.js create mode 100644 commands/setlogchannel.js delete mode 100644 commands/setup.js create mode 100644 deprecated/setup.js create mode 100644 plugins/mongo.js create mode 100644 schema/logging-schema.js create mode 100644 schema/quote-schema.js delete mode 100644 storage/quotes.json delete mode 100644 storage/quotes.json.bak delete mode 100644 storage/vtquotes.json (limited to 'package.json') diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 473704a..aa79553 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,7 +5,7 @@ Include the GPL-3.0 license too and follow the following format when you create /**************************************** * * [Command/Plugin]: (Command or Plugin) for AleeBot - * Copyright (C) 2017-2020 Alee Productions & (your name here) + * Copyright (C) 2017-2021 Alee Productions & (your name here) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -43,7 +43,9 @@ exports.help = { First get NodeJS then clone this repo then do `npm install` or `yarn install` in the AleeBot folder. Now add a file called `tokens.json` then copy and paste this follow code. ```json { - "abtoken": "token" + "abtoken": "token", + "mongoPath": "mongodb://127.0.0.1:27017/aleebot", + "port": 3000 } ``` -Then get your token from discord and replace `token` with your token and finally run this in linux `./run_linux.sh` or for windows `run_win.bat` or `npm/yarn start`. +Then get your token from discord and replace `token` with your token. After that, install MongoDB and run it. Finally, run this in linux `./run_linux.sh` or for windows `run_win.bat` or `npm/yarn start`. diff --git a/To be worked on/leave.js b/To be worked on/leave.js index da0b4cc..78410e2 100644 --- a/To be worked on/leave.js +++ b/To be worked on/leave.js @@ -1,7 +1,7 @@ /** ************************************** * * Leave: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/To be worked on/play.js b/To be worked on/play.js index abebc8b..f14d3c5 100644 --- a/To be worked on/play.js +++ b/To be worked on/play.js @@ -1,7 +1,7 @@ /** ************************************** * * Play: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/To be worked on/queue.js b/To be worked on/queue.js index 1208ddf..2b6d31a 100644 --- a/To be worked on/queue.js +++ b/To be worked on/queue.js @@ -1,7 +1,7 @@ /** ************************************** * * Queue: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/To be worked on/skip.js b/To be worked on/skip.js index 371e7e7..bda040b 100644 --- a/To be worked on/skip.js +++ b/To be worked on/skip.js @@ -1,7 +1,7 @@ /** ************************************** * * Skip: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/bot_discord.js b/bot_discord.js index 991a294..79e9643 100644 --- a/bot_discord.js +++ b/bot_discord.js @@ -1,7 +1,7 @@ /** ************************************** * * AleeBot: Made for discord servers - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,16 +18,19 @@ * * *************************************/ const Discord = require('discord.js'); +const client = new Discord.Client({ + disableEveryone: true, +}); const moment = require('moment'); +const express = require('express'); +const fs = require('fs'); const readline = require('readline'); const colors = require('colors'); const DBL = require('dblapi.js'); //const i18next = require('i18next'); -const client = new Discord.Client({ - disableEveryone: true, -}); +const web = express(); const settings = require('./storage/settings.json'); -const fs = require('fs'); +const mongo = require('./plugins/mongo'); const api = require('./tokens.json'); const dbl = new DBL(api.dbltoken, client); const active = new Map(); @@ -35,13 +38,16 @@ const ownerID = '242775871059001344'; let autoRole = true; let logChannel = '318874545593384970'; let statusChannelID = '606602551634296968'; -let readyEmbedMessage = true; +let readyEmbedMessage = false; + const activities = [ 'AleeBot ' + settings.abVersion + ' | ' + settings.prefix + 'help', 'Coding bytes', 'Drawing shapes', 'Fighting Quad', - 'Ultra Jump Mania!' + 'Ultra Jump Mania!', + 'Exposing TAS-Corp', + 'Fighting Evelyn Claythorne' ]; const log = (message) => { @@ -54,7 +60,7 @@ const rl = readline.createInterface({ prompt: '> '.gray, }); -console.log(`AleeBot ${settings.abVersion}: Copyright (C) 2017-2020 Alee Productions`.gray); +console.log(`AleeBot ${settings.abVersion}: Copyright (C) 2017-2021 Alee Productions`.gray); console.log('This program comes with ABSOLUTELY NO WARRANTY; for details type `show w\'.'.gray); console.log('This is free software, and you are welcome to redistribute it'.gray); console.log('under certain conditions; type `show c\' for details.\n'.gray); @@ -103,8 +109,7 @@ fs.readdir('./commands', (err, files) => { console.log(err.stack); } }); - log('[>] Command Loading complete!'.green); - console.log('\n'); + log('[>] Command loading complete!\n'.green); }); rl.on('line', function(cmd) { @@ -114,7 +119,7 @@ rl.on('line', function(cmd) { if (client.guilds.size === 0) { console.log(('[!] No guilds found.'.yellow)); } else { - console.log('[i] Here\'s the servers that AleeBot is connected to:'); + console.log('[i] These are the servers that AleeBot is connected to:'); for ([id, guild] of client.guilds) { console.log(` Guild Name: ${guild.name} - ID: ${guild.id}`.blue); } @@ -124,8 +129,8 @@ rl.on('line', function(cmd) { if (!args[1]) { console.log('[!] Please insert the guild\'s ID.'.yellow); } else { - var guild = client.guilds.get(args[1]); - console.log('[i] Here\'s the channels that this guild have:'.blue); + let guild = client.guilds.get(args[1]); + console.log('[i] These are the channels that this guild have:'.blue); for ([id, channel, guild] of guild && client.channels) { console.log(` Channel: #${channel.name} - ID: ${channel.id}`.blue); } @@ -135,7 +140,7 @@ rl.on('line', function(cmd) { if (!args[1]) { console.log('[!] Please insert the guild\'s ID.'.yellow); } else { - var guild = client.guilds.get(args[1]); + let guild = client.guilds.get(args[1]); guild.leave(); } break; @@ -144,9 +149,9 @@ rl.on('line', function(cmd) { console.log('[!] Usage: broadcast [guildID] [channelID].'.yellow); } else { const broadcast = args.join(' ').slice(48); - var guild = null; + let guild = null; guild = client.guilds.get(args[1]); - var channel = null; + let channel = null; channel = guild.channels.get(args[2]); if (channel != null) { channel.send(broadcast); @@ -198,14 +203,29 @@ rl.on('line', function(cmd) { rl.prompt(); }); -client.on('ready', () => { +client.on('ready', async () => { log('[>] AleeBot is now ready!'.green); log(`[i] Logged in as ${client.user.tag}`.green); log(`[i] Default Prefix: ${settings.prefix}`.green); log(`[i] Bot ID: ${client.user.id}`.green); - log(`[i] Token: ${api.abtoken}`.green); log(`[i] Running version ${settings.abVersion} and in ${client.guilds.cache.size} guilds`.green); + await mongo().then(mongoose => { + try { + log('[>] Connected to MongoDB!'.green); + } finally { + mongoose.connection.close(); + } + }) + + web.get('/', (req, res) => { + res.send("Hello World! This is going to become the AleeBot dashboard..."); + }); + + web.listen(api.port, () => { + console.log(`Listening at https://localhost:${api.port}`) + }) + client.setInterval(function() { /* setInterval(() => { @@ -223,6 +243,7 @@ client.on('ready', () => { const readyEmbed = new Discord.MessageEmbed() .setAuthor('AleeBot Status', client.user.avatarURL()) .setDescription('AleeBot has started') + .addField('Version', settings.abVersion, true) .addField('Prefix', `\`${settings.prefix}\``, true) .setColor('#5cd65c'); let statusChannel = client.channels.cache.get(statusChannelID); @@ -410,7 +431,7 @@ client.on('message', (msg) => { if (cmd) { if (cmd.conf.guildOnly === true) { if (!msg.channel.guild) { - return msg.channel.createMessage('This command can only be ran in a guild.'); + return msg.channel.send('This command can only be ran in a guild.'); } } try { diff --git a/commands/about.js b/commands/about.js index a455faa..e22d0f8 100644 --- a/commands/about.js +++ b/commands/about.js @@ -1,7 +1,7 @@ /** ************************************** * * About: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,7 +24,7 @@ module.exports.run = async (client, message) => { .setAuthor(`AleeBot ${require('../storage/settings.json').abVersion}`, client.user.avatarURL()) .addField('About AleeBot', 'AleeBot is an all-in-one bot that\'s made from the Discord.JS api!') .addField('Contributors', 'Andrew Lee (Founder of this project)\nOfficialRain (Raina) (Uptime Command)\njtsshieh (Command Handler)') - .setFooter('© Copyright 2017-2020 Alee Productions, Licensed with GPL-3.0') + .setFooter('© Copyright 2017-2021 Alee Productions, Licensed with GPL-3.0') .setColor('#1fd619'); await message.channel.send({embed}); }; diff --git a/commands/addquote.js b/commands/addquote.js index 7b7221e..6334470 100644 --- a/commands/addquote.js +++ b/commands/addquote.js @@ -1,7 +1,7 @@ /** ************************************** * * AddQuote: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,34 +17,74 @@ * along with this program. If not, see . * * *************************************/ +const mongo = require('../plugins/mongo'); +const quoteSchema = require('../schema/quote-schema'); module.exports.run = async (client, message, args) => { - /* - const moment = require('moment'); - const log = message => { +/* + let authorMessage; + let authorImageMessage; + let quoteMessage; + let yearMessage;*/ - console.log(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] ${message}`); + if (!['242775871059001344'].includes(message.author.id)) return message.reply('**This command is disabled due to a new system being implemented.**'); + //await message.author.send('Welcome to AleeBot\'s quoting system!\nThis process will be easy.'); - }; - const fs = require('fs'); - if(!args[0]) return message.reply(`Usage: ab:addquote [author] [authorImage] [quote] [year]`); + if (!args.length) return message.reply("Error: Did not provide more context (message will be replaced eventually)"); - let quotes = JSON.parse(fs.readFileSync("./storage/quotes.json", "utf8")); + await mongo().then(async (mongoose) => { + try { + await new quoteSchema({ + author: args[0], + authorImage: args[1], + quote: args[2], + year: args[3] - quotes = { - author: args[0], - authorImage: args[1], - quote: args[2], - year: args[3] - }; + }).save() + } finally { + await mongoose.connection.close(); + message.reply('Added this quote to the database...'); + } + }) - fs.writeFile("./storage/quotes.json", JSON.stringify(quotes), (err) =>{ - if (err) log(err) - }) +/* + let quoteState = {}; + let state = quoteState[message.author.id]; - message.reply(`You just added a new quote!`); - log(`[i] A quote has been added to quotes.json...`) + if (message.content.toLowerCase() === "q"){ + await message.author.send("Process has been cancelled"); + state = null; + } else { + switch (state) { + case 1: + await message.author.send('Enter the author\'s name'); + authorMessage = message.content; + console.log(authorMessage); + state = 2; + break; + case 2: + await message.author.send('author url here'); + authorImageMessage = message.content; + console.log(authorImageMessage); + state = 3; + break; + case 3: + await message.author.send('quote here'); + quoteMessage = message.content; + console.log(quoteMessage); + state = 4; + break; + case 4: + await message.author.send('year here'); + yearMessage = message.content; + console.log(yearMessage); + state = 5; + break; + case 5: + await message.author.send('process complete'); + state = null; + break; + } */ - message.reply('Command is broken for now'); }; exports.conf = { diff --git a/commands/ask.js b/commands/ask.js index 3b1efd5..1dd5edd 100644 --- a/commands/ask.js +++ b/commands/ask.js @@ -1,7 +1,7 @@ /** ************************************** * * Ask: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/commands/avatarurl.js b/commands/avatarurl.js index 7c50e2c..2c796f4 100644 --- a/commands/avatarurl.js +++ b/commands/avatarurl.js @@ -1,7 +1,7 @@ /** ************************************** * * avatarurl: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,11 +18,17 @@ * * *************************************/ module.exports.run = async (client, message) => { - message.reply(message.author.avatarURL({ dynamic: true, format: 'png', size: 1024 })); + if(!message.mentions.users.first()) { + message.reply(message.author.avatarURL({ dynamic: true, format: 'png', size: 1024 })); + } else { + let targetMember; + targetMember = message.mentions.users.first(); + message.reply(targetMember.avatarURL({ dynamic: true, format: 'png', size: 1024 })) + } }; exports.conf = { - aliases: [], + aliases: ['pic'], guildOnly: false, }; exports.help = { diff --git a/commands/ban.js b/commands/ban.js index 3c8a809..2c4950a 100644 --- a/commands/ban.js +++ b/commands/ban.js @@ -1,7 +1,7 @@ /** ************************************** * * Ban: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,7 +24,7 @@ module.exports.run = async (client, message, args) => { if (!message.guild.member(client.user).hasPermission('BAN_MEMBERS')) return message.reply('Uhh... I don\'t have permission to ban members.'); const member = message.mentions.members.first(); if (!member) return message.reply('Uhh... Please mention a member first.'); - await member.ban(`Banned by ${message.author.tag} Reason: ` + mreason); + await member.ban(`Banned by ${message.author.tag}. Reason: ${mreason}.`); const embed = new Discord.MessageEmbed() .setTitle('User Banned!') .setColor('#1fd619') diff --git a/commands/eval.js b/commands/eval.js index ef8fc97..9ace7bf 100644 --- a/commands/eval.js +++ b/commands/eval.js @@ -1,7 +1,7 @@ /** ************************************** * * Eval: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions & jtsshieh + PokeWorld + * Copyright (C) 2017-2021 Alee Productions & jtsshieh + PokeWorld * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/commands/git.js b/commands/git.js index ed98ebf..4f44edb 100644 --- a/commands/git.js +++ b/commands/git.js @@ -1,7 +1,7 @@ /** ************************************** * * Git: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/commands/help.js b/commands/help.js index 36d4630..2dafe0c 100644 --- a/commands/help.js +++ b/commands/help.js @@ -1,7 +1,7 @@ /** ************************************** * * Help: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -43,7 +43,7 @@ module.exports.run = async (client, message) => { .setAuthor('AleeBot ' + require('../storage/settings.json').abVersion + ` Help and on ${client.guilds.cache.size} servers`, client.user.avatarURL()) .setDescription('Every command you input into AleeBot is `' + prefix + '`') .setColor('#1fd619') - .setFooter('© Copyright 2017-2020 Alee Productions, Licensed with GPL-3.0'); + .setFooter('© Copyright 2017-2021 Alee Productions, Licensed with GPL-3.0'); categories.forEach(function(x) { let cat = ''; diff --git a/commands/info.js b/commands/info.js index 3de7ecd..4476ac0 100644 --- a/commands/info.js +++ b/commands/info.js @@ -1,7 +1,7 @@ /** ************************************** * * Info: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,14 +20,16 @@ module.exports.run = async (client, message) => { const Discord = require('discord.js'); const os = require('os'); + const mongoose = require('mongoose'); const embed = new Discord.MessageEmbed() .setTitle('Information on AleeBot\'s Host') .addField('OS Hostname: ', os.hostname(), true) .addField('NodeJS Version: ', process.versions.node, true) .addField('OS Platform: ', os.platform(), true) .addField('OS Version: ', os.release(), true) + .addField('Mongoose Version:', mongoose.version, true) .setColor('#1fd619'); - message.channel.send({embed}); + await message.channel.send({embed}); }; exports.conf = { diff --git a/commands/interrogate.js b/commands/interrogate.js index 54e8cb2..1b9b97b 100644 --- a/commands/interrogate.js +++ b/commands/interrogate.js @@ -1,7 +1,7 @@ /** ************************************** * * Interrogate: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/commands/invite.js b/commands/invite.js index e6f538f..a12cff4 100644 --- a/commands/invite.js +++ b/commands/invite.js @@ -1,7 +1,7 @@ /** ************************************** * * Invite: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,7 +17,13 @@ * along with this program. If not, see . * * *************************************/ -module.exports.run = async (client, message) => { +module.exports.run = (client, message) => { + const disbut = require('discord-buttons')(client); + let button = new disbut.MessageButton() + .setLabel('My First Button!') //default: NO_LABEL_PROVIDED + .setID('click_to_function') //note: if you use the style "url" you must provide url using .setURL('https://example.com') + .setDisabled(); //disables the button | default: false + message.channel.send({embed: { color: 2086425, title: 'Invite Command', @@ -31,7 +37,7 @@ module.exports.run = async (client, message) => { }, ], }, - }); + }, button); // message.channel.send('Want AleeBot in your server? Here\'s the link: https://discordapp.com/api/oauth2/authorize?client_id=282547024547545109&permissions=2080375863&scope=bot'); }; diff --git a/commands/jail.js b/commands/jail.js index 432f60a..a82e1b2 100644 --- a/commands/jail.js +++ b/commands/jail.js @@ -1,7 +1,7 @@ /** ************************************** * * Jail: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/commands/kick.js b/commands/kick.js index 3cbaaf8..79cd964 100644 --- a/commands/kick.js +++ b/commands/kick.js @@ -1,7 +1,7 @@ /** ************************************** * * Kick: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,7 +24,7 @@ module.exports.run = async (client, message, args) => { if (!message.guild.member(client.user).hasPermission('KICK_MEMBERS')) return message.reply('Uhh... I don\'t have permission to kick members.'); const member = message.mentions.members.first(); if (!member) return message.reply('Uhh... Please mention a member first.'); - member.kick(`Kicked by: ${message.author.tag} Reason: ` + mreason); + await member.kick(`Kicked by: ${message.author.tag}. Reason: ${mreason}.`); const embed = new Discord.MessageEmbed() .setTitle('User Kicked!') .setColor('#1fd619') diff --git a/commands/leaveguild.js b/commands/leaveguild.js index 5108436..146512c 100644 --- a/commands/leaveguild.js +++ b/commands/leaveguild.js @@ -1,7 +1,7 @@ /** ************************************** * * LeaveGuild: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/commands/nick.js b/commands/nick.js index f65bf74..d87d57e 100644 --- a/commands/nick.js +++ b/commands/nick.js @@ -1,7 +1,7 @@ /** ************************************** * * Nick: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/commands/ping.js b/commands/ping.js index b8d2779..d66330d 100644 --- a/commands/ping.js +++ b/commands/ping.js @@ -1,7 +1,7 @@ /** ************************************** * * Ping: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/commands/poweroff.js b/commands/poweroff.js index 8067c5f..700005a 100644 --- a/commands/poweroff.js +++ b/commands/poweroff.js @@ -1,7 +1,7 @@ /** ************************************** * * Poweroff: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/commands/purge.js b/commands/purge.js index 97c1be6..bc6e727 100644 --- a/commands/purge.js +++ b/commands/purge.js @@ -1,7 +1,7 @@ /** ************************************** * * Purge: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/commands/quote.js b/commands/quote.js index 149fe37..69e810a 100644 --- a/commands/quote.js +++ b/commands/quote.js @@ -1,7 +1,7 @@ /** ************************************** * * Quote: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,17 +17,49 @@ * along with this program. If not, see . * * *************************************/ -module.exports.run = async (client, message) => { +const mongo = require('../plugins/mongo'); +const quoteSchema = require('../schema/quote-schema'); +module.exports.run = async (client, message, args) => { + if (!['242775871059001344'].includes(message.author.id)) return message.reply('**This command is disabled due to a new system being implemented.**'); const Discord = require('discord.js'); let NewQuote; + let quo; + + let quoId; + let quoAuthor; + let quoAuthorImage; + let quoQuote; + let quoYear; + + if (args) { + await mongo().then(async (mongoose) => { + try { + const quote = await quoteSchema.findOne({quoteID: "1", author: quoAuthor, authorImage: quoAuthorImage, quote: quoQuote, year: quoYear}) + /*const embed = new Discord.MessageEmbed() + .setAuthor(quoAuthor, quoAuthorImage) + .setDescription(quoQuote) + .setColor('#1fd619') + .setFooter('- ' + quoYear); + + await message.channel.send({embed});*/ + console.log(quote); + } finally { + await mongoose.connection.close(); + } + }) + } else { + + } + + /* function GetNewQuote(quoteNum = -1) { NewQuote = new Discord.MessageEmbed(); - let quo = require('../storage/quotes.json').quotes; + let quo = require('../storage/quotes.json').quotes - if (quoteNum == -1) { + if (quoteNum === -1) { quoteNum = Math.floor(Math.random() * 1000) % quo.length; quo=quo[quoteNum]; } @@ -42,14 +74,14 @@ module.exports.run = async (client, message) => { NewQuote.setColor('#1fd619'); NewQuote.setDescription(quote); NewQuote.setFooter('- ' + year); - NewQuote.setURL(url); + //NewQuote.setURL(url); return NewQuote; } const newquote = GetNewQuote(); message.reply('Alright, here\'s your quote.'); - message.channel.send(newquote); + await message.channel.send(newquote);*/ }; exports.conf = { diff --git a/commands/say.js b/commands/say.js index fe17b42..9ef9707 100644 --- a/commands/say.js +++ b/commands/say.js @@ -1,7 +1,7 @@ /** ************************************** * * Say: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/commands/serverinfo.js b/commands/serverinfo.js new file mode 100644 index 0000000..9ccb7c2 --- /dev/null +++ b/commands/serverinfo.js @@ -0,0 +1,51 @@ +/** ************************************** + * + * ServerInfo: Command for AleeBot + * Copyright (C) 2017-2021 Alee Productions + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * *************************************/ +module.exports.run = async (client, message) => { + const Discord = require('discord.js'); + const listedChannels = []; + let memberCountNoBots = message.guild.members.cache.filter(member => !member.user.bot).size; + const embed = new Discord.MessageEmbed() + .setAuthor(message.guild.name, message.guild.iconURL()) + .setDescription('Server Information') + .setThumbnail(message.guild.iconURL()) + .addField('Server Name:', message.guild.name) + .addField('Server ID:', message.guild.id) + .addField('Create At:', message.guild.createdAt.toUTCString()) + /*message.guild.channels.cacheType.forEach(channel => { + listedChannels.push(channel) + })*/ + //.addField('Channels', `${listedChannels.join('\n')}`) + //.addField('Total Channels', message.guild.channelCountMode) + .addField('Total Members (with bots)', message.guild.memberCount) + .addField('Total Members (without bots)', memberCountNoBots) + .setColor('#1fd619'); + await message.channel.send({embed}); +}; + +exports.conf = { + aliases: ['sinfo'], + guildOnly: false, +}; +exports.help = { + name: 'serverinfo', + description: 'Tells your info.', + usage: 'serverinfo', + category: '- Information Commands', +}; diff --git a/commands/setlogchannel.js b/commands/setlogchannel.js new file mode 100644 index 0000000..902a210 --- /dev/null +++ b/commands/setlogchannel.js @@ -0,0 +1,63 @@ +/** ************************************** + * + * SetLogChannel: Command for AleeBot + * Copyright (C) 2017-2021 Alee Productions + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * *************************************/ +const mongo = require('../plugins/mongo'); +const logSchema = require('../schema/logging-schema'); +module.exports.run = async (client, message) => { + //This will be replaced in the future possibly + if (!message.member.permissions.has('MANAGE_GUILD')) return message.reply('It looks like that you can\'t manage this server.'); + const channel = await message.mentions.channels.first().id; + const cache = {} + + if (!channel) return message.reply('I cannot find that channel, please specify...'); + + cache[message.guild.id] = channel + + await mongo().then(async (mongoose) => { + try { + await logSchema.findOneAndUpdate( + { + _id: message.guild.id, + }, + { + _id: message.guild.id, + logChannel: channel + }, + { + upsert: true + } + ) + } finally { + await mongoose.connection.close(); + } + }) + + await message.reply(`Logging channel has been set to <#${channel}>`); +}; + +exports.conf = { + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'setlogchannel', + description: 'Set the log channel.', + usage: 'setlogchannel [channel id]', + category: '- Moderation Commands', +}; diff --git a/commands/setprefix.js b/commands/setprefix.js index edb42c9..2bea4bc 100644 --- a/commands/setprefix.js +++ b/commands/setprefix.js @@ -1,7 +1,7 @@ /** ************************************** * * SetPrefix: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/commands/setup.js b/commands/setup.js deleted file mode 100644 index bf6a14c..0000000 --- a/commands/setup.js +++ /dev/null @@ -1,45 +0,0 @@ -/**************************************** - * - * Setup: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * *************************************/ - -module.exports.run = async (client, message) => { - if (!['242775871059001344', message.guild.owner.user.id].includes(message.author.id)) return message.reply(':warning: You must be a server owner or be the creator of the bot to access this command.'); - message.reply('Look at your DMs.'); - //message.reply("This feature is coming soon. Stay tuned!"); - const Discord = require('discord.js'); - const setupEmbed = new Discord.MessageEmbed() - .setTitle('AleeBot Setup', client.user.avatarURL()) - .setDescription('Select the options') - .addField('Logs', 'channelid', true) - // .addField('Chat Logs', 'placeholder', true) - // .addField('Chat Logs', 'placeholder', true); - - message.author.send(setupEmbed); -}; - -exports.conf = { - aliases: [], - guildOnly: false, -}; -exports.help = { - name: 'setup', - description: 'Setting up AleeBot.', - usage: 'setup', - category: '- Settings Commands', -}; \ No newline at end of file diff --git a/commands/slowdown.js b/commands/slowdown.js index c9fc611..008ceb6 100644 --- a/commands/slowdown.js +++ b/commands/slowdown.js @@ -1,7 +1,7 @@ /** ************************************** * * Slowdown: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/commands/suggest.js b/commands/suggest.js index 3adaa31..3a8e34a 100644 --- a/commands/suggest.js +++ b/commands/suggest.js @@ -1,7 +1,7 @@ /** ************************************** * * Suggest: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/commands/suggestfeature.js b/commands/suggestfeature.js index 8b8b3c7..28fc01a 100644 --- a/commands/suggestfeature.js +++ b/commands/suggestfeature.js @@ -1,7 +1,7 @@ /**************************************** * * SuggestFeature: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/commands/uptime.js b/commands/uptime.js index 90afc81..4753f70 100644 --- a/commands/uptime.js +++ b/commands/uptime.js @@ -1,7 +1,7 @@ /** ************************************** * * Uptime: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions & OfficialRain + * Copyright (C) 2017-2021 Alee Productions & OfficialRain * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/commands/userinfo.js b/commands/userinfo.js index f12454a..d90f7bf 100644 --- a/commands/userinfo.js +++ b/commands/userinfo.js @@ -1,7 +1,7 @@ /** ************************************** * * UserInfo: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/deprecated/balance.js b/deprecated/balance.js index ca32081..bf7618c 100644 --- a/deprecated/balance.js +++ b/deprecated/balance.js @@ -1,7 +1,7 @@ /** ************************************** * * Balance: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/deprecated/buy.js b/deprecated/buy.js index 25f2589..98d4fcf 100644 --- a/deprecated/buy.js +++ b/deprecated/buy.js @@ -1,7 +1,7 @@ /** ************************************** * * Buy: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/deprecated/daily.js b/deprecated/daily.js index c0f04f9..4a38f26 100644 --- a/deprecated/daily.js +++ b/deprecated/daily.js @@ -1,7 +1,7 @@ /** ************************************** * * Daily: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/deprecated/pay.js b/deprecated/pay.js index bc27a4b..42e0f28 100644 --- a/deprecated/pay.js +++ b/deprecated/pay.js @@ -1,7 +1,7 @@ /** ************************************** * * Pay: Command for AleeBot - * Copyright (C) 2017-2020 Alee Productions + * Copyright (C) 2017-2021 Alee Productions * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/deprecated/setup.js b/deprecated/setup.js new file mode 100644 index 0000000..a86f850 --- /dev/null +++ b/deprecated/setup.js @@ -0,0 +1,45 @@ +/**************************************** + * + * Setup: Command for AleeBot + * Copyright (C) 2017-2021 Alee Productions + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * *************************************/ + +module.exports.run = async (client, message) => { + if (!['242775871059001344', message.guild.owner.user.id].includes(message.author.id)) return message.reply(':warning: You must be a server owner or be the creator of the bot to access this command.'); + message.reply('Look at your DMs.'); + //message.reply("This feature is coming soon. Stay tuned!"); + const Discord = require('discord.js'); + const setupEmbed = new Discord.MessageEmbed() + .setTitle('AleeBot Setup', client.user.avatarURL()) + .setDescription('Select the options') + .addField('Logs', 'channelid', true) + // .addField('Chat Logs', 'placeholder', true) + // .addField('Chat Logs', 'placeholder', true); + + message.author.send(setupEmbed); +}; + +exports.conf = { + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'setup', + description: 'Setting up AleeBot.', + usage: 'setup', + category: '- Settings Commands', +}; \ No newline at end of file diff --git a/package.json b/package.json index 7d8ac45..5071221 100644 --- a/package.json +++ b/package.json @@ -21,18 +21,19 @@ "blessed": "^0.1.81", "colors": "^1.3.0", "dblapi.js": "^2.0.0", - "discord.js": "^12.2.0", + "discord-buttons": "^2.4.1", + "discord.js": "^12.5.3", "eslint": "^7.1.0", + "express": "^4.17.1", "fs": "0.0.1-security", "git-last-commit": "^0.3.0", "i18next": "^19.4.4", "moment": "^2.21.0", + "mongoose": "^5.11.8", "node-opus": "^0.3.0", "os": "^0.1.1", "parse-ms": "^1.0.1", "readline": "^1.3.0", - "sequelize": "^6.2.3", - "sqlite3": "^5.0.0", "ytdl-core": "^0.20.4" }, "devDependencies": { diff --git a/plugins/mongo.js b/plugins/mongo.js new file mode 100644 index 0000000..0102aab --- /dev/null +++ b/plugins/mongo.js @@ -0,0 +1,10 @@ +const mongoose = require('mongoose'); +const { mongoPath } = require('../tokens.json'); + +module.exports = async () => { + await mongoose.connect(mongoPath, { + useNewUrlParser: true, + useUnifiedTopology: true, + }); + return mongoose; +} \ No newline at end of file diff --git a/schema/logging-schema.js b/schema/logging-schema.js new file mode 100644 index 0000000..339c7f7 --- /dev/null +++ b/schema/logging-schema.js @@ -0,0 +1,13 @@ +const mongoose = require('mongoose') + +const reqString = { + type: String, + required: true +} + +const loggingSchema = mongoose.Schema({ + _id: reqString, + logChannel: reqString +}) + +module.exports = mongoose.model('logging', loggingSchema) \ No newline at end of file diff --git a/schema/quote-schema.js b/schema/quote-schema.js new file mode 100644 index 0000000..d1c7db8 --- /dev/null +++ b/schema/quote-schema.js @@ -0,0 +1,17 @@ +const mongoose = require('mongoose'); + +const reqString = { + type: String, + required: true +} + +const quoteSchema = mongoose.Schema({ + quoteID: reqString, + author: reqString, + authorImage: reqString, + quote: reqString, + year: reqString + +}) + +module.exports = mongoose.model('quote', quoteSchema) \ No newline at end of file diff --git a/storage/quotes.json b/storage/quotes.json deleted file mode 100644 index 78c76a4..0000000 --- a/storage/quotes.json +++ /dev/null @@ -1,260 +0,0 @@ -{ - "quotes" :[ - { - "id": 0, - "author": "Victor Tran", - "authorImage": "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg", - "quote": "A letter says a whole video!", - "year": "2017", - "url": "https://cdn.discordapp.com/attachments/278874966542385152/280566273992032258/Screenshot_20170213-160944.png" - }, - { - "id": 1, - "author" : "Prince Hamlet: William Shakespeare", - "authorImage" : "https://upload.wikimedia.org/wikipedia/commons/thumb/a/a2/Shakespeare.jpg/468px-Shakespeare.jpg", - "quote" : "To be, or not to be, that is the question", - "year" : "circa. 1600", - "url" : "https://en.wikipedia.org/wiki/To_be,_or_not_to_be" - }, - { - "id": 2, - "author" : "Diana Adams / Mitsubishi Mirage", - "authorImage" : "https://yt3.ggpht.com/-tQLg1M-3org/AAAAAAAAAAI/AAAAAAAAAAA/-kkOvupMHXQ/s88-c-k-no-mo-rj-c0xffffff/photo.jpg", - "quote" : "Dialing 000...\nNOOO!!!", - "year" : "2017", - "url" : "https://youtu.be/jDy57c7Y-4A?t:11m52s" - }, - { - "id": 3, - "author" : "Diana Adams / Mitsubishi Mirage", - "authorImage" : "https://yt3.ggpht.com/-tQLg1M-3org/AAAAAAAAAAI/AAAAAAAAAAA/-kkOvupMHXQ/s88-c-k-no-mo-rj-c0xffffff/photo.jpg", - "quote" : "You'd have a crash by now!\nPardon?", - "year" : "2017", - "url" : "https://youtu.be/jDy57c7Y-4A?t:15m5s" - }, - { - "id": 4, - "author" : "Ivoponop Pena", - "authorImage" : "https://yt3.ggpht.com/-hZJxXIFsfB8/AAAAAAAAAAI/AAAAAAAAAAA/c_mjVjQWvTw/s48-c-k-no-mo-rj-c0xffffff/photo.jpg", - "quote" : "i buy tablets for the bubble plastic", - "year" : "2016", - "url" : "https://www.youtube.com/watch?v:AqFDn0TxwH4" - }, - { - "id": 5, - "author" : "The Mill on the Floss: George Eliot", - "authorImage" : "https://upload.wikimedia.org/wikipedia/commons/8/81/George_Eliot_at_30_by_François_D%27Albert_Durade.jpg", - "quote" : "Don't judge a book by its cover", - "year" : "1860", - "url" : "https://en.wikipedia.org/wiki/Don't_judge_a_book_by_its_cover" - }, - { - "id": 6, - "author" : "tostoday", - "authorImage" : "https://yt3.ggpht.com/-gNRclMiHzN4/AAAAAAAAAAI/AAAAAAAAAAA/BNEDEUakd4A/s48-c-k-no-mo-rj-c0xffffff/photo.jpg", - "quote" : "I don't know why but Visopsys sounds like a medical condition", - "year" : "circa. 2015", - "url" : "https://www.youtube.com/watch?v:5T-vEZeY2v0" - }, - { - "id": 7, - "author" : "Diana Adams", - "authorImage" : "https://yt3.ggpht.com/-tQLg1M-3org/AAAAAAAAAAI/AAAAAAAAAAA/-kkOvupMHXQ/s88-c-k-no-mo-rj-c0xffffff/photo.jpg", - "quote" : "4 × 1 000 000!? 4 000 000! It's not that hard...", - "year" : "2014", - "url" : "https://youtu.be/5T-vEZeY2v0?t:9m28s" - }, - { - "id": 8, - "author" : "Victor Tran", - "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg", - "quote" : "Yes! I'm not *just* a blue happy face!", - "year" : "2016", - "url" : "https://youtu.be/2E21oad5pWQ" - }, - { - "id": 9, - "author" : "ItsDeckyah", - "authorImage" : "https://yt3.ggpht.com/-t70ZI-25A1k/AAAAAAAAAAI/AAAAAAAAAAA/uGrVakleFIM/s48-c-k-no-mo-rj-c0xffffff/photo.jpg", - "quote" : "Always remember, don't let those who are bullying you ruin your life, they are out to do just that. And that's probably all they'll do their whole lives", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 10, - "author" : "Mighty_Eagle073", - "authorImage" : "https://yt3.ggpht.com/-Q5IvX3eEGl8/AAAAAAAAAAI/AAAAAAAAAAA/LspLd8v-PR8/s100-c-k-no-mo-rj-c0xffffff/photo.jpg", - "quote" : "Spamming : Damning", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 11, - "author" : "Nibble", - "authorImage" : "https://yt3.ggpht.com/-SUPNlJ8a7qA/AAAAAAAAAAI/AAAAAAAAAAA/R_I4z7057_w/s100-c-k-no-mo-rj-c0xffffff/photo.jpg", - "quote" : "AUTO CORRECF!!!", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 12, - "author" : "Alee", - "authorImage" : "https://cdn.discordapp.com/avatars/242775871059001344/b8a995d836bbb8529ae35dc12c2289de.png?size:2048", - "quote" : "IS THERE A GOOOOOGALIE HERE!!!!", - "year" : "2014", - "url" : "https://youtu.be/Ap6fUlMx90A?t:2m30s" - }, - { - "id": 13, - "author" : "143malliw", - "authorImage" : "https://yt3.ggpht.com/-SUPNlJ8a7qA/AAAAAAAAAAI/AAAAAAAAAAA/R_I4z7057_w/s100-c-k-no-mo-rj-c0xffffff/photo.jpg", - "quote" : "but i can't write a quote, for I am the quote", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 14, - "author" : "AstralMod", - "authorImage" : "https://cdn.discordapp.com/avatars/282048599574052864/56d2d99bf763df5a05f5d157108edbdc.png?size:2048", - "quote" : "Welcome to the weekly chat chat!", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 15, - "author" : "AstralPhaser", - "authorImage" : "https://cdn.discordapp.com/avatars/230480971084988417/32f46a9671c6ceedc54b369ea73be178.png?size:2048", - "quote" : "Ok the shrimp is now on the barbie", - "year" : "2017", - "url" : "https://media.discordapp.net/attachments/277922530973581312/355882401546764289/d300-123-6379-orton-wp.png" - }, - { - "id": 16, - "author" : "Victor Tran", - "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg", - "quote" : ":joy: It's Cameron's Birthday!\nJoy!!!11!!111!!!!", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 17, - "author" : "Steve Jobs", - "authorImage" : "http://media.syracuse.com/news/photo/2011/01/9177328-large.jpg", - "quote" : "It's really hard to design products by focus groups. A lot of times, people don't know what they want until you show it to them.", - "year" : "1998", - "url" : "https://www.huffingtonpost.com/gregory-ciotti/why-steve-jobs-didnt-list_b_5628355.html" - }, - { - "id": 18, - "author" : "arencllc", - "authorImage" : "https://cdn.discordapp.com/avatars/191290329985581069/e4d6ee5c8836f5c79c51611d0ba536eb.png?size:2048", - "quote" : "Coding for uwp is as hard as using a UWP program.", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 19, - "author" : "FloppyDiskDrive", - "authorImage" : "https://cdn.discordapp.com/avatars/228271067821506560/a_0122b441972a6edfa6201ee871fad2a7.gif?size:2048", - "quote" : "Victor would be a champ at synchronized thinking.", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 20, - "author" : "Tembot", - "authorImage" : "https://cdn.discordapp.com/avatars/361202413165608962/fba99664eb0aeec8a47db3a74a2029d5.png?size:2048", - "quote" : "Why are u stocking me", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 21, - "author" : "PieLover12", - "authorImage" : "https://cdn.discordapp.com/avatars/344630031303311371/d84ae603ee53a5b54f7b78bcb4f733f2.png?size:2048", - "quote" : "DIE YOU LOOK LIKE TINY GIRL", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 22, - "author" : "AstralPhaser", - "authorImage" : "https://cdn.discordapp.com/avatars/230480971084988417/32f46a9671c6ceedc54b369ea73be178.png?size:2048", - "quote" : "anyway, I've gotta go now, I'll be back in 3 \"year\"s", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 23, - "author" : "Victor Tran", - "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg", - "quote" : "Zero electric cars means they don't sell electric cards here", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 24, - "author" : "Victor Tran", - "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg", - "quote" : "Unless you're living in like Denland or something", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 25, - "author" : "Victor Tran", - "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg", - "quote" : "[goes and cries in a corner]\nWAAA\nWAAAAAAAAAA\nWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", - "year" : "2017", - "url" : "https://cdn.discordapp.com/attachments/373884824034869249/374564169678061568/unknown.png" - }, - { - "id": 26, - "author" : "OSFirstTimer", - "authorImage" : "https://yt3.ggpht.com/-tQLg1M-3org/AAAAAAAAAAI/AAAAAAAAAAA/-kkOvupMHXQ/s88-c-k-no-mo-rj-c0xffffff/photo.jpg", - "quote" : "The most popular version of Linux ever called Abuncho. Abuncho 12.10.", - "year" : "2012", - "url" : "https://youtu.be/PgGbZfR6Vec?t:6s" - }, - { - "id": 27, - "author" : "Vat19", - "authorImage" : "https://s3.amazonaws.com/images1.vat19.com/branding/vat19-mobile-logo-2x.png", - "quote" : "VAAAAT NINETEEEEEEN! dot com ._.", - "year" : "2017", - "url" : "https://youtu.be/tnvcxBns_uQ?t:3m17s" - }, - { - "id": 28, - "author" : "Steve Jobs", - "authorImage" : "http://media.syracuse.com/news/photo/2011/01/9177328-large.jpg", - "quote" : "Sometimes life is going to hit you in the head with a brick. Don't lose faith.", - "year" : "circa. 2000", - "url" : "https://www.example.com/" - }, - { - "id": 29, - "author" : "Alee", - "authorImage" : "https://cdn.discordapp.com/avatars/242775871059001344/b9814f1117027993d46cd5ae9ce2dd48.png?size=2048", - "quote" : "Victor finally swore\nAnd I was like \"HOLY SHIT\"", - "year" : "2018", - "url" : "https://www.example.com/" - }, - { - "id": 30, - "author" : "Zac Bowden", - "authorImage" : "https://pbs.twimg.com/profile_images/963331874503430144/NTv0Dlaj_400x400.jpg", - "quote" : "We can happily move on to Windows 11, Windows 10 is now done and dusted", - "year" : "2018", - "url" : "https://www.example.com/" - }, - { - "id": 31, - "author" : "Victor Tran", - "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg", - "quote" : "WHAT THE - IS THAT\nMAN I JUST CAME BACK TO MY ROOM\nAND THEN I SEE YOU WITH A GUY IN IT", - "year" : "2018", - "url" : "https://www.example.com/" - } - ] -} diff --git a/storage/quotes.json.bak b/storage/quotes.json.bak deleted file mode 100644 index 78c76a4..0000000 --- a/storage/quotes.json.bak +++ /dev/null @@ -1,260 +0,0 @@ -{ - "quotes" :[ - { - "id": 0, - "author": "Victor Tran", - "authorImage": "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg", - "quote": "A letter says a whole video!", - "year": "2017", - "url": "https://cdn.discordapp.com/attachments/278874966542385152/280566273992032258/Screenshot_20170213-160944.png" - }, - { - "id": 1, - "author" : "Prince Hamlet: William Shakespeare", - "authorImage" : "https://upload.wikimedia.org/wikipedia/commons/thumb/a/a2/Shakespeare.jpg/468px-Shakespeare.jpg", - "quote" : "To be, or not to be, that is the question", - "year" : "circa. 1600", - "url" : "https://en.wikipedia.org/wiki/To_be,_or_not_to_be" - }, - { - "id": 2, - "author" : "Diana Adams / Mitsubishi Mirage", - "authorImage" : "https://yt3.ggpht.com/-tQLg1M-3org/AAAAAAAAAAI/AAAAAAAAAAA/-kkOvupMHXQ/s88-c-k-no-mo-rj-c0xffffff/photo.jpg", - "quote" : "Dialing 000...\nNOOO!!!", - "year" : "2017", - "url" : "https://youtu.be/jDy57c7Y-4A?t:11m52s" - }, - { - "id": 3, - "author" : "Diana Adams / Mitsubishi Mirage", - "authorImage" : "https://yt3.ggpht.com/-tQLg1M-3org/AAAAAAAAAAI/AAAAAAAAAAA/-kkOvupMHXQ/s88-c-k-no-mo-rj-c0xffffff/photo.jpg", - "quote" : "You'd have a crash by now!\nPardon?", - "year" : "2017", - "url" : "https://youtu.be/jDy57c7Y-4A?t:15m5s" - }, - { - "id": 4, - "author" : "Ivoponop Pena", - "authorImage" : "https://yt3.ggpht.com/-hZJxXIFsfB8/AAAAAAAAAAI/AAAAAAAAAAA/c_mjVjQWvTw/s48-c-k-no-mo-rj-c0xffffff/photo.jpg", - "quote" : "i buy tablets for the bubble plastic", - "year" : "2016", - "url" : "https://www.youtube.com/watch?v:AqFDn0TxwH4" - }, - { - "id": 5, - "author" : "The Mill on the Floss: George Eliot", - "authorImage" : "https://upload.wikimedia.org/wikipedia/commons/8/81/George_Eliot_at_30_by_François_D%27Albert_Durade.jpg", - "quote" : "Don't judge a book by its cover", - "year" : "1860", - "url" : "https://en.wikipedia.org/wiki/Don't_judge_a_book_by_its_cover" - }, - { - "id": 6, - "author" : "tostoday", - "authorImage" : "https://yt3.ggpht.com/-gNRclMiHzN4/AAAAAAAAAAI/AAAAAAAAAAA/BNEDEUakd4A/s48-c-k-no-mo-rj-c0xffffff/photo.jpg", - "quote" : "I don't know why but Visopsys sounds like a medical condition", - "year" : "circa. 2015", - "url" : "https://www.youtube.com/watch?v:5T-vEZeY2v0" - }, - { - "id": 7, - "author" : "Diana Adams", - "authorImage" : "https://yt3.ggpht.com/-tQLg1M-3org/AAAAAAAAAAI/AAAAAAAAAAA/-kkOvupMHXQ/s88-c-k-no-mo-rj-c0xffffff/photo.jpg", - "quote" : "4 × 1 000 000!? 4 000 000! It's not that hard...", - "year" : "2014", - "url" : "https://youtu.be/5T-vEZeY2v0?t:9m28s" - }, - { - "id": 8, - "author" : "Victor Tran", - "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg", - "quote" : "Yes! I'm not *just* a blue happy face!", - "year" : "2016", - "url" : "https://youtu.be/2E21oad5pWQ" - }, - { - "id": 9, - "author" : "ItsDeckyah", - "authorImage" : "https://yt3.ggpht.com/-t70ZI-25A1k/AAAAAAAAAAI/AAAAAAAAAAA/uGrVakleFIM/s48-c-k-no-mo-rj-c0xffffff/photo.jpg", - "quote" : "Always remember, don't let those who are bullying you ruin your life, they are out to do just that. And that's probably all they'll do their whole lives", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 10, - "author" : "Mighty_Eagle073", - "authorImage" : "https://yt3.ggpht.com/-Q5IvX3eEGl8/AAAAAAAAAAI/AAAAAAAAAAA/LspLd8v-PR8/s100-c-k-no-mo-rj-c0xffffff/photo.jpg", - "quote" : "Spamming : Damning", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 11, - "author" : "Nibble", - "authorImage" : "https://yt3.ggpht.com/-SUPNlJ8a7qA/AAAAAAAAAAI/AAAAAAAAAAA/R_I4z7057_w/s100-c-k-no-mo-rj-c0xffffff/photo.jpg", - "quote" : "AUTO CORRECF!!!", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 12, - "author" : "Alee", - "authorImage" : "https://cdn.discordapp.com/avatars/242775871059001344/b8a995d836bbb8529ae35dc12c2289de.png?size:2048", - "quote" : "IS THERE A GOOOOOGALIE HERE!!!!", - "year" : "2014", - "url" : "https://youtu.be/Ap6fUlMx90A?t:2m30s" - }, - { - "id": 13, - "author" : "143malliw", - "authorImage" : "https://yt3.ggpht.com/-SUPNlJ8a7qA/AAAAAAAAAAI/AAAAAAAAAAA/R_I4z7057_w/s100-c-k-no-mo-rj-c0xffffff/photo.jpg", - "quote" : "but i can't write a quote, for I am the quote", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 14, - "author" : "AstralMod", - "authorImage" : "https://cdn.discordapp.com/avatars/282048599574052864/56d2d99bf763df5a05f5d157108edbdc.png?size:2048", - "quote" : "Welcome to the weekly chat chat!", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 15, - "author" : "AstralPhaser", - "authorImage" : "https://cdn.discordapp.com/avatars/230480971084988417/32f46a9671c6ceedc54b369ea73be178.png?size:2048", - "quote" : "Ok the shrimp is now on the barbie", - "year" : "2017", - "url" : "https://media.discordapp.net/attachments/277922530973581312/355882401546764289/d300-123-6379-orton-wp.png" - }, - { - "id": 16, - "author" : "Victor Tran", - "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg", - "quote" : ":joy: It's Cameron's Birthday!\nJoy!!!11!!111!!!!", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 17, - "author" : "Steve Jobs", - "authorImage" : "http://media.syracuse.com/news/photo/2011/01/9177328-large.jpg", - "quote" : "It's really hard to design products by focus groups. A lot of times, people don't know what they want until you show it to them.", - "year" : "1998", - "url" : "https://www.huffingtonpost.com/gregory-ciotti/why-steve-jobs-didnt-list_b_5628355.html" - }, - { - "id": 18, - "author" : "arencllc", - "authorImage" : "https://cdn.discordapp.com/avatars/191290329985581069/e4d6ee5c8836f5c79c51611d0ba536eb.png?size:2048", - "quote" : "Coding for uwp is as hard as using a UWP program.", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 19, - "author" : "FloppyDiskDrive", - "authorImage" : "https://cdn.discordapp.com/avatars/228271067821506560/a_0122b441972a6edfa6201ee871fad2a7.gif?size:2048", - "quote" : "Victor would be a champ at synchronized thinking.", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 20, - "author" : "Tembot", - "authorImage" : "https://cdn.discordapp.com/avatars/361202413165608962/fba99664eb0aeec8a47db3a74a2029d5.png?size:2048", - "quote" : "Why are u stocking me", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 21, - "author" : "PieLover12", - "authorImage" : "https://cdn.discordapp.com/avatars/344630031303311371/d84ae603ee53a5b54f7b78bcb4f733f2.png?size:2048", - "quote" : "DIE YOU LOOK LIKE TINY GIRL", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 22, - "author" : "AstralPhaser", - "authorImage" : "https://cdn.discordapp.com/avatars/230480971084988417/32f46a9671c6ceedc54b369ea73be178.png?size:2048", - "quote" : "anyway, I've gotta go now, I'll be back in 3 \"year\"s", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 23, - "author" : "Victor Tran", - "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg", - "quote" : "Zero electric cars means they don't sell electric cards here", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 24, - "author" : "Victor Tran", - "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg", - "quote" : "Unless you're living in like Denland or something", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "id": 25, - "author" : "Victor Tran", - "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg", - "quote" : "[goes and cries in a corner]\nWAAA\nWAAAAAAAAAA\nWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", - "year" : "2017", - "url" : "https://cdn.discordapp.com/attachments/373884824034869249/374564169678061568/unknown.png" - }, - { - "id": 26, - "author" : "OSFirstTimer", - "authorImage" : "https://yt3.ggpht.com/-tQLg1M-3org/AAAAAAAAAAI/AAAAAAAAAAA/-kkOvupMHXQ/s88-c-k-no-mo-rj-c0xffffff/photo.jpg", - "quote" : "The most popular version of Linux ever called Abuncho. Abuncho 12.10.", - "year" : "2012", - "url" : "https://youtu.be/PgGbZfR6Vec?t:6s" - }, - { - "id": 27, - "author" : "Vat19", - "authorImage" : "https://s3.amazonaws.com/images1.vat19.com/branding/vat19-mobile-logo-2x.png", - "quote" : "VAAAAT NINETEEEEEEN! dot com ._.", - "year" : "2017", - "url" : "https://youtu.be/tnvcxBns_uQ?t:3m17s" - }, - { - "id": 28, - "author" : "Steve Jobs", - "authorImage" : "http://media.syracuse.com/news/photo/2011/01/9177328-large.jpg", - "quote" : "Sometimes life is going to hit you in the head with a brick. Don't lose faith.", - "year" : "circa. 2000", - "url" : "https://www.example.com/" - }, - { - "id": 29, - "author" : "Alee", - "authorImage" : "https://cdn.discordapp.com/avatars/242775871059001344/b9814f1117027993d46cd5ae9ce2dd48.png?size=2048", - "quote" : "Victor finally swore\nAnd I was like \"HOLY SHIT\"", - "year" : "2018", - "url" : "https://www.example.com/" - }, - { - "id": 30, - "author" : "Zac Bowden", - "authorImage" : "https://pbs.twimg.com/profile_images/963331874503430144/NTv0Dlaj_400x400.jpg", - "quote" : "We can happily move on to Windows 11, Windows 10 is now done and dusted", - "year" : "2018", - "url" : "https://www.example.com/" - }, - { - "id": 31, - "author" : "Victor Tran", - "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg", - "quote" : "WHAT THE - IS THAT\nMAN I JUST CAME BACK TO MY ROOM\nAND THEN I SEE YOU WITH A GUY IN IT", - "year" : "2018", - "url" : "https://www.example.com/" - } - ] -} diff --git a/storage/vtquotes.json b/storage/vtquotes.json deleted file mode 100644 index 79781cd..0000000 --- a/storage/vtquotes.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "quotes" :[ - { - "author" : "Victor Tran", - "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg", - "quote" : "@Derpy ♀ For your own fucking good, learn what political correctness is.", - "year" : "2017", - "url" : "https://cdn.discordapp.com/attachments/371830028381454337/372263065472729088/2017-10-24_01.58.19.png" - }, - { - "author" : "Victor Tran", - "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg", - "quote" : "But couldn't you at least put the mounted disks on the dick or on Dinder?\nDOCK", - "year" : "2017", - "url" : "https://www.example.com" - }, - { - "author" : "Victor Tran", - "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg", - "quote" : "Just happened one gay?\nDAY\nOH BOY\nI BLAME SWIPE TYPING", - "year" : "2017", - "url" : "https://www.example.com" - }, - { - "author" : "Victor Tran", - "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg", - "quote" : "(there is a :middle_finger: emoji sitting in Gboard now after my brother sent that to Google assistant)", - "year" : "2017", - "url" : "https://www.example.com/" - }, - { - "author" : "Victor Tran", - "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg", - "quote" : "Who needs to say fuck when you can say - instead\nI blame that on my secretary :sob:", - "year" : "2018", - "url" : "https://www.example.com/" - }, - { - "author" : "Victor Tran", - "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg", - "quote" : "Dire Dire DICKS\nWAIT\nNO\nDOCKS", - "year" : "2018", - "url" : "https://www.example.com/" - }, - { - "author" : "Victor Tran", - "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg", - "quote" : "I need to find a new sexretary ASAP\n.....\nHELP\nAHHHHHHHHHHHH\nSECRETARY", - "year" : "2018", - "url" : "https://www.example.com/" - }, - { - "author" : "Victor Tran", - "authorImage" : "https://yt3.ggpht.com/-Iuf1v4-SSSM/AAAAAAAAAAI/AAAAAAAAAAA/89IYeQw--wU/photo.jpg", - "quote" : "are you serious blake LMAO", - "year" : "2018", - "url" : "https://www.example.com/" - } - ] -} -- cgit v1.2.3 From 3aa27777a7bd1a9bff798412382db8aad3cbd19a Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Fri, 30 Jul 2021 16:41:14 -0400 Subject: Merging invite into the about command and buttons. --- bot_discord.js | 1 + commands/about.js | 23 +++++++++++++++++++---- commands/invite.js | 55 ------------------------------------------------------ package.json | 2 +- 4 files changed, 21 insertions(+), 60 deletions(-) delete mode 100644 commands/invite.js (limited to 'package.json') diff --git a/bot_discord.js b/bot_discord.js index 79e9643..ec17bc9 100644 --- a/bot_discord.js +++ b/bot_discord.js @@ -21,6 +21,7 @@ const Discord = require('discord.js'); const client = new Discord.Client({ disableEveryone: true, }); +require('discord-buttons')(client); const moment = require('moment'); const express = require('express'); const fs = require('fs'); diff --git a/commands/about.js b/commands/about.js index e22d0f8..fa9231d 100644 --- a/commands/about.js +++ b/commands/about.js @@ -18,15 +18,30 @@ * * *************************************/ module.exports.run = async (client, message) => { - const Discord = require('discord.js'); - const os = require('os'); - const embed = new Discord.MessageEmbed() + const { MessageEmbed } = require('discord.js'); + const { MessageButton, MessageActionRow } = require('discord-buttons'); + + const aboutEmbed = new MessageEmbed() .setAuthor(`AleeBot ${require('../storage/settings.json').abVersion}`, client.user.avatarURL()) .addField('About AleeBot', 'AleeBot is an all-in-one bot that\'s made from the Discord.JS api!') .addField('Contributors', 'Andrew Lee (Founder of this project)\nOfficialRain (Raina) (Uptime Command)\njtsshieh (Command Handler)') .setFooter('© Copyright 2017-2021 Alee Productions, Licensed with GPL-3.0') .setColor('#1fd619'); - await message.channel.send({embed}); + + let inviteBot = new MessageButton() + .setStyle('url') + .setLabel('Invite AleeBot') + .setURL('https://top.gg/bot/282547024547545109'); + + let inviteServer = new MessageButton() + .setStyle('url') + .setLabel('Join Binaryworks') + .setURL('https://discord.gg/EFhRDqG'); + + let buttons = new MessageActionRow() + .addComponents(inviteBot, inviteServer); + + await message.channel.send(aboutEmbed, buttons); }; exports.conf = { diff --git a/commands/invite.js b/commands/invite.js deleted file mode 100644 index a12cff4..0000000 --- a/commands/invite.js +++ /dev/null @@ -1,55 +0,0 @@ -/** ************************************** - * - * Invite: Command for AleeBot - * Copyright (C) 2017-2021 Alee Productions - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * *************************************/ -module.exports.run = (client, message) => { - const disbut = require('discord-buttons')(client); - let button = new disbut.MessageButton() - .setLabel('My First Button!') //default: NO_LABEL_PROVIDED - .setID('click_to_function') //note: if you use the style "url" you must provide url using .setURL('https://example.com') - .setDisabled(); //disables the button | default: false - - message.channel.send({embed: { - color: 2086425, - title: 'Invite Command', - fields: [{ - name: 'Invite AleeBot', - value: '[Invite AleeBot to your server.](https://top.gg/bot/282547024547545109)', - }, - { - name: 'Join the Alee Productions Community', - value: '[Discord Server](https://discord.gg/EFhRDqG)', - }, - ], - }, - }, button); - - // message.channel.send('Want AleeBot in your server? Here\'s the link: https://discordapp.com/api/oauth2/authorize?client_id=282547024547545109&permissions=2080375863&scope=bot'); -}; - -exports.conf = { - aliases: [], - guildOnly: false, -}; -exports.help = { - name: 'invite', - description: 'Gives you an invite to the guild and the bot.', - usage: 'invite', - category: '- General Commands', -}; - diff --git a/package.json b/package.json index 5071221..bb55468 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "blessed": "^0.1.81", "colors": "^1.3.0", "dblapi.js": "^2.0.0", - "discord-buttons": "^2.4.1", + "discord-buttons": "^4.0.0", "discord.js": "^12.5.3", "eslint": "^7.1.0", "express": "^4.17.1", -- cgit v1.2.3 From 60cd96e366487b9a422ecc685b46a2b300c32be1 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Sat, 31 Jul 2021 16:38:15 -0400 Subject: Cleanup; Upgraded to Discord.JS v13; More buttons --- CONTRIBUTING.md | 2 +- bot_discord.js | 84 +- commands/about.js | 28 +- commands/ban.js | 10 +- commands/eval.js | 6 +- commands/git.js | 17 +- commands/help.js | 4 +- commands/info.js | 7 +- commands/interrogate.js | 8 +- commands/jail.js | 8 +- commands/kick.js | 10 +- commands/leaveguild.js | 4 +- commands/nick.js | 2 +- commands/poweroff.js | 2 +- commands/serverinfo.js | 18 +- commands/setprefix.js | 2 +- commands/slowdown.js | 2 +- commands/suggest.js | 12 +- commands/suggestfeature.js | 9 +- commands/userinfo.js | 6 +- package.json | 8 +- yarn-error.log | 2318 ++++++++++++++++++++++++++++++++++++++++++++ 22 files changed, 2454 insertions(+), 113 deletions(-) create mode 100644 yarn-error.log (limited to 'package.json') diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index aa79553..d75ca6a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -34,7 +34,7 @@ exports.help = { name: 'name here', description: 'Description here.', usage: 'Usage [here]', - category: '- General Commands', + category: '- [Category] Commands', }; ``` diff --git a/bot_discord.js b/bot_discord.js index ec17bc9..07ca5ca 100644 --- a/bot_discord.js +++ b/bot_discord.js @@ -19,9 +19,12 @@ * *************************************/ const Discord = require('discord.js'); const client = new Discord.Client({ - disableEveryone: true, + allowedMentions: { + parse: ['users', 'roles'], + repliedUser: true + }, + intents: ['GUILDS', 'GUILD_MESSAGES', 'GUILD_MEMBERS'] }); -require('discord-buttons')(client); const moment = require('moment'); const express = require('express'); const fs = require('fs'); @@ -40,6 +43,7 @@ let autoRole = true; let logChannel = '318874545593384970'; let statusChannelID = '606602551634296968'; let readyEmbedMessage = false; +let serverWhitelist = "243022206437687296"; const activities = [ 'AleeBot ' + settings.abVersion + ' | ' + settings.prefix + 'help', @@ -48,13 +52,29 @@ const activities = [ 'Fighting Quad', 'Ultra Jump Mania!', 'Exposing TAS-Corp', - 'Fighting Evelyn Claythorne' + 'Fighting Evelyn Claythorne', + 'Installing Windows 11', + 'Breaking Windows 10', + 'Reticulating splines', + 'Dag dag!', + '90% bug free!' ]; const log = (message) => { console.log(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] ${message}`.white); }; +function botPresence() { + client.user.setPresence({ + activities: [{ + name: activities[Math.floor(Math.random() * activities.length)] + }], + status: 'online', + afk: false, + }); + log(`[>] Updated bot presence to "${client.user.presence.activities[0].name}"`.green); +} + const rl = readline.createInterface({ input: process.stdin, output: process.stdout, @@ -211,6 +231,8 @@ client.on('ready', async () => { log(`[i] Bot ID: ${client.user.id}`.green); log(`[i] Running version ${settings.abVersion} and in ${client.guilds.cache.size} guilds`.green); + botPresence(); + await mongo().then(mongoose => { try { log('[>] Connected to MongoDB!'.green); @@ -227,18 +249,9 @@ client.on('ready', async () => { console.log(`Listening at https://localhost:${api.port}`) }) - client.setInterval(function() { - /* - setInterval(() => { - dbl.postStats(client.guilds.size, client.shards.Id, client.shards.total); - }, 1800000);*/ - client.user.setPresence({ - activity: { - name: activities[Math.floor(Math.random() * activities.length)] - }, - status: 'online', - afk: false, - }); + setInterval(function() { + botPresence(); + }, 200000); if (readyEmbedMessage === true) { const readyEmbed = new Discord.MessageEmbed() @@ -246,16 +259,17 @@ client.on('ready', async () => { .setDescription('AleeBot has started') .addField('Version', settings.abVersion, true) .addField('Prefix', `\`${settings.prefix}\``, true) + .addField('Discord.JS Version', Discord.version, true) .setColor('#5cd65c'); let statusChannel = client.channels.cache.get(statusChannelID); if (!statusChannel) return console.error('The status channel does not exist! Skipping.'); - statusChannel.send(readyEmbed); + statusChannel.send({ embeds: [readyEmbed]}); } rl.prompt(); }); client.on('guildMemberAdd', (member) => { - if (member.guild.id !== '243022206437687296') return; + if (member.guild.id !== serverWhitelist) return; const logEmbed = new Discord.MessageEmbed() .setAuthor('AleeBot Logging', client.user.avatarURL()) .setDescription(`A user has joined this server!`) @@ -269,9 +283,9 @@ client.on('guildMemberAdd', (member) => { let guildMember = client.channels.cache.get(logChannel); if (!guildMember) return; - guildMember.send(logEmbed); + guildMember.send({ embeds: [logEmbed]}); if (autoRole === true) { - if (member.guild.id !== '243022206437687296') return; + if (member.guild.id !== serverWhitelist) return; const role = member.guild.roles.cache.get('657426918416580614'); member.roles.add(role); log(`[i] ${member.user.username} joined Alee Productions.`.green); @@ -280,7 +294,7 @@ client.on('guildMemberAdd', (member) => { }); client.on('guildMemberRemove', (member) => { - if (member.guild.id !== '243022206437687296') return; + if (member.guild.id !== serverWhitelist) return; const logEmbed = new Discord.MessageEmbed() .setAuthor('AleeBot Logging', client.user.avatarURL()) .setDescription(`A user has left this server!`) @@ -292,12 +306,12 @@ client.on('guildMemberRemove', (member) => { let guildMember = client.channels.cache.get(logChannel); if (!guildMember) return; - guildMember.send(logEmbed); + guildMember.send({ embeds: [logEmbed]}); }) client.on('messageUpdate', async (oldMessage, newMessage) => { - if (oldMessage.guild.id !== '243022206437687296') return; + if (oldMessage.guild.id !== serverWhitelist) return; if (oldMessage.content === newMessage.content) { return; } @@ -313,11 +327,11 @@ client.on('messageUpdate', async (oldMessage, newMessage) => { let editMessage = client.channels.cache.get(logChannel); if (!editMessage) return; - editMessage.send(logEmbed); + editMessage.send({ embeds: [logEmbed]}); }); client.on('messageDelete', (message) => { - if (message.guild.id !== '243022206437687296') return; + if (message.guild.id !== serverWhitelist) return; const logEmbed = new Discord.MessageEmbed() .setAuthor('AleeBot Logging', client.user.avatarURL()) .setDescription(`A message from ${message.author.username} was deleted in <#${message.channel.id}>`) @@ -329,11 +343,11 @@ client.on('messageDelete', (message) => { let deleteMessage = client.channels.cache.get(logChannel); if (!deleteMessage) return; - deleteMessage.send(logEmbed); + deleteMessage.send({ embeds: [logEmbed]}); }); client.on('guildBanAdd', (guild, user) => { - if (guild.id !== '243022206437687296') return; + if (guild.id !== serverWhitelist) return; const logEmbed = new Discord.MessageEmbed() .setAuthor('AleeBot Logging', client.user.avatarURL()) .setDescription(`This user got banned from ${guild.name}`) @@ -345,11 +359,11 @@ client.on('guildBanAdd', (guild, user) => { let banMessage = client.channels.cache.get(logChannel); if (!banMessage) return; - banMessage.send(logEmbed); + banMessage.send({ embeds: [logEmbed]}); }); client.on('guildBanRemove', (guild, user) => { - if (guild.id !== '243022206437687296') return; + if (guild.id !== serverWhitelist) return; const logEmbed = new Discord.MessageEmbed() .setAuthor('AleeBot Logging', client.user.avatarURL()) .setDescription(`This user got unbanned from ${guild.name}`) @@ -361,7 +375,7 @@ client.on('guildBanRemove', (guild, user) => { let banMessage = client.channels.cache.get(logChannel); if (!banMessage) return; - banMessage.send(logEmbed); + banMessage.send({ embeds: [logEmbed]}); }); client.on('guildCreate', (guild) => { @@ -371,13 +385,13 @@ client.on('guildCreate', (guild) => { .setDescription('I got added to a server!') .addField('Server Name:', `${guild.name}`, true) .addField('Server ID:', `${guild.id}`, true) - .addField('Members', guild.memberCount, true) + .addField('Members', `${guild.memberCount}`, true) .setColor('#5cd65c') .setFooter(`We now run on ${client.guilds.cache.size} guilds.`); let statusChannel = client.channels.cache.get(statusChannelID); if (!statusChannel) return; - statusChannel.send(logEmbed); + statusChannel.send({ embeds: [logEmbed]}); }); @@ -393,7 +407,7 @@ client.on('guildDelete', (guild) => { let statusChannel = client.channels.cache.get(statusChannelID); if (!statusChannel) return; - statusChannel.send(logEmbed); + statusChannel.send({ embeds: [logEmbed]}); }); dbl.on('posted', () => { @@ -404,9 +418,10 @@ dbl.on('error', (e) => { log(`[X | DBL ERROR] ${e}`.red); }); -client.on('message', (msg) => { - if (msg.author.bot) return; +client.on('messageCreate', async(msg) => { + if (msg.author.bot) return; + const prefixes = JSON.parse(fs.readFileSync('./storage/prefixes.json', 'utf8')); if (!prefixes[msg.guild.id]) { @@ -452,6 +467,7 @@ client.on('message', (msg) => { process.on('unhandledRejection', function(err, p) { log('[X | UNCAUGHT PROMISE] ' + err.stack.red); }); + client.on('reconnecting', function() { log('[!] AleeBot has disconnected from Discord and is now attempting to reconnect.'.yellow); }); diff --git a/commands/about.js b/commands/about.js index fa9231d..81f9bf8 100644 --- a/commands/about.js +++ b/commands/about.js @@ -18,8 +18,7 @@ * * *************************************/ module.exports.run = async (client, message) => { - const { MessageEmbed } = require('discord.js'); - const { MessageButton, MessageActionRow } = require('discord-buttons'); + const { MessageEmbed, MessageButton, MessageActionRow } = require('discord.js'); const aboutEmbed = new MessageEmbed() .setAuthor(`AleeBot ${require('../storage/settings.json').abVersion}`, client.user.avatarURL()) @@ -28,20 +27,19 @@ module.exports.run = async (client, message) => { .setFooter('© Copyright 2017-2021 Alee Productions, Licensed with GPL-3.0') .setColor('#1fd619'); - let inviteBot = new MessageButton() - .setStyle('url') - .setLabel('Invite AleeBot') - .setURL('https://top.gg/bot/282547024547545109'); + let inviteButton = new MessageActionRow() + .addComponents( + new MessageButton() + .setStyle('LINK') + .setLabel('Invite AleeBot') + .setURL('https://top.gg/bot/282547024547545109'), + new MessageButton() + .setStyle('LINK') + .setLabel('Join Binaryworks Community') + .setURL('https://discord.gg/EFhRDqG') + ); - let inviteServer = new MessageButton() - .setStyle('url') - .setLabel('Join Binaryworks') - .setURL('https://discord.gg/EFhRDqG'); - - let buttons = new MessageActionRow() - .addComponents(inviteBot, inviteServer); - - await message.channel.send(aboutEmbed, buttons); + await message.channel.send({embeds: [aboutEmbed], components: [inviteButton]}); }; exports.conf = { diff --git a/commands/ban.js b/commands/ban.js index 2c4950a..1e8ee6e 100644 --- a/commands/ban.js +++ b/commands/ban.js @@ -21,16 +21,16 @@ module.exports.run = async (client, message, args) => { const Discord = require('discord.js'); const mreason = args.join(' ').slice(22); if (!message.member.permissions.has('BAN_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to ban people.'); - if (!message.guild.member(client.user).hasPermission('BAN_MEMBERS')) return message.reply('Uhh... I don\'t have permission to ban members.'); + if (!message.guild.members.cache.get(client.user.id).permissions.has('BAN_MEMBERS')) return message.reply('I don\'t have permission to ban members.'); const member = message.mentions.members.first(); - if (!member) return message.reply('Uhh... Please mention a member first.'); - await member.ban(`Banned by ${message.author.tag}. Reason: ${mreason}.`); - const embed = new Discord.MessageEmbed() + if (!member) return message.reply('Please mention a member first.'); + await member.ban({ reason: `Banned by ${message.author.tag} for ${mreason}.`}); + const banEmbed = new Discord.MessageEmbed() .setTitle('User Banned!') .setColor('#1fd619') .addField('**User:**', `${member.user.tag}`) .addField('**Reason:**', `\`\`\`${mreason}\`\`\``); - await message.channel.send({embed}); + await message.channel.send({embeds: [banEmbed]}); }; exports.conf = { diff --git a/commands/eval.js b/commands/eval.js index 9ace7bf..b414225 100644 --- a/commands/eval.js +++ b/commands/eval.js @@ -47,7 +47,7 @@ module.exports.run = async (client, message, args) => { .addField(':outbox_tray: Output:', `\`\`\`${err}\`\`\``) .setFooter('Eval', client.user.avatarURL()) .setColor('RED'); - return message.channel.send({embed}); + return message.channel.send({embeds: [embed]}); } try { @@ -59,7 +59,7 @@ module.exports.run = async (client, message, args) => { .setFooter('Eval', client.user.avatarURL()) .setColor('GREEN'); - return message.channel.send({embed}); + return message.channel.send({embeds: [embed]}); } catch (err) { const embed = new MessageEmbed() .setAuthor('Eval Error') @@ -68,7 +68,7 @@ module.exports.run = async (client, message, args) => { .addField(':outbox_tray: Output:', `\`\`\`${err}\`\`\``) .setFooter('Eval', client.user.avatarURL()) .setColor('RED'); - return message.channel.send({embed}); + return message.channel.send({embeds: [embed]}); } }; diff --git a/commands/git.js b/commands/git.js index 4f44edb..8f6af1f 100644 --- a/commands/git.js +++ b/commands/git.js @@ -18,16 +18,23 @@ * * *************************************/ module.exports.run = async (client, message) => { - const Discord = require('discord.js'); + const { MessageEmbed, MessageButton, MessageActionRow } = require('discord.js'); const git = require('git-last-commit'); git.getLastCommit(function(err, commit) { - const embed = new Discord.MessageEmbed() - .setTitle('GitHub Information') - .addField('**Repository:**', 'https://github.com/aleeproductions/AleeBot') + const gitInfo = new MessageEmbed() + .setTitle('Git Information') .addField('**Last Commit:**', commit.subject) .addField('**Commited By:**', commit.author.name) .setColor('#1fd619'); - message.channel.send({embed}); + + let sourceCode = new MessageActionRow() + .addComponents( + new MessageButton() + .setStyle('LINK') + .setLabel('Source Code') + .setURL('https://github.com/aleeproductions/AleeBot') + ); + message.channel.send({embeds: [gitInfo], components: [sourceCode]}); }); }; diff --git a/commands/help.js b/commands/help.js index 2dafe0c..2bad795 100644 --- a/commands/help.js +++ b/commands/help.js @@ -38,7 +38,7 @@ module.exports.run = async (client, message) => { } const prefix = prefixes[message.guild.id].prefixes; - if (!message.guild.member(client.user).hasPermission('EMBED_LINKS')) return message.reply('ERROR: AleeBot doesn\'t have the permission to send embed links please enable them to use the full help.'); + if (!message.guild.members.cache.get(client.user.id).permissions.has('EMBED_LINKS')) return message.reply('ERROR: AleeBot doesn\'t have the permission to send embed links, please enable them to use the full help.'); const embed = new Discord.MessageEmbed() .setAuthor('AleeBot ' + require('../storage/settings.json').abVersion + ` Help and on ${client.guilds.cache.size} servers`, client.user.avatarURL()) .setDescription('Every command you input into AleeBot is `' + prefix + '`') @@ -55,7 +55,7 @@ module.exports.run = async (client, message) => { embed.addField(x, cat, true); }); - await message.channel.send({embed}); + await message.channel.send({embeds: [embed]}); }; exports.conf = { diff --git a/commands/info.js b/commands/info.js index 4476ac0..bae45d4 100644 --- a/commands/info.js +++ b/commands/info.js @@ -18,18 +18,19 @@ * * *************************************/ module.exports.run = async (client, message) => { - const Discord = require('discord.js'); + const { MessageEmbed, version } = require('discord.js'); const os = require('os'); const mongoose = require('mongoose'); - const embed = new Discord.MessageEmbed() + const embed = new MessageEmbed() .setTitle('Information on AleeBot\'s Host') .addField('OS Hostname: ', os.hostname(), true) .addField('NodeJS Version: ', process.versions.node, true) + .addField('Discord.JS Version: ', version , true) .addField('OS Platform: ', os.platform(), true) .addField('OS Version: ', os.release(), true) .addField('Mongoose Version:', mongoose.version, true) .setColor('#1fd619'); - await message.channel.send({embed}); + await message.channel.send({ embeds: [embed] }); }; exports.conf = { diff --git a/commands/interrogate.js b/commands/interrogate.js index 1b9b97b..16a1887 100644 --- a/commands/interrogate.js +++ b/commands/interrogate.js @@ -18,10 +18,10 @@ * * *************************************/ module.exports.run = async (client, message, args) => { - if (message.guild.id != '243022206437687296') return message.reply('This is a ALP exclusive command.'); + if (message.guild.id != '243022206437687296') return message.reply('This is a Binaryworks exclusive command.'); - if (!message.member.hasPermission('BAN_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to jail members.'); - if (!message.guild.member(client.user).hasPermission('MANAGE_ROLES')) return message.reply('Uhh... I don\'t have permission to jail members.'); + if (!message.member.permissions.has('BAN_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to jail members.'); + if (!message.guild.members.cache.get(client.user.id).permissions.has('MANAGE_ROLES')) return message.reply('Uhh... I don\'t have permission to jail members.'); const member = message.mentions.members.first(); if (!member) return await message.reply('Uhh... Please mention a member first.'); @@ -38,5 +38,5 @@ exports.help = { name: 'interrogate', description: 'Interrogates a member', usage: 'interrogate [user]', - category: '- ALP Exclusive Commands', + category: '- Binaryworks Exclusive Commands', }; diff --git a/commands/jail.js b/commands/jail.js index a82e1b2..7f6f3a3 100644 --- a/commands/jail.js +++ b/commands/jail.js @@ -18,10 +18,10 @@ * * *************************************/ module.exports.run = async (client, message, args) => { - if (message.guild.id != '243022206437687296') return message.reply('This is a ALP exclusive command.'); + if (message.guild.id != '243022206437687296') return message.reply('This is a Binaryworks exclusive command.'); - if (!message.member.hasPermission('BAN_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to jail members.'); - if (!message.guild.member(client.user).hasPermission('MANAGE_ROLES')) return message.reply('Uhh... I don\'t have permission to jail members.'); + if (!message.member.permissions.has('BAN_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to jail members.'); + if (!message.guild.members.cache.get(client.user.id).permissions.has('MANAGE_ROLES')) return message.reply('Uhh... I don\'t have permission to jail members.'); const member = message.mentions.members.first(); if (!member) return await message.reply('Uhh... Please mention a member first.'); @@ -38,5 +38,5 @@ exports.help = { name: 'jail', description: 'Jails a member', usage: 'jail [user]', - category: '- ALP Exclusive Commands', + category: '- Binaryworks Exclusive Commands', }; diff --git a/commands/kick.js b/commands/kick.js index 79cd964..1bf83db 100644 --- a/commands/kick.js +++ b/commands/kick.js @@ -21,16 +21,16 @@ module.exports.run = async (client, message, args) => { const Discord = require('discord.js'); const mreason = args.join(' ').slice(22); if (!message.member.permissions.has('KICK_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to kick people.'); - if (!message.guild.member(client.user).hasPermission('KICK_MEMBERS')) return message.reply('Uhh... I don\'t have permission to kick members.'); + if (!message.guild.members.cache.get(client.user.id).permissions.has('KICK_MEMBERS')) return message.reply('I don\'t have permission to kick members.'); const member = message.mentions.members.first(); - if (!member) return message.reply('Uhh... Please mention a member first.'); - await member.kick(`Kicked by: ${message.author.tag}. Reason: ${mreason}.`); - const embed = new Discord.MessageEmbed() + if (!member) return message.reply('Please mention a member first.'); + await member.kick(`Kicked by ${message.author.tag} for ${mreason}.`); + const kickEmbed = new Discord.MessageEmbed() .setTitle('User Kicked!') .setColor('#1fd619') .addField('**User:**', `${member.user.tag}`) .addField('**Reason:**', `\`\`\`${mreason}\`\`\``); - await message.channel.send({embed}); + await message.channel.send({embeds: [kickEmbed]}); }; exports.conf = { diff --git a/commands/leaveguild.js b/commands/leaveguild.js index 146512c..f88f0bb 100644 --- a/commands/leaveguild.js +++ b/commands/leaveguild.js @@ -18,8 +18,8 @@ * * *************************************/ module.exports.run = async (client, message) => { - if (!['242775871059001344', message.guild.owner.user.id].includes(message.author.id)) return message.reply('Nope! You need the person who created this bot or the owner of this guild to use this command.'); - message.channel.send('Alright, I\'m leaving the server now. Bye everyone!'); + if (!['242775871059001344', message.guild.ownerID].includes(message.author.id)) return message.reply('Nope! You need the person who created this bot or the owner of this guild to use this command.'); + await message.channel.send('Leaving server. If that\'s a mistake, you can re-invite me...'); message.guild.leave(); }; diff --git a/commands/nick.js b/commands/nick.js index d87d57e..8fcdce7 100644 --- a/commands/nick.js +++ b/commands/nick.js @@ -18,7 +18,7 @@ * * *************************************/ module.exports.run = async (client, message, args) => { - if (!message.guild.member(client.user).hasPermission('MANAGE_NICKNAME')) return message.reply('**ERROR:** I can\'t change nicknames. (Check permissions)'); + if (!message.guild.members.cache.get(client.user.id).permissions.has('MANAGE_NICKNAME')) return message.reply('**ERROR:** I can\'t change nicknames. (Check permissions)'); const nick = args.join(' '); message.member.setNickname(nick); message.channel.send(`Alright! I changed your nickname to \`${nick}\``); diff --git a/commands/poweroff.js b/commands/poweroff.js index 700005a..22fb6bb 100644 --- a/commands/poweroff.js +++ b/commands/poweroff.js @@ -27,7 +27,7 @@ module.exports.run = async (client, message) => { let statusChannel = client.channels.cache.get('606602551634296968'); if (!statusChannel) return console.error('The status channel does not exist! Skipping.'); - await statusChannel.send(stopEmbed); + await statusChannel.send({ embeds: [stopEmbed]}); await message.reply(':warning: AleeBot will now exit!'); console.log('[i] AleeBot will now exit!'.blue); client.destroy(); diff --git a/commands/serverinfo.js b/commands/serverinfo.js index 9ccb7c2..049ad98 100644 --- a/commands/serverinfo.js +++ b/commands/serverinfo.js @@ -20,23 +20,23 @@ module.exports.run = async (client, message) => { const Discord = require('discord.js'); const listedChannels = []; - let memberCountNoBots = message.guild.members.cache.filter(member => !member.user.bot).size; + let memberCountNoBots = await message.guild.members.fetch().then((members) => members.filter(member => !member.user.bot).size); const embed = new Discord.MessageEmbed() - .setAuthor(message.guild.name, message.guild.iconURL()) + .setAuthor(`${message.guild.name}`, `${message.guild.iconURL()}`) .setDescription('Server Information') - .setThumbnail(message.guild.iconURL()) - .addField('Server Name:', message.guild.name) - .addField('Server ID:', message.guild.id) - .addField('Create At:', message.guild.createdAt.toUTCString()) + .setThumbnail(`${message.guild.iconURL()}`) + .addField('Server Name:', `${message.guild.name}`) + .addField('Server ID:', `${message.guild.id}`) + .addField('Create At:', `${message.guild.createdAt.toUTCString()}`) /*message.guild.channels.cacheType.forEach(channel => { listedChannels.push(channel) })*/ //.addField('Channels', `${listedChannels.join('\n')}`) //.addField('Total Channels', message.guild.channelCountMode) - .addField('Total Members (with bots)', message.guild.memberCount) - .addField('Total Members (without bots)', memberCountNoBots) + .addField('Total Members (with bots)', `${message.guild.memberCount}`) + .addField('Total Members (without bots)', `${memberCountNoBots}`) .setColor('#1fd619'); - await message.channel.send({embed}); + await message.channel.send({embeds: [embed]}); }; exports.conf = { diff --git a/commands/setprefix.js b/commands/setprefix.js index 2bea4bc..6800eea 100644 --- a/commands/setprefix.js +++ b/commands/setprefix.js @@ -23,7 +23,7 @@ module.exports.run = async (client, message, args) => { console.log(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] ${message}`); }; const fs = require('fs'); - if (!message.member.hasPermission('ADMINISTRATOR')) return message.reply('Sorry you need admin to set my prefix'); + if (!message.member.permissions.has('ADMINISTRATOR')) return message.reply('Sorry you need admin to set my prefix'); if (!args[0] || args[0 == 'help']) return message.reply('Usage: setprefix '); const prefixes = JSON.parse(fs.readFileSync('./storage/prefixes.json', 'utf8')); diff --git a/commands/slowdown.js b/commands/slowdown.js index 008ceb6..44d8230 100644 --- a/commands/slowdown.js +++ b/commands/slowdown.js @@ -21,7 +21,7 @@ module.exports.run = async (client, message, args) => { if (!message.member.permissions.has('MANAGE_CHANNELS')) return message.reply('It looks like that you don\'t have the permissions to slowdown channels.'); if (isNaN(args[0])) return message.reply('Please input a valid number to slowdown a channel.'); await message.channel.setRateLimitPerUser(args[0]); - message.channel.send(`This channel has been ratelimited for ${args[0]} second(s).`); + message.channel.send(`This channel has been slowdowned for ${args[0]} second(s).`); }; diff --git a/commands/suggest.js b/commands/suggest.js index 3a8e34a..0ca21b8 100644 --- a/commands/suggest.js +++ b/commands/suggest.js @@ -18,15 +18,15 @@ * * *************************************/ module.exports.run = async (client, message, args) => { - if (message.guild.id != '243022206437687296') return message.reply('This is a ALP exclusive command.'); + if (message.guild.id != '243022206437687296') return message.reply('This is a Binaryworks exclusive command.'); const {MessageEmbed} = require('discord.js'); - client.channels.cache.get('427495678390960148').send( + client.channels.cache.get('427495678390960148').send({ embeds: [ new MessageEmbed() .setColor('#1fd619') .setTitle('Suggestion') - .setDescription('This is a suggestion from '+ message.author.username +' please react to it using the following emojis.') + .setDescription('This is a suggestion from '+ message.author.username +'. Please react to it using the following emojis.') .addField('Suggestion Contents', args.join(' ')), - ).then((message) => { + ]}).then((message) => { message.react('\u2705'); message.react('\u274E'); }); @@ -39,7 +39,7 @@ exports.conf = { }; exports.help = { name: 'suggest', - description: 'Suggest a feature in ALP.', + description: 'Suggest a feature in Binaryworks.', usage: 'suggest [suggestion]', - category: '- ALP Exclusive Commands', + category: '- Binaryworks Exclusive Commands', }; diff --git a/commands/suggestfeature.js b/commands/suggestfeature.js index 28fc01a..c7623d2 100644 --- a/commands/suggestfeature.js +++ b/commands/suggestfeature.js @@ -20,14 +20,15 @@ module.exports.run = async (client, message, args) => { const { MessageEmbed } = require('discord.js'); - client.channels.cache.get('427495678390960148').send( + client.channels.cache.get('427495678390960148').send({ embeds: [ new MessageEmbed() - .setColor ('#1fd619') + .setColor('#1fd619') .setTitle('AleeBot Feature Suggestion') - .setDescription('This is an AleeBot feature suggestion from '+ message.author.username +` sending from ${message.guild.name}.`) + .setDescription(`This is an AleeBot feature suggested from ${message.author.username}.`) .addField('Suggestion Contents', args.join(' ')) + .setFooter(`Sending from ${message.guild.name}`, message.guild.iconURL())]} ); - await message.reply('Your suggestion has been shown to the ALP discord server!'); + await message.reply('Your suggestion has been shown to the Binaryworks discord server!'); }; diff --git a/commands/userinfo.js b/commands/userinfo.js index d90f7bf..a812dc4 100644 --- a/commands/userinfo.js +++ b/commands/userinfo.js @@ -23,11 +23,11 @@ module.exports.run = async (client, message) => { .setAuthor(message.author.tag, message.author.avatarURL()) .setDescription('User Information') .setThumbnail(message.author.avatarURL()) - .addField('Names', '**Username:** ' + message.author.username + '\n**Current Nickname:** ' + message.member.displayName) + .addField('Names', `**Username:** ${message.author.username}\n**Current Nickname:** ${message.member.displayName}`) .addField('Identity', `**User ID:** ${message.author.id} `) - .addField('Create and Join Times', '**Created At:** ' + message.member.user.createdAt.toUTCString() + '\n**Joined Guild At:** ' + message.member.joinedAt.toUTCString()) + .addField('Create and Join Times', `**Created At:** ${message.member.user.createdAt.toUTCString()}\n**Joined Guild At:** ${message.member.joinedAt.toUTCString()}`) .setColor('#1fd619'); - await message.channel.send({embed}); + await message.channel.send({embeds: [embed]}); }; diff --git a/package.json b/package.json index bb55468..2f898c3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aleebot", - "version": "2.0.0", + "version": "2.13.0b", "description": "A chat bot for discord written in discord.js.", "main": "bot_discord.js", "scripts": { @@ -9,7 +9,7 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/aleeproductions/AleeBot-JS.git" + "url": "git+https://github.com/aleeproductions/AleeBot.git" }, "author": "Alee Productions", "license": "GPL-3.0", @@ -21,8 +21,8 @@ "blessed": "^0.1.81", "colors": "^1.3.0", "dblapi.js": "^2.0.0", - "discord-buttons": "^4.0.0", - "discord.js": "^12.5.3", + "discord-together": "^1.1.53", + "discord.js": "^13.0.0-dev.t1627732975.331a9d3", "eslint": "^7.1.0", "express": "^4.17.1", "fs": "0.0.1-security", diff --git a/yarn-error.log b/yarn-error.log new file mode 100644 index 0000000..3083c85 --- /dev/null +++ b/yarn-error.log @@ -0,0 +1,2318 @@ +Arguments: + /usr/bin/node /usr/bin/yarn add discordjs@dev + +PATH: + /home/andrew/.gem/ruby/3.0.0/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl + +Yarn version: + 1.22.11 + +Node version: + 16.5.0 + +Platform: + linux x64 + +Trace: + Error: https://registry.yarnpkg.com/discordjs: Not found + at Request.params.callback [as _callback] (/usr/lib/node_modules/yarn/lib/cli.js:66992:18) + at Request.self.callback (/usr/lib/node_modules/yarn/lib/cli.js:140763:22) + at Request.emit (node:events:394:28) + at Request. (/usr/lib/node_modules/yarn/lib/cli.js:141735:10) + at Request.emit (node:events:394:28) + at IncomingMessage. (/usr/lib/node_modules/yarn/lib/cli.js:141657:12) + at Object.onceWrapper (node:events:513:28) + at IncomingMessage.emit (node:events:406:35) + at endReadableNT (node:internal/streams/readable:1331:12) + at processTicksAndRejections (node:internal/process/task_queues:83:21) + +npm manifest: + { + "name": "aleebot", + "version": "2.13.0b", + "description": "A chat bot for discord written in discord.js.", + "main": "bot_discord.js", + "scripts": { + "start": "node bot_discord.js", + "dev": "nodemon bot_discord.js --beta" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/aleeproductions/AleeBot.git" + }, + "author": "Alee Productions", + "license": "GPL-3.0", + "bugs": { + "url": "https://github.com/aleeproductions/AleeBot/issues" + }, + "homepage": "https://github.com/aleeproductions/AleeBot#readme", + "dependencies": { + "blessed": "^0.1.81", + "colors": "^1.3.0", + "dblapi.js": "^2.0.0", + "discord.js": "^13.0.0-dev.t1627689836.ee3cdc8", + "eslint": "^7.1.0", + "express": "^4.17.1", + "fs": "0.0.1-security", + "git-last-commit": "^0.3.0", + "i18next": "^19.4.4", + "moment": "^2.21.0", + "mongoose": "^5.11.8", + "node-opus": "^0.3.0", + "os": "^0.1.1", + "parse-ms": "^1.0.1", + "readline": "^1.3.0", + "ytdl-core": "^0.20.4" + }, + "devDependencies": { + "nodemon": "^2.0.2" + } + } + +yarn manifest: + No manifest + +Lockfile: + # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. + # yarn lockfile v1 + + + "@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + + "@babel/helper-validator-identifier@^7.14.5": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz#32be33a756f29e278a0d644fa08a2c9e0f88a34c" + integrity sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow== + + "@babel/highlight@^7.10.4": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" + integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== + dependencies: + "@babel/helper-validator-identifier" "^7.14.5" + chalk "^2.0.0" + js-tokens "^4.0.0" + + "@babel/runtime@^7.12.0": + version "7.14.8" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.8.tgz#7119a56f421018852694290b9f9148097391b446" + integrity sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg== + dependencies: + regenerator-runtime "^0.13.4" + + "@discordjs/builders@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-0.2.0.tgz#832c8d894aad13362db7a99f11a7826b21e4cd94" + integrity sha512-TVq7NZBCJrrTRc3CfxOr3IdgY5nrtqVxZ7qDUF1mN6LgxIiOldmFxsSwMrQBzLFVmOwqFyNLKCeblley8UpEuw== + dependencies: + discord-api-types "^0.18.1" + tslib "^2.3.0" + + "@discordjs/collection@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-0.2.0.tgz#ddf93c24956a70d4bc97bdd40027e6f0f2d5dafe" + integrity sha512-ZSiyfQsQmJq5EDgTocUg6n7IOft64MH/53RC8q3+Z5Ltipgc6eH1lLyDMJz2fcY/xq5zrILd9LyqFgEdragDNA== + + "@discordjs/form-data@^3.0.1": + version "3.0.1" + resolved "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz" + integrity sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + + "@eslint/eslintrc@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + + "@humanwhocodes/config-array@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + + "@humanwhocodes/object-schema@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" + integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== + + "@sapphire/async-queue@^1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@sapphire/async-queue/-/async-queue-1.1.4.tgz#ae431310917a8880961cebe8e59df6ffa40f2957" + integrity sha512-fFrlF/uWpGOX5djw5Mu2Hnnrunao75WGey0sP0J3jnhmrJ5TAPzHYOmytD5iN/+pMxS+f+u/gezqHa9tPhRHEA== + + "@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + + "@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + + "@types/bson@*": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@types/bson/-/bson-4.0.5.tgz#9e0e1d1a6f8866483f96868a9b33bc804926b1fc" + integrity sha512-vVLwMUqhYJSQ/WKcE60eFqcyuWse5fGH+NMAXHuKrUAPoryq3ATxk5o4bgYNtg5aOM4APVg7Hnb3ASqUYG0PKg== + dependencies: + "@types/node" "*" + + "@types/mongodb@^3.5.27": + version "3.6.20" + resolved "https://registry.yarnpkg.com/@types/mongodb/-/mongodb-3.6.20.tgz#b7c5c580644f6364002b649af1c06c3c0454e1d2" + integrity sha512-WcdpPJCakFzcWWD9juKoZbRtQxKIMYF/JIAM4JrNHrMcnJL6/a2NWjXxW7fo9hxboxxkg+icff8d7+WIEvKgYQ== + dependencies: + "@types/bson" "*" + "@types/node" "*" + + "@types/node@*": + version "16.4.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.4.7.tgz#f7afa78769d4b477f5092d7c3468e2e8653d779c" + integrity sha512-aDDY54sst8sx47CWT6QQqIZp45yURq4dic0+HCYfYNcY5Ejlb/CLmFnRLfy3wQuYafOeh3lB/DAKaqRKBtcZmA== + + "@types/ws@^7.4.5": + version "7.4.7" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" + integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== + dependencies: + "@types/node" "*" + + abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + + abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + + accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + + acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + + acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + + ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + + ajv@^8.0.1: + version "8.6.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.2.tgz#2fb45e0e5fcbc0813326c1c3da535d1881bb0571" + integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + + ansi-align@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" + integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== + dependencies: + string-width "^3.0.0" + + ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + + ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + + ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + + ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + + ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + + anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + + argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + + array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + + astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + + asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + + balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + + binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + + bindings@1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + + bindings@~1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz" + integrity sha1-FK1hE4EtLTfXLme0ystLtyZQXxE= + + bl@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.1.tgz#8c11a7b730655c5d56898cdc871224f40fd901d5" + integrity sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + + blessed@^0.1.81: + version "0.1.81" + resolved "https://registry.npmjs.org/blessed/-/blessed-0.1.81.tgz" + integrity sha1-+WLWh+wsNpVwrnGvhDJW5tDKESk= + + bluebird@3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" + integrity sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA== + + body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + + boxen@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" + integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^5.3.1" + chalk "^3.0.0" + cli-boxes "^2.2.0" + string-width "^4.1.0" + term-size "^2.1.0" + type-fest "^0.8.1" + widest-line "^3.1.0" + + brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + + braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + + bson@^1.1.4: + version "1.1.6" + resolved "https://registry.yarnpkg.com/bson/-/bson-1.1.6.tgz#fb819be9a60cd677e0853aee4ca712a785d6618a" + integrity sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg== + + bytes@3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + + cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + + callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + + camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + + chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + + chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + + chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + + chokidar@^3.2.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + + ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + + cli-boxes@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + + clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + + color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + + color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + + color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + + color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + + colors@^1.3.0: + version "1.4.0" + resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + + combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + + commander@^2.9.0: + version "2.20.3" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + + concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + + configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + + content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + + content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + + cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + + cookie@0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + + core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + + cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + + crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + + dblapi.js@^2.0.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/dblapi.js/-/dblapi.js-2.4.1.tgz#a0a09ab1e2bd6e3381205c488d582964087f47a9" + integrity sha512-g+u1inF/qOLit5qPK4hBGk5pKL1vy09uBLV+nukkRMvw2S9D1PyiyO70n4fboUXOgbExPp6Sho/Y782OqQOUiQ== + + debug@2, debug@2.6.9, debug@^2.2.0: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + + debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + + debug@^3.2.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + + debug@^4.0.1, debug@^4.1.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + dependencies: + ms "2.1.2" + + decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + + deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + + deep-is@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + + defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + + delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + + denque@^1.4.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.0.tgz#773de0686ff2d8ec2ff92914316a47b73b1c73de" + integrity sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ== + + depd@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + + destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + + discord-api-types@^0.18.1: + version "0.18.1" + resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.18.1.tgz#5d08ed1263236be9c21a22065d0e6b51f790f492" + integrity sha512-hNC38R9ZF4uaujaZQtQfm5CdQO58uhdkoHQAVvMfIL0LgOSZeW575W8H6upngQOuoxWd8tiRII3LLJm9zuQKYg== + + discord-api-types@^0.21.0: + version "0.21.0" + resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.21.0.tgz#ee66ee1a11bfb9dff46aad9f2fce0e5100c74b72" + integrity sha512-x/YpcXK2tS7kQRavirl5/QnYD1U8L3HzCTMkg+gwDEp+IkE8XGCLJHiZZoEKIAvpJFv5XzT5IPsduTIB2ONbuA== + + discord.js@^13.0.0-dev.t1627689836.ee3cdc8: + version "13.0.0-dev.t1627689836.ee3cdc8" + resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-13.0.0-dev.t1627689836.ee3cdc8.tgz#b825cbc51a74754a05dbaa670a016c9d8468f2d1" + integrity sha512-m5rINavZCz2VxmNm1rnz8ZDSzIx7PrLi+uFwmHyJRvf6mbPfwWnwW09PyXfbIXqNeEsHAelraPi6CO7JN1Z2BA== + dependencies: + "@discordjs/builders" "^0.2.0" + "@discordjs/collection" "^0.2.0" + "@discordjs/form-data" "^3.0.1" + "@sapphire/async-queue" "^1.1.4" + "@types/ws" "^7.4.5" + abort-controller "^3.0.0" + discord-api-types "^0.21.0" + node-fetch "^2.6.1" + ws "^7.5.1" + + doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + + dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + + duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + + ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + + emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + + emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + + encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + + end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + + enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + + escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + + escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + + escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + + escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + + eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + + eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + + eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + + eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + + eslint@^7.1.0: + version "7.31.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.31.0.tgz#f972b539424bf2604907a970860732c5d99d3aca" + integrity sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.3" + "@humanwhocodes/config-array" "^0.5.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.1.2" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.9" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + + espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + + esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + + esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + + esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + + estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + + estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + + esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + + etag@~1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + + event-target-shim@^5.0.0: + 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== + + express@^4.17.1: + version "4.17.1" + resolved "https://registry.npmjs.org/express/-/express-4.17.1.tgz" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + + fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + + fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + + file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + + file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + + fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + + finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + + flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + + flatted@^3.1.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.2.tgz#64bfed5cb68fe3ca78b3eb214ad97b63bedce561" + integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA== + + forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + + fresh@0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + + fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + + fs@0.0.1-security: + version "0.0.1-security" + resolved "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz" + integrity sha1-invTcYa23d84E/I4WLV+yq9eQdQ= + + fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + + functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + + get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + + get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + + git-last-commit@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/git-last-commit/-/git-last-commit-0.3.0.tgz" + integrity sha1-zHcBrcYpt0f9OzOuXddTp0as6d8= + + glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + + glob@^7.1.3: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + 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-dirs@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" + integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== + dependencies: + ini "1.3.7" + + globals@^13.6.0, globals@^13.9.0: + version "13.10.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.10.0.tgz#60ba56c3ac2ca845cfbf4faeca727ad9dd204676" + integrity sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g== + dependencies: + type-fest "^0.20.2" + + got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + + graceful-fs@^4.1.2: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + + has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + + has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + + has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + + html-entities@^1.1.3: + version "1.3.1" + resolved "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz" + integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== + + http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + + http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + + http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + + i18next@^19.4.4: + version "19.9.2" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-19.9.2.tgz#ea5a124416e3c5ab85fddca2c8e3c3669a8da397" + integrity sha512-0i6cuo6ER6usEOtKajUUDj92zlG+KArFia0857xxiEHAQcUwh/RtOQocui1LPJwunSYT574Pk64aNva1kwtxZg== + dependencies: + "@babel/runtime" "^7.12.0" + + iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + + ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= + + ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + + import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + + import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + + imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + + inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + + inherits@2, inherits@2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + + inherits@2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + + ini@1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" + integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== + + ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + + ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + + is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + + is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + + is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + + is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + + is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + + is-installed-globally@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" + integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== + dependencies: + global-dirs "^2.0.1" + is-path-inside "^3.0.1" + + is-npm@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" + integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== + + is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + + is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + + is-path-inside@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + + is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + + is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + + isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + + isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + + js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + + js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + + json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + + json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + + json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + + json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + + kareem@2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.3.2.tgz#78c4508894985b8d38a0dc15e1a8e11078f2ca93" + integrity sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ== + + keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + + latest-version@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" + + levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + + lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + + lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + + lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + + lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + + lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + + lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + + m3u8stream@^0.2.1: + version "0.2.2" + resolved "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.2.2.tgz" + integrity sha512-R/xWLXBtVr0m9sPruRL4p9uO01JyHxhcQ4nhqQhVgyT802OZyVW+dn+fWHvTnbfE6YMLc65TksZZut+Mh2OVMQ== + dependencies: + miniget "^1.1.0" + + make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + + media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + + memory-pager@^1.0.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" + integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== + + merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + + methods@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + + mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + + mime-db@1.46.0: + version "1.46.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz" + integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ== + + mime-types@^2.1.12: + version "2.1.29" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz" + integrity sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ== + dependencies: + mime-db "1.46.0" + + mime-types@~2.1.24: + version "2.1.27" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + + mime@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + + mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + + miniget@^1.1.0: + version "1.7.2" + resolved "https://registry.npmjs.org/miniget/-/miniget-1.7.2.tgz" + integrity sha512-USPNNK2bnHLOplX8BZVMehUkyQizS/DFpBdoH0TS+fM+hQoLNg9tWg4MeY9wE8gfY0pbzmx5UBEODujt3Lz8AA== + + minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + + minimist@^1.2.0: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + + moment@^2.21.0: + version "2.29.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" + integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== + + mongodb@3.6.10: + version "3.6.10" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.6.10.tgz#f10e990113c86b195c8af0599b9b3a90748b6ee4" + integrity sha512-fvIBQBF7KwCJnDZUnFFy4WqEFP8ibdXeFANnylW19+vOwdjOAvqIzPdsNCEMT6VKTHnYu4K64AWRih0mkFms6Q== + dependencies: + bl "^2.2.1" + bson "^1.1.4" + denque "^1.4.1" + optional-require "^1.0.3" + safe-buffer "^5.1.2" + optionalDependencies: + saslprep "^1.0.0" + + mongoose-legacy-pluralize@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz#3ba9f91fa507b5186d399fb40854bff18fb563e4" + integrity sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ== + + mongoose@^5.11.8: + version "5.13.5" + resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-5.13.5.tgz#9c8c0b46d35116dd4ea47683dfa836137e475243" + integrity sha512-sSUAk9GWgA8r3w3nVNrNjBaDem86aevwXO8ltDMKzCf+rjnteMMQkXHQdn1ePkt7alROEPZYCAjiRjptWRSPiQ== + dependencies: + "@types/mongodb" "^3.5.27" + bson "^1.1.4" + kareem "2.3.2" + mongodb "3.6.10" + mongoose-legacy-pluralize "1.0.2" + mpath "0.8.3" + mquery "3.2.5" + ms "2.1.2" + optional-require "1.0.x" + regexp-clone "1.0.0" + safe-buffer "5.2.1" + sift "13.5.2" + sliced "1.0.1" + + mpath@0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.8.3.tgz#828ac0d187f7f42674839d74921970979abbdd8f" + integrity sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA== + + mquery@3.2.5: + version "3.2.5" + resolved "https://registry.yarnpkg.com/mquery/-/mquery-3.2.5.tgz#8f2305632e4bb197f68f60c0cffa21aaf4060c51" + integrity sha512-VjOKHHgU84wij7IUoZzFRU07IAxd5kWJaDmyUzQlbjHjyoeK5TNeeo8ZsFDtTYnSgpW6n/nMNIHvE3u8Lbrf4A== + dependencies: + bluebird "3.5.1" + debug "3.1.0" + regexp-clone "^1.0.0" + safe-buffer "5.1.2" + sliced "1.0.1" + + ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + + ms@2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + + ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + + ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + + nan@2: + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + + nan@^2.14.0: + version "2.14.1" + resolved "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz" + integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== + + natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + + negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + + node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + + node-opus@^0.3.0: + version "0.3.3" + resolved "https://registry.npmjs.org/node-opus/-/node-opus-0.3.3.tgz" + integrity sha512-ZQniA8iJ6y/qOTmW6eyzM9m8odt4CIGV0NM9/U03/pYLhGyxy18QXO25WfrWd8XsUYx57tnxll2xxj54CN08uQ== + dependencies: + bindings "~1.2.1" + commander "^2.9.0" + nan "^2.14.0" + optionalDependencies: + ogg-packet "^1.0.0" + + nodemon@^2.0.2: + version "2.0.12" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.12.tgz#5dae4e162b617b91f1873b3bfea215dd71e144d5" + integrity sha512-egCTmNZdObdBxUBw6ZNwvZ/xzk24CKRs5K6d+5zbmrMr7rOpPmfPeF6OxM3DDpaRx331CQRFEktn+wrFFfBSOA== + dependencies: + chokidar "^3.2.2" + debug "^3.2.6" + ignore-by-default "^1.0.1" + minimatch "^3.0.4" + pstree.remy "^1.1.7" + semver "^5.7.1" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.3" + update-notifier "^4.1.0" + + nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= + dependencies: + abbrev "1" + + normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + + normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + + ogg-packet@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/ogg-packet/-/ogg-packet-1.0.1.tgz" + integrity sha512-dW1ok3BMnMikyXGDIgVEckWnlViW8JLWQV4qj9aN/rNRVqHlDYSlcIEtSIMH7tpuUOiIxAhY3+OxNdIOm6s17A== + dependencies: + ref-struct "*" + + on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + + once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + + optional-require@1.0.x: + version "1.0.3" + resolved "https://registry.yarnpkg.com/optional-require/-/optional-require-1.0.3.tgz#275b8e9df1dc6a17ad155369c2422a440f89cb07" + integrity sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA== + + optional-require@^1.0.3: + version "1.1.1" + resolved "https://registry.yarnpkg.com/optional-require/-/optional-require-1.1.1.tgz#214314d1f9fbdd6f9e28fb12c9a3b4422ef93fdc" + integrity sha512-EnUe33GTAltyZlIsQ2l93KzBC9zi8BsxLvKP3wxALOsz/YIakVojyuZsv5PFFk8y8e6r+SbaPIsNmyPoSK0OHw== + dependencies: + require-at "^1.0.6" + + optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + + os@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/os/-/os-0.1.2.tgz#f29a50c62908516ba42652de42f7038600cadbc2" + integrity sha512-ZoXJkvAnljwvc56MbvhtKVWmSkzV712k42Is2mA0+0KTSRakq5XXuXpjZjgAt9ctzl51ojhQWakQQpmOvXWfjQ== + + p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + + package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" + + parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + + parse-ms@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/parse-ms/-/parse-ms-1.0.1.tgz" + integrity sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0= + + parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + + path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + + path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + + path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + + picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + + prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + + prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + + process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + + progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + + proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + + pstree.remy@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + + pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + + punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + + pupa@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== + dependencies: + escape-goat "^2.0.0" + + qs@6.7.0: + version "6.7.0" + resolved "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + + range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + + raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + + rc@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + + readable-stream@^2.3.5: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + 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" + + readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + + readline@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz" + integrity sha1-xYDXfvLPyHUrEySYBg3JeTp6wBw= + + ref-struct@*: + version "1.1.0" + resolved "https://registry.npmjs.org/ref-struct/-/ref-struct-1.1.0.tgz" + integrity sha1-XV7mWtQc78Olxf60BYcmHkee3BM= + dependencies: + debug "2" + ref "1" + + ref@1: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ref/-/ref-1.3.5.tgz#0e33f080cdb94a3d95312b2b3b1fd0f82044ca0f" + integrity sha512-2cBCniTtxcGUjDpvFfVpw323a83/0RLSGJJY5l5lcomZWhYpU2cuLdsvYqMixvsdLJ9+sTdzEkju8J8ZHDM2nA== + dependencies: + bindings "1" + debug "2" + nan "2" + + regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + + regexp-clone@1.0.0, regexp-clone@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-1.0.0.tgz#222db967623277056260b992626354a04ce9bf63" + integrity sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw== + + regexpp@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + + registry-auth-token@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" + integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== + dependencies: + rc "^1.2.8" + + registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + dependencies: + rc "^1.2.8" + + require-at@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/require-at/-/require-at-1.0.6.tgz#9eb7e3c5e00727f5a4744070a7f560d4de4f6e6a" + integrity sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g== + + require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + + resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + + responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + + rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + + safe-buffer@5.2.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + + "safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + + saslprep@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226" + integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag== + dependencies: + sparse-bitfield "^3.0.3" + + sax@^1.1.3: + version "1.2.4" + resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + + semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + + semver@^5.7.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + + semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + + semver@^7.2.1: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + + send@0.17.1: + version "0.17.1" + resolved "https://registry.npmjs.org/send/-/send-0.17.1.tgz" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + + serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + + setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + + shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + + shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + + sift@13.5.2: + version "13.5.2" + resolved "https://registry.yarnpkg.com/sift/-/sift-13.5.2.tgz#24a715e13c617b086166cd04917d204a591c9da6" + integrity sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA== + + signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + + slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + + sliced@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" + integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E= + + sparse-bitfield@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" + integrity sha1-/0rm5oZWBWuks+eSqzM004JzyhE= + dependencies: + memory-pager "^1.0.2" + + sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + + "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + + string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + + string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + + string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + + strip-ansi@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + + strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + + strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + + strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + + supports-color@^5.3.0, supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + + supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + + table@^6.0.9: + version "6.7.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" + integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== + dependencies: + ajv "^8.0.1" + lodash.clonedeep "^4.5.0" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + + term-size@^2.1.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" + integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== + + text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + + to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + + to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + + toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + + touch@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== + dependencies: + nopt "~1.0.10" + + tslib@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" + integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== + + type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + + type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + + type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + + type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + + typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + + undefsafe@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" + integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A== + dependencies: + debug "^2.2.0" + + unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + + unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + + update-notifier@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" + integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== + dependencies: + boxen "^4.2.0" + chalk "^3.0.0" + configstore "^5.0.1" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.3.1" + is-npm "^4.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.0.0" + pupa "^2.0.1" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" + + uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + + url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + + util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + + utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + + v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + + vary@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + + which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + + widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + + word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + + wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + + write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + + ws@^7.5.1: + version "7.5.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" + integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== + + xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + + yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + + ytdl-core@^0.20.4: + version "0.20.4" + resolved "https://registry.npmjs.org/ytdl-core/-/ytdl-core-0.20.4.tgz" + integrity sha512-d+jthiJxSQ6yqCeCwwMggXYOjFSOJsD7ahvAAE1sFW9nVNnsA/roz91SFH1FzaMGS7/y7AnJfhVgpE9i8uYjJQ== + dependencies: + html-entities "^1.1.3" + m3u8stream "^0.2.1" + miniget "^1.1.0" + sax "^1.1.3" -- cgit v1.2.3 From 946eebabce9011d653364880ffbd2e049bd49934 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Sun, 1 Aug 2021 20:36:10 -0400 Subject: Removed all refences to ALPC, replaced dbl with top.gg --- bot_discord.js | 32 +++++++++++++++----------------- commands/quote.js | 7 ++++--- package.json | 5 +++-- 3 files changed, 22 insertions(+), 22 deletions(-) (limited to 'package.json') diff --git a/bot_discord.js b/bot_discord.js index 6b292dd..c1196d4 100644 --- a/bot_discord.js +++ b/bot_discord.js @@ -30,20 +30,20 @@ const express = require('express'); const fs = require('fs'); const readline = require('readline'); const colors = require('colors'); -const DBL = require('dblapi.js'); +const { AutoPoster } = require('topgg-autoposter'); //const i18next = require('i18next'); const web = express(); const settings = require('./storage/settings.json'); const mongo = require('./plugins/mongo'); const api = require('./tokens.json'); -const dbl = new DBL(api.dbltoken, client); const active = new Map(); -const ownerID = '242775871059001344'; let autoRole = true; +let readyEmbedMessage = false; +const ownerID = '242775871059001344'; let logChannel = '318874545593384970'; let statusChannelID = '606602551634296968'; -let readyEmbedMessage = false; let serverWhitelist = "243022206437687296"; +let roleWhitelist = "657426918416580614" const activities = [ 'AleeBot ' + settings.abVersion + ' | ' + settings.prefix + 'help', @@ -257,8 +257,8 @@ client.on('ready', async () => { .setAuthor('AleeBot Status', client.user.avatarURL()) .setDescription('AleeBot has started') .addField('Version', settings.abVersion, true) - .addField('Prefix', `\`${settings.prefix}\``, true) .addField('Discord.JS Version', Discord.version, true) + .addField('Prefix', `\`${settings.prefix}\``, true) .setColor('#5cd65c'); let statusChannel = client.channels.cache.get(statusChannelID); if (!statusChannel) return console.error('The status channel does not exist! Skipping.'); @@ -285,9 +285,9 @@ client.on('guildMemberAdd', (member) => { guildMember.send({ embeds: [logEmbed]}); if (autoRole === true) { if (member.guild.id !== serverWhitelist) return; - const role = member.guild.roles.cache.get('657426918416580614'); + const role = member.guild.roles.cache.get(roleWhitelist); member.roles.add(role); - log(`[i] ${member.user.username} joined Alee Productions.`.green); + log(`[i] ${member.user.username} joined Binaryworks Community.`.green); log(`[i] I gave ${member.user.username} the "Member" role.`.green); } }); @@ -409,14 +409,12 @@ client.on('guildDelete', (guild) => { statusChannel.send({ embeds: [logEmbed]}); }); -dbl.on('posted', () => { - log('Server count posted!'.blue); -}); - -dbl.on('error', (e) => { - log(`[X | DBL ERROR] ${e}`.red); -}); - +/* +AutoPoster(api.dbltoken, client) + .on('posted', () => { + log('[>] Posted stats to Top.gg!'.blue); + }) +*/ client.on('messageCreate', async(msg) => { if (!client.application?.owner) await client.application?.fetch(); if (msg.author.bot) return; @@ -462,7 +460,7 @@ client.on('messageCreate', async(msg) => { } } }); -/* + client.on('interactionCreate', async (interaction) => { if (!interaction.isCommand()) return; @@ -475,7 +473,7 @@ client.on('interactionCreate', async (interaction) => { await interaction.reply({ content: 'There was an error while executing this command!', ephemeral: true }); } -});*/ +}); process.on('unhandledRejection', function(err, p) { log('[X | UNCAUGHT PROMISE] ' + err.stack.red); diff --git a/commands/quote.js b/commands/quote.js index 69e810a..6daeb00 100644 --- a/commands/quote.js +++ b/commands/quote.js @@ -21,7 +21,7 @@ const mongo = require('../plugins/mongo'); const quoteSchema = require('../schema/quote-schema'); module.exports.run = async (client, message, args) => { if (!['242775871059001344'].includes(message.author.id)) return message.reply('**This command is disabled due to a new system being implemented.**'); - const Discord = require('discord.js'); + const { MessageEmbed } = require('discord.js'); let NewQuote; let quo; @@ -36,13 +36,14 @@ module.exports.run = async (client, message, args) => { await mongo().then(async (mongoose) => { try { const quote = await quoteSchema.findOne({quoteID: "1", author: quoAuthor, authorImage: quoAuthorImage, quote: quoQuote, year: quoYear}) - /*const embed = new Discord.MessageEmbed() + /* + const embed = new MessageEmbed() .setAuthor(quoAuthor, quoAuthorImage) .setDescription(quoQuote) .setColor('#1fd619') .setFooter('- ' + quoYear); - await message.channel.send({embed});*/ + await message.channel.send({embeds:[embed]});*/ console.log(quote); } finally { await mongoose.connection.close(); diff --git a/package.json b/package.json index 2f898c3..e4c771c 100644 --- a/package.json +++ b/package.json @@ -18,11 +18,11 @@ }, "homepage": "https://github.com/aleeproductions/AleeBot#readme", "dependencies": { + "@top-gg/sdk": "^3.1.2", "blessed": "^0.1.81", "colors": "^1.3.0", - "dblapi.js": "^2.0.0", "discord-together": "^1.1.53", - "discord.js": "^13.0.0-dev.t1627732975.331a9d3", + "discord.js": "^13.0.0-dev.t1627778678.74fc23b", "eslint": "^7.1.0", "express": "^4.17.1", "fs": "0.0.1-security", @@ -34,6 +34,7 @@ "os": "^0.1.1", "parse-ms": "^1.0.1", "readline": "^1.3.0", + "topgg-autoposter": "^2.0.0", "ytdl-core": "^0.20.4" }, "devDependencies": { -- cgit v1.2.3 From caa341ec28a1247bd06602ba3bc727a7ff8f1fd7 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Mon, 30 Aug 2021 19:56:13 -0400 Subject: Help + About changes; Corrections in README; Added new play status --- README.md | 2 +- bot_discord.js | 5 +++-- commands/about.js | 3 ++- commands/help.js | 3 +-- commands/quote.js | 2 +- package.json | 2 +- 6 files changed, 9 insertions(+), 8 deletions(-) (limited to 'package.json') diff --git a/README.md b/README.md index 07f7027..6665b03 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@

Here's the list of people who helped me with AleeBot for discord servers

  • Alee14
  • -
  • OfficialRain (Rain)
  • +
  • OfficialRain (Raina)
  • jtsshieh

diff --git a/bot_discord.js b/bot_discord.js index c1196d4..a390fef 100644 --- a/bot_discord.js +++ b/bot_discord.js @@ -51,13 +51,14 @@ const activities = [ 'Drawing shapes', 'Fighting Quad', 'Ultra Jump Mania!', - 'Exposing TAS-Corp', + 'Exposing TAS-Corp', 'Fighting Evelyn Claythorne', 'Installing Windows 11', 'Breaking Windows 10', 'Reticulating splines', 'Dag dag!', - '90% bug free!' + '90% bug free!', + 'Now running ' + Discord.version + '!' ]; const log = (message) => { diff --git a/commands/about.js b/commands/about.js index 81f9bf8..5fd11de 100644 --- a/commands/about.js +++ b/commands/about.js @@ -23,8 +23,9 @@ module.exports.run = async (client, message) => { const aboutEmbed = new MessageEmbed() .setAuthor(`AleeBot ${require('../storage/settings.json').abVersion}`, client.user.avatarURL()) .addField('About AleeBot', 'AleeBot is an all-in-one bot that\'s made from the Discord.JS api!') + .addField('License', 'GNU General Public License v3.0') .addField('Contributors', 'Andrew Lee (Founder of this project)\nOfficialRain (Raina) (Uptime Command)\njtsshieh (Command Handler)') - .setFooter('© Copyright 2017-2021 Alee Productions, Licensed with GPL-3.0') + .setFooter('© Copyright 2017-2021 Alee Productions') .setColor('#1fd619'); let inviteButton = new MessageActionRow() diff --git a/commands/help.js b/commands/help.js index 2bad795..8fe42cc 100644 --- a/commands/help.js +++ b/commands/help.js @@ -41,9 +41,8 @@ module.exports.run = async (client, message) => { if (!message.guild.members.cache.get(client.user.id).permissions.has('EMBED_LINKS')) return message.reply('ERROR: AleeBot doesn\'t have the permission to send embed links, please enable them to use the full help.'); const embed = new Discord.MessageEmbed() .setAuthor('AleeBot ' + require('../storage/settings.json').abVersion + ` Help and on ${client.guilds.cache.size} servers`, client.user.avatarURL()) - .setDescription('Every command you input into AleeBot is `' + prefix + '`') + .setDescription('Currently on the Alpha-Temp branch. Meaning that experimental features are enabled in this bot...') .setColor('#1fd619') - .setFooter('© Copyright 2017-2021 Alee Productions, Licensed with GPL-3.0'); categories.forEach(function(x) { let cat = ''; diff --git a/commands/quote.js b/commands/quote.js index 6daeb00..57729ae 100644 --- a/commands/quote.js +++ b/commands/quote.js @@ -35,7 +35,7 @@ module.exports.run = async (client, message, args) => { if (args) { await mongo().then(async (mongoose) => { try { - const quote = await quoteSchema.findOne({quoteID: "1", author: quoAuthor, authorImage: quoAuthorImage, quote: quoQuote, year: quoYear}) + const quote = await quoteSchema.findOne({quoteID: args[1], author: quoAuthor, authorImage: quoAuthorImage, quote: quoQuote, year: quoYear}) /* const embed = new MessageEmbed() .setAuthor(quoAuthor, quoAuthorImage) diff --git a/package.json b/package.json index e4c771c..0e34c8d 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "blessed": "^0.1.81", "colors": "^1.3.0", "discord-together": "^1.1.53", - "discord.js": "^13.0.0-dev.t1627778678.74fc23b", + "discord.js": "^13.0.1", "eslint": "^7.1.0", "express": "^4.17.1", "fs": "0.0.1-security", -- cgit v1.2.3 From 1a7a627446edfeb270850f0ed15c9c8d604380b2 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Sat, 25 Mar 2023 21:25:43 -0400 Subject: Now using sequelize; Minor tweaks; New activities --- .gitignore | 5 +- .idea/dbnavigator.xml | 417 ++++++++++++++++++++++++++++++++++++++++++++++ CONTRIBUTING.md | 2 +- bot_discord.js | 22 +-- commands/about.js | 10 +- commands/addquote.js | 93 +++-------- commands/ban.js | 2 +- commands/kick.js | 2 +- commands/leaveguild.js | 2 +- commands/quote.js | 73 ++------ commands/setlogchannel.js | 35 +--- commands/setup.js | 46 +++++ commands/uptime.js | 11 +- deprecated/setup.js | 45 ----- models/guild-settings.js | 24 +++ models/quote.js | 29 ++++ package.json | 11 +- plugins/mongo.js | 10 -- schema/logging-schema.js | 13 -- schema/quote-schema.js | 17 -- storage/activities.js | 28 +++- sync-database.js | 9 + utils/sequelize.js | 9 + 23 files changed, 643 insertions(+), 272 deletions(-) create mode 100644 .idea/dbnavigator.xml create mode 100644 commands/setup.js delete mode 100644 deprecated/setup.js create mode 100644 models/guild-settings.js create mode 100644 models/quote.js delete mode 100644 plugins/mongo.js delete mode 100644 schema/logging-schema.js delete mode 100644 schema/quote-schema.js create mode 100644 sync-database.js create mode 100644 utils/sequelize.js (limited to 'package.json') diff --git a/.gitignore b/.gitignore index fb6a084..bca3965 100644 --- a/.gitignore +++ b/.gitignore @@ -11,11 +11,10 @@ ffprobe.exe .directory -userData.sqlite .vs/slnx.sqlite .vs/slnx.sqlite-journal json.sqlite yarn.lock - -package-lock.json \ No newline at end of file +package-lock.json +database.sqlite diff --git a/.idea/dbnavigator.xml b/.idea/dbnavigator.xml new file mode 100644 index 0000000..b1bad03 --- /dev/null +++ b/.idea/dbnavigator.xml @@ -0,0 +1,417 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d75ca6a..2799fb4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,7 +5,7 @@ Include the GPL-3.0 license too and follow the following format when you create /**************************************** * * [Command/Plugin]: (Command or Plugin) for AleeBot - * Copyright (C) 2017-2021 Alee Productions & (your name here) + * Copyright (C) 2017-2023 Andrew Lee & (your name here) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/bot_discord.js b/bot_discord.js index 60a133c..00afe45 100644 --- a/bot_discord.js +++ b/bot_discord.js @@ -1,7 +1,7 @@ /** ************************************** * * AleeBot: Made for discord servers - * Copyright (C) 2017-2021 Alee Productions + * Copyright (C) 2017-2022 Andrew Lee Projects * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,11 +30,9 @@ const express = require('express'); const fs = require('fs'); const readline = require('readline'); const colors = require('colors'); -const { AutoPoster } = require('topgg-autoposter'); //const i18next = require('i18next'); const web = express(); const settings = require('./storage/settings.json'); -const mongo = require('./plugins/mongo'); const api = require('./tokens.json'); const { activity } = require('./storage/activities'); const active = new Map(); @@ -67,7 +65,7 @@ const rl = readline.createInterface({ prompt: '> '.gray, }); -console.log(`AleeBot ${settings.abVersion}: Copyright (C) 2017-2022 Andrew Lee Projects`.gray); +console.log(`AleeBot ${settings.abVersion}: Copyright (C) 2017-2023 Andrew Lee Projects`.gray); console.log('This program comes with ABSOLUTELY NO WARRANTY; for details type `show w\'.'.gray); console.log('This is free software, and you are welcome to redistribute it'.gray); console.log('under certain conditions; type `show c\' for details.\n'.gray); @@ -224,14 +222,6 @@ client.on('ready', async () => { botPresence(); - await mongo().then(mongoose => { - try { - log('[>] Connected to MongoDB!'.green); - } finally { - mongoose.connection.close(); - } - }) - web.get('/', (req, res) => { res.send("Hello World! This is going to become the AleeBot dashboard..."); }); @@ -263,10 +253,9 @@ client.on('guildMemberAdd', (member) => { const logEmbed = new Discord.MessageEmbed() .setAuthor('AleeBot Logging', client.user.avatarURL()) .setDescription(`A user has joined this server!`) - .addField('Username: ', `${member.displayName}`, true) + .addField('Username: ', `${member.user.tag}`, true) .addField('User ID: ', `${member.id}`, true) .addField('Created At: ', `${member.user.createdAt.toUTCString()}`) - //.addField('Invite Code: ', `${member.invite.code}`) .setColor('#4bff31') .setTimestamp(); @@ -278,8 +267,7 @@ client.on('guildMemberAdd', (member) => { if (member.guild.id !== serverWhitelist) return; const role = member.guild.roles.cache.get(roleWhitelist); member.roles.add(role); - log(`[i] ${member.user.username} joined Binaryworks Community.`.green); - log(`[i] I gave ${member.user.username} the "Member" role.`.green); + log(`[i] ${member.user.username} joined Andrew Lee Projects, automatically giving them role.`.green); } }); @@ -288,7 +276,7 @@ client.on('guildMemberRemove', (member) => { const logEmbed = new Discord.MessageEmbed() .setAuthor('AleeBot Logging', client.user.avatarURL()) .setDescription(`A user has left this server!`) - .addField('Username: ', `${member.displayName}`, true) + .addField('Username: ', `${member.user.tag}`, true) .addField('User ID: ', `${member.id}`, true) .setColor('#ec2727') .setTimestamp(); diff --git a/commands/about.js b/commands/about.js index 14daebb..be1c17d 100644 --- a/commands/about.js +++ b/commands/about.js @@ -20,12 +20,16 @@ module.exports.run = async (client, message) => { const { MessageEmbed, MessageButton, MessageActionRow } = require('discord.js'); + let Contributors = ('- Andrew Lee (Founder of this project)\n'); + Contributors += ('- OfficialRain (Raina) (Uptime Command)\n'); + Contributors += ('- jtsshieh (Command Handler)'); + const aboutEmbed = new MessageEmbed() .setAuthor(`AleeBot ${require('../storage/settings.json').abVersion}`, client.user.avatarURL()) .addField('About AleeBot', 'AleeBot is an all-in-one bot that\'s made from the Discord.JS API!') .addField('License', 'GNU General Public License v3.0') - .addField('Contributors', 'Andrew Lee (Founder of this project)\nOfficialRain (Raina) (Uptime Command)\njtsshieh (Command Handler)') - .setFooter('© Copyright 2017-2022 Andrew Lee Projects') + .addField('Contributors', Contributors) + .setFooter('© Copyright 2017-2023 Andrew Lee Projects') .setColor('#1fd619'); let inviteButton = new MessageActionRow() @@ -36,7 +40,7 @@ module.exports.run = async (client, message) => { .setURL('https://top.gg/bot/282547024547545109'), new MessageButton() .setStyle('LINK') - .setLabel('Join Binaryworks Community') + .setLabel('Join Andrew Lee Projects') .setURL('https://discord.gg/EFhRDqG') ); diff --git a/commands/addquote.js b/commands/addquote.js index 6334470..477d891 100644 --- a/commands/addquote.js +++ b/commands/addquote.js @@ -17,74 +17,35 @@ * along with this program. If not, see . * * *************************************/ -const mongo = require('../plugins/mongo'); -const quoteSchema = require('../schema/quote-schema'); +const quoteDB = require('../models/quote'); +const Discord = require("discord.js"); module.exports.run = async (client, message, args) => { -/* - let authorMessage; - let authorImageMessage; - let quoteMessage; - let yearMessage;*/ - if (!['242775871059001344'].includes(message.author.id)) return message.reply('**This command is disabled due to a new system being implemented.**'); - //await message.author.send('Welcome to AleeBot\'s quoting system!\nThis process will be easy.'); - - if (!args.length) return message.reply("Error: Did not provide more context (message will be replaced eventually)"); - - await mongo().then(async (mongoose) => { - try { - await new quoteSchema({ - author: args[0], - authorImage: args[1], - quote: args[2], - year: args[3] - - }).save() - } finally { - await mongoose.connection.close(); - message.reply('Added this quote to the database...'); - } - }) - -/* - let quoteState = {}; - let state = quoteState[message.author.id]; - - if (message.content.toLowerCase() === "q"){ - await message.author.send("Process has been cancelled"); - state = null; - } else { - switch (state) { - case 1: - await message.author.send('Enter the author\'s name'); - authorMessage = message.content; - console.log(authorMessage); - state = 2; - break; - case 2: - await message.author.send('author url here'); - authorImageMessage = message.content; - console.log(authorImageMessage); - state = 3; - break; - case 3: - await message.author.send('quote here'); - quoteMessage = message.content; - console.log(quoteMessage); - state = 4; - break; - case 4: - await message.author.send('year here'); - yearMessage = message.content; - console.log(yearMessage); - state = 5; - break; - case 5: - await message.author.send('process complete'); - state = null; - break; - } -*/ + try { + let newAuthor; + let newAuthorImage; + let newQuote; + let newYear; + + const quote = await quoteDB.create({ + author: newAuthor, + authorImage: newAuthorImage, + quote: newQuote, + year: newYear + }) + + const setupEmbed = new Discord.MessageEmbed() + .setTitle('AleeBot Quote Setup', client.user.avatarURL()) + .setDescription('Input the data to the following embed') + .addField('Author', newAuthor, true) + .addField('Author Image (URL)', newAuthorImage, true) + .addField('Quote', newQuote, true) + .addField('Year', newYear, true); + + message.reply({embeds: [setupEmbed]}); + } catch (error) { + console.log(error) + } }; exports.conf = { diff --git a/commands/ban.js b/commands/ban.js index 1e8ee6e..b734be5 100644 --- a/commands/ban.js +++ b/commands/ban.js @@ -29,7 +29,7 @@ module.exports.run = async (client, message, args) => { .setTitle('User Banned!') .setColor('#1fd619') .addField('**User:**', `${member.user.tag}`) - .addField('**Reason:**', `\`\`\`${mreason}\`\`\``); + if (mreason) return banEmbed.addField('**Reason:**', `\`\`\`${mreason}\`\`\``); await message.channel.send({embeds: [banEmbed]}); }; diff --git a/commands/kick.js b/commands/kick.js index 1bf83db..c248afc 100644 --- a/commands/kick.js +++ b/commands/kick.js @@ -29,7 +29,7 @@ module.exports.run = async (client, message, args) => { .setTitle('User Kicked!') .setColor('#1fd619') .addField('**User:**', `${member.user.tag}`) - .addField('**Reason:**', `\`\`\`${mreason}\`\`\``); + if (mreason) return kickEmbed.addField('**Reason:**', `\`\`\`${mreason}\`\`\``); await message.channel.send({embeds: [kickEmbed]}); }; diff --git a/commands/leaveguild.js b/commands/leaveguild.js index f88f0bb..00a97fc 100644 --- a/commands/leaveguild.js +++ b/commands/leaveguild.js @@ -19,7 +19,7 @@ * *************************************/ module.exports.run = async (client, message) => { if (!['242775871059001344', message.guild.ownerID].includes(message.author.id)) return message.reply('Nope! You need the person who created this bot or the owner of this guild to use this command.'); - await message.channel.send('Leaving server. If that\'s a mistake, you can re-invite me...'); + await message.channel.send('Leaving server. If that\'s a mistake, you can re-invite me'); message.guild.leave(); }; diff --git a/commands/quote.js b/commands/quote.js index 481cc9b..81f9142 100644 --- a/commands/quote.js +++ b/commands/quote.js @@ -17,72 +17,33 @@ * along with this program. If not, see . * * *************************************/ -const mongo = require('../plugins/mongo'); -const quoteSchema = require('../schema/quote-schema'); module.exports.run = async (client, message, args) => { - if (!['242775871059001344'].includes(message.author.id)) return message.reply('**This command is disabled due to a new system being implemented.**'); + const quoteDB = require('../models/quote'); const { MessageEmbed } = require('discord.js'); + let quoteID = args[0]; -// let NewQuote; -// let quo; - - let quoId; - let quoAuthor; - let quoAuthorImage; - let quoQuote; - let quoYear; - - if (args) { - await mongo().then(async (mongoose) => { - try { - const quote = await quoteSchema.findOne({quoteID: args[1], author: quoAuthor, authorImage: quoAuthorImage, quote: quoQuote, year: quoYear}) - /* - const embed = new MessageEmbed() - .setAuthor(quoAuthor, quoAuthorImage) - .setDescription(quoQuote) - .setColor('#1fd619') - .setFooter('- ' + quoYear); - - await message.channel.send({embeds:[embed]});*/ - console.log(quote); - } finally { - await mongoose.connection.close(); - } - }) - } else { - + if (quoteID === undefined) { + const quoteList = await quoteDB.findAll({ attributes: ['id'] }) + quoteID = Math.floor(Math.random() * (quoteList.length - 1)) + 1 } - /* + const quote = await quoteDB.findOne({ where: { id: quoteID } }) - function GetNewQuote(quoteNum = -1) { - NewQuote = new Discord.MessageEmbed(); - let quo = require('../storage/quotes.json').quotes + if (quote) { + const embed = new MessageEmbed() + .setAuthor({ name: quote.author, iconURL: quote.authorImage}) + .setDescription(quote.quote) + .setColor('#1fd619') + .setFooter('- ' + quote.year); - if (quoteNum === -1) { - quoteNum = Math.floor(Math.random() * 1000) % quo.length; - quo=quo[quoteNum]; - } - - const author = quo.author; - const authorImage = quo.authorImage; - const quote = quo.quote; - const year = quo.year; - const url = quo.url; - - NewQuote.setAuthor(author, authorImage); - NewQuote.setColor('#1fd619'); - NewQuote.setDescription(quote); - NewQuote.setFooter('- ' + year); - //NewQuote.setURL(url); - - return NewQuote; + await message.reply('Alright, here\'s your quote.') + await message.channel.send({embeds:[embed]}); + } else { + message.reply('Cannot find quote'); } - const newquote = GetNewQuote(); - message.reply('Alright, here\'s your quote.'); - await message.channel.send(newquote);*/ + }; exports.conf = { diff --git a/commands/setlogchannel.js b/commands/setlogchannel.js index 902a210..c04e926 100644 --- a/commands/setlogchannel.js +++ b/commands/setlogchannel.js @@ -17,36 +17,19 @@ * along with this program. If not, see . * * *************************************/ -const mongo = require('../plugins/mongo'); -const logSchema = require('../schema/logging-schema'); +const guildDB = require ('../models/guild-settings') module.exports.run = async (client, message) => { //This will be replaced in the future possibly if (!message.member.permissions.has('MANAGE_GUILD')) return message.reply('It looks like that you can\'t manage this server.'); const channel = await message.mentions.channels.first().id; - const cache = {} + const [ guild ] = await guildDB.findOrCreate({ where: { id: message.guild.id } } ) - if (!channel) return message.reply('I cannot find that channel, please specify...'); - - cache[message.guild.id] = channel - - await mongo().then(async (mongoose) => { - try { - await logSchema.findOneAndUpdate( - { - _id: message.guild.id, - }, - { - _id: message.guild.id, - logChannel: channel - }, - { - upsert: true - } - ) - } finally { - await mongoose.connection.close(); - } - }) + if (!channel) { + message.reply('No channel has been set, disabling the logging channel feature...'); + await guild.update({ channelId: null } ); + } else { + await guild.update({ channelId: message.guild.id } ) ; + } await message.reply(`Logging channel has been set to <#${channel}>`); }; @@ -58,6 +41,6 @@ exports.conf = { exports.help = { name: 'setlogchannel', description: 'Set the log channel.', - usage: 'setlogchannel [channel id]', + usage: 'setlogchannel #channel', category: '- Moderation Commands', }; diff --git a/commands/setup.js b/commands/setup.js new file mode 100644 index 0000000..5c2f232 --- /dev/null +++ b/commands/setup.js @@ -0,0 +1,46 @@ +/**************************************** + * + * Setup: Command for AleeBot + * Copyright (C) 2017-2021 Alee Productions + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * *************************************/ + +module.exports.run = async (client, message) => { + if (!['242775871059001344', message.guild.ownerId].includes(message.author.id)) return message.reply(':warning: You must be a server owner or be the creator of the bot to access this command.'); + message.reply('Look at your DMs.'); + //message.reply("This feature is coming soon. Stay tuned!"); + const Discord = require('discord.js'); + const setupEmbed = new Discord.MessageEmbed() + .setTitle('AleeBot Setup', client.user.avatarURL()) + .setDescription('Select the options') + .addField('Chat Logs', 'channelid', true) + .addField('Joining & Leaving Logs', 'placeholder', true) + .addField('Broadcast', 'placeholder', true) + .addField('Broadcast', 'placeholder', true); + + message.author.send({embeds: [setupEmbed]}); +}; + +exports.conf = { + aliases: [], + guildOnly: false, +}; +exports.help = { + name: 'setup', + description: 'Setting up AleeBot.', + usage: 'setup', + category: '- Settings Commands', +}; diff --git a/commands/uptime.js b/commands/uptime.js index 4753f70..7453ad5 100644 --- a/commands/uptime.js +++ b/commands/uptime.js @@ -23,12 +23,17 @@ module.exports.run = async (client, message) => { let uptimeMinutes = Math.floor(uptime / 60); const minutes = uptime % 60; let hours = 0; + let days = 0; while (uptimeMinutes >= 60) { - hours++; - uptimeMinutes = uptimeMinutes - 60; + hours++; + uptimeMinutes = uptimeMinutes - 60; + } + while (hours >= 24) { + days++; + hours = hours - 24; } const uptimeSeconds = minutes % 60; - message.channel.send(':clock3: AleeBot has been up for ' + hours + ' hours, ' + uptimeMinutes + ' minutes, and ' + uptimeSeconds + ' seconds.'); + message.channel.send(`:clock3: AleeBot has been up for ${days} days, ${hours} hours, ${uptimeMinutes} minutes, and ${uptimeSeconds} seconds.`); }; exports.conf = { diff --git a/deprecated/setup.js b/deprecated/setup.js deleted file mode 100644 index a86f850..0000000 --- a/deprecated/setup.js +++ /dev/null @@ -1,45 +0,0 @@ -/**************************************** - * - * Setup: Command for AleeBot - * Copyright (C) 2017-2021 Alee Productions - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * *************************************/ - -module.exports.run = async (client, message) => { - if (!['242775871059001344', message.guild.owner.user.id].includes(message.author.id)) return message.reply(':warning: You must be a server owner or be the creator of the bot to access this command.'); - message.reply('Look at your DMs.'); - //message.reply("This feature is coming soon. Stay tuned!"); - const Discord = require('discord.js'); - const setupEmbed = new Discord.MessageEmbed() - .setTitle('AleeBot Setup', client.user.avatarURL()) - .setDescription('Select the options') - .addField('Logs', 'channelid', true) - // .addField('Chat Logs', 'placeholder', true) - // .addField('Chat Logs', 'placeholder', true); - - message.author.send(setupEmbed); -}; - -exports.conf = { - aliases: [], - guildOnly: false, -}; -exports.help = { - name: 'setup', - description: 'Setting up AleeBot.', - usage: 'setup', - category: '- Settings Commands', -}; \ No newline at end of file diff --git a/models/guild-settings.js b/models/guild-settings.js new file mode 100644 index 0000000..2e4f8ef --- /dev/null +++ b/models/guild-settings.js @@ -0,0 +1,24 @@ +const Sequelize = require("sequelize"); +const sequelize = require('../utils/sequelize'); + +const guildSettings = sequelize.define('guild-settings', { + id: { + type: Sequelize.STRING, + primaryKey: true + }, + logChannelID: { + type: Sequelize.STRING, + allowNull: true + }, + autoRoleToggle: { + type: Sequelize.BOOLEAN, + allowNull: true + }, + autoRoleID: { + type: Sequelize.STRING, + allowNull: true + } + +}) + +module.exports = guildSettings diff --git a/models/quote.js b/models/quote.js new file mode 100644 index 0000000..f31b472 --- /dev/null +++ b/models/quote.js @@ -0,0 +1,29 @@ +const Sequelize = require("sequelize"); +const sequelize = require('../utils/sequelize'); + +const quote = sequelize.define('quotes', { + id: { + type: Sequelize.INTEGER, + autoIncrement: true, + primaryKey: true + }, + author: { + type: Sequelize.STRING, + allowNull: false + }, + authorImage: { + type: Sequelize.STRING, + allowNull: false + }, + quote: { + type: Sequelize.TEXT, + allowNull: false + }, + year: { + type: Sequelize.STRING, + allowNull: false + } + +}) + +module.exports = quote diff --git a/package.json b/package.json index 0e34c8d..91c283c 100644 --- a/package.json +++ b/package.json @@ -9,19 +9,18 @@ }, "repository": { "type": "git", - "url": "git+https://github.com/aleeproductions/AleeBot.git" + "url": "git+https://github.com/Alee14/AleeBot.git" }, - "author": "Alee Productions", + "author": "Andrew Lee", "license": "GPL-3.0", "bugs": { - "url": "https://github.com/aleeproductions/AleeBot/issues" + "url": "https://github.com/Alee14/AleeBot/issues" }, - "homepage": "https://github.com/aleeproductions/AleeBot#readme", + "homepage": "https://github.com/Alee14/AleeBot#readme", "dependencies": { "@top-gg/sdk": "^3.1.2", "blessed": "^0.1.81", "colors": "^1.3.0", - "discord-together": "^1.1.53", "discord.js": "^13.0.1", "eslint": "^7.1.0", "express": "^4.17.1", @@ -34,6 +33,8 @@ "os": "^0.1.1", "parse-ms": "^1.0.1", "readline": "^1.3.0", + "sequelize": "^6.30.0", + "sqlite3": "^5.1.6", "topgg-autoposter": "^2.0.0", "ytdl-core": "^0.20.4" }, diff --git a/plugins/mongo.js b/plugins/mongo.js deleted file mode 100644 index 0102aab..0000000 --- a/plugins/mongo.js +++ /dev/null @@ -1,10 +0,0 @@ -const mongoose = require('mongoose'); -const { mongoPath } = require('../tokens.json'); - -module.exports = async () => { - await mongoose.connect(mongoPath, { - useNewUrlParser: true, - useUnifiedTopology: true, - }); - return mongoose; -} \ No newline at end of file diff --git a/schema/logging-schema.js b/schema/logging-schema.js deleted file mode 100644 index 339c7f7..0000000 --- a/schema/logging-schema.js +++ /dev/null @@ -1,13 +0,0 @@ -const mongoose = require('mongoose') - -const reqString = { - type: String, - required: true -} - -const loggingSchema = mongoose.Schema({ - _id: reqString, - logChannel: reqString -}) - -module.exports = mongoose.model('logging', loggingSchema) \ No newline at end of file diff --git a/schema/quote-schema.js b/schema/quote-schema.js deleted file mode 100644 index d1c7db8..0000000 --- a/schema/quote-schema.js +++ /dev/null @@ -1,17 +0,0 @@ -const mongoose = require('mongoose'); - -const reqString = { - type: String, - required: true -} - -const quoteSchema = mongoose.Schema({ - quoteID: reqString, - author: reqString, - authorImage: reqString, - quote: reqString, - year: reqString - -}) - -module.exports = mongoose.model('quote', quoteSchema) \ No newline at end of file diff --git a/storage/activities.js b/storage/activities.js index 888c848..418a038 100644 --- a/storage/activities.js +++ b/storage/activities.js @@ -10,6 +10,9 @@ const activities = [ 'Breaking Windows 10', 'Beating up big tech', 'Deleting Google', + 'Deleting Apple', + 'Deleting System32', + 'Deleting /usr/bin/', 'Watering down the Apple walled garden', 'Reticulating splines', 'Generating world', @@ -33,15 +36,12 @@ const activities = [ 'FrivoloCo', 'I WANT 2 ORDER', 'I REALLY WANT 2 ORDER', - 'I SAID I WANT 2 ORDER', - 'THANK YOU FOR TAKING SO LONG', - 'I COULD HAVE DONE THAT 67% FASTA', - 'I DO NOT WANT 2 ORDER ANYMORE', 'Monica Is Going To Cosume You', 'BLÅHAJ', 'ShiftOS', 'Histacom', 'Wall Street', + 'Mac OS X Jaguar', 'Abunchoo 12.10', 'MikeOS', 'theBeat', @@ -65,6 +65,7 @@ const activities = [ 'Bluejay', 'Exposing TAS-Corp', 'Fighting Evelyn Claythorne', + 'Frying Dr. Sheridan', 'Hacking SherCorp', 'Games with Tari', 'Decommissioning Meta Runners', @@ -74,6 +75,25 @@ const activities = [ 'Apple Pay', 'Splatoon 3', 'Super Mario 64', + 'Minceraft', + 'Mario Kart 8', + 'bnbmc', + 'Evaluating JavaScript code', + 'Evaluating C# code', + 'Forkbombing FMP', + 'Merging with DLAP', + 'Now asbestos-free!', + 'May contain nuts!', + 'MythOS', + 'Also try Scratch!', + 'Funky!', + 'What is Web3?', + 'GNU\'s NOT UNIX!', + 'Linux, but actually GNU/Linux', + 'Praise RMS!', + 'Praying to St IGNUcius', + 'Debloating my ThinkPad', + 'Goddamn Idiotic Truckload of Windows', `Now running on Discord.JS ${version}!` ]; diff --git a/sync-database.js b/sync-database.js new file mode 100644 index 0000000..2462f29 --- /dev/null +++ b/sync-database.js @@ -0,0 +1,9 @@ +const quoteDB = require("./models/quote"); +const guildDB = require ('./models/guild-settings'); +quoteDB.sync({alter: true}).then(() => { + console.log('Quote database synced!') +}); + +guildDB.sync({alter: true}).then(() => { + console.log('Guild database synced!') +}); diff --git a/utils/sequelize.js b/utils/sequelize.js new file mode 100644 index 0000000..db18d50 --- /dev/null +++ b/utils/sequelize.js @@ -0,0 +1,9 @@ +const Sequelize = require("sequelize"); +const sequelize = new Sequelize('database', 'user', 'password', { + host: 'localhost', + dialect: 'sqlite', + logging: false, + storage: 'database.sqlite', +}); + +module.exports = sequelize; -- cgit v1.2.3 From 0c0155a4d207611fb3d975f9e7e56d04fff63d44 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Sat, 14 Oct 2023 00:16:49 -0400 Subject: Docker; Removed packages; Removed binaryworks refs --- .dockerignore | 2 + Dockerfile | 15 +++++ To be worked on/addquote.js | 132 ++++++++++++++++++++++++++++++++++++++++++++ bot_discord.js | 66 ++++++++++++---------- commands/addquote.js | 61 -------------------- commands/help.js | 5 +- commands/interrogate.js | 4 +- commands/quote.js | 12 ++-- commands/serverinfo.js | 6 +- commands/slowdown.js | 2 +- commands/suggest.js | 6 +- commands/suggestfeature.js | 14 ++--- commands/userinfo.js | 2 +- package.json | 8 +-- storage/activities.js | 4 +- storage/settings.json | 2 +- 16 files changed, 218 insertions(+), 123 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 To be worked on/addquote.js delete mode 100644 commands/addquote.js (limited to 'package.json') diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..5171c54 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +node_modules +npm-debug.log \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1256d22 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,15 @@ +FROM node:alpine + +WORKDIR /usr/src/bot + +COPY package.json ./ + +COPY tokens.json ./ + +COPY yarn.lock ./ + +RUN yarn install + +COPY . . + +CMD ["node", "bot_discord.js"] diff --git a/To be worked on/addquote.js b/To be worked on/addquote.js new file mode 100644 index 0000000..5f2b9bc --- /dev/null +++ b/To be worked on/addquote.js @@ -0,0 +1,132 @@ +/** ************************************** + * + * AddQuote: Command for AleeBot + * Copyright (C) 2017-2021 Alee Productions + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * *************************************/ +const quoteDB = require('../models/quote'); +const { MessageEmbed } = require("discord.js"); +module.exports.run = async (client, message, args) => { + if (!['242775871059001344'].includes(message.author.id)) return message.reply('**This command is disabled due to a new system being implemented.**'); + try { + let newAuthor; + let newAuthorImage; + let newQuote; + let newYear; + + let quoteOriginator; + + let isSetupRunning = false; + + const setupProcess = [ + 'Provide the name of the author.', + 'Submit the image of the author\nYou need to use a picture link that ends in .jpg or .png (like those from IMGUR or Google Images), and the picture should be either 128x128 pixels or 512x512 pixels in size.', + 'Enter the quote', + 'Specify the year from which the quote originates.' + ] + + let setupMessage = "Welcome to the AleeBot Quote Setup!\n" + setupMessage += "Please follow these rules when submitting quotes\n" + setupMessage += "```1. Do not use profanity or offensive language.\n" + setupMessage += "2. Do not send any personal information.\n" + setupMessage += "3. Only send noteworthy quotes.```\n" + setupMessage += "We reserve the right to reject any quotes that do not meet our criteria.\n" + + let counter = 0 + + if (isSetupRunning) { + return await message.reply('You are already setting up the quote.'); + } + const filter = m => m.author.id === message.author.id + + isSetupRunning = true; + await message.reply(':arrow_left: Check your DMs to continue.') + await message.author.send(setupMessage); + await message.author.send(setupProcess[counter++]); + + const collector = message.channel.createMessageCollector({ + filter, + max: setupProcess.length, + time: 1000 * 60 + }); + + collector.on('collect', message => { + console.log(`Collected ${message.content} from ${message.author.tag}`) + if (setupProcess.length > setupProcess.length + 1) { + message.author.send(setupProcess[counter++]); + } + }); + + collector.on('end', collected => { + if (collected.size === 0 && collected.size < 2) { + message.author.send('Quote setup was not completed, rerun the command.') + } else { + let quoteContent = []; + + collected.forEach((message) => { + quoteContent.push(message.content) + }) + + newAuthor = quoteContent[0] + newAuthorImage = quoteContent[1] + newQuote = quoteContent[2] + newYear = quoteContent[3] + + const setupEmbed = new MessageEmbed() + .setAuthor('AleeBot Quote Setup', client.user.avatarURL()) + .setDescription('Are you happy with this quote?\nThis quote will be sent for manual approval') + .addField('Author', newAuthor) + .addField('Author Image (URL)', newAuthorImage) + .addField('Quote', newQuote) + .addField('Year', newYear); + + message.author.send({embeds:[setupEmbed]}) + quoteOriginator = message.author.tag + console.log(`This quote has been originated from ${quoteOriginator}`) + isSetupRunning = false; + } + + }); + + /*await quoteDB.create({ + author: newAuthor, + authorImage: newAuthorImage, + quote: newQuote, + year: newYear, + });*/ + + //let messageReact = await message.author.send({embeds: [setupEmbed]}); + /*await messageReact.react('🧑'); + await messageReact.react('📷'); + await messageReact.react('🖋️'); + await messageReact.react('📅');*/ + + } catch (error) { + console.log(error) + } +}; + +exports.conf = { + aliases: [], + guildOnly: true, +}; +exports.help = { + name: 'addquote', + description: 'Adds a quote to the database.', + usage: 'addquote', + category: '- Quote Commands', +}; + diff --git a/bot_discord.js b/bot_discord.js index 00afe45..b32e018 100644 --- a/bot_discord.js +++ b/bot_discord.js @@ -23,7 +23,7 @@ const client = new Discord.Client({ parse: ['users', 'roles'], repliedUser: true }, - intents: ['GUILDS', 'GUILD_MESSAGES', 'GUILD_MEMBERS'] + intents: ['GUILDS', 'GUILD_MESSAGES', 'GUILD_MEMBERS', 'GUILD_MESSAGE_REACTIONS'] }); const moment = require('moment'); const express = require('express'); @@ -37,12 +37,12 @@ const api = require('./tokens.json'); const { activity } = require('./storage/activities'); const active = new Map(); let autoRole = true; -let readyEmbedMessage = false; +let readyEmbedMessage = true; const ownerID = '242775871059001344'; let logChannel = '318874545593384970'; let statusChannelID = '606602551634296968'; let serverWhitelist = "243022206437687296"; -let roleWhitelist = "657426918416580614" +let roleWhitelist = "657426918416580614"; const log = (message) => { console.log(`[${moment().format('YYYY-MM-DD HH:mm:ss')}] ${message}`.white); @@ -130,23 +130,14 @@ rl.on('line', function(cmd) { } } break; - case 'channels': - if (!args[1]) { - console.log('[!] Please insert the guild\'s ID.'.yellow); - } else { - let guild = client.guilds.get(args[1]); - console.log('[i] These are the channels that this guild have:'.blue); - for ([id, channel, guild] of guild && client.channels) { - console.log(` Channel: #${channel.name} - ID: ${channel.id}`.blue); - } - } - break; case 'leave': if (!args[1]) { console.log('[!] Please insert the guild\'s ID.'.yellow); } else { - let guild = client.guilds.get(args[1]); - guild.leave(); + let guild = client.guilds.cache.get(args[1]); + guild.leave().then(guild => { + console.log(`AleeBot has left ${guild.name}`) + }); } break; case 'broadcast': @@ -155,11 +146,13 @@ rl.on('line', function(cmd) { } else { const broadcast = args.join(' ').slice(48); let guild = null; - guild = client.guilds.get(args[1]); + guild = client.guilds.cache.get(args[1]); let channel = null; - channel = guild.channels.get(args[2]); + channel = guild.channels.cache.get(args[2]); if (channel != null) { - channel.send(broadcast); + channel.send(`**[Broadcast]** ${broadcast}`); + } else { + console.log('[X] Broadcast cannot be blank'.red) } } break; @@ -169,12 +162,17 @@ rl.on('line', function(cmd) { let uptimeMinutes = Math.floor(uptime / 60); const minutes = uptime % 60; let hours = 0; + let days = 0; while (uptimeMinutes >= 60) { hours++; uptimeMinutes = uptimeMinutes - 60; } + while (hours >= 24) { + days++; + hours = hours - 24; + } const uptimeSeconds = minutes % 60; - console.log(`[i] AleeBot has been up for ${hours} hours, ${uptimeMinutes} minutes, and ${uptimeSeconds} seconds.`.blue); + console.log(`[i] AleeBot has been up for ${days} days, ${hours} hours, ${uptimeMinutes} minutes, and ${uptimeSeconds} seconds.`); break; case 'activity': console.log('[i] Generating new activity'.blue); @@ -198,7 +196,6 @@ rl.on('line', function(cmd) { case 'help': let msg = ('AleeBot '+ settings.abVersion +' Console Help\n\n'); msg += ('guilds - Shows all guilds that AleeBot\'s on.\n'); - msg += ('channels - Shows all the channels that the guilds have.\n'); msg += ('leave - Leaves a guild.\n'); msg += ('broadcast - Broadcasts a message to a server.\n'); msg += ('uptime - Shows the uptime for AleeBot.\n'); @@ -239,7 +236,7 @@ client.on('ready', async () => { .setDescription('AleeBot has started') .addField('Version', settings.abVersion, true) .addField('Discord.JS Version', Discord.version, true) - .addField('Prefix', `\`${settings.prefix}\``, true) + .addField('Prefix', `\`${settings.prefix}\``) .setColor('#5cd65c'); let statusChannel = client.channels.cache.get(statusChannelID); if (!statusChannel) return console.error('The status channel does not exist! Skipping.'); @@ -388,12 +385,25 @@ client.on('guildDelete', (guild) => { statusChannel.send({ embeds: [logEmbed]}); }); -/* -AutoPoster(api.dbltoken, client) - .on('posted', () => { - log('[>] Posted stats to Top.gg!'.blue); - }) -*/ +client.on("messageReactionAdd", async (reaction, user) => { + // When a reaction is received, check if the structure is partial + if (reaction.partial) { + // If the message this reaction belongs to was removed, the fetching might result in an API error which should be handled + try { + await reaction.fetch(); + } catch (error) { + console.error('Something went wrong when fetching the message:', error); + // Return as `reaction.message.author` may be undefined/null + return; + } + } + + // Now the message has been cached and is fully available + console.log(`${reaction.message.author}'s message "${reaction.message.content}" gained a reaction!`); + // The reaction is now also fully available and the properties will be reflected accurately: + console.log(`${reaction.count} user(s) have given the same reaction to this message!`); +}); + client.on('messageCreate', async(msg) => { if (!client.application?.owner) await client.application?.fetch(); if (msg.author.bot) return; diff --git a/commands/addquote.js b/commands/addquote.js deleted file mode 100644 index 477d891..0000000 --- a/commands/addquote.js +++ /dev/null @@ -1,61 +0,0 @@ -/** ************************************** - * - * AddQuote: Command for AleeBot - * Copyright (C) 2017-2021 Alee Productions - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * *************************************/ -const quoteDB = require('../models/quote'); -const Discord = require("discord.js"); -module.exports.run = async (client, message, args) => { - if (!['242775871059001344'].includes(message.author.id)) return message.reply('**This command is disabled due to a new system being implemented.**'); - try { - let newAuthor; - let newAuthorImage; - let newQuote; - let newYear; - - const quote = await quoteDB.create({ - author: newAuthor, - authorImage: newAuthorImage, - quote: newQuote, - year: newYear - }) - - const setupEmbed = new Discord.MessageEmbed() - .setTitle('AleeBot Quote Setup', client.user.avatarURL()) - .setDescription('Input the data to the following embed') - .addField('Author', newAuthor, true) - .addField('Author Image (URL)', newAuthorImage, true) - .addField('Quote', newQuote, true) - .addField('Year', newYear, true); - - message.reply({embeds: [setupEmbed]}); - } catch (error) { - console.log(error) - } -}; - -exports.conf = { - aliases: [], - guildOnly: true, -}; -exports.help = { - name: 'addquote', - description: 'Sets the guild prefix.', - usage: 'addquote [author] [authorImage] [quote] [year]', - category: '- Quote Commands', -}; - diff --git a/commands/help.js b/commands/help.js index e925754..0b9191e 100644 --- a/commands/help.js +++ b/commands/help.js @@ -40,8 +40,9 @@ module.exports.run = async (client, message) => { const prefix = prefixes[message.guild.id].prefixes; if (!message.guild.members.cache.get(client.user.id).permissions.has('EMBED_LINKS')) return message.reply('ERROR: AleeBot doesn\'t have the permission to send embed links, please enable them to use the full help.'); const embed = new Discord.MessageEmbed() - .setAuthor('AleeBot ' + require('../storage/settings.json').abVersion + ` Help | Serving in ${client.guilds.cache.size} servers`, client.user.avatarURL()) - .setDescription('[!] Currently on the Alpha-Temp branch. Meaning that experimental features are enabled in this bot...') + .setAuthor('AleeBot ' + require('../storage/settings.json').abVersion + ` Help`, client.user.avatarURL()) + .setDescription('Every command you input into AleeBot is `ab:`') + .setFooter(`Currently serving on ${client.guilds.cache.size} servers`) .setColor('#1fd619') categories.forEach(function(x) { diff --git a/commands/interrogate.js b/commands/interrogate.js index 16a1887..3386352 100644 --- a/commands/interrogate.js +++ b/commands/interrogate.js @@ -18,7 +18,7 @@ * * *************************************/ module.exports.run = async (client, message, args) => { - if (message.guild.id != '243022206437687296') return message.reply('This is a Binaryworks exclusive command.'); + if (message.guild.id !== '243022206437687296') return message.reply('This is a Binaryworks exclusive command.'); if (!message.member.permissions.has('BAN_MEMBERS')) return message.reply('It looks like that you don\'t have the permissions to jail members.'); if (!message.guild.members.cache.get(client.user.id).permissions.has('MANAGE_ROLES')) return message.reply('Uhh... I don\'t have permission to jail members.'); @@ -38,5 +38,5 @@ exports.help = { name: 'interrogate', description: 'Interrogates a member', usage: 'interrogate [user]', - category: '- Binaryworks Exclusive Commands', + category: '- ALP Exclusive Commands', }; diff --git a/commands/quote.js b/commands/quote.js index 81f9142..37f5714 100644 --- a/commands/quote.js +++ b/commands/quote.js @@ -24,23 +24,23 @@ module.exports.run = async (client, message, args) => { if (quoteID === undefined) { const quoteList = await quoteDB.findAll({ attributes: ['id'] }) - quoteID = Math.floor(Math.random() * (quoteList.length - 1)) + 1 + const random = crypto.getRandomValues(new Uint32Array(1)); + quoteID = quoteList[random[0] % quoteList.length].id; } const quote = await quoteDB.findOne({ where: { id: quoteID } }) if (quote) { - const embed = new MessageEmbed() - .setAuthor({ name: quote.author, iconURL: quote.authorImage}) + const quoteEmbed = new MessageEmbed() + .setAuthor({ name: quote.author, iconURL: quote.authorImage }) .setDescription(quote.quote) .setColor('#1fd619') .setFooter('- ' + quote.year); - await message.reply('Alright, here\'s your quote.') - await message.channel.send({embeds:[embed]}); + await message.reply({ content: 'Alright, here\'s your quote.', embeds: [quoteEmbed] }) } else { - message.reply('Cannot find quote'); + message.reply('Cannot find quote, specify the correct quote id.'); } diff --git a/commands/serverinfo.js b/commands/serverinfo.js index 0a2e077..67442a2 100644 --- a/commands/serverinfo.js +++ b/commands/serverinfo.js @@ -20,14 +20,14 @@ module.exports.run = async (client, message) => { const Discord = require('discord.js'); const listedChannels = []; + let guildOwner = await message.guild.fetchOwner(); let memberCountNoBots = await message.guild.members.fetch().then((members) => members.filter(member => !member.user.bot).size); const embed = new Discord.MessageEmbed() .setAuthor(`${message.guild.name}`, `${message.guild.iconURL()}`) .setDescription('Server Information') .setThumbnail(message.guild.iconURL()) - .addField('Server Name:', `${message.guild.name}`) - .addField('Server ID:', `${message.guild.id}`) - .addField('Created At:', `${message.guild.createdAt.toUTCString()}`) + .addField('Main Information', `**Server Name:** ${message.guild.name}\n**Server ID:** ${message.guild.id}\n**Server Owner:** ${guildOwner.user.tag}`) + .addField('Join Dates', `**Created At:** ${message.guild.createdAt.toUTCString()}\n**AleeBot Joined:** ${message.guild.joinedAt.toUTCString()}`) /*message.guild.channels.cacheType.forEach(channel => { listedChannels.push(channel) })*/ diff --git a/commands/slowdown.js b/commands/slowdown.js index 44d8230..55e441b 100644 --- a/commands/slowdown.js +++ b/commands/slowdown.js @@ -21,7 +21,7 @@ module.exports.run = async (client, message, args) => { if (!message.member.permissions.has('MANAGE_CHANNELS')) return message.reply('It looks like that you don\'t have the permissions to slowdown channels.'); if (isNaN(args[0])) return message.reply('Please input a valid number to slowdown a channel.'); await message.channel.setRateLimitPerUser(args[0]); - message.channel.send(`This channel has been slowdowned for ${args[0]} second(s).`); + message.channel.send(`This channel has been slowdown for ${args[0]} second(s).`); }; diff --git a/commands/suggest.js b/commands/suggest.js index 0ca21b8..b503139 100644 --- a/commands/suggest.js +++ b/commands/suggest.js @@ -18,7 +18,7 @@ * * *************************************/ module.exports.run = async (client, message, args) => { - if (message.guild.id != '243022206437687296') return message.reply('This is a Binaryworks exclusive command.'); + if (message.guild.id !== '243022206437687296') return message.reply('This is a Andrew Lee Projects exclusive command.'); const {MessageEmbed} = require('discord.js'); client.channels.cache.get('427495678390960148').send({ embeds: [ new MessageEmbed() @@ -39,7 +39,7 @@ exports.conf = { }; exports.help = { name: 'suggest', - description: 'Suggest a feature in Binaryworks.', + description: 'Suggest a feature in Andrew Lee Projects.', usage: 'suggest [suggestion]', - category: '- Binaryworks Exclusive Commands', + category: '- ALP Exclusive Commands', }; diff --git a/commands/suggestfeature.js b/commands/suggestfeature.js index c7623d2..21b6849 100644 --- a/commands/suggestfeature.js +++ b/commands/suggestfeature.js @@ -1,5 +1,5 @@ /**************************************** - * + * * SuggestFeature: Command for AleeBot * Copyright (C) 2017-2021 Alee Productions * @@ -15,11 +15,11 @@ * * You should have received a copy of the GNU General Public License * along with this program. If not, see . - * + * * *************************************/ module.exports.run = async (client, message, args) => { const { MessageEmbed } = require('discord.js'); - + client.channels.cache.get('427495678390960148').send({ embeds: [ new MessageEmbed() .setColor('#1fd619') @@ -28,10 +28,10 @@ module.exports.run = async (client, message, args) => { .addField('Suggestion Contents', args.join(' ')) .setFooter(`Sending from ${message.guild.name}`, message.guild.iconURL())]} ); - await message.reply('Your suggestion has been shown to the Binaryworks discord server!'); - + await message.reply('Your suggestion has been shown to the Andrew Lee Projects discord server!'); + }; - + exports.conf = { aliases: [], guildOnly: false, @@ -42,4 +42,4 @@ exports.help = { usage: 'suggestfeature [suggestion]', category: '- General Commands', }; - + diff --git a/commands/userinfo.js b/commands/userinfo.js index a812dc4..bc7ec8e 100644 --- a/commands/userinfo.js +++ b/commands/userinfo.js @@ -23,7 +23,7 @@ module.exports.run = async (client, message) => { .setAuthor(message.author.tag, message.author.avatarURL()) .setDescription('User Information') .setThumbnail(message.author.avatarURL()) - .addField('Names', `**Username:** ${message.author.username}\n**Current Nickname:** ${message.member.displayName}`) + .addField('Names', `**Display Name:** ${message.member.displayName}\n**Username:** ${message.author.username}\n**Server Nickname:** ${message.member.displayName}`) .addField('Identity', `**User ID:** ${message.author.id} `) .addField('Create and Join Times', `**Created At:** ${message.member.user.createdAt.toUTCString()}\n**Joined Guild At:** ${message.member.joinedAt.toUTCString()}`) .setColor('#1fd619'); diff --git a/package.json b/package.json index 91c283c..4c23498 100644 --- a/package.json +++ b/package.json @@ -18,25 +18,19 @@ }, "homepage": "https://github.com/Alee14/AleeBot#readme", "dependencies": { - "@top-gg/sdk": "^3.1.2", "blessed": "^0.1.81", "colors": "^1.3.0", "discord.js": "^13.0.1", "eslint": "^7.1.0", "express": "^4.17.1", - "fs": "0.0.1-security", "git-last-commit": "^0.3.0", "i18next": "^19.4.4", "moment": "^2.21.0", - "mongoose": "^5.11.8", - "node-opus": "^0.3.0", "os": "^0.1.1", "parse-ms": "^1.0.1", "readline": "^1.3.0", "sequelize": "^6.30.0", - "sqlite3": "^5.1.6", - "topgg-autoposter": "^2.0.0", - "ytdl-core": "^0.20.4" + "sqlite3": "^5.1.6" }, "devDependencies": { "nodemon": "^2.0.2" diff --git a/storage/activities.js b/storage/activities.js index 418a038..2b2a286 100644 --- a/storage/activities.js +++ b/storage/activities.js @@ -87,12 +87,14 @@ const activities = [ 'MythOS', 'Also try Scratch!', 'Funky!', + 'Apple Vision Pro', 'What is Web3?', 'GNU\'s NOT UNIX!', 'Linux, but actually GNU/Linux', - 'Praise RMS!', + 'Praise RMS! (dont)', 'Praying to St IGNUcius', 'Debloating my ThinkPad', + 'Turbotastic!', 'Goddamn Idiotic Truckload of Windows', `Now running on Discord.JS ${version}!` ]; diff --git a/storage/settings.json b/storage/settings.json index 8f0e530..83932cc 100644 --- a/storage/settings.json +++ b/storage/settings.json @@ -1,4 +1,4 @@ { - "abVersion": "2.13.0 Alpha Temp Branch", + "abVersion": "2.13.0 Beta", "prefix": "abb:" } -- cgit v1.2.3 From abf67e5b9199d25ce664588efb70e4226c199a5a Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Sat, 14 Oct 2023 00:54:36 -0400 Subject: Yarn package; Moved addquote back --- .gitignore | 2 - To be worked on/addquote.js | 132 --- commands/addquote.js | 132 +++ package.json | 2 +- yarn.lock | 2160 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 2293 insertions(+), 135 deletions(-) delete mode 100644 To be worked on/addquote.js create mode 100644 commands/addquote.js create mode 100644 yarn.lock (limited to 'package.json') diff --git a/.gitignore b/.gitignore index bca3965..e773a52 100644 --- a/.gitignore +++ b/.gitignore @@ -14,7 +14,5 @@ ffprobe.exe .vs/slnx.sqlite .vs/slnx.sqlite-journal json.sqlite - -yarn.lock package-lock.json database.sqlite diff --git a/To be worked on/addquote.js b/To be worked on/addquote.js deleted file mode 100644 index 5f2b9bc..0000000 --- a/To be worked on/addquote.js +++ /dev/null @@ -1,132 +0,0 @@ -/** ************************************** - * - * AddQuote: Command for AleeBot - * Copyright (C) 2017-2021 Alee Productions - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * *************************************/ -const quoteDB = require('../models/quote'); -const { MessageEmbed } = require("discord.js"); -module.exports.run = async (client, message, args) => { - if (!['242775871059001344'].includes(message.author.id)) return message.reply('**This command is disabled due to a new system being implemented.**'); - try { - let newAuthor; - let newAuthorImage; - let newQuote; - let newYear; - - let quoteOriginator; - - let isSetupRunning = false; - - const setupProcess = [ - 'Provide the name of the author.', - 'Submit the image of the author\nYou need to use a picture link that ends in .jpg or .png (like those from IMGUR or Google Images), and the picture should be either 128x128 pixels or 512x512 pixels in size.', - 'Enter the quote', - 'Specify the year from which the quote originates.' - ] - - let setupMessage = "Welcome to the AleeBot Quote Setup!\n" - setupMessage += "Please follow these rules when submitting quotes\n" - setupMessage += "```1. Do not use profanity or offensive language.\n" - setupMessage += "2. Do not send any personal information.\n" - setupMessage += "3. Only send noteworthy quotes.```\n" - setupMessage += "We reserve the right to reject any quotes that do not meet our criteria.\n" - - let counter = 0 - - if (isSetupRunning) { - return await message.reply('You are already setting up the quote.'); - } - const filter = m => m.author.id === message.author.id - - isSetupRunning = true; - await message.reply(':arrow_left: Check your DMs to continue.') - await message.author.send(setupMessage); - await message.author.send(setupProcess[counter++]); - - const collector = message.channel.createMessageCollector({ - filter, - max: setupProcess.length, - time: 1000 * 60 - }); - - collector.on('collect', message => { - console.log(`Collected ${message.content} from ${message.author.tag}`) - if (setupProcess.length > setupProcess.length + 1) { - message.author.send(setupProcess[counter++]); - } - }); - - collector.on('end', collected => { - if (collected.size === 0 && collected.size < 2) { - message.author.send('Quote setup was not completed, rerun the command.') - } else { - let quoteContent = []; - - collected.forEach((message) => { - quoteContent.push(message.content) - }) - - newAuthor = quoteContent[0] - newAuthorImage = quoteContent[1] - newQuote = quoteContent[2] - newYear = quoteContent[3] - - const setupEmbed = new MessageEmbed() - .setAuthor('AleeBot Quote Setup', client.user.avatarURL()) - .setDescription('Are you happy with this quote?\nThis quote will be sent for manual approval') - .addField('Author', newAuthor) - .addField('Author Image (URL)', newAuthorImage) - .addField('Quote', newQuote) - .addField('Year', newYear); - - message.author.send({embeds:[setupEmbed]}) - quoteOriginator = message.author.tag - console.log(`This quote has been originated from ${quoteOriginator}`) - isSetupRunning = false; - } - - }); - - /*await quoteDB.create({ - author: newAuthor, - authorImage: newAuthorImage, - quote: newQuote, - year: newYear, - });*/ - - //let messageReact = await message.author.send({embeds: [setupEmbed]}); - /*await messageReact.react('🧑'); - await messageReact.react('📷'); - await messageReact.react('🖋️'); - await messageReact.react('📅');*/ - - } catch (error) { - console.log(error) - } -}; - -exports.conf = { - aliases: [], - guildOnly: true, -}; -exports.help = { - name: 'addquote', - description: 'Adds a quote to the database.', - usage: 'addquote', - category: '- Quote Commands', -}; - diff --git a/commands/addquote.js b/commands/addquote.js new file mode 100644 index 0000000..5f2b9bc --- /dev/null +++ b/commands/addquote.js @@ -0,0 +1,132 @@ +/** ************************************** + * + * AddQuote: Command for AleeBot + * Copyright (C) 2017-2021 Alee Productions + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * *************************************/ +const quoteDB = require('../models/quote'); +const { MessageEmbed } = require("discord.js"); +module.exports.run = async (client, message, args) => { + if (!['242775871059001344'].includes(message.author.id)) return message.reply('**This command is disabled due to a new system being implemented.**'); + try { + let newAuthor; + let newAuthorImage; + let newQuote; + let newYear; + + let quoteOriginator; + + let isSetupRunning = false; + + const setupProcess = [ + 'Provide the name of the author.', + 'Submit the image of the author\nYou need to use a picture link that ends in .jpg or .png (like those from IMGUR or Google Images), and the picture should be either 128x128 pixels or 512x512 pixels in size.', + 'Enter the quote', + 'Specify the year from which the quote originates.' + ] + + let setupMessage = "Welcome to the AleeBot Quote Setup!\n" + setupMessage += "Please follow these rules when submitting quotes\n" + setupMessage += "```1. Do not use profanity or offensive language.\n" + setupMessage += "2. Do not send any personal information.\n" + setupMessage += "3. Only send noteworthy quotes.```\n" + setupMessage += "We reserve the right to reject any quotes that do not meet our criteria.\n" + + let counter = 0 + + if (isSetupRunning) { + return await message.reply('You are already setting up the quote.'); + } + const filter = m => m.author.id === message.author.id + + isSetupRunning = true; + await message.reply(':arrow_left: Check your DMs to continue.') + await message.author.send(setupMessage); + await message.author.send(setupProcess[counter++]); + + const collector = message.channel.createMessageCollector({ + filter, + max: setupProcess.length, + time: 1000 * 60 + }); + + collector.on('collect', message => { + console.log(`Collected ${message.content} from ${message.author.tag}`) + if (setupProcess.length > setupProcess.length + 1) { + message.author.send(setupProcess[counter++]); + } + }); + + collector.on('end', collected => { + if (collected.size === 0 && collected.size < 2) { + message.author.send('Quote setup was not completed, rerun the command.') + } else { + let quoteContent = []; + + collected.forEach((message) => { + quoteContent.push(message.content) + }) + + newAuthor = quoteContent[0] + newAuthorImage = quoteContent[1] + newQuote = quoteContent[2] + newYear = quoteContent[3] + + const setupEmbed = new MessageEmbed() + .setAuthor('AleeBot Quote Setup', client.user.avatarURL()) + .setDescription('Are you happy with this quote?\nThis quote will be sent for manual approval') + .addField('Author', newAuthor) + .addField('Author Image (URL)', newAuthorImage) + .addField('Quote', newQuote) + .addField('Year', newYear); + + message.author.send({embeds:[setupEmbed]}) + quoteOriginator = message.author.tag + console.log(`This quote has been originated from ${quoteOriginator}`) + isSetupRunning = false; + } + + }); + + /*await quoteDB.create({ + author: newAuthor, + authorImage: newAuthorImage, + quote: newQuote, + year: newYear, + });*/ + + //let messageReact = await message.author.send({embeds: [setupEmbed]}); + /*await messageReact.react('🧑'); + await messageReact.react('📷'); + await messageReact.react('🖋️'); + await messageReact.react('📅');*/ + + } catch (error) { + console.log(error) + } +}; + +exports.conf = { + aliases: [], + guildOnly: true, +}; +exports.help = { + name: 'addquote', + description: 'Adds a quote to the database.', + usage: 'addquote', + category: '- Quote Commands', +}; + diff --git a/package.json b/package.json index 4c23498..0c87dd9 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "discord.js": "^13.0.1", "eslint": "^7.1.0", "express": "^4.17.1", - "git-last-commit": "^0.3.0", + "git-last-commit": "^1.0.1", "i18next": "^19.4.4", "moment": "^2.21.0", "os": "^0.1.1", diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..c3885b7 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2160 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/helper-validator-identifier@^7.18.6": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/highlight@^7.10.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/runtime@^7.12.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.0.tgz#22b11c037b094d27a8a2504ea4dcff00f50e2259" + integrity sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA== + dependencies: + regenerator-runtime "^0.13.4" + +"@discordjs/builders@^0.16.0": + version "0.16.0" + resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-0.16.0.tgz#3201f57fa57c4dd77aebb480cf47da77b7ba2e8c" + integrity sha512-9/NCiZrLivgRub2/kBc0Vm5pMBE5AUdYbdXsLu/yg9ANgvnaJ0bZKTY8yYnLbsEc/LYUP79lEIdC73qEYhWq7A== + dependencies: + "@sapphire/shapeshift" "^3.5.1" + discord-api-types "^0.36.2" + fast-deep-equal "^3.1.3" + ts-mixer "^6.0.1" + tslib "^2.4.0" + +"@discordjs/collection@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-0.7.0.tgz#1a6c00198b744ba2b73a64442145da637ac073b8" + integrity sha512-R5i8Wb8kIcBAFEPLLf7LVBQKBDYUL+ekb23sOgpkpyGT+V4P7V83wTxcsqmX+PbqHt4cEHn053uMWfRqh/Z/nA== + +"@eslint/eslintrc@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@gar/promisify@^1.0.1": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + +"@humanwhocodes/config-array@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@mapbox/node-pre-gyp@^1.0.0": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz#8e6735ccebbb1581e5a7e652244cadc8a844d03c" + integrity sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA== + dependencies: + detect-libc "^2.0.0" + https-proxy-agent "^5.0.0" + make-dir "^3.1.0" + node-fetch "^2.6.7" + nopt "^5.0.0" + npmlog "^5.0.1" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.11" + +"@npmcli/fs@^1.0.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== + dependencies: + "@gar/promisify" "^1.0.1" + semver "^7.3.5" + +"@npmcli/move-file@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@sapphire/async-queue@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@sapphire/async-queue/-/async-queue-1.5.0.tgz#2f255a3f186635c4fb5a2381e375d3dfbc5312d8" + integrity sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA== + +"@sapphire/shapeshift@^3.5.1": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@sapphire/shapeshift/-/shapeshift-3.6.0.tgz#988ff6576162a581a29bc26deb5492f7d1bf419f" + integrity sha512-tu2WLRdo5wotHRvsCkspg3qMiP6ETC3Q1dns1Q5V6zKUki+1itq6AbhMwohF9ZcLoYqg+Y8LkgRRtVxxTQVTBQ== + dependencies: + fast-deep-equal "^3.1.3" + lodash.uniqwith "^4.5.0" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@types/debug@^4.1.7": + version "4.1.7" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82" + integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg== + dependencies: + "@types/ms" "*" + +"@types/ms@*": + version "0.7.31" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" + integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== + +"@types/node-fetch@^2.6.2": + version "2.6.2" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.2.tgz#d1a9c5fd049d9415dce61571557104dec3ec81da" + integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== + dependencies: + "@types/node" "*" + form-data "^3.0.0" + +"@types/node@*": + version "18.7.18" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.18.tgz#633184f55c322e4fb08612307c274ee6d5ed3154" + integrity sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg== + +"@types/validator@^13.7.1": + version "13.7.14" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.7.14.tgz#5512aef43ba353ea2fe2d0d8c7ce71c75c2ad9e6" + integrity sha512-J6OAed6rhN6zyqL9Of6ZMamhlsOEU/poBVvbHr/dKOYKTeuYYMlDkMv+b6UUV0o2i0tw73cgyv/97WTWaUl0/g== + +"@types/ws@^8.5.3": + version "8.5.3" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" + integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== + dependencies: + "@types/node" "*" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agentkeepalive@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.3.0.tgz#bb999ff07412653c1803b3ced35e50729830a255" + integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg== + dependencies: + debug "^4.1.0" + depd "^2.0.0" + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.1: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" + integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" + integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +blessed@^0.1.81: + version "0.1.81" + resolved "https://registry.yarnpkg.com/blessed/-/blessed-0.1.81.tgz#f962d687ec2c369570ae71af843256e6d0ca1129" + integrity sha512-LoF5gae+hlmfORcG1M5+5XZi4LBmvlXTzwJWzUlPryN/SJdSflZvROM2TwkT0GMpq7oqT48NRd4GS7BiVBc5OQ== + +body-parser@1.20.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" + integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.10.3" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacache@^15.2.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== + dependencies: + "@npmcli/fs" "^1.0.0" + "@npmcli/move-file" "^1.0.1" + chownr "^2.0.0" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^6.0.0" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + p-map "^4.0.0" + promise-inflight "^1.0.1" + rimraf "^3.0.2" + ssri "^8.0.1" + tar "^6.0.2" + unique-filename "^1.1.1" + +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@^3.5.2: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-support@^1.1.2, color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +colors@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +console-control-strings@^1.0.0, console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.3: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +depd@2.0.0, depd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-libc@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" + integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== + +discord-api-types@^0.33.5: + version "0.33.5" + resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.33.5.tgz#6548b70520f7b944c60984dca4ab58654d664a12" + integrity sha512-dvO5M52v7m7Dy96+XUnzXNsQ/0npsYpU6dL205kAtEDueswoz3aU3bh1UMoK4cQmcGtB1YRyLKqp+DXi05lzFg== + +discord-api-types@^0.36.2: + version "0.36.3" + resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.36.3.tgz#a931b7e57473a5c971d6937fa5f392eb30047579" + integrity sha512-bz/NDyG0KBo/tY14vSkrwQ/n3HKPf87a0WFW/1M9+tXYK+vp5Z5EksawfCWo2zkAc6o7CClc0eff1Pjrqznlwg== + +discord.js@^13.0.1: + version "13.11.0" + resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-13.11.0.tgz#ccfa63e31c0a4281562b79992c1379a215efc3eb" + integrity sha512-/vA6oQtKilFlwVZSIFipPeWg5kU6gjUOffuaYWtDDJwIXKqiThNdymLkmQhnf8Ztlt+3vKsoqXENrgpQdaNCVQ== + dependencies: + "@discordjs/builders" "^0.16.0" + "@discordjs/collection" "^0.7.0" + "@sapphire/async-queue" "^1.5.0" + "@types/node-fetch" "^2.6.2" + "@types/ws" "^8.5.3" + discord-api-types "^0.33.5" + form-data "^4.0.0" + node-fetch "^2.6.7" + ws "^8.8.1" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dottie@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dottie/-/dottie-2.0.3.tgz#797a4f4c92a9a65499806be4051b9d9dcd5a5d77" + integrity sha512-4liA0PuRkZWQFQjwBypdxPfZaRWiv5tkhMXY2hzsa2pNf5s7U3m9cwUchfNKe8wZQxdGPQQzO6Rm2uGe0rvohQ== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encoding@^0.1.12: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint@^7.1.0: + version "7.32.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" + integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.3" + "@humanwhocodes/config-array" "^0.5.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.1.2" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.9" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +express@^4.17.1: + version "4.18.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" + integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.0" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.10.3" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +gauge@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" + integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" + console-control-strings "^1.0.0" + has-unicode "^2.0.1" + object-assign "^4.1.1" + signal-exit "^3.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.2" + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +get-intrinsic@^1.0.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +git-last-commit@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/git-last-commit/-/git-last-commit-1.0.1.tgz#749323f09e8317c2c2878f99eeffff33650c3d57" + integrity sha512-FDSgeMqa7GnJDxt/q0AbrxbfeTyxp4ImxEw1e4nw6NUHA5FMhFUq33dTXI4Xdgcj1VQ1q5QLWF6WxFrJ8KCBOg== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.6.0, globals@^13.9.0: + version "13.17.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" + integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== + dependencies: + type-fest "^0.20.2" + +graceful-fs@^4.2.6: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +http-cache-semantics@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +i18next@^19.4.4: + version "19.9.2" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-19.9.2.tgz#ea5a124416e3c5ab85fddca2c8e3c3669a8da397" + integrity sha512-0i6cuo6ER6usEOtKajUUDj92zlG+KArFia0857xxiEHAQcUwh/RtOQocui1LPJwunSYT574Pk64aNva1kwtxZg== + dependencies: + "@babel/runtime" "^7.12.0" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflection@^1.13.2: + version "1.13.4" + resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.13.4.tgz#65aa696c4e2da6225b148d7a154c449366633a32" + integrity sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== + +lodash.uniqwith@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniqwith/-/lodash.uniqwith-4.5.0.tgz#7a0cbf65f43b5928625a9d4d0dc54b18cadc7ef3" + integrity sha512-7lYL8bLopMoy4CTICbxygAUq6CdRJ36vFc80DucPueUee+d5NBRxz3FdT9Pes/HEx5mPoT9jwnsEJWz1N7uq7Q== + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-fetch-happen@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" + integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== + dependencies: + agentkeepalive "^4.1.3" + cacache "^15.2.0" + http-cache-semantics "^4.1.0" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^6.0.0" + minipass "^3.1.3" + minipass-collect "^1.0.2" + minipass-fetch "^1.3.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.2" + promise-retry "^2.0.1" + socks-proxy-agent "^6.0.0" + ssri "^8.0.0" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" + integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^4.0.0: + version "4.2.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.5.tgz#9e0e5256f1e3513f8c34691dd68549e85b2c8ceb" + integrity sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q== + +minizlib@^2.0.0, minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +moment-timezone@^0.5.35: + version "0.5.42" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.42.tgz#c59f2aa00442d0dcd1d258d2182873d637b4e17b" + integrity sha512-tjI9goqwzkflKSTxJo+jC/W8riTFwEjjunssmFvAWlvNVApjbkJM7UHggyKO0q1Fd/kZVKY77H7C9A0XKhhAFw== + dependencies: + moment "^2.29.4" + +moment@^2.21.0, moment@^2.29.1, moment@^2.29.4: + version "2.29.4" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" + integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.0.0, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@0.6.3, negotiator@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +node-addon-api@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f" + integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== + +node-fetch@^2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-gyp@8.x: + version "8.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" + integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +nodemon@^2.0.2: + version "2.0.20" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.20.tgz#e3537de768a492e8d74da5c5813cb0c7486fc701" + integrity sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw== + dependencies: + chokidar "^3.5.2" + debug "^3.2.7" + ignore-by-default "^1.0.1" + minimatch "^3.1.2" + pstree.remy "^1.1.8" + semver "^5.7.1" + simple-update-notifier "^1.0.7" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.5" + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== + dependencies: + abbrev "1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npmlog@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + +npmlog@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +os@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/os/-/os-0.1.2.tgz#f29a50c62908516ba42652de42f7038600cadbc2" + integrity sha512-ZoXJkvAnljwvc56MbvhtKVWmSkzV712k42Is2mA0+0KTSRakq5XXuXpjZjgAt9ctzl51ojhQWakQQpmOvXWfjQ== + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-ms@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-1.0.1.tgz#56346d4749d78f23430ca0c713850aef91aa361d" + integrity sha512-LpH1Cf5EYuVjkBvCDBYvkUPh+iv2bk3FHflxHkpCYT0/FZ1d3N3uJaLiHr4yGuMcFUhv6eAivitTvWZI4B/chg== + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +pg-connection-string@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.5.0.tgz#538cadd0f7e603fc09a12590f3b8a452c2c0cf34" + integrity sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +pstree.remy@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@6.10.3: + version "6.10.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" + integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== + dependencies: + side-channel "^1.0.4" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +readline@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/readline/-/readline-1.3.0.tgz#c580d77ef2cfc8752b132498060dc9793a7ac01c" + integrity sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg== + +regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +regexpp@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +retry-as-promised@^7.0.3: + version "7.0.4" + resolved "https://registry.yarnpkg.com/retry-as-promised/-/retry-as-promised-7.0.4.tgz#9df73adaeea08cb2948b9d34990549dc13d800a2" + integrity sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +safe-buffer@5.2.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +semver@^5.7.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.2.1: + version "7.3.7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +semver@^7.3.5: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +semver@~7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +sequelize-pool@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/sequelize-pool/-/sequelize-pool-7.1.0.tgz#210b391af4002762f823188fd6ecfc7413020768" + integrity sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg== + +sequelize@^6.30.0: + version "6.30.0" + resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.30.0.tgz#e084cbf8d07b1bb6236d931375982e7f43ee44e9" + integrity sha512-VxQ3gB+isefL8Ic3GDUR6Y8Zwu1ctWNUlffcdSClsLkQ0mwgoLQv3cI3cDwSVn9wZJk0AEwMSm1TYFFRqmcR0A== + dependencies: + "@types/debug" "^4.1.7" + "@types/validator" "^13.7.1" + debug "^4.3.3" + dottie "^2.0.2" + inflection "^1.13.2" + lodash "^4.17.21" + moment "^2.29.1" + moment-timezone "^0.5.35" + pg-connection-string "^2.5.0" + retry-as-promised "^7.0.3" + semver "^7.3.5" + sequelize-pool "^7.1.0" + toposort-class "^1.0.1" + uuid "^8.3.2" + validator "^13.7.0" + wkx "^0.5.0" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.0, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +simple-update-notifier@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz#7edf75c5bdd04f88828d632f762b2bc32996a9cc" + integrity sha512-BBKgR84BJQJm6WjWFMHgLVuo61FBDSj1z/xSFUIozqO6wO7ii0JxCqlIud7Enr/+LhlbNI0whErq96P2qHNWew== + dependencies: + semver "~7.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" + integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks@^2.6.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +sqlite3@^5.1.6: + version "5.1.6" + resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.1.6.tgz#1d4fbc90fe4fbd51e952e0a90fd8f6c2b9098e97" + integrity sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw== + dependencies: + "@mapbox/node-pre-gyp" "^1.0.0" + node-addon-api "^4.2.0" + tar "^6.1.11" + optionalDependencies: + node-gyp "8.x" + +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^5.3.0, supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +table@^6.0.9: + version "6.8.0" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" + integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: + version "6.1.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b" + integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^4.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +toposort-class@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toposort-class/-/toposort-class-1.0.1.tgz#7ffd1f78c8be28c3ba45cd4e1a3f5ee193bd9988" + integrity sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg== + +touch@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== + dependencies: + nopt "~1.0.10" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +ts-mixer@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ts-mixer/-/ts-mixer-6.0.1.tgz#7c2627fb98047eb5f3c7f2fee39d1521d18fe87a" + integrity sha512-hvE+ZYXuINrx6Ei6D6hz+PTim0Uf++dYbK9FFifLNwQj+RwKquhQpn868yZsCtJYiclZF1u8l6WZxxKi+vv7Rg== + +tslib@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +undefsafe@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" + integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +validator@^13.7.0: + version "13.9.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.9.0.tgz#33e7b85b604f3bbce9bb1a05d5c3e22e1c2ff855" + integrity sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.2, wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +wkx@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/wkx/-/wkx-0.5.0.tgz#c6c37019acf40e517cc6b94657a25a3d4aa33e8c" + integrity sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg== + dependencies: + "@types/node" "*" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@^8.8.1: + version "8.8.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" + integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -- cgit v1.2.3 From ec2cebf5110c2e61b9debebebd9cd574175e1765 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Sat, 14 Oct 2023 02:04:49 -0400 Subject: Merged git command into about (rip old command); Ignored .git on docker --- .dockerignore | 3 ++- commands/about.js | 15 ++++++++++----- commands/git.js | 50 -------------------------------------------------- package.json | 1 - yarn.lock | 5 ----- 5 files changed, 12 insertions(+), 62 deletions(-) delete mode 100644 commands/git.js (limited to 'package.json') diff --git a/.dockerignore b/.dockerignore index 5171c54..3bfcb92 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,2 +1,3 @@ node_modules -npm-debug.log \ No newline at end of file +npm-debug.log +.git diff --git a/commands/about.js b/commands/about.js index be1c17d..7272b6a 100644 --- a/commands/about.js +++ b/commands/about.js @@ -17,6 +17,7 @@ * along with this program. If not, see . * * *************************************/ +const {MessageButton} = require("discord.js"); module.exports.run = async (client, message) => { const { MessageEmbed, MessageButton, MessageActionRow } = require('discord.js'); @@ -31,20 +32,24 @@ module.exports.run = async (client, message) => { .addField('Contributors', Contributors) .setFooter('© Copyright 2017-2023 Andrew Lee Projects') .setColor('#1fd619'); - - let inviteButton = new MessageActionRow() + + let Buttons = new MessageActionRow() .addComponents( + new MessageButton() + .setStyle('LINK') + .setLabel('Source Code') + .setURL('https://github.com/alee14-projects/AleeBot'), new MessageButton() .setStyle('LINK') .setLabel('Invite AleeBot') - .setURL('https://top.gg/bot/282547024547545109'), + .setURL('https://discord.com/oauth2/authorize?client_id=282547024547545109&permissions=68185158&scope=bot'), new MessageButton() .setStyle('LINK') - .setLabel('Join Andrew Lee Projects') + .setLabel('Join Andrew Lee Projects') .setURL('https://discord.gg/EFhRDqG') ); - await message.channel.send({embeds: [aboutEmbed], components: [inviteButton]}); + await message.channel.send({embeds: [aboutEmbed], components: [Buttons]}); }; exports.conf = { diff --git a/commands/git.js b/commands/git.js deleted file mode 100644 index e4912e1..0000000 --- a/commands/git.js +++ /dev/null @@ -1,50 +0,0 @@ -/** ************************************** - * - * Git: Command for AleeBot - * Copyright (C) 2017-2021 Alee Productions - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * *************************************/ -module.exports.run = async (client, message) => { - const { MessageEmbed, MessageButton, MessageActionRow } = require('discord.js'); - const git = require('git-last-commit'); - git.getLastCommit(function(err, commit) { - const gitInfo = new MessageEmbed() - .setTitle('Git Information') - .addField('**Last Commit:**', commit.subject) - .addField('**Commited By:**', commit.author.name) - .setColor('#1fd619'); - - let sourceCode = new MessageActionRow() - .addComponents( - new MessageButton() - .setStyle('LINK') - .setLabel('Source Code') - .setURL('https://github.com/alee14-projects/AleeBot') - ); - message.channel.send({embeds: [gitInfo], components: [sourceCode]}); - }); -}; - -exports.conf = { - aliases: [], - guildOnly: false, -}; -exports.help = { - name: 'git', - description: 'Get the git info.', - usage: 'git', - category: '- General Commands', -}; diff --git a/package.json b/package.json index 0c87dd9..9a4f3c0 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,6 @@ "discord.js": "^13.0.1", "eslint": "^7.1.0", "express": "^4.17.1", - "git-last-commit": "^1.0.1", "i18next": "^19.4.4", "moment": "^2.21.0", "os": "^0.1.1", diff --git a/yarn.lock b/yarn.lock index c3885b7..e110dc7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -968,11 +968,6 @@ get-intrinsic@^1.0.2: has "^1.0.3" has-symbols "^1.0.3" -git-last-commit@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/git-last-commit/-/git-last-commit-1.0.1.tgz#749323f09e8317c2c2878f99eeffff33650c3d57" - integrity sha512-FDSgeMqa7GnJDxt/q0AbrxbfeTyxp4ImxEw1e4nw6NUHA5FMhFUq33dTXI4Xdgcj1VQ1q5QLWF6WxFrJ8KCBOg== - glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" -- cgit v1.2.3 From 83dcca0a0279ce6415a3e9d153c13d91284369b0 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Sat, 14 Oct 2023 10:38:46 -0400 Subject: Removed tokens.json now using environment vars; Modified dockerfile --- .dockerignore | 2 ++ .gitignore | 1 + Dockerfile | 2 -- bot_discord.js | 10 +++++----- commands/info.js | 2 -- package.json | 1 + yarn.lock | 5 +++++ 7 files changed, 14 insertions(+), 9 deletions(-) (limited to 'package.json') diff --git a/.dockerignore b/.dockerignore index 3bfcb92..550aa8a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1,5 @@ node_modules npm-debug.log .git +.env +database.sqlite diff --git a/.gitignore b/.gitignore index e773a52..541fcd0 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ ffprobe.exe json.sqlite package-lock.json database.sqlite +.env diff --git a/Dockerfile b/Dockerfile index 1256d22..f962f11 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,8 +4,6 @@ WORKDIR /usr/src/bot COPY package.json ./ -COPY tokens.json ./ - COPY yarn.lock ./ RUN yarn install diff --git a/bot_discord.js b/bot_discord.js index 0c09bfb..df2264f 100644 --- a/bot_discord.js +++ b/bot_discord.js @@ -17,6 +17,7 @@ * along with this program. If not, see . * * *************************************/ +require('dotenv').config() const Discord = require('discord.js'); const client = new Discord.Client({ allowedMentions: { @@ -33,7 +34,6 @@ const colors = require('colors'); //const i18next = require('i18next'); const web = express(); const settings = require('./storage/settings.json'); -const api = require('./tokens.json'); const { activity } = require('./storage/activities'); const active = new Map(); let autoRole = true; @@ -83,12 +83,12 @@ if (process.argv.indexOf('--debug') === -1) { } if (process.argv.indexOf('--beta') === -1) { - client.login(api.abtoken).catch(function() { + client.login(process.env.abtoken).catch(function() { console.log('[X] Login failed. The token that you put in is invalid, please put in a new one...'.red); process.exit(0); }); } else { - client.login(api.abbtoken).catch(function() { + client.login(process.env.abbtoken).catch(function() { console.log('[X] Login failed. The token that you put in is invalid, please put in a new one...'.red); process.exit(0); }); @@ -223,8 +223,8 @@ client.on('ready', async () => { res.send("Hello World! This is going to become the AleeBot dashboard..."); }); - web.listen(api.port, () => { - console.log(`Listening at https://localhost:${api.port}`) + web.listen(process.env.port, () => { + console.log(`Listening at https://localhost:${process.env.port}`) }) setInterval(function() { diff --git a/commands/info.js b/commands/info.js index 95eaebb..a74d73e 100644 --- a/commands/info.js +++ b/commands/info.js @@ -20,7 +20,6 @@ module.exports.run = async (client, message) => { const { MessageEmbed, version } = require('discord.js'); const os = require('os'); - const mongoose = require('mongoose'); const embed = new MessageEmbed() .setTitle('Information on AleeBot\'s Host') .addField('OS Hostname: ', os.hostname(), true) @@ -28,7 +27,6 @@ module.exports.run = async (client, message) => { .addField('Discord.JS Version: ', version, true) .addField('OS Platform: ', os.platform(), true) .addField('OS Version: ', os.release(), true) - .addField('Mongoose Version:', mongoose.version, true) .setColor('#1fd619'); await message.channel.send({ embeds: [embed] }); }; diff --git a/package.json b/package.json index 9a4f3c0..6e07caa 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "blessed": "^0.1.81", "colors": "^1.3.0", "discord.js": "^13.0.1", + "dotenv": "^16.3.1", "eslint": "^7.1.0", "express": "^4.17.1", "i18next": "^19.4.4", diff --git a/yarn.lock b/yarn.lock index e110dc7..5942f18 100644 --- a/yarn.lock +++ b/yarn.lock @@ -605,6 +605,11 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dotenv@^16.3.1: + version "16.3.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" + integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== + dottie@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/dottie/-/dottie-2.0.3.tgz#797a4f4c92a9a65499806be4051b9d9dcd5a5d77" -- cgit v1.2.3 From f5de90ba89146008af78c16e798e216efccf0c50 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Sat, 11 Jan 2025 11:55:18 -0500 Subject: Ability to add quotes, web interface, pending quotes --- api/server.js | 78 +++++++++++++++++ bot_discord.js | 30 +++---- commands/about.js | 3 +- commands/addquote.js | 198 +++++++++++++++++++++++++++--------------- commands/quote.js | 4 +- commands/setup.js | 6 +- deprecated/balance.js | 50 ----------- deprecated/buy.js | 114 ------------------------ deprecated/daily.js | 56 ------------ deprecated/pay.js | 60 ------------- models/quote.js | 27 +++++- package.json | 1 + storage/activities.js | 2 - storage/settings.json | 2 +- sync-database.js | 8 +- web/.gitignore | 24 +++++ web/.vscode/extensions.json | 4 + web/.vscode/launch.json | 11 +++ web/astro.config.mjs | 9 ++ web/bun.lockb | Bin 0 -> 172416 bytes web/package.json | 19 ++++ web/public/favicon.svg | 9 ++ web/src/components/Quotes.jsx | 86 ++++++++++++++++++ web/src/layouts/Layout.astro | 22 +++++ web/src/pages/index.astro | 29 +++++++ web/src/styles/Quote.css | 33 +++++++ web/tsconfig.json | 14 +++ yarn.lock | 12 ++- 28 files changed, 528 insertions(+), 383 deletions(-) create mode 100644 api/server.js delete mode 100644 deprecated/balance.js delete mode 100644 deprecated/buy.js delete mode 100644 deprecated/daily.js delete mode 100644 deprecated/pay.js create mode 100644 web/.gitignore create mode 100644 web/.vscode/extensions.json create mode 100644 web/.vscode/launch.json create mode 100644 web/astro.config.mjs create mode 100644 web/bun.lockb create mode 100644 web/package.json create mode 100644 web/public/favicon.svg create mode 100644 web/src/components/Quotes.jsx create mode 100644 web/src/layouts/Layout.astro create mode 100644 web/src/pages/index.astro create mode 100644 web/src/styles/Quote.css create mode 100644 web/tsconfig.json (limited to 'package.json') diff --git a/api/server.js b/api/server.js new file mode 100644 index 0000000..a918308 --- /dev/null +++ b/api/server.js @@ -0,0 +1,78 @@ +const express = require('express'); +const cors = require('cors'); +const { pendingQuote, quote: approvedQuote } = require('../models/quote.js'); + +const app = express(); +const PORT = 3000; + +const createServer = () => { + app.use(cors()); // Allow cross-origin requests + app.use(express.json()); + + // Endpoint to get all pending quotes + app.get('/api/pending-quotes', async (req, res) => { + try { + const quotes = await pendingQuote.findAll(); + res.json(quotes); + } catch (error) { + console.error('Error fetching quotes:', error); + res.status(500).send('Internal Server Error'); + } + }); + + app.post('/api/approve-quote', async (req, res) => { + const { id } = req.body; + try { + const quote = await pendingQuote.findByPk(id); + if (quote) { + await approvedQuote.create({ + author: quote.author, + quote: quote.quote, + year: quote.year, + authorImage: quote.authorImage + }); + await pendingQuote.destroy({ where: { id } }); + res.status(200).send('Quote approved'); + } else { + res.status(404).send('Quote not found'); + } + } catch (error) { + console.error('Error approving quote:', error); + res.status(500).send('Internal Server Error'); + } + }); + + app.post('/api/reject-quote', async (req, res) => { + const { id } = req.body; + try { + const quote = await pendingQuote.findByPk(id); + if (quote) { + await pendingQuote.destroy({ where: { id } }); + res.status(200).send('Quote rejected'); + } else { + res.status(404).send('Quote not found'); + } + } catch (error) { + console.error('Error rejecting quote:', error); + res.status(500).send('Internal Server Error'); + } + }); + + app.get('/api/version', (req, res) => { + const { abVersion } = require('../storage/settings.json'); + res.json(abVersion); + + }); + + app.get('/' , (req, res) => { + res.send('API for AleeBot'); + // Most likely going to redirect to the frontend + }); + + // Start the server + app.listen(PORT, () => { + console.log(`Server is running on http://localhost:${PORT}`); + }); +}; + +module.exports = createServer; diff --git a/bot_discord.js b/bot_discord.js index df2264f..8bfa7da 100644 --- a/bot_discord.js +++ b/bot_discord.js @@ -1,7 +1,7 @@ /** ************************************** * * AleeBot: Made for discord servers - * Copyright (C) 2017-2022 Andrew Lee Projects + * Copyright (C) 2017-2025 Andrew Lee Projects * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,17 +24,16 @@ const client = new Discord.Client({ parse: ['users', 'roles'], repliedUser: true }, - intents: ['GUILDS', 'GUILD_MESSAGES', 'GUILD_MEMBERS', 'GUILD_MESSAGE_REACTIONS'] + intents: ['GUILDS', 'GUILD_MESSAGES', 'GUILD_MEMBERS', 'GUILD_MESSAGE_REACTIONS', 'DIRECT_MESSAGES', 'DIRECT_MESSAGE_REACTIONS'] }); const moment = require('moment'); -const express = require('express'); const fs = require('fs'); const readline = require('readline'); const colors = require('colors'); //const i18next = require('i18next'); -const web = express(); const settings = require('./storage/settings.json'); const { activity } = require('./storage/activities'); +const createServer = require("./api/server"); const active = new Map(); let autoRole = true; let readyEmbedMessage = true; @@ -50,11 +49,11 @@ const log = (message) => { function botPresence() { client.user.setPresence({ - activities: [{ - name: activity[Math.floor(Math.random() * activity.length)] - }], - status: 'online', - afk: false, + activities: [{ + name: activity[Math.floor(Math.random() * activity.length)] + }], + status: 'online', + afk: false, }); log(`[>] Updated bot presence to "${client.user.presence.activities[0].name}"`.green); } @@ -65,7 +64,7 @@ const rl = readline.createInterface({ prompt: '> '.gray, }); -console.log(`AleeBot ${settings.abVersion}: Copyright (C) 2017-2023 Andrew Lee Projects`.gray); +console.log(`AleeBot ${settings.abVersion}: Copyright (C) 2017-2025 Andrew Lee Projects`.gray); console.log('This program comes with ABSOLUTELY NO WARRANTY; for details type `show w\'.'.gray); console.log('This is free software, and you are welcome to redistribute it'.gray); console.log('under certain conditions; type `show c\' for details.\n'.gray); @@ -219,13 +218,7 @@ client.on('ready', async () => { botPresence(); - web.get('/', (req, res) => { - res.send("Hello World! This is going to become the AleeBot dashboard..."); - }); - - web.listen(process.env.port, () => { - console.log(`Listening at https://localhost:${process.env.port}`) - }) + createServer(); setInterval(function() { botPresence(); @@ -286,7 +279,7 @@ client.on('guildMemberRemove', (member) => { client.on('messageUpdate', async (oldMessage, newMessage) => { - if (oldMessage.guild.id !== serverWhitelist) return; + if (!oldMessage.guild || oldMessage.guild.id !== serverWhitelist) return; if (oldMessage.content === newMessage.content) { return; } @@ -407,6 +400,7 @@ client.on("messageReactionAdd", async (reaction, user) => { client.on('messageCreate', async(msg) => { if (!client.application?.owner) await client.application?.fetch(); if (msg.author.bot) return; + if (!msg.guild) return; const prefixes = JSON.parse(fs.readFileSync('./storage/prefixes.json', 'utf8')); diff --git a/commands/about.js b/commands/about.js index 7272b6a..0ae756d 100644 --- a/commands/about.js +++ b/commands/about.js @@ -17,7 +17,6 @@ * along with this program. If not, see . * * *************************************/ -const {MessageButton} = require("discord.js"); module.exports.run = async (client, message) => { const { MessageEmbed, MessageButton, MessageActionRow } = require('discord.js'); @@ -30,7 +29,7 @@ module.exports.run = async (client, message) => { .addField('About AleeBot', 'AleeBot is an all-in-one bot that\'s made from the Discord.JS API!') .addField('License', 'GNU General Public License v3.0') .addField('Contributors', Contributors) - .setFooter('© Copyright 2017-2023 Andrew Lee Projects') + .setFooter('© Copyright 2017-2025 Andrew Lee Projects') .setColor('#1fd619'); let Buttons = new MessageActionRow() diff --git a/commands/addquote.js b/commands/addquote.js index 5f2b9bc..52f7b21 100644 --- a/commands/addquote.js +++ b/commands/addquote.js @@ -17,105 +17,164 @@ * along with this program. If not, see . * * *************************************/ -const quoteDB = require('../models/quote'); +const { pendingQuote } = require('../models/quote'); const { MessageEmbed } = require("discord.js"); -module.exports.run = async (client, message, args) => { - if (!['242775871059001344'].includes(message.author.id)) return message.reply('**This command is disabled due to a new system being implemented.**'); - try { - let newAuthor; - let newAuthorImage; - let newQuote; - let newYear; - - let quoteOriginator; +module.exports.run = async (client, message) => { + try { + let newAuthor, newAuthorImage, newQuote, newYear; let isSetupRunning = false; const setupProcess = [ - 'Provide the name of the author.', - 'Submit the image of the author\nYou need to use a picture link that ends in .jpg or .png (like those from IMGUR or Google Images), and the picture should be either 128x128 pixels or 512x512 pixels in size.', - 'Enter the quote', - 'Specify the year from which the quote originates.' - ] - - let setupMessage = "Welcome to the AleeBot Quote Setup!\n" - setupMessage += "Please follow these rules when submitting quotes\n" - setupMessage += "```1. Do not use profanity or offensive language.\n" - setupMessage += "2. Do not send any personal information.\n" - setupMessage += "3. Only send noteworthy quotes.```\n" - setupMessage += "We reserve the right to reject any quotes that do not meet our criteria.\n" + 'Provide the name of the author:', + 'Submit the image of the author:\nYou need to use a picture link that ends in .jpg or .png (like those from IMGUR or Google Images), and the picture should be either 128x128 pixels or 512x512 pixels in size.', + 'Enter the quote:', + 'Specify the year from which the quote originates:' + ]; + + async function createQuote() { + await pendingQuote.create({ + author: newAuthor, + authorImage: newAuthorImage, + quote: newQuote, + year: newYear, + }); + } - let counter = 0 + let setupMessage = "Welcome to the AleeBot Quote Setup!\n"; + setupMessage += "Please follow these rules when submitting quotes:\n"; + setupMessage += "```1. Do not use profanity or offensive language.\n"; + setupMessage += "2. Do not send any personal information.\n"; + setupMessage += "3. Only send noteworthy quotes.```\n"; + setupMessage += "We reserve the right to reject any quotes that do not meet our criteria.\n"; if (isSetupRunning) { - return await message.reply('You are already setting up the quote.'); + return await message.reply('You are already setting up a quote.'); } - const filter = m => m.author.id === message.author.id + + const filter = (m) => m.author.id === message.author.id; isSetupRunning = true; - await message.reply(':arrow_left: Check your DMs to continue.') - await message.author.send(setupMessage); - await message.author.send(setupProcess[counter++]); + await message.reply(':arrow_left: Check DMs to continue.'); + + const dmChannel = await message.author.createDM(); + await dmChannel.send(setupMessage); + await dmChannel.send(setupProcess[0]); - const collector = message.channel.createMessageCollector({ + let counter = 1; + const collector = dmChannel.createMessageCollector({ filter, max: setupProcess.length, - time: 1000 * 60 + time: 1000 * 120 }); - collector.on('collect', message => { - console.log(`Collected ${message.content} from ${message.author.tag}`) - if (setupProcess.length > setupProcess.length + 1) { - message.author.send(setupProcess[counter++]); + collector.on('collect', async () => { + if (counter < setupProcess.length) { + await dmChannel.send(setupProcess[counter++]); } }); - collector.on('end', collected => { - if (collected.size === 0 && collected.size < 2) { - message.author.send('Quote setup was not completed, rerun the command.') + collector.on('end', async (collected) => { + if (collected.size < setupProcess.length) { + dmChannel.send('Quote setup was not completed. Please rerun the command.'); } else { - let quoteContent = []; - - collected.forEach((message) => { - quoteContent.push(message.content) - }) - - newAuthor = quoteContent[0] - newAuthorImage = quoteContent[1] - newQuote = quoteContent[2] - newYear = quoteContent[3] + const quoteContent = collected.map((m) => m.content); + newAuthor = quoteContent[0]; + newAuthorImage = quoteContent[1]; + newQuote = quoteContent[2]; + newYear = quoteContent[3]; const setupEmbed = new MessageEmbed() .setAuthor('AleeBot Quote Setup', client.user.avatarURL()) - .setDescription('Are you happy with this quote?\nThis quote will be sent for manual approval') + .setDescription('Are you happy with this quote?\nThis quote will be sent for manual approval automatically in 2 minutes.') .addField('Author', newAuthor) .addField('Author Image (URL)', newAuthorImage) .addField('Quote', newQuote) - .addField('Year', newYear); + .addField('Year', newYear) + .setColor('#1fd619'); + + let messageReact = await dmChannel.send({embeds: [setupEmbed]}); + await messageReact.react('🧑'); + await messageReact.react('📷'); + await messageReact.react('🖋️'); + await messageReact.react('📅'); + await messageReact.react('✅'); + await messageReact.react('❌'); + + const reactionFilter = (reaction, user) => { + return ['🧑', '📷', '🖋️', '📅', '✅', '❌'].includes(reaction.emoji.name) && user.id === message.author.id; + }; + + const reactionCollector = messageReact.createReactionCollector({ + filter: reactionFilter, + time: 1000 * 120 + }); + + reactionCollector.on('collect', async (reaction) => { + switch (reaction.emoji.name) { + case '🧑': + await dmChannel.send('You selected the author. Please provide the name of the author.'); + const authorResponse = await dmChannel.awaitMessages({ filter, max: 1, time: 60000 }); + if (authorResponse.size) newAuthor = authorResponse.first().content; + await dmChannel.send('Updated author name.'); + break; + case '📷': + await dmChannel.send('You selected the author image. Please provide the image URL.'); + const imageResponse = await dmChannel.awaitMessages({ filter, max: 1, time: 60000 }); + if (imageResponse.size) newAuthorImage = imageResponse.first().content; + await dmChannel.send('Updated author URL.'); + break; + case '🖋️': + await dmChannel.send('You selected the quote. Please provide the quote.'); + const quoteResponse = await dmChannel.awaitMessages({ filter, max: 1, time: 60000 }); + if (quoteResponse.size) newQuote = quoteResponse.first().content; + await dmChannel.send('Updated quote.'); + break; + case '📅': + await dmChannel.send('You selected the year. Please provide the year.'); + const yearResponse = await dmChannel.awaitMessages({ filter, max: 1, time: 60000 }); + if (yearResponse.size) newYear = yearResponse.first().content; + await dmChannel.send('Updated year.'); + break; + case '✅': + reactionCollector.stop('completed'); + break; + case '❌': + reactionCollector.stop('cancelled'); + break; + } + + const updatedEmbed = new MessageEmbed() + .setAuthor('AleeBot Quote Setup', client.user.avatarURL()) + .setDescription('Are you happy with this quote?\nThis quote will be sent for manual approval automatically in 2 minutes.') + .addField('Author', newAuthor) + .addField('Author Image (URL)', newAuthorImage) + .addField('Quote', newQuote) + .addField('Year', newYear) + .setColor('#1fd619'); + + await messageReact.edit({embeds: [updatedEmbed]}); + }); + + reactionCollector.on('end', async (collected, reason) => { + if (reason === 'cancelled') { + isSetupRunning = false; + dmChannel.send('Cancelling quote setup.'); + } else if (reason === 'completed') { + dmChannel.send('Sending this quote for manual approval.'); + isSetupRunning = false; + await createQuote(); + } else { + dmChannel.send('You have not responded. Sending this quote for manual approval.'); + isSetupRunning = false; + await createQuote(); + } + }); - message.author.send({embeds:[setupEmbed]}) - quoteOriginator = message.author.tag - console.log(`This quote has been originated from ${quoteOriginator}`) - isSetupRunning = false; } - }); - - /*await quoteDB.create({ - author: newAuthor, - authorImage: newAuthorImage, - quote: newQuote, - year: newYear, - });*/ - - //let messageReact = await message.author.send({embeds: [setupEmbed]}); - /*await messageReact.react('🧑'); - await messageReact.react('📷'); - await messageReact.react('🖋️'); - await messageReact.react('📅');*/ - } catch (error) { - console.log(error) + console.error(error); } }; @@ -123,6 +182,7 @@ exports.conf = { aliases: [], guildOnly: true, }; + exports.help = { name: 'addquote', description: 'Adds a quote to the database.', diff --git a/commands/quote.js b/commands/quote.js index 37f5714..02699cd 100644 --- a/commands/quote.js +++ b/commands/quote.js @@ -18,7 +18,7 @@ * * *************************************/ module.exports.run = async (client, message, args) => { - const quoteDB = require('../models/quote'); + const { quote: quoteDB } = require('../models/quote'); const { MessageEmbed } = require('discord.js'); let quoteID = args[0]; @@ -38,7 +38,7 @@ module.exports.run = async (client, message, args) => { .setColor('#1fd619') .setFooter('- ' + quote.year); - await message.reply({ content: 'Alright, here\'s your quote.', embeds: [quoteEmbed] }) + await message.reply({ embeds: [quoteEmbed] }) } else { message.reply('Cannot find quote, specify the correct quote id.'); } diff --git a/commands/setup.js b/commands/setup.js index 5c2f232..380e85e 100644 --- a/commands/setup.js +++ b/commands/setup.js @@ -20,14 +20,12 @@ module.exports.run = async (client, message) => { if (!['242775871059001344', message.guild.ownerId].includes(message.author.id)) return message.reply(':warning: You must be a server owner or be the creator of the bot to access this command.'); - message.reply('Look at your DMs.'); - //message.reply("This feature is coming soon. Stay tuned!"); + message.reply(':arrow_left: Check DMs to continue.'); const Discord = require('discord.js'); const setupEmbed = new Discord.MessageEmbed() .setTitle('AleeBot Setup', client.user.avatarURL()) .setDescription('Select the options') - .addField('Chat Logs', 'channelid', true) - .addField('Joining & Leaving Logs', 'placeholder', true) + .addField('Logging', 'channelid', true) .addField('Broadcast', 'placeholder', true) .addField('Broadcast', 'placeholder', true); diff --git a/deprecated/balance.js b/deprecated/balance.js deleted file mode 100644 index bf7618c..0000000 --- a/deprecated/balance.js +++ /dev/null @@ -1,50 +0,0 @@ -/** ************************************** - * - * Balance: Command for AleeBot - * Copyright (C) 2017-2021 Alee Productions - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * *************************************/ -module.exports.run = async (client, message) => { - const db = require('quick.db'); - const {MessageEmbed} = require('discord.js'); - - const user = message.mentions.users.first() || message.author; - - let balance = await db.fetch(`userBalance_${user.id}`); - - if (balance === null) { - db.set(`userBalance_${message.author.id}`, 0); - balance = 0; - } - const embed = new MessageEmbed() - .setDescription('**AleeCorp Bank**') - .addField('Account Holder: ', user.username, true) - .addField('Account Balance: ', balance, true) - .setColor('#1fd619'); - - message.channel.send({embed}); -}; - -exports.conf = { - aliases: ['bal', 'money'], - guildOnly: false, -}; -exports.help = { - name: 'balance', - description: 'Checks the balance of AleeBot', - usage: 'balance [@someone (optional)]', - category: '- Economy Commands', -}; diff --git a/deprecated/buy.js b/deprecated/buy.js deleted file mode 100644 index 98d4fcf..0000000 --- a/deprecated/buy.js +++ /dev/null @@ -1,114 +0,0 @@ -/** ************************************** - * - * Buy: Command for AleeBot - * Copyright (C) 2017-2021 Alee Productions - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * *************************************/ -module.exports.run = async (client, message, args) => { -const Discord = require('discord.js'); -const fs = require('fs') -const db = require('quick.db'); -const items = JSON.parse(fs.readFileSync('./storage/items.json', 'utf8')); - - let categories = []; - - if (!args.join(" ")) { - - - for (var i in items) { - - - if (!categories.includes(items[i].type)) { - categories.push(items[i].type) - } - - } - - - const embed = new Discord.MessageEmbed() - .setDescription(`Available Items`) - .setColor('#1fd619') - - for (var i = 0; i < categories.length; i++) { - - var tempDesc = ''; - - for (var c in items) { - if (categories[i] === items[c].type) { - - tempDesc += `${items[c].name} - ${items[c].price}$ - ${items[c].desc}\n`; - - } - - } - - embed.addField(categories[i], tempDesc); - - } - - - return message.channel.send({ - embed - }); - - - } - - let itemName = ''; - let itemPrice = 0; - let itemDesc = ''; - - for (var i in items) { - if (args.join(" ").trim().toUpperCase() === items[i].name.toUpperCase()) { - itemName = items[i].name; - itemPrice = items[i].price; - itemDesc = items[i].desc; - } - } - - - if (itemName === '') { - return message.channel.send(`Item ${args.join(" ").trim()} not found.`) - } - - let selfBalance = await db.fetch(`userBalance_${message.author.id}`); - - if (selfBalance === null) { - db.set(`userBalance_${message.author.id}`, 0); - selfBalance = 0 - } - - if (itemPrice > selfBalance) return message.reply('You don\'t have enough money for this item.') - - db.subtract(`userBalance_${message.author.id}`, itemPrice); - - if (itemName === 'Programmer Role') { - message.guild.members.get(message.author.id).addRole(message.guild.roles.find("name", "Programmers")); - } - - message.channel.send('You bought ' + itemName + '!'); -}; - -exports.conf = { - aliases: [], - guildOnly: false, -}; -exports.help = { - name: 'buy', - description: 'Buy things.', - usage: 'buy [item]', - category: '- Economy Commands', -}; diff --git a/deprecated/daily.js b/deprecated/daily.js deleted file mode 100644 index 4a38f26..0000000 --- a/deprecated/daily.js +++ /dev/null @@ -1,56 +0,0 @@ -/** ************************************** - * - * Daily: Command for AleeBot - * Copyright (C) 2017-2021 Alee Productions - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * *************************************/ -const db = require('quick.db'); -ms = require('parse-ms'); - -module.exports.run = async (client, message) => { - const cooldown = 8.64e+7; - const amount = 100; - - const lastDaily = await db.fetch(`lastDaily_${message.author.id}`); - - if (lastDaily !== null && cooldown - (Date.now() - lastDaily) > 0) { - const timeObj = ms(cooldown - (Date.now() - lastDaily)); - - message.reply(`You already collected your money, please wait **${timeObj.hours}h ${timeObj.minutes}m**!`); - } else { - message.channel.send(`You have successfully collected $${amount} dollars!`); - - const balance = await db.fetch(`userBalance_${message.author.id}`); - - if (balance == null) { - db.set(`userBalance_${message.author.id}`, 0); - } - - db.set(`lastDaily_${message.author.id}`, Date.now()); - db.add(`userBalance_${message.author.id}`, 100); - } -}; - -exports.conf = { - aliases: [], - guildOnly: false, -}; -exports.help = { - name: 'daily', - description: 'This gives you money everyday.', - usage: 'daily', - category: '- Economy Commands', -}; diff --git a/deprecated/pay.js b/deprecated/pay.js deleted file mode 100644 index 42e0f28..0000000 --- a/deprecated/pay.js +++ /dev/null @@ -1,60 +0,0 @@ -/** ************************************** - * - * Pay: Command for AleeBot - * Copyright (C) 2017-2021 Alee Productions - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * *************************************/ - -module.exports.run = async (client, message, args) => { - const db = require('quick.db'); - if (!message.mentions.members.first()) return message.reply('Please mention a user...'); - - const targetMember = message.mentions.members.first(); - const amount = parseInt(args.join(' ').replace(targetMember, '')); - - if (isNaN(amount)) return message.reply('Please define an amount.'); - - let targetBalance = await db.fetch(`userBalance_${targetMember.id}`); - let selfBalance = await db.fetch(`userBalance_${message.author.id}`); - - if (targetBalance === null) { - db.set(`userBalance_${targetMember.id}`, 0); - targetBalance = 0; - } - - if (selfBalance === null) { - db.set(`userBalance_${message.author.id}`, 0); - selfBalance = 0; - } - - if (amount > selfBalance) return message.reply('Sorry you don\'t have enough money.'); - - db.add(`userBalance_${targetMember.id}`, amount); - db.subtract(`userBalance_${message.author.id}`, amount); - - message.reply(`Successfully transfered $${amount} to ${targetMember.user}`); -}; - -exports.conf = { - aliases: ['transfer'], - guildOnly: false, -}; -exports.help = { - name: 'pay', - description: 'You can pay others!', - usage: 'pay [@user] [interger]', - category: '- Economy Commands', -}; diff --git a/models/quote.js b/models/quote.js index f31b472..eab4f57 100644 --- a/models/quote.js +++ b/models/quote.js @@ -26,4 +26,29 @@ const quote = sequelize.define('quotes', { }) -module.exports = quote +const pendingQuote = sequelize.define('pending-quotes', { + id: { + type: Sequelize.INTEGER, + autoIncrement: true, + primaryKey: true + }, + author: { + type: Sequelize.STRING, + allowNull: false + }, + authorImage: { + type: Sequelize.STRING, + allowNull: false + }, + quote: { + type: Sequelize.TEXT, + allowNull: false + }, + year: { + type: Sequelize.STRING, + allowNull: false + } + +}) + +module.exports = { quote, pendingQuote }; diff --git a/package.json b/package.json index 6e07caa..9584d19 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "dependencies": { "blessed": "^0.1.81", "colors": "^1.3.0", + "cors": "^2.8.5", "discord.js": "^13.0.1", "dotenv": "^16.3.1", "eslint": "^7.1.0", diff --git a/storage/activities.js b/storage/activities.js index 2b2a286..5d0161e 100644 --- a/storage/activities.js +++ b/storage/activities.js @@ -92,10 +92,8 @@ const activities = [ 'GNU\'s NOT UNIX!', 'Linux, but actually GNU/Linux', 'Praise RMS! (dont)', - 'Praying to St IGNUcius', 'Debloating my ThinkPad', 'Turbotastic!', - 'Goddamn Idiotic Truckload of Windows', `Now running on Discord.JS ${version}!` ]; diff --git a/storage/settings.json b/storage/settings.json index b53fd84..83932cc 100644 --- a/storage/settings.json +++ b/storage/settings.json @@ -1,4 +1,4 @@ { "abVersion": "2.13.0 Beta", - "prefix": "ab:" + "prefix": "abb:" } diff --git a/sync-database.js b/sync-database.js index 2462f29..f7b9211 100644 --- a/sync-database.js +++ b/sync-database.js @@ -1,9 +1,13 @@ -const quoteDB = require("./models/quote"); +const { quote, pendingQuote } = require("./models/quote"); const guildDB = require ('./models/guild-settings'); -quoteDB.sync({alter: true}).then(() => { +quote.sync({alter: true}).then(() => { console.log('Quote database synced!') }); +pendingQuote.sync({alter: true}).then(() => { + console.log('Pending Quote database synced!') +}); + guildDB.sync({alter: true}).then(() => { console.log('Guild database synced!') }); diff --git a/web/.gitignore b/web/.gitignore new file mode 100644 index 0000000..016b59e --- /dev/null +++ b/web/.gitignore @@ -0,0 +1,24 @@ +# build output +dist/ + +# generated types +.astro/ + +# dependencies +node_modules/ + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store + +# jetbrains setting folder +.idea/ diff --git a/web/.vscode/extensions.json b/web/.vscode/extensions.json new file mode 100644 index 0000000..22a1505 --- /dev/null +++ b/web/.vscode/extensions.json @@ -0,0 +1,4 @@ +{ + "recommendations": ["astro-build.astro-vscode"], + "unwantedRecommendations": [] +} diff --git a/web/.vscode/launch.json b/web/.vscode/launch.json new file mode 100644 index 0000000..d642209 --- /dev/null +++ b/web/.vscode/launch.json @@ -0,0 +1,11 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "command": "./node_modules/.bin/astro dev", + "name": "Development server", + "request": "launch", + "type": "node-terminal" + } + ] +} diff --git a/web/astro.config.mjs b/web/astro.config.mjs new file mode 100644 index 0000000..53e49de --- /dev/null +++ b/web/astro.config.mjs @@ -0,0 +1,9 @@ +// @ts-check +import { defineConfig } from 'astro/config'; + +import react from '@astrojs/react'; + +// https://astro.build/config +export default defineConfig({ + integrations: [react()] +}); \ No newline at end of file diff --git a/web/bun.lockb b/web/bun.lockb new file mode 100644 index 0000000..b648049 Binary files /dev/null and b/web/bun.lockb differ diff --git a/web/package.json b/web/package.json new file mode 100644 index 0000000..811ab8b --- /dev/null +++ b/web/package.json @@ -0,0 +1,19 @@ +{ + "name": "aleebot-web", + "type": "module", + "version": "0.0.1", + "scripts": { + "dev": "astro dev", + "build": "astro build", + "preview": "astro preview", + "astro": "astro" + }, + "dependencies": { + "@astrojs/react": "^4.1.3", + "@types/react": "^19.0.4", + "@types/react-dom": "^19.0.2", + "astro": "^5.1.5", + "react": "^19.0.0", + "react-dom": "^19.0.0" + } +} diff --git a/web/public/favicon.svg b/web/public/favicon.svg new file mode 100644 index 0000000..f157bd1 --- /dev/null +++ b/web/public/favicon.svg @@ -0,0 +1,9 @@ + + + + diff --git a/web/src/components/Quotes.jsx b/web/src/components/Quotes.jsx new file mode 100644 index 0000000..1d563e7 --- /dev/null +++ b/web/src/components/Quotes.jsx @@ -0,0 +1,86 @@ +import { useState, useEffect } from 'react'; +import '../styles/Quote.css' + +export function PendingQuotes() { + const [quotes, setQuotes] = useState([]); + + const fetchQuotes = async () => { + try { + const response = await fetch('http://localhost:3000/api/pending-quotes'); + const data = await response.json(); + setQuotes(data); + } catch (error) { + console.error('Failed to fetch quotes:', error); + } + }; + + useEffect(() => { + fetchQuotes(); + }, []); + + const approveQuote = async (id) => { + try { + const response = await fetch('http://localhost:3000/api/approve-quote', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ id }), + }); + + if (response.ok) { + fetchQuotes(); // Refresh the listing after approving the quote + } else { + console.error('Failed to approve quote'); + } + } catch (error) { + console.error('Error approving quote:', error); + } + }; + + const rejectQuote = async (id) => { + try { + const response = await fetch('http://localhost:3000/api/reject-quote', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ id }), + }); + + if (response.ok) { + fetchQuotes(); // Refresh the listing after approving the quote + } else { + console.error('Failed to reject quote'); + } + } catch (error) { + console.error('Error rejecting quote:', error); + } + }; + + return ( +
+

Pending Quotes

+ {quotes.length > 0 ? ( +
    + {quotes.map((quote) => ( +
  • +
    +
    + No Profile +

    {quote.author}

    +
    +

    {quote.quote}

    + - {quote.year} +
    + + +
  • + ))} +
+ ) : ( +

No pending quotes available.

+ )} +
+ ); +} diff --git a/web/src/layouts/Layout.astro b/web/src/layouts/Layout.astro new file mode 100644 index 0000000..e455c61 --- /dev/null +++ b/web/src/layouts/Layout.astro @@ -0,0 +1,22 @@ + + + + + + + + Astro Basics + + + + + + + diff --git a/web/src/pages/index.astro b/web/src/pages/index.astro new file mode 100644 index 0000000..b5c607d --- /dev/null +++ b/web/src/pages/index.astro @@ -0,0 +1,29 @@ +--- +import Layout from '../layouts/Layout.astro'; +import { PendingQuotes } from '../components/Quotes'; + +const version = await fetch('http://localhost:3000/api/version').then(res => res.json()); +--- + + +
+

AleeBot {version}

+ +
+
+ + diff --git a/web/src/styles/Quote.css b/web/src/styles/Quote.css new file mode 100644 index 0000000..8adfb29 --- /dev/null +++ b/web/src/styles/Quote.css @@ -0,0 +1,33 @@ +.quote { + display: flex; + flex-direction: column; + background: #555555; + color: #FFFFFF; + padding: 1em; +} + +ul.quoteList { + margin: 0; + padding: 0; +} + +li.quoteList { + list-style-type: none; + margin-top: 1em; + margin-bottom: 1em; +} + +.author { + display: flex; + flex-direction: row; +} + +h1.quoteAuthor { + font-size: 1.5em; + padding: 0; + margin: 0 0 0 .5em; +} + +.quoteText { + margin: .5em 0; +} diff --git a/web/tsconfig.json b/web/tsconfig.json new file mode 100644 index 0000000..69c1600 --- /dev/null +++ b/web/tsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "astro/tsconfigs/strict", + "include": [ + ".astro/types.d.ts", + "**/*" + ], + "exclude": [ + "dist" + ], + "compilerOptions": { + "jsx": "react-jsx", + "jsxImportSource": "react" + } +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 5942f18..d266f22 100644 --- a/yarn.lock +++ b/yarn.lock @@ -513,6 +513,14 @@ cookie@0.5.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +cors@^2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -1507,7 +1515,7 @@ npmlog@^6.0.0: gauge "^4.0.3" set-blocking "^2.0.0" -object-assign@^4.1.1: +object-assign@^4, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -2100,7 +2108,7 @@ validator@^13.7.0: resolved "https://registry.yarnpkg.com/validator/-/validator-13.9.0.tgz#33e7b85b604f3bbce9bb1a05d5c3e22e1c2ff855" integrity sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA== -vary@~1.1.2: +vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -- cgit v1.2.3 From 9b484f3f18c7fb4c6d85cb696999271c993e9753 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Sun, 12 Jan 2025 00:42:57 -0500 Subject: Updated packages; Docker support for web; Fixed issues with author image --- .dockerignore | 1 + Dockerfile | 6 +- bot_discord.js | 4 +- commands/addquote.js | 52 +- commands/quote.js | 4 - docker-compose.yml | 14 + models/quote.js | 8 - package.json | 22 +- web/Dockerfile | 9 + web/astro.config.mjs | 8 +- web/bun.lockb | Bin 172416 -> 179198 bytes web/package.json | 1 + yarn.lock | 1373 ++++++++++++++++++++++++++++---------------------- 13 files changed, 857 insertions(+), 645 deletions(-) create mode 100644 docker-compose.yml create mode 100644 web/Dockerfile (limited to 'package.json') diff --git a/.dockerignore b/.dockerignore index 550aa8a..60260be 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,3 +3,4 @@ npm-debug.log .git .env database.sqlite +web diff --git a/Dockerfile b/Dockerfile index f962f11..3f4f771 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,9 @@ -FROM node:alpine +FROM node:latest WORKDIR /usr/src/bot +RUN apt-get update && apt-get install -y build-essential libtool autoconf automake python3 + COPY package.json ./ COPY yarn.lock ./ @@ -10,4 +12,4 @@ RUN yarn install COPY . . -CMD ["node", "bot_discord.js"] +ENTRYPOINT ["node", "bot_discord.js", "--beta"] diff --git a/bot_discord.js b/bot_discord.js index 8bfa7da..5a38940 100644 --- a/bot_discord.js +++ b/bot_discord.js @@ -124,9 +124,9 @@ rl.on('line', function(cmd) { console.log(('[!] No guilds found.'.yellow)); } else { console.log('[i] These are the servers that AleeBot is connected to:'); - for ([id, guild] of client.guilds) { + client.guilds.cache.forEach((guild) => { console.log(` Guild Name: ${guild.name} - ID: ${guild.id}`.blue); - } + }); } break; case 'leave': diff --git a/commands/addquote.js b/commands/addquote.js index f13d3c9..cedee4d 100644 --- a/commands/addquote.js +++ b/commands/addquote.js @@ -50,24 +50,6 @@ module.exports.run = async (client, message) => { }); } - async function imageCheck(message) { - const attachment = message.attachments.first(); - if (attachment) { - const fileExtension = attachment.name.split('.').pop().toLowerCase(); - if (['jpg', 'png', 'jpeg'].includes(fileExtension)) { - newAuthorImage = attachment.url.toString(); // Use the attachment's URL directly - } else { - await dmChannel.send('Invalid file type. Please attach a .jpg or .png image.'); - return await imageCheck(message); - } - } else if (msg.content.startsWith('http') && (message.content.endsWith('.jpg') || message.content.endsWith('.jpeg') || message.content.endsWith('.png'))) { - newAuthorImage = msg.content; // Use the provided URL - } else { - await dmChannel.send('Invalid input. Please provide an image URL or attach an image file.'); - return await imageCheck(message); - } - } - let setupMessage = "Welcome to the AleeBot Quote Setup!\n"; setupMessage += "Please follow these rules when submitting quotes:\n"; setupMessage += "```1. No offensive content (NSFW, Racism, etc).\n"; @@ -92,7 +74,23 @@ module.exports.run = async (client, message) => { collector.on('collect', async (msg) => { if (counter === 2) { // Collecting author image - await imageCheck(msg); + const attachment = msg.attachments.first(); + if (attachment) { + const fileExtension = attachment.name.split('.').pop().toLowerCase(); + if (['jpg', 'png', 'jpeg'].includes(fileExtension)) { + newAuthorImage = attachment.url.toString(); // Use the attachment's URL directly + } else { + await dmChannel.send('Invalid file type. Please attach a .jpg or .png image.'); + collector.stop(); + return; + } + } else if (msg.content.startsWith('http') && (msg.content.endsWith('.jpg') || msg.content.endsWith('.jpeg') || msg.content.endsWith('.png'))) { + newAuthorImage = message.content; + } else { + await dmChannel.send('Invalid input. Please provide an image URL or attach an image file.'); + collector.stop(); + return; + } } if (counter < setupProcess.length) { @@ -150,7 +148,19 @@ module.exports.run = async (client, message) => { case '📷': await dmChannel.send('You selected the author image. Please provide the image URL or attach an image file.'); const imageResponse = await dmChannel.awaitMessages({ filter, max: 1, time: 60000 }); - await imageCheck(imageResponse.first()); + const attachment = imageResponse.first().attachments.first(); + if (attachment) { + const fileExtension = attachment.name.split('.').pop().toLowerCase(); + if (['jpg', 'png', 'jpeg'].includes(fileExtension)) { + newAuthorImage = attachment.url.toString(); // Use the attachment's URL directly + } else { + await dmChannel.send('Invalid file type. Please attach a .jpg or .png image.'); + } + } else if (imageResponse.first().content.startsWith('http') && (imageResponse.first().content.endsWith('.jpg') || imageResponse.first().content.endsWith('.jpeg') || imageResponse.first().content.endsWith('.png'))) { + newAuthorImage = message.content; + } else { + await dmChannel.send('Invalid input. Please provide an image URL or attach an image file.'); + } await dmChannel.send('Updated author image.'); break; case '🖋️': @@ -191,7 +201,7 @@ module.exports.run = async (client, message) => { } }); } catch (error) { - message.author.send('An error occurred while setting up the quote. Please try again.'); + await message.author.send('An error occurred while setting up the quote. Please rerun the command.'); setupUsers.delete(message.author.id); console.error(error); } diff --git a/commands/quote.js b/commands/quote.js index 0d67b66..02699cd 100644 --- a/commands/quote.js +++ b/commands/quote.js @@ -38,10 +38,6 @@ module.exports.run = async (client, message, args) => { .setColor('#1fd619') .setFooter('- ' + quote.year); - if (quote.url) { - quoteEmbed.setURL(quote.url); - } - await message.reply({ embeds: [quoteEmbed] }) } else { message.reply('Cannot find quote, specify the correct quote id.'); diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..edd06ab --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,14 @@ +services: + aleebot: + image: aleebot + volumes: + - ./database.sqlite:/usr/src/bot/database.sqlite + - ./.env:/usr/src/bot/.env + ports: + - "3000:3000" + web: + image: aleebot-web + environment: + - HOST=0.0.0.0 + ports: + - "4321:4321" diff --git a/models/quote.js b/models/quote.js index b68dfbc..ceef241 100644 --- a/models/quote.js +++ b/models/quote.js @@ -23,10 +23,6 @@ const quote = sequelize.define('quotes', { type: Sequelize.STRING, allowNull: false }, - url: { - type: Sequelize.STRING, - allowNull: true - }, submitter: { type: Sequelize.STRING, allowNull: false @@ -56,10 +52,6 @@ const pendingQuote = sequelize.define('pending-quotes', { type: Sequelize.STRING, allowNull: false }, - url: { - type: Sequelize.STRING, - allowNull: true - }, submitterAuthor: { type: Sequelize.STRING, allowNull: false diff --git a/package.json b/package.json index 9584d19..b300082 100644 --- a/package.json +++ b/package.json @@ -19,19 +19,19 @@ "homepage": "https://github.com/Alee14/AleeBot#readme", "dependencies": { "blessed": "^0.1.81", - "colors": "^1.3.0", + "colors": "^1.4.0", "cors": "^2.8.5", - "discord.js": "^13.0.1", - "dotenv": "^16.3.1", - "eslint": "^7.1.0", - "express": "^4.17.1", - "i18next": "^19.4.4", - "moment": "^2.21.0", - "os": "^0.1.1", - "parse-ms": "^1.0.1", + "discord.js": "13.17.1", + "dotenv": "^16.4.7", + "eslint": "^9.18.0", + "express": "^4.21.2", + "i18next": "^24.2.1", + "moment": "^2.30.1", + "os": "^0.1.2", + "parse-ms": "^4.0.0", "readline": "^1.3.0", - "sequelize": "^6.30.0", - "sqlite3": "^5.1.6" + "sequelize": "^6.37.5", + "sqlite3": "^5.1.7" }, "devDependencies": { "nodemon": "^2.0.2" diff --git a/web/Dockerfile b/web/Dockerfile new file mode 100644 index 0000000..e021df4 --- /dev/null +++ b/web/Dockerfile @@ -0,0 +1,9 @@ +FROM oven/bun:latest + +WORKDIR /web + +COPY . . + +RUN bun run build + +ENTRYPOINT ["bun", "run", "/web/dist/server/entry.mjs"] diff --git a/web/astro.config.mjs b/web/astro.config.mjs index 515ddf0..c0fd9ad 100644 --- a/web/astro.config.mjs +++ b/web/astro.config.mjs @@ -3,7 +3,13 @@ import { defineConfig } from 'astro/config'; import react from '@astrojs/react'; +import node from '@astrojs/node'; + // https://astro.build/config export default defineConfig({ - integrations: [react()] + integrations: [react()], + + adapter: node({ + mode: 'standalone' + }) }); diff --git a/web/bun.lockb b/web/bun.lockb index b648049..26b85b4 100644 Binary files a/web/bun.lockb and b/web/bun.lockb differ diff --git a/web/package.json b/web/package.json index 811ab8b..2a7be8a 100644 --- a/web/package.json +++ b/web/package.json @@ -9,6 +9,7 @@ "astro": "astro" }, "dependencies": { + "@astrojs/node": "^9.0.0", "@astrojs/react": "^4.1.3", "@types/react": "^19.0.4", "@types/react-dom": "^19.0.2", diff --git a/yarn.lock b/yarn.lock index d266f22..26e43c3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,33 +2,12 @@ # yarn lockfile v1 -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== +"@babel/runtime@^7.23.2": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" + integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/helper-validator-identifier@^7.18.6": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - -"@babel/highlight@^7.10.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/runtime@^7.12.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.0.tgz#22b11c037b094d27a8a2504ea4dcff00f50e2259" - integrity sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA== - dependencies: - regenerator-runtime "^0.13.4" + regenerator-runtime "^0.14.0" "@discordjs/builders@^0.16.0": version "0.16.0" @@ -46,54 +25,99 @@ resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-0.7.0.tgz#1a6c00198b744ba2b73a64442145da637ac073b8" integrity sha512-R5i8Wb8kIcBAFEPLLf7LVBQKBDYUL+ekb23sOgpkpyGT+V4P7V83wTxcsqmX+PbqHt4cEHn053uMWfRqh/Z/nA== -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz#d1145bf2c20132d6400495d6df4bf59362fd9d56" + integrity sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.12.1": + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + +"@eslint/config-array@^0.19.0": + version "0.19.1" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.19.1.tgz#734aaea2c40be22bbb1f2a9dac687c57a6a4c984" + integrity sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA== + dependencies: + "@eslint/object-schema" "^2.1.5" + debug "^4.3.1" + minimatch "^3.1.2" + +"@eslint/core@^0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.10.0.tgz#23727063c21b335f752dbb3a16450f6f9cbc9091" + integrity sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/eslintrc@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.2.0.tgz#57470ac4e2e283a6bf76044d63281196e370542c" + integrity sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w== dependencies: ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" + debug "^4.3.2" + espree "^10.0.1" + globals "^14.0.0" + ignore "^5.2.0" import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" + js-yaml "^4.1.0" + minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@eslint/js@9.18.0": + version "9.18.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.18.0.tgz#3356f85d18ed3627ab107790b53caf7e1e3d1e84" + integrity sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA== + +"@eslint/object-schema@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.5.tgz#8670a8f6258a2be5b2c620ff314a1d984c23eb2e" + integrity sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ== + +"@eslint/plugin-kit@^0.2.5": + version "0.2.5" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz#ee07372035539e7847ef834e3f5e7b79f09e3a81" + integrity sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A== + dependencies: + "@eslint/core" "^0.10.0" + levn "^0.4.1" + "@gar/promisify@^1.0.1": version "1.1.3" resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== +"@humanfs/core@^0.19.1": + version "0.19.1" + resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" + integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== + +"@humanfs/node@^0.16.6": + version "0.16.6" + resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.6.tgz#ee2a10eaabd1131987bf0488fd9b820174cd765e" + integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw== dependencies: - "@humanwhocodes/object-schema" "^1.2.0" - debug "^4.1.1" - minimatch "^3.0.4" + "@humanfs/core" "^0.19.1" + "@humanwhocodes/retry" "^0.3.0" -"@humanwhocodes/object-schema@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@mapbox/node-pre-gyp@^1.0.0": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz#8e6735ccebbb1581e5a7e652244cadc8a844d03c" - integrity sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA== - dependencies: - detect-libc "^2.0.0" - https-proxy-agent "^5.0.0" - make-dir "^3.1.0" - node-fetch "^2.6.7" - nopt "^5.0.0" - npmlog "^5.0.1" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.11" +"@humanwhocodes/retry@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a" + integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA== + +"@humanwhocodes/retry@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.1.tgz#9a96ce501bc62df46c4031fbd970e3cc6b10f07b" + integrity sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA== "@npmcli/fs@^1.0.0": version "1.1.1" @@ -129,40 +153,50 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== -"@types/debug@^4.1.7": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82" - integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg== +"@types/debug@^4.1.8": + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== dependencies: "@types/ms" "*" +"@types/estree@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== + +"@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + "@types/ms@*": version "0.7.31" resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== -"@types/node-fetch@^2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.2.tgz#d1a9c5fd049d9415dce61571557104dec3ec81da" - integrity sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A== +"@types/node-fetch@^2.6.3": + version "2.6.12" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.12.tgz#8ab5c3ef8330f13100a7479e2cd56d3386830a03" + integrity sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA== dependencies: "@types/node" "*" - form-data "^3.0.0" + form-data "^4.0.0" "@types/node@*": version "18.7.18" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.18.tgz#633184f55c322e4fb08612307c274ee6d5ed3154" integrity sha512-m+6nTEOadJZuTPkKR/SYK3A2d7FZrgElol9UP1Kae90VVU4a6mxnPuLiIW1m4Cq4gZ/nWb9GrdVXJCoCazDAbg== -"@types/validator@^13.7.1": - version "13.7.14" - resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.7.14.tgz#5512aef43ba353ea2fe2d0d8c7ce71c75c2ad9e6" - integrity sha512-J6OAed6rhN6zyqL9Of6ZMamhlsOEU/poBVvbHr/dKOYKTeuYYMlDkMv+b6UUV0o2i0tw73cgyv/97WTWaUl0/g== +"@types/validator@^13.7.17": + version "13.12.2" + resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.12.2.tgz#760329e756e18a4aab82fc502b51ebdfebbe49f5" + integrity sha512-6SlHBzUW8Jhf3liqrGGXyTJSIFe4nqlJ5A5KaMZ2l/vbM3Wh3KSybots/wfWVzNLK4D1NZluDlSQIbIEPx6oyA== -"@types/ws@^8.5.3": - version "8.5.3" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" - integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== +"@types/ws@^8.5.4": + version "8.5.13" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.13.tgz#6414c280875e2691d0d1e080b05addbf5cb91e20" + integrity sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA== dependencies: "@types/node" "*" @@ -179,15 +213,15 @@ accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" -acorn-jsx@^5.3.1: +acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.14.0: + version "8.14.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== agent-base@6, agent-base@^6.0.2: version "6.0.2" @@ -213,7 +247,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.0, ajv@^6.12.4: +ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -223,34 +257,12 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: +ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -270,14 +282,6 @@ anymatch@~3.1.2: resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== -are-we-there-yet@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" - integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - are-we-there-yet@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" @@ -286,23 +290,16 @@ are-we-there-yet@^3.0.0: delegates "^1.0.0" readable-stream "^3.6.0" -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -313,31 +310,52 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + blessed@^0.1.81: version "0.1.81" resolved "https://registry.yarnpkg.com/blessed/-/blessed-0.1.81.tgz#f962d687ec2c369570ae71af843256e6d0ca1129" integrity sha512-LoF5gae+hlmfORcG1M5+5XZi4LBmvlXTzwJWzUlPryN/SJdSflZvROM2TwkT0GMpq7oqT48NRd4GS7BiVBc5OQ== -body-parser@1.20.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" - integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== +body-parser@1.20.3: + version "1.20.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" + integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== dependencies: bytes "3.1.2" - content-type "~1.0.4" + content-type "~1.0.5" debug "2.6.9" depd "2.0.0" destroy "1.2.0" http-errors "2.0.0" iconv-lite "0.4.24" on-finished "2.4.1" - qs "6.10.3" - raw-body "2.5.1" + qs "6.13.0" + raw-body "2.5.2" type-is "~1.6.18" unpipe "1.0.0" @@ -356,6 +374,14 @@ braces@~3.0.2: dependencies: fill-range "^7.0.1" +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" @@ -385,28 +411,27 @@ cacache@^15.2.0: tar "^6.0.2" unique-filename "^1.1.1" -call-bind@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind-apply-helpers@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz#32e5892e6361b29b0b545ba6f7763378daca2840" + integrity sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bound@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.3.tgz#41cfd032b593e39176a71533ab4f384aa04fd681" + integrity sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + call-bind-apply-helpers "^1.0.1" + get-intrinsic "^1.2.6" callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chalk@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -430,6 +455,11 @@ chokidar@^3.5.2: optionalDependencies: fsevents "~2.3.2" +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + chownr@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" @@ -440,13 +470,6 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -454,22 +477,17 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-support@^1.1.2, color-support@^1.1.3: +color-support@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== -colors@^1.3.0: +colors@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== @@ -486,7 +504,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -console-control-strings@^1.0.0, console-control-strings@^1.1.0: +console-control-strings@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== @@ -503,15 +521,20 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== +content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +cookie@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" + integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== cors@^2.8.5: version "2.8.5" @@ -521,10 +544,10 @@ cors@^2.8.5: object-assign "^4" vary "^1" -cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== +cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" @@ -537,7 +560,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.3: +debug@4, debug@^4.1.0, debug@^4.3.3: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -551,6 +574,25 @@ debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: + version "4.4.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -591,37 +633,39 @@ discord-api-types@^0.36.2: resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.36.3.tgz#a931b7e57473a5c971d6937fa5f392eb30047579" integrity sha512-bz/NDyG0KBo/tY14vSkrwQ/n3HKPf87a0WFW/1M9+tXYK+vp5Z5EksawfCWo2zkAc6o7CClc0eff1Pjrqznlwg== -discord.js@^13.0.1: - version "13.11.0" - resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-13.11.0.tgz#ccfa63e31c0a4281562b79992c1379a215efc3eb" - integrity sha512-/vA6oQtKilFlwVZSIFipPeWg5kU6gjUOffuaYWtDDJwIXKqiThNdymLkmQhnf8Ztlt+3vKsoqXENrgpQdaNCVQ== +discord.js@13.17.1: + version "13.17.1" + resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-13.17.1.tgz#df171c8aacb351b1532d0562dd7db56df666094d" + integrity sha512-h13kUf+7ZaP5ZWggzooCxFutvJJvugcAO54oTEIdVr3zQWi0Sf/61S1kETtuY9nVAyYebXR/Ey4C+oWbsgEkew== dependencies: "@discordjs/builders" "^0.16.0" "@discordjs/collection" "^0.7.0" "@sapphire/async-queue" "^1.5.0" - "@types/node-fetch" "^2.6.2" - "@types/ws" "^8.5.3" + "@types/node-fetch" "^2.6.3" + "@types/ws" "^8.5.4" discord-api-types "^0.33.5" form-data "^4.0.0" node-fetch "^2.6.7" - ws "^8.8.1" + ws "^8.13.0" -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" +dotenv@^16.4.7: + version "16.4.7" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" + integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== -dotenv@^16.3.1: - version "16.3.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e" - integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== +dottie@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/dottie/-/dottie-2.0.6.tgz#34564ebfc6ec5e5772272d466424ad5b696484d4" + integrity sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA== -dottie@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dottie/-/dottie-2.0.3.tgz#797a4f4c92a9a65499806be4051b9d9dcd5a5d77" - integrity sha512-4liA0PuRkZWQFQjwBypdxPfZaRWiv5tkhMXY2hzsa2pNf5s7U3m9cwUchfNKe8wZQxdGPQQzO6Rm2uGe0rvohQ== +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" ee-first@1.1.1: version "1.1.1" @@ -638,6 +682,11 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + encoding@^0.1.12: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" @@ -645,12 +694,12 @@ encoding@^0.1.12: dependencies: iconv-lite "^0.6.2" -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: - ansi-colors "^4.1.1" + once "^1.4.0" env-paths@^2.2.0: version "2.2.1" @@ -662,110 +711,104 @@ err-code@^2.0.2: resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== +eslint-scope@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.2.0.tgz#377aa6f1cb5dc7592cfd0b7f892fd0cf352ce442" + integrity sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A== dependencies: esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" + estraverse "^5.2.0" -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== +eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint@^7.1.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" - ajv "^6.10.0" +eslint-visitor-keys@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" + integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== + +eslint@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.18.0.tgz#c95b24de1183e865de19f607fda6518b54827850" + integrity sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.19.0" + "@eslint/core" "^0.10.0" + "@eslint/eslintrc" "^3.2.0" + "@eslint/js" "9.18.0" + "@eslint/plugin-kit" "^0.2.5" + "@humanfs/node" "^0.16.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@humanwhocodes/retry" "^0.4.1" + "@types/estree" "^1.0.6" + "@types/json-schema" "^7.0.15" + ajv "^6.12.4" chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" + cross-spawn "^7.0.6" + debug "^4.3.2" escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" + eslint-scope "^8.2.0" + eslint-visitor-keys "^4.2.0" + espree "^10.3.0" + esquery "^1.5.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" + file-entry-cache "^8.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + ignore "^5.2.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" lodash.merge "^4.6.2" - minimatch "^3.0.4" + minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + optionator "^0.9.3" -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== +espree@^10.0.1, espree@^10.3.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.3.0.tgz#29267cf5b0cb98735b65e64ba07e0ed49d1eed8a" + integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg== + dependencies: + acorn "^8.14.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.2.0" + +esquery@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0" @@ -776,11 +819,6 @@ esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" @@ -796,37 +834,42 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== -express@^4.17.1: - version "4.18.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" - integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + +express@^4.21.2: + version "4.21.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.21.2.tgz#cf250e48362174ead6cea4a566abef0162c1ec32" + integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.0" + body-parser "1.20.3" content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.5.0" + cookie "0.7.1" cookie-signature "1.0.6" debug "2.6.9" depd "2.0.0" - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "1.2.0" + finalhandler "1.3.1" fresh "0.5.2" http-errors "2.0.0" - merge-descriptors "1.0.1" + merge-descriptors "1.0.3" methods "~1.1.2" on-finished "2.4.1" parseurl "~1.3.3" - path-to-regexp "0.1.7" + path-to-regexp "0.1.12" proxy-addr "~2.0.7" - qs "6.10.3" + qs "6.13.0" range-parser "~1.2.1" safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" + send "0.19.0" + serve-static "1.16.2" setprototypeof "1.2.0" statuses "2.0.1" type-is "~1.6.18" @@ -848,12 +891,17 @@ fast-levenshtein@^2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== dependencies: - flat-cache "^3.0.4" + flat-cache "^4.0.0" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== fill-range@^7.0.1: version "7.0.1" @@ -862,40 +910,39 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== +finalhandler@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" + integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== dependencies: debug "2.6.9" - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" on-finished "2.4.1" parseurl "~1.3.3" statuses "2.0.1" unpipe "~1.0.0" -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" + locate-path "^6.0.0" + path-exists "^4.0.0" -flatted@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== - -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" + flatted "^3.2.9" + keyv "^4.5.4" + +flatted@^3.2.9: + version "3.3.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27" + integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== form-data@^4.0.0: version "4.0.0" @@ -916,6 +963,11 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs-minipass@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" @@ -933,30 +985,10 @@ fsevents@~2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - -gauge@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" - integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.2" - console-control-strings "^1.0.0" - has-unicode "^2.0.1" - object-assign "^4.1.1" - signal-exit "^3.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.2" +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== gauge@^4.0.3: version "4.0.4" @@ -972,16 +1004,43 @@ gauge@^4.0.3: strip-ansi "^6.0.1" wide-align "^1.1.5" -get-intrinsic@^1.0.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== +get-intrinsic@^1.2.5, get-intrinsic@^1.2.6: + version "1.2.7" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.7.tgz#dcfcb33d3272e15f445d15124bc0a216189b9044" + integrity sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + function-bind "^1.1.2" + get-proto "^1.0.0" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-proto@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" + is-glob "^4.0.3" -glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -1000,12 +1059,15 @@ glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^13.6.0, globals@^13.9.0: - version "13.17.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4" - integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw== - dependencies: - type-fest "^0.20.2" +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== + +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== graceful-fs@^4.2.6: version "4.2.11" @@ -1022,22 +1084,22 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: - function-bind "^1.1.1" + function-bind "^1.1.2" http-cache-semantics@^4.1.0: version "4.1.1" @@ -1079,12 +1141,12 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -i18next@^19.4.4: - version "19.9.2" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-19.9.2.tgz#ea5a124416e3c5ab85fddca2c8e3c3669a8da397" - integrity sha512-0i6cuo6ER6usEOtKajUUDj92zlG+KArFia0857xxiEHAQcUwh/RtOQocui1LPJwunSYT574Pk64aNva1kwtxZg== +i18next@^24.2.1: + version "24.2.1" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-24.2.1.tgz#91e8f11fc9bd7042ec0bd36bed2dd0457aaa35fa" + integrity sha512-Q2wC1TjWcSikn1VAJg13UGIjc+okpFxQTxjVAymOnSA3RpttBQNMPf2ovcgoFVsV4QNxTfNZMAxorXZXsk4fBA== dependencies: - "@babel/runtime" "^7.12.0" + "@babel/runtime" "^7.23.2" iconv-lite@0.4.24: version "0.4.24" @@ -1100,17 +1162,22 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore-by-default@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ignore@^5.2.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== @@ -1133,7 +1200,7 @@ infer-owner@^1.0.4: resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== -inflection@^1.13.2: +inflection@^1.13.4: version "1.13.4" resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.13.4.tgz#65aa696c4e2da6225b148d7a154c449366633a32" integrity sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw== @@ -1146,11 +1213,16 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + ip@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" @@ -1178,7 +1250,7 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -1200,34 +1272,35 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: - argparse "^1.0.7" - esprima "^4.0.0" + argparse "^2.0.1" + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +keyv@^4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -1236,16 +1309,18 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - lodash.uniqwith@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniqwith/-/lodash.uniqwith-4.5.0.tgz#7a0cbf65f43b5928625a9d4d0dc54b18cadc7ef3" @@ -1263,13 +1338,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - make-fetch-happen@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" @@ -1292,15 +1360,20 @@ make-fetch-happen@^9.1.0: socks-proxy-agent "^6.0.0" ssri "^8.0.0" +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== +merge-descriptors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" + integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== methods@~1.1.2: version "1.1.2" @@ -1324,13 +1397,23 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" +minimist@^1.2.0, minimist@^1.2.3: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + minipass-collect@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" @@ -1390,23 +1473,33 @@ minizlib@^2.0.0, minizlib@^2.1.1: minipass "^3.0.0" yallist "^4.0.0" +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -moment-timezone@^0.5.35: - version "0.5.42" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.42.tgz#c59f2aa00442d0dcd1d258d2182873d637b4e17b" - integrity sha512-tjI9goqwzkflKSTxJo+jC/W8riTFwEjjunssmFvAWlvNVApjbkJM7UHggyKO0q1Fd/kZVKY77H7C9A0XKhhAFw== +moment-timezone@^0.5.43: + version "0.5.46" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.46.tgz#a21aa6392b3c6b3ed916cd5e95858a28d893704a" + integrity sha512-ZXm9b36esbe7OmdABqIWJuBBiLLwAjrN7CE+7sYdCCx82Nabt1wHDj8TVseS59QIlfFPbOoiBPm6ca9BioG4hw== dependencies: moment "^2.29.4" -moment@^2.21.0, moment@^2.29.1, moment@^2.29.4: +moment@^2.29.4: version "2.29.4" resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108" integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w== +moment@^2.30.1: + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -1417,11 +1510,16 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.0.0, ms@^2.1.1: +ms@2.1.3, ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -1432,10 +1530,17 @@ negotiator@0.6.3, negotiator@^0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -node-addon-api@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f" - integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== +node-abi@^3.3.0: + version "3.71.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.71.0.tgz#52d84bbcd8575efb71468fbaa1f9a49b2c242038" + integrity sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw== + dependencies: + semver "^7.3.5" + +node-addon-api@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" + integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== node-fetch@^2.6.7: version "2.6.7" @@ -1495,16 +1600,6 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -npmlog@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - npmlog@^6.0.0: version "6.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" @@ -1515,15 +1610,15 @@ npmlog@^6.0.0: gauge "^4.0.3" set-blocking "^2.0.0" -object-assign@^4, object-assign@^4.1.1: +object-assign@^4: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== +object-inspect@^1.13.3: + version "1.13.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" + integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== on-finished@2.4.1: version "2.4.1" @@ -1532,30 +1627,44 @@ on-finished@2.4.1: dependencies: ee-first "1.1.1" -once@^1.3.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" + word-wrap "^1.2.5" -os@^0.1.1: +os@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/os/-/os-0.1.2.tgz#f29a50c62908516ba42652de42f7038600cadbc2" integrity sha512-ZoXJkvAnljwvc56MbvhtKVWmSkzV712k42Is2mA0+0KTSRakq5XXuXpjZjgAt9ctzl51ojhQWakQQpmOvXWfjQ== +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + p-map@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" @@ -1570,16 +1679,21 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-ms@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-1.0.1.tgz#56346d4749d78f23430ca0c713850aef91aa361d" - integrity sha512-LpH1Cf5EYuVjkBvCDBYvkUPh+iv2bk3FHflxHkpCYT0/FZ1d3N3uJaLiHr4yGuMcFUhv6eAivitTvWZI4B/chg== +parse-ms@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-4.0.0.tgz#c0c058edd47c2a590151a718990533fd62803df4" + integrity sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw== parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -1590,31 +1704,44 @@ path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== +path-to-regexp@0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" + integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== -pg-connection-string@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.5.0.tgz#538cadd0f7e603fc09a12590f3b8a452c2c0cf34" - integrity sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ== +pg-connection-string@^2.6.1: + version "2.7.0" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.7.0.tgz#f1d3489e427c62ece022dba98d5262efcb168b37" + integrity sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA== picomatch@^2.0.4, picomatch@^2.2.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +prebuild-install@^7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" + integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^1.0.1" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" @@ -1641,33 +1768,60 @@ pstree.remy@^1.1.8: resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== +pump@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" + integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -qs@6.10.3: - version "6.10.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== +qs@6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== dependencies: - side-channel "^1.0.4" + side-channel "^1.0.6" range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" http-errors "2.0.0" iconv-lite "0.4.24" unpipe "1.0.0" +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +readable-stream@^3.1.1, readable-stream@^3.4.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" @@ -1689,27 +1843,17 @@ readline@^1.3.0: resolved "https://registry.yarnpkg.com/readline/-/readline-1.3.0.tgz#c580d77ef2cfc8752b132498060dc9793a7ac01c" integrity sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg== -regenerator-runtime@^0.13.4: - version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== - -regexpp@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -retry-as-promised@^7.0.3: +retry-as-promised@^7.0.4: version "7.0.4" resolved "https://registry.yarnpkg.com/retry-as-promised/-/retry-as-promised-7.0.4.tgz#9df73adaeea08cb2948b9d34990549dc13d800a2" integrity sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA== @@ -1726,7 +1870,7 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -safe-buffer@5.2.1, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -1741,18 +1885,6 @@ semver@^5.7.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.2.1: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - semver@^7.3.5: version "7.3.8" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" @@ -1760,15 +1892,20 @@ semver@^7.3.5: dependencies: lru-cache "^6.0.0" +semver@^7.5.4: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + semver@~7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== +send@0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" + integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== dependencies: debug "2.6.9" depd "2.0.0" @@ -1789,37 +1926,37 @@ sequelize-pool@^7.1.0: resolved "https://registry.yarnpkg.com/sequelize-pool/-/sequelize-pool-7.1.0.tgz#210b391af4002762f823188fd6ecfc7413020768" integrity sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg== -sequelize@^6.30.0: - version "6.30.0" - resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.30.0.tgz#e084cbf8d07b1bb6236d931375982e7f43ee44e9" - integrity sha512-VxQ3gB+isefL8Ic3GDUR6Y8Zwu1ctWNUlffcdSClsLkQ0mwgoLQv3cI3cDwSVn9wZJk0AEwMSm1TYFFRqmcR0A== +sequelize@^6.37.5: + version "6.37.5" + resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-6.37.5.tgz#2711ab97d0e0fe49c652368946a7312eb0f11cd7" + integrity sha512-10WA4poUb3XWnUROThqL2Apq9C2NhyV1xHPMZuybNMCucDsbbFuKg51jhmyvvAUyUqCiimwTZamc3AHhMoBr2Q== dependencies: - "@types/debug" "^4.1.7" - "@types/validator" "^13.7.1" - debug "^4.3.3" - dottie "^2.0.2" - inflection "^1.13.2" + "@types/debug" "^4.1.8" + "@types/validator" "^13.7.17" + debug "^4.3.4" + dottie "^2.0.6" + inflection "^1.13.4" lodash "^4.17.21" - moment "^2.29.1" - moment-timezone "^0.5.35" - pg-connection-string "^2.5.0" - retry-as-promised "^7.0.3" - semver "^7.3.5" + moment "^2.29.4" + moment-timezone "^0.5.43" + pg-connection-string "^2.6.1" + retry-as-promised "^7.0.4" + semver "^7.5.4" sequelize-pool "^7.1.0" toposort-class "^1.0.1" uuid "^8.3.2" - validator "^13.7.0" + validator "^13.9.0" wkx "^0.5.0" -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== +serve-static@1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" + integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== dependencies: - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.18.0" + send "0.19.0" set-blocking@^2.0.0: version "2.0.0" @@ -1843,20 +1980,65 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + es-errors "^1.3.0" + object-inspect "^1.13.3" -signal-exit@^3.0.0, signal-exit@^3.0.7: +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.0.6: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + simple-update-notifier@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.0.7.tgz#7edf75c5bdd04f88828d632f762b2bc32996a9cc" @@ -1864,15 +2046,6 @@ simple-update-notifier@^1.0.7: dependencies: semver "~7.0.0" -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - smart-buffer@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" @@ -1895,18 +2068,14 @@ socks@^2.6.2: ip "^2.0.0" smart-buffer "^4.2.0" -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -sqlite3@^5.1.6: - version "5.1.6" - resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.1.6.tgz#1d4fbc90fe4fbd51e952e0a90fd8f6c2b9098e97" - integrity sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw== +sqlite3@^5.1.7: + version "5.1.7" + resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.1.7.tgz#59ca1053c1ab38647396586edad019b1551041b7" + integrity sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog== dependencies: - "@mapbox/node-pre-gyp" "^1.0.0" - node-addon-api "^4.2.0" + bindings "^1.5.0" + node-addon-api "^7.0.0" + prebuild-install "^7.1.1" tar "^6.1.11" optionalDependencies: node-gyp "8.x" @@ -1939,19 +2108,24 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -supports-color@^5.3.0, supports-color@^5.5.0: +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -1965,16 +2139,26 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -table@^6.0.9: - version "6.8.0" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" - integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== +tar-fs@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: version "6.1.13" @@ -1988,11 +2172,6 @@ tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: mkdirp "^1.0.3" yallist "^4.0.0" -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -2032,6 +2211,13 @@ tslib@^2.4.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -2039,11 +2225,6 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -2098,15 +2279,10 @@ uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -validator@^13.7.0: - version "13.9.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-13.9.0.tgz#33e7b85b604f3bbce9bb1a05d5c3e22e1c2ff855" - integrity sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA== +validator@^13.9.0: + version "13.12.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.12.0.tgz#7d78e76ba85504da3fee4fd1922b385914d4b35f" + integrity sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg== vary@^1, vary@~1.1.2: version "1.1.2" @@ -2133,7 +2309,7 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" -wide-align@^1.1.2, wide-align@^1.1.5: +wide-align@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== @@ -2147,22 +2323,27 @@ wkx@^0.5.0: dependencies: "@types/node" "*" -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@^8.8.1: - version "8.8.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" - integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== +ws@^8.13.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -- cgit v1.2.3 From 5777f96394444dab18a81d6f085ac81df3e62008 Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Tue, 25 Feb 2025 23:13:39 -0500 Subject: 2.13 Release (finally); Added more API entries; Proper logging --- api/server.js | 51 +++++++++++++++++++- bot_discord.js | 108 ++++++++++++++++++++++++------------------ commands/addquote.js | 4 +- commands/quote.js | 3 +- commands/setlogchannel.js | 25 ++++++---- models/guild-settings.js | 25 ++++++---- package.json | 2 +- storage/settings.json | 2 +- sync-database.js | 4 +- web/astro.config.mjs | 10 +++- web/src/components/Quotes.jsx | 7 +-- web/src/pages/index.astro | 3 +- 12 files changed, 165 insertions(+), 79 deletions(-) (limited to 'package.json') diff --git a/api/server.js b/api/server.js index 2a2afad..acfe528 100644 --- a/api/server.js +++ b/api/server.js @@ -5,7 +5,7 @@ require('dotenv').config() const app = express(); -const createServer = () => { +const apiServer = (client) => { app.use(cors()); // Allow cross-origin requests app.use(express.json()); @@ -17,10 +17,57 @@ const createServer = () => { }); + app.get('/api/uptime', (req, res) => { + res.json(client.uptime); + }); + + app.get('/api/servers', (req, res) => { + const guildsInfo = []; + + if (client.guilds.cache.size === 0) { + res.json({ + message: 'No servers found' + }) + } else { + client.guilds.cache.forEach((guild) => { + const guildInfo = { + name: guild.name, + members: guild.memberCount, + id: guild.id + }; + guildsInfo.push(guildInfo); + }); + } + + res.json(guildsInfo); + + }); + + app.post('/api/leave', (req, res) => { + const { id } = req.body; + let guild = client.guilds.cache.get(id); + + try { + guild.leave().then(guild => { + res.json({ + guild: guild.name, + left: true + }) + }); + + } catch (error) { + console.error('Error leaving server:', error); + res.status(500).res.json({ + guild: guild.name, + left: false + }) + } + }); + // Start the server app.listen(process.env.port, () => { console.log(`Server is running on http://localhost:${process.env.port}`); }); }; -module.exports = createServer; +module.exports = apiServer; diff --git a/bot_discord.js b/bot_discord.js index 5a38940..1a87074 100644 --- a/bot_discord.js +++ b/bot_discord.js @@ -33,12 +33,15 @@ const colors = require('colors'); //const i18next = require('i18next'); const settings = require('./storage/settings.json'); const { activity } = require('./storage/activities'); -const createServer = require("./api/server"); +const apiServer = require("./api/server"); const active = new Map(); let autoRole = true; let readyEmbedMessage = true; + +const { guildSettings } = require('./models/guild-settings'); + const ownerID = '242775871059001344'; -let logChannel = '318874545593384970'; +//let logChannel = '318874545593384970'; let statusChannelID = '606602551634296968'; let serverWhitelist = "243022206437687296"; let roleWhitelist = "657426918416580614"; @@ -218,7 +221,7 @@ client.on('ready', async () => { botPresence(); - createServer(); + apiServer(client); setInterval(function() { botPresence(); @@ -238,8 +241,10 @@ client.on('ready', async () => { rl.prompt(); }); -client.on('guildMemberAdd', (member) => { - if (member.guild.id !== serverWhitelist) return; +client.on('guildMemberAdd', async (member) => { + const guildSetting = await guildSettings.findOne({ where: { guildID: member.guild.id } }); + if (!guildSetting || !guildSetting.logChannelID) return; + const logEmbed = new Discord.MessageEmbed() .setAuthor('AleeBot Logging', client.user.avatarURL()) .setDescription(`A user has joined this server!`) @@ -249,7 +254,7 @@ client.on('guildMemberAdd', (member) => { .setColor('#4bff31') .setTimestamp(); - let guildMember = client.channels.cache.get(logChannel); + let guildMember = client.channels.cache.get(guildSetting.logChannelID); if (!guildMember) return; guildMember.send({ embeds: [logEmbed]}); @@ -261,8 +266,10 @@ client.on('guildMemberAdd', (member) => { } }); -client.on('guildMemberRemove', (member) => { - if (member.guild.id !== serverWhitelist) return; +client.on('guildMemberRemove', async (member) => { + const guildSetting = await guildSettings.findOne({ where: { guildID: member.guild.id } }); + if (!guildSetting || !guildSetting.logChannelID) return; + const logEmbed = new Discord.MessageEmbed() .setAuthor('AleeBot Logging', client.user.avatarURL()) .setDescription(`A user has left this server!`) @@ -271,7 +278,7 @@ client.on('guildMemberRemove', (member) => { .setColor('#ec2727') .setTimestamp(); - let guildMember = client.channels.cache.get(logChannel); + let guildMember = client.channels.cache.get(guildSetting.logChannelID); if (!guildMember) return; guildMember.send({ embeds: [logEmbed]}); @@ -279,7 +286,10 @@ client.on('guildMemberRemove', (member) => { client.on('messageUpdate', async (oldMessage, newMessage) => { - if (!oldMessage.guild || oldMessage.guild.id !== serverWhitelist) return; + const guildSetting = await guildSettings.findOne({ where: { guildID: oldMessage.guild.id } }); + if (!oldMessage.guild || !guildSetting || !guildSetting.logChannelID) return; + + //if (!oldMessage.guild || oldMessage.guild.id !== serverWhitelist) return; if (oldMessage.content === newMessage.content) { return; } @@ -292,14 +302,18 @@ client.on('messageUpdate', async (oldMessage, newMessage) => { .setTimestamp() .setFooter(`Author ID: ${oldMessage.author.id}`); - let editMessage = client.channels.cache.get(logChannel); + let editMessage = client.channels.cache.get(guildSetting.logChannelID); if (!editMessage) return; editMessage.send({ embeds: [logEmbed]}); }); -client.on('messageDelete', (message) => { - if (message.guild.id !== serverWhitelist) return; +client.on('messageDelete', async (message) => { + if (!message.content) return; + + const guildSetting = await guildSettings.findOne({ where: { guildID: message.guild.id } }); + if (!guildSetting || !guildSetting.logChannelID) return; + const logEmbed = new Discord.MessageEmbed() .setAuthor('AleeBot Logging', client.user.avatarURL()) .setDescription(`A message from ${message.author.username} was deleted in <#${message.channel.id}>`) @@ -308,43 +322,47 @@ client.on('messageDelete', (message) => { .setTimestamp() .setFooter(`Author ID: ${message.author.id}`); - let deleteMessage = client.channels.cache.get(logChannel); + let deleteMessage = client.channels.cache.get(guildSetting.logChannelID); if (!deleteMessage) return; deleteMessage.send({ embeds: [logEmbed]}); }); -client.on('guildBanAdd', (guild, user) => { - if (guild.id !== serverWhitelist) return; - const logEmbed = new Discord.MessageEmbed() - .setAuthor('AleeBot Logging', client.user.avatarURL()) - .setDescription(`This user got banned from ${guild.name}`) - .addField('User:', `${user.tag}`) - .addField('User ID:', `${user.id}`) - .setColor('#ff021b') - .setTimestamp(); - - let banMessage = client.channels.cache.get(logChannel); - if (!banMessage) return; - - banMessage.send({ embeds: [logEmbed]}); -}); - -client.on('guildBanRemove', (guild, user) => { - if (guild.id !== serverWhitelist) return; - const logEmbed = new Discord.MessageEmbed() - .setAuthor('AleeBot Logging', client.user.avatarURL()) - .setDescription(`This user got unbanned from ${guild.name}`) - .addField('User:', `${user.tag}`) - .addField('User ID:', `${user.id}`) - .setColor('#ff021b') - .setTimestamp(); - - let banMessage = client.channels.cache.get(logChannel); - if (!banMessage) return; - - banMessage.send({ embeds: [logEmbed]}); -}); +// client.on('guildBanAdd', async (guild, user) => { +// const guildSetting = await guildSettings.findOne({ where: { guildID: guild.id } }); +// if (!guildSetting || !guildSetting.logChannelID) return; +// +// const logEmbed = new Discord.MessageEmbed() +// .setAuthor('AleeBot Logging', client.user.avatarURL()) +// .setDescription(`This user got banned from ${guild.name}`) +// .addField('User:', `${user.tag}`) +// .addField('User ID:', `${user.id}`) +// .setColor('#ff021b') +// .setTimestamp(); +// +// let banMessage = client.channels.cache.get(guildSetting.logChannelID); +// if (!banMessage) return; +// +// banMessage.send({ embeds: [logEmbed]}); +// }); +// +// client.on('guildBanRemove', async (guild, user) => { +// const guildSetting = await guildSettings.findOne({ where: { guildID: guild.id } }); +// if (!guildSetting || !guildSetting.logChannelID) return; +// +// const logEmbed = new Discord.MessageEmbed() +// .setAuthor('AleeBot Logging', client.user.avatarURL()) +// .setDescription(`This user got unbanned from ${guild.name}`) +// .addField('User:', `${user.tag}`) +// .addField('User ID:', `${user.id}`) +// .setColor('#ff021b') +// .setTimestamp(); +// +// let banMessage = client.channels.cache.get(guildSetting.logChannelID); +// if (!banMessage) return; +// +// banMessage.send({ embeds: [logEmbed]}); +// }); client.on('guildCreate', (guild) => { log(`[i] New guild joined: ${guild.name} (${guild.id}). This guild has ${guild.memberCount} members!`.blue); diff --git a/commands/addquote.js b/commands/addquote.js index cedee4d..6eae015 100644 --- a/commands/addquote.js +++ b/commands/addquote.js @@ -85,7 +85,7 @@ module.exports.run = async (client, message) => { return; } } else if (msg.content.startsWith('http') && (msg.content.endsWith('.jpg') || msg.content.endsWith('.jpeg') || msg.content.endsWith('.png'))) { - newAuthorImage = message.content; + newAuthorImage = msg.content; } else { await dmChannel.send('Invalid input. Please provide an image URL or attach an image file.'); collector.stop(); @@ -157,7 +157,7 @@ module.exports.run = async (client, message) => { await dmChannel.send('Invalid file type. Please attach a .jpg or .png image.'); } } else if (imageResponse.first().content.startsWith('http') && (imageResponse.first().content.endsWith('.jpg') || imageResponse.first().content.endsWith('.jpeg') || imageResponse.first().content.endsWith('.png'))) { - newAuthorImage = message.content; + newAuthorImage = imageResponse.first().content; } else { await dmChannel.send('Invalid input. Please provide an image URL or attach an image file.'); } diff --git a/commands/quote.js b/commands/quote.js index 02699cd..f19675f 100644 --- a/commands/quote.js +++ b/commands/quote.js @@ -30,13 +30,12 @@ module.exports.run = async (client, message, args) => { const quote = await quoteDB.findOne({ where: { id: quoteID } }) - if (quote) { const quoteEmbed = new MessageEmbed() .setAuthor({ name: quote.author, iconURL: quote.authorImage }) .setDescription(quote.quote) .setColor('#1fd619') - .setFooter('- ' + quote.year); + .setFooter(`- ${quote.year}\nSubmitted by ${quote.submitter}`); await message.reply({ embeds: [quoteEmbed] }) } else { diff --git a/commands/setlogchannel.js b/commands/setlogchannel.js index c04e926..d989f8b 100644 --- a/commands/setlogchannel.js +++ b/commands/setlogchannel.js @@ -17,21 +17,30 @@ * along with this program. If not, see . * * *************************************/ -const guildDB = require ('../models/guild-settings') -module.exports.run = async (client, message) => { +const { guildSettings } = require ('../models/guild-settings') +module.exports.run = async (client, message, args) => { //This will be replaced in the future possibly if (!message.member.permissions.has('MANAGE_GUILD')) return message.reply('It looks like that you can\'t manage this server.'); - const channel = await message.mentions.channels.first().id; - const [ guild ] = await guildDB.findOrCreate({ where: { id: message.guild.id } } ) + + let channel; + + if (message.mentions.channels.first()) { + channel = message.mentions.channels.first().id; + } else if (args[0] && message.guild.channels.cache.has(args[0])) { + channel = args[0]; + } else { + return await message.reply('Please enter a valid channel ID.') + } + + const [ guild ] = await guildSettings.findOrCreate({ where: { guildID: message.guild.id } } ) if (!channel) { message.reply('No channel has been set, disabling the logging channel feature...'); - await guild.update({ channelId: null } ); + await guild.update({ logChannelID: null } ); } else { - await guild.update({ channelId: message.guild.id } ) ; + await guild.update({ logChannelID: channel } ); + await message.reply(`Logging channel has been set to <#${channel}>`); } - - await message.reply(`Logging channel has been set to <#${channel}>`); }; exports.conf = { diff --git a/models/guild-settings.js b/models/guild-settings.js index 2e4f8ef..8cc7478 100644 --- a/models/guild-settings.js +++ b/models/guild-settings.js @@ -3,22 +3,27 @@ const sequelize = require('../utils/sequelize'); const guildSettings = sequelize.define('guild-settings', { id: { - type: Sequelize.STRING, - primaryKey: true + type: Sequelize.INTEGER, + primaryKey: true, + autoIncrement: true, }, - logChannelID: { + guildID: { type: Sequelize.STRING, - allowNull: true + allowNull: false }, - autoRoleToggle: { - type: Sequelize.BOOLEAN, - allowNull: true - }, - autoRoleID: { + logChannelID: { type: Sequelize.STRING, allowNull: true } + // qotdChannelID: { + // type: Sequelize.STRING, + // allowNull: true + // }, + // qotdToggle: { + // type: Sequelize.BOOLEAN, + // allowNull: true + // } }) -module.exports = guildSettings +module.exports = { guildSettings } diff --git a/package.json b/package.json index b300082..404b4a5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aleebot", - "version": "2.13.0b", + "version": "2.13.0", "description": "A chat bot for discord written in discord.js.", "main": "bot_discord.js", "scripts": { diff --git a/storage/settings.json b/storage/settings.json index b53fd84..4a6911c 100644 --- a/storage/settings.json +++ b/storage/settings.json @@ -1,4 +1,4 @@ { - "abVersion": "2.13.0 Beta", + "abVersion": "2.13.0", "prefix": "ab:" } diff --git a/sync-database.js b/sync-database.js index f7b9211..7a9271c 100644 --- a/sync-database.js +++ b/sync-database.js @@ -1,5 +1,5 @@ const { quote, pendingQuote } = require("./models/quote"); -const guildDB = require ('./models/guild-settings'); +const { guildSettings } = require ('./models/guild-settings'); quote.sync({alter: true}).then(() => { console.log('Quote database synced!') }); @@ -8,6 +8,6 @@ pendingQuote.sync({alter: true}).then(() => { console.log('Pending Quote database synced!') }); -guildDB.sync({alter: true}).then(() => { +guildSettings.sync({alter: true}).then(() => { console.log('Guild database synced!') }); diff --git a/web/astro.config.mjs b/web/astro.config.mjs index c0fd9ad..d32e23b 100644 --- a/web/astro.config.mjs +++ b/web/astro.config.mjs @@ -1,5 +1,5 @@ // @ts-check -import { defineConfig } from 'astro/config'; +import { defineConfig, envField } from 'astro/config'; import react from '@astrojs/react'; @@ -11,5 +11,11 @@ export default defineConfig({ adapter: node({ mode: 'standalone' - }) + }), + + env: { + schema: { + API_URL: envField.string({ context: 'client', access: 'public' }), + } + } }); diff --git a/web/src/components/Quotes.jsx b/web/src/components/Quotes.jsx index 831408d..1eb258a 100644 --- a/web/src/components/Quotes.jsx +++ b/web/src/components/Quotes.jsx @@ -1,12 +1,13 @@ import { useState, useEffect } from 'react'; import '../styles/Quote.css' +import { API_URL } from "astro:env/client"; export function PendingQuotes() { const [quotes, setQuotes] = useState([]); const fetchQuotes = async () => { try { - const response = await fetch('http://localhost:3000/api/pending-quotes'); + const response = await fetch(`${API_URL}/api/pending-quotes`); const data = await response.json(); setQuotes(data); } catch (error) { @@ -20,7 +21,7 @@ export function PendingQuotes() { const approveQuote = async (id) => { try { - const response = await fetch('http://localhost:3000/api/approve-quote', { + const response = await fetch(`${API_URL}/api/approve-quote`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -40,7 +41,7 @@ export function PendingQuotes() { const rejectQuote = async (id) => { try { - const response = await fetch('http://localhost:3000/api/reject-quote', { + const response = await fetch(`${API_URL}/api/reject-quote`, { method: 'POST', headers: { 'Content-Type': 'application/json', diff --git a/web/src/pages/index.astro b/web/src/pages/index.astro index 8136402..f1dc6e7 100644 --- a/web/src/pages/index.astro +++ b/web/src/pages/index.astro @@ -28,9 +28,10 @@ import { PendingQuotes } from '../components/Quotes';