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 --- commands/eval.js | 98 +++++++++++++++++++++++++++----------------------------- 1 file changed, 48 insertions(+), 50 deletions(-) (limited to 'commands/eval.js') 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', +}; -- 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 'commands/eval.js') 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 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 'commands/eval.js') 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 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 'commands/eval.js') 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