From 60f85fb5ff909de93c5d671f1dc17bfb0cc2a22b Mon Sep 17 00:00:00 2001 From: loicbersier Date: Wed, 4 Mar 2020 02:08:04 +0100 Subject: [PATCH] Major DIscord.js & Discord-akairo update --- commands/admin/banword.js | 2 +- commands/fun/fakebot.js | 2 +- commands/fun/fakejoin.js | 4 +- commands/fun/fakeleave.js | 4 +- commands/general/tweet.js | 14 +- commands/owner/addDonator.js | 6 +- commands/owner/blacklist.js | 4 +- commands/owner/censor.js | 58 ---- commands/owner/dm.js | 4 +- commands/owner/uncensor.js | 58 ---- commands/reserved/fartpiss.js | 2 +- commands/utility/about.js | 8 +- commands/utility/donator.js | 2 +- commands/utility/feedback.js | 2 +- commands/utility/screenshot.js | 65 ++++ commands/utility/stats.js | 6 +- commands/utility/wallpaper.js | 2 - event/inhibitors/serverblacklist.js | 1 + event/listeners/commandblocked.js | 2 +- event/listeners/error.js | 2 +- event/listeners/guildCreate.js | 4 +- event/listeners/guildDelete.js | 4 +- event/listeners/guildMemberAdd.js | 2 +- event/listeners/guildMemberRemove.js | 2 +- event/listeners/messageReactionAdd.js | 38 +-- event/listeners/messageReactionRemove.js | 42 +-- event/listeners/ready.js | 33 ++- package-lock.json | 362 ++++++++++++++++++----- package.json | 7 +- rand.js | 4 +- 30 files changed, 453 insertions(+), 293 deletions(-) delete mode 100644 commands/owner/censor.js delete mode 100644 commands/owner/uncensor.js create mode 100644 commands/utility/screenshot.js diff --git a/commands/admin/banword.js b/commands/admin/banword.js index aac1fece..f4c6547e 100644 --- a/commands/admin/banword.js +++ b/commands/admin/banword.js @@ -4,7 +4,7 @@ const BannedWords = require('../../models').bannedWords; class BannedWordsCommand extends Command { constructor() { super('BannedWords', { - aliases: ['bannedword', 'banword', 'unbanword'], + aliases: ['bannedword', 'banword', 'unbanword', 'censor', 'uncensor'], category: 'admin', userPermissions: ['MANAGE_MESSAGES'], clientPermissions: ['MANAGE_MESSAGES', 'SEND_MESSAGES'], diff --git a/commands/fun/fakebot.js b/commands/fun/fakebot.js index 8fe460b8..fb027212 100644 --- a/commands/fun/fakebot.js +++ b/commands/fun/fakebot.js @@ -36,7 +36,7 @@ class fakebotCommand extends Command { let Attachment = (message.attachments).array(); let url; let username = args.user.username; - let member = message.guild.members.get(args.user.id); + let member = message.guild.members.resolve(args.user.id); // Get attachment link if (Attachment[0]) { url = Attachment[0].url; diff --git a/commands/fun/fakejoin.js b/commands/fun/fakejoin.js index 8c44ea02..5e1db5e2 100644 --- a/commands/fun/fakejoin.js +++ b/commands/fun/fakejoin.js @@ -29,9 +29,9 @@ class fakejoinCommand extends Command { if (join) { if (args.user) - member = message.guild.members.get(args.user.id); + member = message.guild.members.resolve(args.user.id); else - member = message.guild.members.get(message.author.id); + member = message.guild.members.resolve(message.author.id); } else { return message.channel.send('There is no join channel setup'); } diff --git a/commands/fun/fakeleave.js b/commands/fun/fakeleave.js index 39314154..fdde8d93 100644 --- a/commands/fun/fakeleave.js +++ b/commands/fun/fakeleave.js @@ -29,9 +29,9 @@ class fakeleaveCommand extends Command { if (leave) { if (args.user) - member = message.guild.members.get(args.user.id); + member = message.guild.members.resolve(args.user.id); else - member = message.guild.members.get(message.author.id); + member = message.guild.members.resolve(message.author.id); } else { return message.channel.send('There is no leave channel setup'); } diff --git a/commands/general/tweet.js b/commands/general/tweet.js index b31d6f9c..d5a80df7 100644 --- a/commands/general/tweet.js +++ b/commands/general/tweet.js @@ -4,8 +4,6 @@ const fetch = require('node-fetch'); const os = require('os'); const fs = require('fs'); const rand = require('../../rand.js'); -//const Filter = require('bad-words'); -//let filter = new Filter(); const TwitterBlacklist = require('../../models').TwitterBlacklist; const { twiConsumer, twiConsumerSecret, twiToken, twiTokenSecret, twiChannel } = require('../../config.json'); @@ -41,16 +39,16 @@ class tweetCommand extends Command { if (blacklist) { return message.channel.send(`You have been blacklisted for the following reasons: \`\`${blacklist.get('reason')}\`\` be less naughty less time.`); } + // Don't let account new account use this command to prevent spam + if (message.author.createdAt > date.setDate(date.getDate() - 7)) { + return message.channel.send('Your account is too new to be able to use this command!'); + } // If account is younger than 6 months old don't accept attachment if (Attachment[0] && message.author.createdAt > date.setMonth(date.getMonth() - 6)) { return message.channel.send('Your account need to be 6 months or older to be able to send attachment!'); } - // Don't let account new account use this command to prevent spam - if (message.author.createdAt > date.setDate(date.getDate() - 7)) { - return message.channel.send('Your account is too new to be able to use this command!'); - } if (args.text.includes('discord.gg')) return message.channel.send('No discord invite allowed.'); @@ -164,7 +162,7 @@ class tweetCommand extends Command { if (Attachment[0]) publicEmbed.setImage(Attachment[0].url); // Im too lazy for now to make an entry in config.json - let channel = client.channels.get('597964498921455637'); + let channel = client.channels.resolve('597964498921455637'); channel.send({embed: publicEmbed}); const Embed = client.util.embed() @@ -178,7 +176,7 @@ class tweetCommand extends Command { if (Attachment[0]) Embed.setImage(Attachment[0].url); - channel = client.channels.get(twiChannel); + channel = client.channels.resolve(twiChannel); channel.send({embed: Embed}); return message.channel.send(`Go see ur epic tweet https://twitter.com/i/status/${tweetid}`); }); diff --git a/commands/owner/addDonator.js b/commands/owner/addDonator.js index f7a288eb..e5415829 100644 --- a/commands/owner/addDonator.js +++ b/commands/owner/addDonator.js @@ -43,7 +43,7 @@ class addDonatorCommand extends Command { if (!Donator) { const body = {userID: args.id, comment: userComment}; donator.create(body); - return message.channel.send(`A new donator have been added! ${this.client.users.get(args.id).username}#${this.client.users.get(args.id).discriminator} (${args.id}) ${userComment}`); + return message.channel.send(`A new donator have been added! ${this.client.users.resolve(args.id).username}#${this.client.users.resolve(args.id).discriminator} (${args.id}) ${userComment}`); } else { message.channel.send('This donator already exist, do you want to update it? y/n'); const filter = m => m.content && m.author.id == message.author.id; @@ -55,9 +55,9 @@ class addDonatorCommand extends Command { donator.update(body, {where: {userID: args.id}}); console.log(userComment); if (userComment == '') { - return message.channel.send(`Removed the comment from ${this.client.users.get(args.id).username}#${this.client.users.get(args.id).discriminator} (${args.id})`); + return message.channel.send(`Removed the comment from ${this.client.users.resolve(args.id).username}#${this.client.users.resolve(args.id).discriminator} (${args.id})`); } else { - return message.channel.send(`You edited the comment for ${this.client.users.get(args.id).username}#${this.client.users.get(args.id).discriminator} (${args.id}) with ${args.userComment}`); + return message.channel.send(`You edited the comment for ${this.client.users.resolve(args.id).username}#${this.client.users.resolve(args.id).discriminator} (${args.id}) with ${args.userComment}`); } } }) diff --git a/commands/owner/blacklist.js b/commands/owner/blacklist.js index 279df46a..2f80d602 100644 --- a/commands/owner/blacklist.js +++ b/commands/owner/blacklist.js @@ -32,7 +32,7 @@ class blacklistCommand extends Command { if (!blacklist) { const body = {userID: args.userID}; userBlacklist.create(body); - return message.channel.send(`The following user have been blacklisted: ${this.client.users.get(args.userID).username}#${this.client.users.get(args.userID).discriminator} (${args.userID})`); + return message.channel.send(`The following user have been blacklisted: ${this.client.users.resolve(args.userID).username}#${this.client.users.resolve(args.userID).discriminator} (${args.userID})`); } else { message.channel.send('This user is already blacklisted, do you want to unblacklist him? y/n'); const filter = m => m.content && m.author.id == message.author.id; @@ -41,7 +41,7 @@ class blacklistCommand extends Command { let messageContent = messages.map(messages => messages.content); if (messageContent == 'y' || messageContent == 'yes') { userBlacklist.destroy({where: {userID:args.userID}}); - return message.channel.send(`The following user have been unblacklisted: ${this.client.users.get(args.userID).username}#${this.client.users.get(args.userID).discriminator} (${args.userID})`); + return message.channel.send(`The following user have been unblacklisted: ${this.client.users.resolve(args.userID).username}#${this.client.users.resolve(args.userID).discriminator} (${args.userID})`); } }) .catch(err => { diff --git a/commands/owner/censor.js b/commands/owner/censor.js deleted file mode 100644 index baf55fc3..00000000 --- a/commands/owner/censor.js +++ /dev/null @@ -1,58 +0,0 @@ -const { Command } = require('discord-akairo'); -const fs = require('fs'); - -class censorCommand extends Command { - constructor() { - super('censor', { - aliases: ['censor'], - category: 'owner', - ownerOnly: 'true', - args: [ - { - id: 'word', - type: 'string', - match: 'rest' - } - ], - description: { - content: 'Censor word for twitter', - usage: '[word]', - examples: ['nigger'] - } - }); - } - - async exec(message, args) { - let word = args.word; - - word = word.toLowerCase(); - - let words = []; - let json = JSON.stringify(words); - - fs.readFile('./json/censor.json', 'utf8', function readFileCallback(err, data) { - if (err) { - fs.writeFile('./json/censor.json', `["${word}"]`, function (err) { - if (err) { - - console.log(err); - } - }); - } else { - words = JSON.parse(data); //now it an object - words.push(word); - json = JSON.stringify(words); //convert it back to json - fs.writeFile('./json/censor.json', json, 'utf8', function (err) { - if (err) { - return console.log(err); - } - }); - } - }); - - - return message.channel.send(`censored the word ${word}`); - } -} - -module.exports = censorCommand; \ No newline at end of file diff --git a/commands/owner/dm.js b/commands/owner/dm.js index 2e3f752a..5e1cb492 100644 --- a/commands/owner/dm.js +++ b/commands/owner/dm.js @@ -31,7 +31,7 @@ class EvalCommand extends Command { let Attachment = (message.attachments).array(); if (Attachment[0]) { - this.client.users.get(user.id).send(`**Message from the dev:**\n${text}\n**If you wish to respond use the feedback command**`, {files: [Attachment[0].url]}) + this.client.users.resolve(user.id).send(`**Message from the dev:**\n${text}\n**If you wish to respond use the feedback command**`, {files: [Attachment[0].url]}) .then(() => { return message.channel.send(`DM sent to ${user.username}`); }) @@ -40,7 +40,7 @@ class EvalCommand extends Command { }); } else { - this.client.users.get(user.id).send(`**Message from the dev:**\n${text}\n**If you wish to respond use the feedback command**`) + this.client.users.resolve(user.id).send(`**Message from the dev:**\n${text}\n**If you wish to respond use the feedback command**`) .then(() => { return message.channel.send(`DM sent to ${user.username}`); }) diff --git a/commands/owner/uncensor.js b/commands/owner/uncensor.js deleted file mode 100644 index ed10b9f7..00000000 --- a/commands/owner/uncensor.js +++ /dev/null @@ -1,58 +0,0 @@ -const { Command } = require('discord-akairo'); -const fs = require('fs'); - -class uncensorCommand extends Command { - constructor() { - super('uncensor', { - aliases: ['uncensor'], - category: 'owner', - ownerOnly: 'true', - args: [ - { - id: 'word', - type: 'string', - match: 'rest' - } - ], - description: { - content: 'Unensor word for twitter', - usage: '[word]', - examples: ['shit'] - } - }); - } - - async exec(message, args) { - let word = args.word; - - word = word.toLowerCase(); - - let words = []; - let json = JSON.stringify(words); - - fs.readFile('./json/uncensor.json', 'utf8', function readFileCallback(err, data) { - if (err) { - fs.writeFile('./json/uncensor.json', `["${word}"]`, function (err) { - if (err) { - - console.log(err); - } - }); - } else { - words = JSON.parse(data); //now it an object - words.push(word); - json = JSON.stringify(words); //convert it back to json - fs.writeFile('./json/uncensor.json', json, 'utf8', function (err) { - if (err) { - return console.log(err); - } - }); - } - }); - - - return message.channel.send(`Uncensored the word ${word}`); - } -} - -module.exports = uncensorCommand; \ No newline at end of file diff --git a/commands/reserved/fartpiss.js b/commands/reserved/fartpiss.js index 99b36598..f80d55b3 100644 --- a/commands/reserved/fartpiss.js +++ b/commands/reserved/fartpiss.js @@ -26,7 +26,7 @@ class fartpissCommand extends Command { } if (!args.member) { - return message.guild.members.get(message.author.id).setNickname('fart piss') + return message.guild.members.resolve(message.author.id).setNickname('fart piss') .then(() => message.channel.send('sucessfully fart pissed on you <:youngtroll:488559163832795136>')) .catch(() => message.channel.send('Sorry i could not fart piss on you :(')); } else { diff --git a/commands/utility/about.js b/commands/utility/about.js index f76f310e..2f2d3eb6 100644 --- a/commands/utility/about.js +++ b/commands/utility/about.js @@ -18,11 +18,11 @@ class aboutCommand extends Command { async exec(message) { const Donator = await donator.findAll({order: ['id']}); - let description = `This bot is made using [discord.js](https://github.com/discordjs/discord.js) & [Discord-Akairo](https://github.com/discord-akairo/discord-akairo)\nHelp command from [hoshi](https://github.com/1Computer1/hoshi)\n[Rantionary](https://github.com/RantLang/Rantionary) for their dictionnary.\nThanks to ${this.client.users.get('336492042299637771').username}#${this.client.users.get('336492042299637771').discriminator} (336492042299637771) for inspiring me for making this bot!\n\nThe people who donated for the bot <3\n`; + let description = `This bot is made using [discord.js](https://github.com/discordjs/discord.js) & [Discord-Akairo](https://github.com/discord-akairo/discord-akairo)\nHelp command from [hoshi](https://github.com/1Computer1/hoshi)\n[Rantionary](https://github.com/RantLang/Rantionary) for their dictionnary.\nThanks to ${this.client.users.resolve('336492042299637771').username}#${this.client.users.resolve('336492042299637771').discriminator} (336492042299637771) for inspiring me for making this bot!\n\nThe people who donated for the bot <3\n`; if (Donator[0]) { for (let i = 0; i < Donator.length; i++) { - description += `**${this.client.users.get(Donator[i].get('userID')).username}#${this.client.users.get(Donator[i].get('userID')).discriminator} (${Donator[i].get('userID')}) | ${Donator[i].get('comment')}**\n`; + description += `**${this.client.users.resolve(Donator[i].get('userID')).username}#${this.client.users.resolve(Donator[i].get('userID')).discriminator} (${Donator[i].get('userID')}) | ${Donator[i].get('comment')}**\n`; } } else { description += 'No one :('; @@ -34,10 +34,10 @@ class aboutCommand extends Command { .setAuthor(this.client.user.username, this.client.user.avatarURL()) .setTitle('About me') .setDescription(description) - .addField('Current owner: ', `${this.client.users.get(this.client.ownerID).username}#${this.client.users.get(this.client.ownerID).discriminator} (${this.client.ownerID})`) + .addField('Current owner: ', `${this.client.users.resolve(this.client.ownerID).username}#${this.client.users.resolve(this.client.ownerID).discriminator} (${this.client.ownerID})`) .addField('Gitlab', 'https://gitlab.com/LoicBersier/DiscordBot', true) .addField('Github', 'https://github.com/loicbersier/Haha-yes', true) - .setFooter(`Original bot made by ${this.client.users.get('267065637183029248').username}#${this.client.users.get('267065637183029248').discriminator} (267065637183029248)`); // Please don't change the "original bot made by" + .setFooter(`Original bot made by ${this.client.users.resolve('267065637183029248').username}#${this.client.users.resolve('267065637183029248').discriminator} (267065637183029248)`); // Please don't change the "original bot made by" message.channel.send(aboutEmbed); } diff --git a/commands/utility/donator.js b/commands/utility/donator.js index 082eb42e..66a0d5e8 100644 --- a/commands/utility/donator.js +++ b/commands/utility/donator.js @@ -22,7 +22,7 @@ class donatorCommand extends Command { if (Donator[0]) { for (let i = 0; i < Donator.length; i++) { - donatorMessage += `**${this.client.users.get(Donator[i].get('userID')).username}#${this.client.users.get(Donator[i].get('userID')).discriminator} (${Donator[i].get('userID')}) | ${Donator[i].get('comment')}**\n`; + donatorMessage += `**${this.client.users.resolve(Donator[i].get('userID')).username}#${this.client.users.resolve(Donator[i].get('userID')).discriminator} (${Donator[i].get('userID')}) | ${Donator[i].get('comment')}**\n`; } } else { donatorMessage += 'No one :('; diff --git a/commands/utility/feedback.js b/commands/utility/feedback.js index 61222793..f222f9cd 100644 --- a/commands/utility/feedback.js +++ b/commands/utility/feedback.js @@ -32,7 +32,7 @@ class FeedbackCommand extends Command { return message.channel.send('Your account is too new to be able to use this command!'); } - const channel = this.client.channels.get(feedbackChannel); + const channel = this.client.channels.resolve(feedbackChannel); const Embed = this.client.util.embed() .setAuthor(`${message.author.username} (${message.author.id})`, message.author.displayAvatarURL()) diff --git a/commands/utility/screenshot.js b/commands/utility/screenshot.js new file mode 100644 index 00000000..01696190 --- /dev/null +++ b/commands/utility/screenshot.js @@ -0,0 +1,65 @@ +const { Command } = require('discord-akairo'); +const captureWebsite = require('capture-website'); +const os = require('os'); +const fs = require('fs'); + +class screenshotCommand extends Command { + constructor() { + super('screenshot', { + aliases: ['screenshot', 'webshot', 'ss'], + category: 'utility', + clientPermissions: ['SEND_MESSAGES', 'ATTACH_FILES'], + ownerOnly: 'true', // Owner only until i am sure there is no security issue + args: [ + { + id: 'url', + type: 'string' + }, + { + id: 'fullpage', + type: 'flag', + flag: '--full' + } + ], + channelRestriction: 'guild', + description: { + content: 'Take a screenshot of a website', + usage: '[link to a website]', + examples: ['www.google.com'] + } + }); + } + + async exec(message, args) { + let Embed = this.client.util.embed() + .setColor(message.member.displayHexColor) + .setTitle(args.url); + + // eslint-disable-next-line no-useless-escape + let urlregex = new RegExp(/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/); + if (args.url.match(urlregex)) { // Only allow link with http/https + await captureWebsite.file(args.url, `${os.tmpdir()}/${message.id}.jpg`, { + type: 'jpeg', + headers: { + 'Accept-Language': 'en-GB' + }, + fullPage: args.fullpage + }) + .catch((err) => { + console.error(err); + Embed.setDescription(err.toString()); + return message.channel.send(Embed); + }) + .then(() => { + if (fs.existsSync(`${os.tmpdir()}/${message.id}.jpg`)) { + Embed.attachFiles([`${os.tmpdir()}/${message.id}.jpg`]); + Embed.setImage(`attachment://${message.id}.jpg`); + return message.channel.send(Embed); + } + }); + } else { + return message.channel.send('The URL you used doesn\'t correspond to a website!'); + } + } +} +module.exports = screenshotCommand; \ No newline at end of file diff --git a/commands/utility/stats.js b/commands/utility/stats.js index ba754964..54e14811 100644 --- a/commands/utility/stats.js +++ b/commands/utility/stats.js @@ -55,9 +55,9 @@ class StatsCommand extends Command { .setColor(message.member.displayHexColor) .setTitle('Bot stats') .setAuthor('Haha yes') - .addField('Servers', this.client.guilds.size, true) - .addField('Channels', this.client.channels.size, true) - .addField('Users', this.client.users.size, true) + .addField('Servers', this.client.guilds.cache.size, true) + .addField('Channels', this.client.channels.cache.size, true) + .addField('Users', this.client.users.cache.size, true) .addField('Uptime', dateString, true) .addField('Ram usage', `${Math.round(used * 100) / 100} MB`, true) .addField('CPU', cpu, true) diff --git a/commands/utility/wallpaper.js b/commands/utility/wallpaper.js index 27758dec..437389ae 100644 --- a/commands/utility/wallpaper.js +++ b/commands/utility/wallpaper.js @@ -31,8 +31,6 @@ class wallpaperCommand extends Command { return res.json(); }) .then(res => { - console.log(res); - const wallpaperEmbed = this.client.util.embed() .setColor(message.member.displayHexColor) .setTitle('Bing wallpaper of the day') diff --git a/event/inhibitors/serverblacklist.js b/event/inhibitors/serverblacklist.js index e71d5d9a..3334a284 100644 --- a/event/inhibitors/serverblacklist.js +++ b/event/inhibitors/serverblacklist.js @@ -9,6 +9,7 @@ class serverblacklistInhibitor extends Inhibitor { } async exec(message) { + if (message.channel.type == 'dm') return; const blacklist = await guildBlacklist.findOne({where: {guildID:message.guild.id}}); if (blacklist) return true; diff --git a/event/listeners/commandblocked.js b/event/listeners/commandblocked.js index 0594e5bf..e547d125 100644 --- a/event/listeners/commandblocked.js +++ b/event/listeners/commandblocked.js @@ -38,7 +38,7 @@ class CommandBlockedListener extends Listener { break; case 'serverblacklist': Embed.setTitle('Server blacklisted.'); - Embed.setDescription(`This server have been blacklisted... to appeal contact ${this.client.users.get(this.client.ownerID).username}#${this.client.users.get(this.client.ownerID).discriminator}, and now i will yeet out of here`); + Embed.setDescription(`This server have been blacklisted... to appeal contact ${this.client.users.resolve(this.client.ownerID).username}#${this.client.users.resolve(this.client.ownerID).discriminator}, and now i will yeet out of here`); message.channel.send(Embed); message.guild.leave(); break; diff --git a/event/listeners/error.js b/event/listeners/error.js index 0ed1d91e..721ac907 100644 --- a/event/listeners/error.js +++ b/event/listeners/error.js @@ -14,7 +14,7 @@ class errorListener extends Listener { async exec(message, error, command) { console.log(message); console.error(`Error happenend on the command: ${command.id}\n${message}\nOn the message: ${error}`); - const channel = this.client.channels.get(errorChannel); + const channel = this.client.channels.resolve(errorChannel); const errorEmbed = this.client.util.embed() .setColor('RED') .setTitle('Shit happened!') diff --git a/event/listeners/guildCreate.js b/event/listeners/guildCreate.js index 76c2c974..7e440003 100644 --- a/event/listeners/guildCreate.js +++ b/event/listeners/guildCreate.js @@ -12,7 +12,7 @@ class guildCreateListener extends Listener { async exec(guild) { console.log(`${guild.name}\n${guild.memberCount} users\nOwner: ${guild.owner.user.username}\nOwner ID: ${guild.owner}`); - const channel = this.client.channels.get(statsChannel); + const channel = this.client.channels.resolve(statsChannel); const addEmbed = this.client.util.embed() .setColor('#52e80d') .setTitle('New boiz in town') @@ -25,7 +25,7 @@ class guildCreateListener extends Listener { .addField('Number of bots', guild.members.filter(member => member.user.bot).size, true) .addField('Owner', guild.owner.user.username, true) .addField('Owner ID', guild.owner.id, true) - .setFooter(`I'm now in ${this.client.guilds.size} servers!`) + .setFooter(`I'm now in ${this.client.guilds.cache.size} servers!`) .setTimestamp(); channel.send({ embed: addEmbed }); diff --git a/event/listeners/guildDelete.js b/event/listeners/guildDelete.js index c3397ef1..209cd324 100644 --- a/event/listeners/guildDelete.js +++ b/event/listeners/guildDelete.js @@ -12,7 +12,7 @@ class guildCreateListener extends Listener { async exec(guild) { console.log(`***BOT KICKED***\n${guild.name}\n${guild.memberCount} users\nOwner: ${guild.owner.user.username}\nOwner ID: ${guild.owner}\n***BOT KICKED***`); - const channel = this.client.channels.get(statsChannel); + const channel = this.client.channels.resolve(statsChannel); const kickEmbed = this.client.util.embed() .setColor('#FF0000') @@ -26,7 +26,7 @@ class guildCreateListener extends Listener { .addField('Number of bots', guild.members.filter(member => member.user.bot).size, true) .addField('Owner', guild.owner.user.username, true) .addField('Owner ID', guild.owner.id, true) - .setFooter(`I'm now in ${this.client.guilds.size} servers!`) + .setFooter(`I'm now in ${this.client.guilds.cache.size} servers!`) .setTimestamp(); channel.send({ embed: kickEmbed }); diff --git a/event/listeners/guildMemberAdd.js b/event/listeners/guildMemberAdd.js index de806c72..570e57d6 100644 --- a/event/listeners/guildMemberAdd.js +++ b/event/listeners/guildMemberAdd.js @@ -19,7 +19,7 @@ class guildMemberAddListener extends Listener { const join = await joinChannel.findOne({where: {guildID: guild.guild.id}}); if (join) { - const channel = this.client.channels.get(join.get('channelID')); + const channel = this.client.channels.resolve(join.get('channelID')); let welcomeMessage = join.get('message'); diff --git a/event/listeners/guildMemberRemove.js b/event/listeners/guildMemberRemove.js index ee62e863..967f18ea 100644 --- a/event/listeners/guildMemberRemove.js +++ b/event/listeners/guildMemberRemove.js @@ -13,7 +13,7 @@ class guildMemberRemoveListener extends Listener { async exec(guild) { const leave = await leaveChannel.findOne({where: {guildID: guild.guild.id}}); if (leave) { - const channel = this.client.channels.get(leave.get('channelID')); + const channel = this.client.channels.resolve(leave.get('channelID')); let byeMessage = leave.get('message'); diff --git a/event/listeners/messageReactionAdd.js b/event/listeners/messageReactionAdd.js index 36e5d688..bcd40062 100644 --- a/event/listeners/messageReactionAdd.js +++ b/event/listeners/messageReactionAdd.js @@ -23,11 +23,10 @@ class MessageReactionAddListener extends Listener { let reactionCount = reaction.count; // If one of the reaction is the author of the message remove 1 to the reaction count - reaction.users.forEach(user => { + reaction.users.cache.forEach(user => { if (reaction.message.author == user) reactionCount--; }); - // Starboard if (fs.existsSync(`./board/star${reaction.message.guild.id}.json`)) { starboardChannel = require(`../../board/star${reaction.message.guild.id}.json`); @@ -36,11 +35,11 @@ class MessageReactionAddListener extends Listener { delete require.cache[require.resolve(`../../board/star${reaction.message.guild.id}.json`)]; // Delete the boardChannel cache so it can reload it next time // Get name of the custom emoji - if (this.client.util.resolveEmoji(staremote, reaction.message.guild.emojis)) { - staremote = this.client.util.resolveEmoji(staremote, reaction.message.guild.emojis).name; + if (reaction.message.guild.emojis.resolve(staremote.replace(/\D/g,''))) { + staremote = reaction.message.guild.emojis.resolve(staremote.replace(/\D/g,'')); } - if (reaction.emoji.name == staremote) { + if (reaction.emoji == staremote || reaction.emoji.name == staremote) { if (messageID[reaction.message.id] && reactionCount > starcount) { return editEmbed('starboard', staremote, messageID[reaction.message.id], this.client); } else if (reactionCount == starcount) { @@ -57,11 +56,11 @@ class MessageReactionAddListener extends Listener { delete require.cache[require.resolve(`../../board/shame${reaction.message.guild.id}.json`)]; // Delete the boardChannel cache so it can reload it next time // Get name of the custom emoji - if (this.client.util.resolveEmoji(shameemote, reaction.message.guild.emojis)) { - shameemote = this.client.util.resolveEmoji(shameemote, reaction.message.guild.emojis).name; + if (reaction.message.guild.emojis.resolve(shameemote.replace(/\D/g,''))) { + shameemote = reaction.message.guild.emojis.resolve(shameemote.replace(/\D/g,'')); } - if (reaction.emoji.name == shameemote) { + if (reaction.emoji == shameemote || reaction.emoji.name == shameemote) { if (messageID[reaction.message.id] && reactionCount > shamecount) { return editEmbed('shameboard', shameemote, messageID[reaction.message.id], this.client); } else if (reactionCount == shamecount) { @@ -73,12 +72,12 @@ class MessageReactionAddListener extends Listener { async function editEmbed(name, emote, boardID, client) { let channel; if (name == 'starboard') { - channel = client.channels.get(starboardChannel.starboard); + channel = client.channels.resolve(starboardChannel.starboard); } else { - channel = client.channels.get(shameboardChannel.shameboard); + channel = client.channels.resolve(shameboardChannel.shameboard); } - let message = await channel.messages.get(boardID); + let message = await channel.messages.resolve(boardID); // If the message doesn't have embeds assume it got deleted so don't do anything if (!message) return; @@ -94,12 +93,10 @@ class MessageReactionAddListener extends Listener { .addField('Jump to', `[message](https://discordapp.com/channels/${reaction.message.guild.id}/${reaction.message.channel.id}/${reaction.message.id})`, true) .addField('Channel', reaction.message.channel, true) .setDescription(description) - .setFooter(reactionCount + ' ' + emote) + .setFooter(`${emote} ${reactionCount}`) .setTimestamp(); - if (reaction.message.guild.emojis.find(emoji => emoji.name === emote)) { - Embed.setFooter(reactionCount, reaction.message.guild.emojis.find(emoji => emoji.name === emote).url); - } + if (reaction.message.guild.emojis.resolve(emote)) Embed.setFooter(reactionCount, reaction.message.guild.emojis.resolve(emote).url); message.edit({ embed: Embed }); } @@ -109,9 +106,9 @@ class MessageReactionAddListener extends Listener { // Should change this so it automatically pic the channel ( I'm lazy right now ) let channel; if (name == 'starboard') { - channel = client.channels.get(starboardChannel.starboard); + channel = client.channels.resolve(starboardChannel.starboard); } else { - channel = client.channels.get(shameboardChannel.shameboard); + channel = client.channels.resolve(shameboardChannel.shameboard); } let Embed = client.util.embed() @@ -119,17 +116,14 @@ class MessageReactionAddListener extends Listener { .setAuthor(reaction.message.author.username, reaction.message.author.displayAvatarURL()) .addField('Jump to', `[message](https://discordapp.com/channels/${reaction.message.guild.id}/${reaction.message.channel.id}/${reaction.message.id})`, true) .addField('Channel', reaction.message.channel, true) - .setFooter(reactionCount + ' ' + emote) + .setFooter(`${emote} ${reactionCount}`) .setTimestamp(); - if (reaction.message.guild.emojis.find(emoji => emoji.name === emote)) { - Embed.setFooter(reactionCount, reaction.message.guild.emojis.find(emoji => emoji.name === emote).url); - } + if (reaction.message.guild.emojis.resolve(emote)) Embed.setFooter(reactionCount, reaction.message.guild.emojis.resolve(emote).url); let description = ''; if (reaction.message.embeds[0]) { - console.log(reaction.message.embeds[0].url); if (reaction.message.embeds[0].type == 'image') { messageAttachments = reaction.message.embeds[0].url; } diff --git a/event/listeners/messageReactionRemove.js b/event/listeners/messageReactionRemove.js index 1792f324..6a789b4f 100644 --- a/event/listeners/messageReactionRemove.js +++ b/event/listeners/messageReactionRemove.js @@ -22,7 +22,7 @@ class messageReactionRemoveListener extends Listener { let reactionCount = reaction.count; // If one of the reaction removed is the author of the message add 1 to the reaction count - reaction.users.forEach(user => { + reaction.users.cache.forEach(user => { if (reaction.message.author == user) reactionCount++; }); @@ -33,19 +33,20 @@ class messageReactionRemoveListener extends Listener { let starcount = starboardChannel.count; delete require.cache[require.resolve(`../../board/star${reaction.message.guild.id}.json`)]; // Delete the boardChannel cache so it can reload it next time - if (this.client.util.resolveEmoji(staremote, reaction.message.guild.emojis)) { - staremote = this.client.util.resolveEmoji(staremote, reaction.message.guild.emojis).name; + // Get name of the custom emoji + if (reaction.message.guild.emojis.resolve(staremote.replace(/\D/g,''))) { + staremote = reaction.message.guild.emojis.resolve(staremote.replace(/\D/g,'')); } - if (messageID[reaction.message.id] && reaction.emoji.name == staremote && reactionCount < starcount) { - let channel = this.client.channels.get(starboardChannel.starboard); - let message = await channel.messages.get(messageID[reaction.message.id]); + if (messageID[reaction.message.id] && (reaction.emoji == staremote || reaction.emoji.name == staremote) && reactionCount < starcount) { + let channel = this.client.channels.resolve(starboardChannel.starboard); + let message = await channel.messages.resolve(messageID[reaction.message.id]); delete messageID[reaction.message.id]; // If it didn't find any message don't do anything if (!message) return; message.delete(); - } else if (reaction.emoji.name == staremote && reactionCount >= starcount) { + } else if ((reaction.emoji == staremote || reaction.emoji.name == staremote) && reactionCount >= starcount) { return editEmbed('starboard', staremote, messageID[reaction.message.id], this.client); } } @@ -57,16 +58,17 @@ class messageReactionRemoveListener extends Listener { let shamecount = shameboardChannel.count; delete require.cache[require.resolve(`../../board/shame${reaction.message.guild.id}.json`)]; // Delete the boardChannel cache so it can reload it next time - if (this.client.util.resolveEmoji(shameemote, reaction.message.guild.emojis)) { - shameemote = this.client.util.resolveEmoji(shameemote, reaction.message.guild.emojis).name; + // Get name of the custom emoji + if (reaction.message.guild.emojis.resolve(shameemote.replace(/\D/g,''))) { + shameemote = reaction.message.guild.emojis.resolve(shameemote.replace(/\D/g,'')); } - if (messageID[reaction.message.id] && reaction.emoji.name == shameemote && reactionCount < shamecount) { - let channel = this.client.channels.get(shameboardChannel.shameboard); - let message = await channel.messages.get(messageID[reaction.message.id]); + if (messageID[reaction.message.id] && (reaction.emoji == shameemote || reaction.emoji.name == shameemote) && reactionCount < shamecount) { + let channel = this.client.channels.resolve(shameboardChannel.shameboard); + let message = await channel.messages.resolve(messageID[reaction.message.id]); delete messageID[reaction.message.id]; message.delete(); - } else if (reaction.emoji.name == shameemote && reactionCount >= shamecount) { + } else if ((reaction.emoji == shameemote || reaction.emoji.name == shameemote) && reactionCount >= shamecount) { return editEmbed('shameboard', shameemote, messageID[reaction.message.id], this.client); } } @@ -74,19 +76,19 @@ class messageReactionRemoveListener extends Listener { async function editEmbed(name, emote, boardID, client) { let channel; if (name == 'starboard') { - channel = client.channels.get(starboardChannel.starboard); + channel = client.channels.resolve(starboardChannel.starboard); } else { - channel = client.channels.get(shameboardChannel.shameboard); + channel = client.channels.resolve(shameboardChannel.shameboard); } - let message = await channel.messages.get(boardID); + let message = await channel.messages.resolve(boardID); // If the message doesn't have embeds assume it got deleted so don't do anything if (!message) return; // If the original embed description is empty make this embed empty ( and not undefined ) let description = message.embeds[0].description; - if (!message.embeds[0].description) + if (!message.embeds[0].description || message.embeds[0].description == undefined) description = ''; let Embed = client.util.embed() @@ -95,12 +97,10 @@ class messageReactionRemoveListener extends Listener { .addField('Jump to', `[message](https://discordapp.com/channels/${reaction.message.guild.id}/${reaction.message.channel.id}/${reaction.message.id})`, true) .addField('Channel', reaction.message.channel, true) .setDescription(description) - .setFooter(reactionCount + ' ' + emote) + .setFooter(`${emote} ${reactionCount}`) .setTimestamp(); - if (reaction.message.guild.emojis.find(emoji => emoji.name === emote)) { - Embed.setFooter(reactionCount, reaction.message.guild.emojis.find(emoji => emoji.name === emote).url); - } + if (reaction.message.guild.emojis.resolve(emote)) Embed.setFooter(reactionCount, reaction.message.guild.emojis.resolve(emote).url); message.edit({ embed: Embed }); } diff --git a/event/listeners/ready.js b/event/listeners/ready.js index a2006b06..310a0683 100644 --- a/event/listeners/ready.js +++ b/event/listeners/ready.js @@ -18,12 +18,13 @@ class ReadyListener extends Listener { async exec() { let commandSize = this.client.commandHandler.modules.size; let clientTag = this.client.user.tag; - let guildSize = this.client.guilds.size; - let userSize = this.client.users.size; - let channelSize = this.client.channels.size; + let guildSize = this.client.guilds.cache.size; + let userSize = this.client.users.cache.size; + let channelSize = this.client.channels.cache.size; let profilePicture = this.client.user.displayAvatarURL(); let clientID = this.client.user.id; - let author = this.client.users.get(ownerID).tag; + let author = this.client.users.resolve(ownerID).tag; + // Send stats to the console console.log('===========[ READY ]==========='); @@ -40,7 +41,7 @@ class ReadyListener extends Listener { }, 1800000); async function setStatus(client) { - let owner = client.users.get(client.ownerID); + let owner = client.users.resolve(client.ownerID); let random = Math.floor((Math.random() * 3)); if (random == 0) { // Random "Watching" status taken from json console.log('Status type: \x1b[32mWatching\x1b[0m'); @@ -56,38 +57,38 @@ class ReadyListener extends Listener { status = status.replace('${prefix}', prefix[0]); client.user.setActivity(`${status} | My prefix is: ${prefix[0]}`, { type: 'PLAYING' }); - } else if (random == 2 && owner.presence.activity != null) { // Bot owner status + } else if (random == 2 && owner.presence.activities != null) { // Bot owner status console.log('Status type: \x1b[32mCopying owner status\x1b[0m'); // Get elapsed time from when the activity started let diffMins = 0; - if (owner.presence.activity.timestamps) { - let diffMs = (new Date() - owner.presence.activity.timestamps.start); + if (owner.presence.activities[0].timestamps) { + let diffMs = (new Date() - owner.presence.activities[0].timestamps.start); diffMins = Math.round(((diffMs % 86400000) % 3600000) / 60000); } - client.user.setActivity(`${owner.presence.activity.name}\nfor ${diffMins} minutes | My prefix is: ${prefix[0]}`, owner.presence.activity); + client.user.setActivity(`${owner.presence.activities[0].name}\nfor ${diffMins} minutes | My prefix is: ${prefix[0]}`, owner.presence.activities[0]); } else { // Random user statuss console.log('Status type: \x1b[32mCopying random user status\x1b[0m'); let randomuser = client.users.random(); // If the random user have no activity or is a bot pick a new user - while (randomuser.presence.activity == null || randomuser.presence.activity.type == 'CUSTOM_STATUS' || randomuser.bot) { + while (randomuser.presence.activities[0] == null || randomuser.presence.activities[0].type == 'CUSTOM_STATUS' || randomuser.bot) { randomuser = client.users.random(); } // Get elapsed time from when the activity started let diffMins = 0; - if (randomuser.presence.activity.timestamps) { - let diffMs = (new Date() - randomuser.presence.activity.timestamps.start); + if (randomuser.presence.activities[0].timestamps) { + let diffMs = (new Date() - randomuser.presence.activities[0].timestamps.start); diffMins = Math.round(((diffMs % 86400000) % 3600000) / 60000); } - client.user.setActivity(`${randomuser.username} is ${randomuser.presence.activity.type.toLowerCase()} ${randomuser.presence.activity.name}\nfor ${diffMins} minutes | My prefix is: ${prefix[0]}`, { type: randomuser.presence.activity.type, url: randomuser.presence.activity.url, name: randomuser.presence.activity.name }); + client.user.setActivity(`${randomuser.username} is ${randomuser.presence.activities[0].type.toLowerCase()} ${randomuser.presence.activities[0].name}\nfor ${diffMins} minutes | My prefix is: ${prefix[0]}`, { type: randomuser.presence.activities[0].type, url: randomuser.presence.activities[0].url, name: randomuser.presence.activities[0].name }); } } // If stats channel settings exist, send bot stats to it if (statsChannel) { - const channel = this.client.channels.get(statsChannel); + const channel = this.client.channels.resolve(statsChannel); channel.send(`Ready to serve in ${channelSize} channels on ${guildSize} servers, for a total of ${userSize} users.\nThere is ${commandSize} command loaded\n${this.client.readyAt}`); } @@ -100,8 +101,8 @@ class ReadyListener extends Listener { const requestHandler = (req, res) => { // Refresh some info commandSize = this.client.commandHandler.modules.size; - guildSize = this.client.guilds.size; - userSize = this.client.users.size; + guildSize = this.client.guilds.cache.size; + userSize = this.client.users.cache.size; profilePicture = this.client.user.displayAvatarURL(); let response = { diff --git a/package-lock.json b/package-lock.json index 8572eae2..93b6b07f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -64,9 +64,9 @@ } }, "@discordjs/collection": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.3.tgz", - "integrity": "sha512-4ek19SmNcPI92942RkuBrZrBK8hg7nG+ae/skkNNDeOaUG+XvxTPkv/jPZVgXwVPDkU5EFsewsI+0n4dTwFvgA==" + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.5.tgz", + "integrity": "sha512-CU1q0UXQUpFNzNB7gufgoisDHP7n+T3tkqTsp3MNUkVJ5+hS3BCvME8uCXAUFlz+6T2FbTCu75A+yQ7HMKqRKw==" }, "@google-cloud/text-to-speech": { "version": "0.4.0", @@ -618,6 +618,11 @@ "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz", "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q==" }, + "@types/mime-types": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.0.tgz", + "integrity": "sha1-nKUs2jY/aZxpRmwqbM2q2RPqenM=" + }, "@types/node": { "version": "9.6.48", "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.48.tgz", @@ -797,32 +802,33 @@ "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=" }, "array-includes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.0.tgz", - "integrity": "sha512-ONOEQoKrvXPKk7Su92Co0YMqYO32FfqJTzkKU9u2UpIXyYZIzLSvpdg4AwvSw4mSUW0czu6inK+zby6Oj6gDjQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", + "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", "dev": true, "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.0" + "es-abstract": "^1.17.0", + "is-string": "^1.0.5" }, "dependencies": { "es-abstract": { - "version": "1.17.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0-next.1.tgz", - "integrity": "sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw==", + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", + "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", "dev": true, "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", "object-inspect": "^1.7.0", "object-keys": "^1.1.1", "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.0", - "string.prototype.trimright": "^2.1.0" + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" } }, "es-to-primitive": { @@ -841,6 +847,21 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } } } }, @@ -878,22 +899,22 @@ }, "dependencies": { "es-abstract": { - "version": "1.17.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0-next.1.tgz", - "integrity": "sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw==", + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", + "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", "dev": true, "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", "object-inspect": "^1.7.0", "object-keys": "^1.1.1", "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.0", - "string.prototype.trimright": "^2.1.0" + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" } }, "es-to-primitive": { @@ -912,6 +933,21 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } } } }, @@ -1270,6 +1306,33 @@ } } }, + "capture-website": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/capture-website/-/capture-website-0.8.1.tgz", + "integrity": "sha512-2fcVq/Z2epiZld5sSvMqw9vFo2OxHrC2ryqRB0Nwh61Q72W+eBd/4M+StSqBGSErRlP1N/FkBpBT6IUtDr8MZQ==", + "requires": { + "file-url": "^3.0.0", + "puppeteer": "^2.0.0", + "tough-cookie": "^3.0.1" + }, + "dependencies": { + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" + }, + "tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "requires": { + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + } + } + }, "cardinal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-1.0.0.tgz", @@ -2097,21 +2160,33 @@ } }, "discord-akairo": { - "version": "github:1Computer1/discord-akairo#563d57b428ab7dfee3cdedf04834f6d3d606481e", + "version": "github:1Computer1/discord-akairo#10cef7efc7a329cb1e0d96d73ccb4b83bc0afa72", "from": "github:1Computer1/discord-akairo#master" }, "discord.js": { - "version": "github:discordjs/discord.js#45b89710008d207da22000dcb633c0c0236db17e", + "version": "github:discordjs/discord.js#bfcd4befc9a6d56c4c7db5c736bd7f31524f097c", "from": "github:discordjs/discord.js#master", "requires": { - "@discordjs/collection": "^0.1.1", + "@discordjs/collection": "^0.1.5", "abort-controller": "^3.0.0", - "form-data": "^2.3.3", - "node-fetch": "^2.3.0", - "prism-media": "^1.0.0", + "form-data": "^3.0.0", + "node-fetch": "^2.6.0", + "prism-media": "^1.2.0", "setimmediate": "^1.0.5", - "tweetnacl": "^1.0.1", - "ws": "^7.2.0" + "tweetnacl": "^1.0.3", + "ws": "^7.2.1" + }, + "dependencies": { + "form-data": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", + "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } } }, "doctrine": { @@ -2467,13 +2542,13 @@ "dev": true }, "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz", + "integrity": "sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==", "dev": true, "requires": { "debug": "^2.6.9", - "resolve": "^1.5.0" + "resolve": "^1.13.1" }, "dependencies": { "debug": { @@ -2490,13 +2565,22 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true + }, + "resolve": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", + "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } } } }, "eslint-module-utils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.0.tgz", - "integrity": "sha512-kCo8pZaNz2dsAW7nCUjuVoI11EBXXpIzfNxmaoLhXoRDOnqXLC4iSGVRdZPhOitfbdEfMEfKOiENaK6wDPZEGw==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz", + "integrity": "sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q==", "dev": true, "requires": { "debug": "^2.6.9", @@ -2531,9 +2615,9 @@ } }, "eslint-plugin-import": { - "version": "2.19.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.19.1.tgz", - "integrity": "sha512-x68131aKoCZlCae7rDXKSAQmbT5DQuManyXo2sK6fJJ0aK5CWAkv6A6HJZGgqC8IhjQxYPgo6/IY4Oz8AFsbBw==", + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz", + "integrity": "sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw==", "dev": true, "requires": { "array-includes": "^3.0.3", @@ -2633,9 +2717,9 @@ } }, "resolve": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.13.1.tgz", - "integrity": "sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==", + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", + "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -2823,6 +2907,48 @@ "tmp": "^0.0.33" } }, + "extract-zip": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", + "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", + "requires": { + "concat-stream": "1.6.2", + "debug": "2.6.9", + "mkdirp": "0.5.1", + "yauzl": "2.4.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "requires": { + "pend": "~1.2.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "yauzl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "requires": { + "fd-slicer": "~1.0.1" + } + } + } + }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -2905,6 +3031,11 @@ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" }, + "file-url": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/file-url/-/file-url-3.0.0.tgz", + "integrity": "sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA==" + }, "find-replace": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", @@ -4260,6 +4391,12 @@ "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, "is-subset": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", @@ -4796,9 +4933,9 @@ "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" }, "moment-timezone": { - "version": "0.5.27", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.27.tgz", - "integrity": "sha512-EIKQs7h5sAsjhPCqN6ggx6cEbs94GK050254TIJySD1bzoM5JTYDwAU1IoVOeTOL6Gm27kYJ51/uuvq1kIlrbw==", + "version": "0.5.28", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.28.tgz", + "integrity": "sha512-TDJkZvAyKIVWg5EtVqRzU97w0Rb0YVbfpqyjgu6GwXCAohVRqwZjf4fOzDE6p1Ch98Sro/8hQQi65WDXW5STPw==", "requires": { "moment": ">= 2.9.0" } @@ -5164,22 +5301,22 @@ }, "dependencies": { "es-abstract": { - "version": "1.17.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0-next.1.tgz", - "integrity": "sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw==", + "version": "1.17.4", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.4.tgz", + "integrity": "sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==", "dev": true, "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", "object-inspect": "^1.7.0", "object-keys": "^1.1.1", "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.0", - "string.prototype.trimright": "^2.1.0" + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" } }, "es-to-primitive": { @@ -5198,6 +5335,21 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "dev": true + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } } } }, @@ -5582,9 +5734,9 @@ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" }, "prism-media": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.1.0.tgz", - "integrity": "sha512-W+oxjRyjtd7hw3pefNZuc7YEZ6VICORJvVNfCPs0+7CsJ43CqMjGAYGjPL3hQ82vw03EVra+CiX4zisqOBUUGw==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.1.tgz", + "integrity": "sha512-R3EbKwJiYlTvGwcG1DpUt+06DsxOGS5W4AMEHT7oVOjG93MjpdhGX1whHyjnqknylLMupKAsKMEXcTNRbPe6Vw==" }, "process": { "version": "0.5.2", @@ -5599,8 +5751,7 @@ "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "proto-list": { "version": "1.2.4", @@ -5639,6 +5790,11 @@ "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.7.tgz", "integrity": "sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg==" }, + "proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=" + }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -5663,6 +5819,68 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, + "puppeteer": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-2.1.1.tgz", + "integrity": "sha512-LWzaDVQkk1EPiuYeTOj+CZRIjda4k2s5w4MK4xoH2+kgWV/SDlkYHmxatDdtYrciHUKSXTsGgPgPP8ILVdBsxg==", + "requires": { + "@types/mime-types": "^2.1.0", + "debug": "^4.1.0", + "extract-zip": "^1.6.6", + "https-proxy-agent": "^4.0.0", + "mime": "^2.0.3", + "mime-types": "^2.1.25", + "progress": "^2.0.1", + "proxy-from-env": "^1.0.0", + "rimraf": "^2.6.1", + "ws": "^6.1.0" + }, + "dependencies": { + "agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==" + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "requires": { + "agent-base": "5", + "debug": "4" + } + }, + "mime-db": { + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" + }, + "mime-types": { + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "requires": { + "mime-db": "1.43.0" + } + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "requires": { + "async-limiter": "~1.0.0" + } + } + } + }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", @@ -6156,9 +6374,9 @@ "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" }, "sequelize": { - "version": "5.21.3", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.21.3.tgz", - "integrity": "sha512-ptdeAxwTY0zbj7AK8m+SH3z52uHVrt/qmOTSIGo/kyfnSp3h5HeKlywkJf5GEk09kuRrPHfWARVSXH1W3IGU7g==", + "version": "5.21.5", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.21.5.tgz", + "integrity": "sha512-n9hR5K4uQGmBGK/Y/iqewCeSFmKVsd0TRnh0tfoLoAkmXbKC4tpeK96RhKs7d+TTMtrJlgt2TNLVBaAxEwC4iw==", "requires": { "bluebird": "^3.5.0", "cls-bluebird": "^2.1.0", @@ -6191,9 +6409,9 @@ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "uuid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", - "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" } } }, @@ -6467,9 +6685,9 @@ } }, "string.prototype.trimleft": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", - "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", "dev": true, "requires": { "define-properties": "^1.1.3", @@ -6477,9 +6695,9 @@ } }, "string.prototype.trimright": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", - "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", "dev": true, "requires": { "define-properties": "^1.1.3", @@ -6896,9 +7114,9 @@ } }, "tweetnacl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.1.tgz", - "integrity": "sha512-kcoMoKTPYnoeS50tzoqjPY3Uv9axeuuFAZY9M/9zFnhoVvRfxz9K29IMPD7jGmt2c8SW7i3gT9WqDl2+nV7p4A==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" }, "twit": { "version": "2.2.11", diff --git a/package.json b/package.json index 7905e3b6..f03bece7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "hahayes", - "version": "2.1.0", + "version": "3.0.0", "main": "index.js", "dependencies": { "4chan-boards": "^2.0.1", @@ -8,6 +8,7 @@ "asciify-image": "^0.1.5", "bufferutil": "^4.0.1", "canvas": "^2.6.0", + "capture-website": "^0.8.1", "console-stamp": "^0.2.9", "discord-akairo": "github:1Computer1/discord-akairo#master", "discord.js": "github:discordjs/discord.js#master", @@ -24,7 +25,7 @@ "mysql2": "^1.7.0", "node-fetch": "^2.6.0", "node-opus": "^0.3.3", - "sequelize": "^5.21.1", + "sequelize": "^5.21.5", "sqlite3": "^4.1.0", "superagent": "^4.1.0", "turndown": "^5.0.3", @@ -38,7 +39,7 @@ "devDependencies": { "eslint": "^5.16.0", "eslint-config-standard": "^12.0.0", - "eslint-plugin-import": "^2.18.2", + "eslint-plugin-import": "^2.20.1", "eslint-plugin-node": "^8.0.1", "eslint-plugin-promise": "^4.2.1", "eslint-plugin-standard": "^4.0.1" diff --git a/rand.js b/rand.js index 61c5733f..fed29cf5 100644 --- a/rand.js +++ b/rand.js @@ -20,8 +20,8 @@ exports.random = function (text, message) { do { if (message) { text = text.replace(/\[author\]/, message.author.username); - text = text.replace(/\[member\]/g, message.guild.members.random().user.username); - text = text.replace(/\[memberRand\]/, message.guild.members.random().user.username); + text = text.replace(/\[member\]/g, message.guild.members.cache.random().user.username); + text = text.replace(/\[memberRand\]/, message.guild.members.cache.random().user.username); } text = text.replace(/\[number\]/, Math.floor((Math.random() * 9) + 1)); text = text.replace(/\[kick\]/, ' ');