Initial commit

This commit is contained in:
KaKi87 2018-12-22 19:04:26 +01:00
parent 42597a9d5f
commit 33cc0d8b94
13 changed files with 1584 additions and 1 deletions

13
.gitignore vendored
View File

@ -34,7 +34,6 @@ bower_components
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Typescript v1 declaration files
@ -58,4 +57,16 @@ typings/
# dotenv environment variables file
.env
# JetBrains
.idea
# Node modules except TVMaze (modified)
node_modules/*
!node_modules/tvmaze
node_modules/tvmaze/*
!node_modules/tvmaze/lib/
node_modules/tvmaze/lib/*
!node_modules/tvmaze/lib/index.js
# Bot config
config.json

31
config.example.json Normal file
View File

@ -0,0 +1,31 @@
{
"name": "",
"token": "",
"prefix": "",
"guild": "",
"admin": "",
"channels": {
"general": "",
"show_news": "",
"release": "",
"admin": {
"logs": "",
"commands": ""
},
"private": {
"logs": "",
"commands": ""
}
},
"roles": {
"admin": ""
},
"show": {
"tvMazeID": -1,
"releaseName": "%m"
},
"messages": {
"welcome": "",
"goodbye": "%m"
}
}

7
data/subscriptions.json Normal file
View File

@ -0,0 +1,7 @@
{
"236952680201715714": {
"5": [
"10:30"
]
}
}

176
includes/Episode.js Normal file
View File

@ -0,0 +1,176 @@
const show = require('./show.js');
const embed = require('./embed.js');
const utils = require('./utils.js');
let addReactions = (message, reactions, callback) => {
(async() => {
for(let i = 0; i < reactions.length; i++){
await message.react(reactions[i]);
}
callback();
})();
};
let onReact = (Client, message, reactions, commandUserOnly, commandUser) => {
Client.on('messageReactionAdd', (reaction, user) => {
if(user.bot) return;
if(reaction.message === message){
for(let i = 0; i < reactions.length; i++){
if(reactions[i].emoji === reaction.emoji.name){
if(reactions[i].remove)
reaction.remove(user);
if(commandUserOnly === true && user !== commandUser) return;
reactions[i].action();
break;
}
}
}
});
};
module.exports = class Episode {
constructor(s, e, Client, commandUser){
this.s = s;
this.e = e;
this.commandUser = commandUser;
this.Client = Client;
}
getData(callback){
show.getEpisode(this.s, this.e, res => {
this.updateData(res);
callback();
});
}
updateData(episode){
if(!episode) return;
this.s = episode['season'];
this.e = episode['number'];
this.title = episode['name'] || 'Unknown';
this.air_date = episode['airstamp'];
if(!this.air_date){
this.air_date = 'N/A';
}
else {
this.air_date = new Date(this.air_date).toLocaleString('en-US', {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric',
hour: 'numeric',
minute: 'numeric',
timeZone: 'UTC',
timeZoneName: 'short'
}).replace('Invalid Date', 'N/A')
}
try {
this.synopsis = episode['summary'].replace(/<\/?p>/g, '\n');
}
catch(e){
this.synopsis = 'Unknown';
}
this.image = episode['image'] ? episode['image']['original'] : null;
this.url = episode['url'] || null;
}
generateEmbed(){
this.embed = embed(this.Client, {
title: `S${ utils.twoDigits(this.s) }E${ utils.twoDigits(this.e) }`,
description: this.title,
url: this.url,
fields: [
{
name: 'Air date',
value: this.air_date,
inline: true
},
{
name: 'Synopsis',
value: this.synopsis
}
],
image: {
url: this.image
}
});
}
postEmbed(Client, channel){
channel.send(this.embed).then(message => {
this.message = message;
if(this.commandUser !== undefined){
addReactions(message, ['⏪', '◀', '▶', '⏩'], () => {
onReact(Client, message, [
{
// Previous episode
emoji: '◀',
action: () => {
this.prevEpisode();
},
remove: true
},
{
// Next episode
emoji: '▶',
action: () => {
this.nextEpisode();
},
remove: true
},
{
// First episode of previous season
emoji: '⏪',
action: () => {
this.prevSeason();
},
remove: true
},
{
// First episode of next season
emoji: '⏩',
action: () => {
this.nextSeason();
},
remove: true
}
], true, this.commandUser);
});
}
}).catch(err => console.log(err));
}
updateEmbed(){
this.generateEmbed();
this.message.edit(this.embed)
.catch(err => console.error(err));
}
prevEpisode(){
show.getPrevEpisode(this.s, this.e, res => {
this.updateData(res);
this.updateEmbed();
});
}
nextEpisode(){
show.getNextEpisode(this.s, this.e, res => {
this.updateData(res);
this.updateEmbed();
});
}
prevSeason(){
show.getPrevSeasonEpisode(this.s, res => {
this.updateData(res);
this.updateEmbed();
});
}
nextSeason(){
show.getNextSeasonEpisode(this.s, res => {
this.updateData(res);
this.updateEmbed();
});
}
};

25
includes/embed.js Normal file
View File

@ -0,0 +1,25 @@
const Discord = require('discord.js');
const _package = require('../package.json');
module.exports = (Client, properties) => {
const Y = new Date().getFullYear();
let i = 0;
do {
properties['fields'][i]['name'] = '** **\n' + properties['fields'][i]['name'];
i++;
} while (properties['fields'][i]['inline']);
const E = new Discord.RichEmbed(Object.assign(properties, {
timestamp: new Date(),
footer: {
icon_url: Client.user.avatarURL,
text: `(C) 2018${(Y > 2018 ? '-' + Y : '')} ${_package.author.name}`
}
}));
for(let i = 0; i < E.fields.length; i++){
if(E.fields[i] === 'margin'){
E.fields[i] = { name: '** **', value: '** **' };
}
}
return E;
};

33
includes/predb.js Normal file
View File

@ -0,0 +1,33 @@
const request = require('requestretry');
const config = require('../config.json');
const show = require('./show.js'),
utils = require('./utils.js');
const predb = 'https://predb.ovh/api/v1';
module.exports = {
search: (query, callback) => {
request(`${predb}/?q=${query}`, (err, res, body) => {
body = JSON.parse(body);
if(body['data']['rowCount'] === 0)
return callback(null);
callback(body['data']['rows'].filter(r => r['name'].startsWith(query)));
});
},
checkNew: (callback) => {
let newReleases = [];
show.getLastEpisode(episode => {
module.exports.search(`${config.show.releaseName}.S${utils.twoDigits(episode['season'])}E${utils.twoDigits(episode['number'])}`, res => {
if(!res) return callback(null);
res.forEach(release => {
if(new Date(release['preAt'] * 1000) > Date.now())
newReleases.push(release['name']);
});
if(newReleases.length === 0) return callback(null);
callback(newReleases);
});
});
}
};

105
includes/show.js Normal file
View File

@ -0,0 +1,105 @@
const config = require('../config.json'),
TVMazeApi = require('tvmaze'),
tvMaze = new TVMazeApi();
let getAllEpisodes = callback => tvMaze.getEpisodes(config.show.tvMazeID).then(res => callback(res));
let getAllSeasons = callback => tvMaze.getSeasons(config.show.tvMazeID).then(res => callback(res));
module.exports = {
getShow: callback => {
tvMaze.getShow(config.show.tvMazeID).then(res => callback(res));
},
getEpisode: (s, e, callback) => {
getAllEpisodes(episodes => {
let res = episodes.find(episode => episode['season'] === s && episode['number'] === e);
if(res && !res['image']){
module.exports.getShow(show => {
res['image'] = show['image'];
callback(res);
});
}
else {
callback(res);
}
});
},
getSeason: (s, callback) => {
getAllSeasons(seasons => callback(seasons.find(season => season['number'] === s)));
},
getLastEpisode: callback => {
/*getAllEpisodes(episodes => {
let today = new Date().setHours(0, 0, 0, 0);
for(let i = episodes.length - 1; i > 0; i--){
let airdate = new Date(episodes[i]['airdate']).setHours(0, 0, 0, 0);
if(airdate <= today){
return callback(episodes[i]);
}
}
});*/
module.exports.getShow(res => {
tvMaze.getEpisodeById(res['_links']['previousepisode']['href'].split('/').slice(-1)[0]).then(res => {
if(res && !res['image']){
module.exports.getShow(show => {
res['image'] = show['image'];
callback(res);
});
}
else {
callback(res);
}
});
});
},
getFutureEpisode: callback => {
let today = Date.now();
getAllEpisodes(episodes => {
for(let i = 0; i < episodes.length; i++){
let airstamp = episodes[i]['airstamp'];
if(airstamp === null || new Date(airstamp) > today){
if(!episodes[i]['image']){
module.exports.getShow(show => {
episodes[i]['image'] = show['image'];
callback(episodes[i]);
});
}
else {
callback(episodes[i]);
}
break;
}
}
});
},
getPrevEpisode: (s, e, callback) => {
if(e === 1){
if(s === 1)
return callback(null);
module.exports.getSeason(s - 1, _s => {
module.exports.getEpisode(s - 1, _s['episodeOrder'], res => callback(res));
});
}
else {
module.exports.getEpisode(s, e - 1, res => callback(res));
}
},
getNextEpisode: (s, e, callback) => {
module.exports.getSeason(s, _s => {
if(e < _s['episodeOrder']){
module.exports.getEpisode(s, e + 1, res => callback(res));
}
else {
module.exports.getSeason(s + 1, res => {
if(!res)
return callback(null);
module.exports.getEpisode(s + 1, 1, res => callback(res));
});
}
})
},
getPrevSeasonEpisode: (s, callback) => {
module.exports.getEpisode(s - 1, 1, res => callback(res));
},
getNextSeasonEpisode: (s, callback) => {
module.exports.getEpisode(s + 1, 1, res => callback(res));
}
};

41
includes/subscriptions.js Normal file
View File

@ -0,0 +1,41 @@
const fs = require('fs');
const dataPath = `./data/subscriptions.json`;
let getSubscriptions = () => JSON.parse(fs.readFileSync(dataPath, 'utf-8'));
let setSubscriptions = data => {
fs.writeFileSync(dataPath, JSON.stringify(data, null, '\t'));
console.log('DATA : Subscribers - saved');
};
module.exports = {
subscribe: (user, d, t) => {
let subscriptions = getSubscriptions();
if(!subscriptions[user])
subscriptions[user] = {};
if(!subscriptions[user][d])
subscriptions[user][d] = [];
if(!subscriptions[user][d].find(_t => t === _t)){
subscriptions[user][d].push(t);
setSubscriptions(subscriptions);
return true;
}
else
return false;
},
unsubscribe: (user, d, t) => {
let subscriptions = getSubscriptions();
if(!subscriptions[user])
return 3;
if(!subscriptions[user][d])
return 2;
if(!subscriptions[user][d].find(_t => t === _t))
return 1;
subscriptions[user][d] = subscriptions[user][d].filter(_t => t !== _t);
Object.keys(subscriptions[user]).forEach(d => { if(subscriptions[user][d].length === 0) delete subscriptions[user][d]; });
Object.keys(subscriptions).forEach(user => { if(Object.keys(subscriptions[user]).length === 0) delete subscriptions[user] });
setSubscriptions(subscriptions);
return 0;
},
getSubscriptions: user => getSubscriptions()[user] || null
};

5
includes/utils.js Normal file
View File

@ -0,0 +1,5 @@
module.exports = {
twoDigits: number => number.toLocaleString('en-US', { minimumIntegerDigits: 2, useGrouping: false }),
codeBlock: (content, lang) => `\`\`\`${lang ? `${lang}\n` : ''}${content}\`\`\``,
mention: userId => `<@${userId}>`
};

276
index.js Normal file
View File

@ -0,0 +1,276 @@
require('console-stamp')(console, {
pattern: 'dd/mm/yy HH:MM:ss.l',
colors: {
stamp: 'yellow',
label: 'green'
}
});
const config = require('./config.json');
const Discord = require('discord.js');
const Client = new Discord.Client();
const utils = require('./includes/utils.js'),
embed = require('./includes/embed.js'),
Episode = require('./includes/Episode.js'),
show = require('./includes/show.js'),
predb = require('./includes/predb.js'),
subscriptions = require('./includes/subscriptions.js');
let Guild = null;
Client.on('ready', () => {
console.log('Ready');
Client.user.setPresence({ game: { name: `${ config.prefix }help` }, status: 'online' }).catch(err => {
console.error(err);
});
Guild = Client.guilds.get(config.guild);
{
let checkPreDB = () => {
console.log('Checking PreDB');
predb.checkNew(res => {
console.log('PreDB checked');
let next = () => setTimeout(() => checkPreDB(), 900000); // 15 mins
if(!res) return next();
Guild.channels.get(config.channels.release)
.send(`New release${res.length > 1 ? 's' : ''} available : ${utils.codeBlock(res.join('\n'))}`)
.then(() => next());
});
};
checkPreDB();
}
});
Client.login(config.token)
.then(() => {
console.log('Logged in');
})
.catch(err => {
console.error(err);
process.exit(0);
});
Client.on('error', err => {
console.error(err);
});
let shutdown = () => {
console.log('Disconnecting');
Client.destroy()
.then(() => {
console.log('Disconnected');
process.exit(0);
})
.catch(err => {
console.error(err);
process.exit(1);
})
};
process.on('SIGINT', () => shutdown());
Client.on('guildMemberAdd', member => {
Guild.channels.get(config.channels.general).send(config.messages.welcome.replace('%m', utils.mention(member.id)));
});
Client.on('guildMemberRemove', member => {
let goodbyeMessage = config.messages.goodbye.replace('%m', utils.mention(member.id));
Guild.channels.get(config.channels.general).send(goodbyeMessage);
member.send(goodbyeMessage)
.catch(err => {
if(err.code !== 50007) // Cannot send DM if no common server
console.error(err);
});
});
Client.on('message', message => {
if(message.author.id === Client.user.id || !message.content.startsWith(config.prefix)) return;
const badCommand = () => message.channel.send(`:x: Bad command. Type \`${config.prefix}help\`.`);
const msg = message.content.slice(config.prefix.length).toLowerCase();
const cmd = msg.split(' ')[0];
const args = msg.split(' ').slice(1);
// const args_string = args.join(' ');
console.log(`CMD ► ${message.author.username}#${message.author.discriminator} "${cmd}" ${JSON.stringify(args)}`);
switch(cmd){
case 'episode':
{
let regex = /^s([0-9]+)e([0-9]+)$/;
if(!args[0] || !new RegExp(regex).test(args[0]))
return badCommand();
let match = args[0].match(regex).map(m => parseInt(m));
switch(args[1]){
case 'releases':
let response = '';
args[0] = args[0].toUpperCase();
predb.search(`${config.show.releaseName}.${args[0]}`, res => {
if(!res)
response = `:negative_squared_cross_mark: No release available for ${args[0]}`;
else {
response = `Available releases for ${args[0]} : ${utils.codeBlock(res.map(r => r['name']).join('\n'))}`;
}
message.channel.send(response);
});
break;
case 'info':
case undefined:
let ep = new Episode(match[1], match[2], Client, message.author);
ep.getData(() => {
ep.generateEmbed();
ep.postEmbed(Client, message.channel);
});
break;
default:
badCommand();
break;
}
}
break;
case 'last':
{
let ep = new Episode(null, null, Client, message.author);
show.getLastEpisode(episode => {
ep.updateData(episode);
ep.generateEmbed();
ep.postEmbed(Client, message.channel);
});
}
break;
case 'next':
{
let ep = new Episode(null, null, Client, message.author);
show.getFutureEpisode(episode => {
ep.updateData(episode);
ep.generateEmbed();
ep.postEmbed(Client, message.channel);
});
}
break;
case 'countdown':
{
const secToDHHMMSS = seconds => `${parseInt(seconds / 86400)}d ${new Date(seconds * 1000).toISOString().substr(11, 8)}`;
show.getFutureEpisode(episode => {
message.reply(`countdown to next episode : ${!episode['airstamp'] ? 'unknown' : secToDHHMMSS((new Date(episode['airstamp']).getTime() - Date.now()) / 1000)}`)
});
}
break;
case 'trigedasleng':
message.channel.send(embed(Client, {
title: 'Trigedasleng info',
fields: [
{
name: 'Language reference',
value: '[trigedasleng.info](http://trigedasleng.info/)'
},
{
name: 'Translator',
value: '[lingojam.com](https://lingojam.com/TrigedaslengTranslator)'
}
]
}));
break;
case 'subscribe':
// return false; // TBD
if(
(!args[0] || isNaN(parseInt(args[0])))
||
(!args[1] || isNaN(parseInt(args[1])))
||
(args[2] && ['00', '15', '30', '45'].indexOf(args[2]) === -1)
)
{
return badCommand();
}
if(subscriptions.subscribe(message.author.id, parseInt(args[0]), `${utils.twoDigits(parseInt(args[1]))}:${args[2] || '00'}`)){
message.channel.send('Subscription confirmed.');
}
else {
message.channel.send('You already have subscribed for this date and time period.');
}
break;
case 'unsubscribe':
if(
(!args[0] || isNaN(parseInt(args[0])))
||
(!args[1] || isNaN(parseInt(args[1])))
||
(args[2] && ['00', '15', '30', '45'].indexOf(args[2]) === -1)
)
{
return badCommand();
}
let response = '';
switch(subscriptions.unsubscribe(message.author.id, parseInt(args[0]), `${utils.twoDigits(parseInt(args[1]))}:${args[2] || '00'}`)){
case 0:
response = 'Successfully unsubscribed.';
break;
case 1:
response = `You don't have subscribed for this time period at this date.`;
break;
case 2:
response = `You don't have any subscription for this date period.`;
break;
case 3:
response = `You don't have any subscription yet.`;
break;
}
message.channel.send(response);
break;
case 'help':
{
const help = embed(Client, {
title: `${config.name}\nGeneral commands\n** **`,
description: `\`${config.prefix}cmd <required_param> [optional] [DEFAULT_CHOICE/other_choice]\``,
fields: [
{
name: 'Get episode',
value: `\`${config.prefix}episode <SXXEXX> [INFO/releases]\``,
inline: true
},
{
name: 'Get last episode aired',
value: `\`${config.prefix}last\``,
inline: true
},
'margin',
{
name: 'Get next episode to be aired',
value: `\`${config.prefix}next\``,
inline: true
},
{
name: 'Countdown to next episode',
value: `\`${config.prefix}countdown\``,
inline: true
},
'margin',
{
name: 'Trigedasleng info',
value: `\`${config.prefix}trigedasleng\``,
inline: true
},
'margin',
{
name: '~~Subscribe notifications~~ *unavailable*',
value: `\`${config.prefix}subscribe <D-days> <hour> [00/15/30/45]\``
}
]
});
message.channel.send(help);
}
break;
case 'shutdown':
if(message.author.id === config.admin){
message.reply('Shutting down');
shutdown();
}
else {
Guild.channels.get(config.channels.admin.logs).send(`Unallowed shutdown attempt from ${utils.mention(message.author.id)}`);
}
break;
default:
message.channel.send(`Command not found. Type \`${config.prefix}help\`.`);
break;
}
});

74
node_modules/tvmaze/lib/index.js generated vendored Normal file
View File

@ -0,0 +1,74 @@
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _requestPromise = require('request-promise');
var _requestPromise2 = _interopRequireDefault(_requestPromise);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var EMBED = 'embed[]=';
var TVMaze = function () {
function TVMaze() {
var url = arguments.length <= 0 || arguments[0] === undefined ? 'http://api.tvmaze.com/' : arguments[0];
_classCallCheck(this, TVMaze);
this.APIURL = url;
}
_createClass(TVMaze, [{
key: 'findShow',
value: function findShow(searchString) {
return (0, _requestPromise2.default)({ url: this.APIURL + 'search/shows/?q=' + searchString, json: true });
}
}, {
key: 'getShow',
value: function getShow(tvMazeId, embed) {
var extra = '';
if (embed) {
extra = '?' + EMBED + embed.join('&' + EMBED);
}
return (0, _requestPromise2.default)({ url: this.APIURL + 'shows/' + tvMazeId + extra, json: true });
}
}, {
key: 'getEpisodes',
value: function getEpisodes(tvMazeId) {
return (0, _requestPromise2.default)({ url: this.APIURL + 'shows/' + tvMazeId + '/episodes', json: true });
}
}, {
key: 'getEpisodeById',
value: function getEpisodeById(tvMazeEpisodeId) {
return (0, _requestPromise2.default)({ url: this.APIURL + 'episodes/' + tvMazeEpisodeId, json: true });
}
}, {
key: 'getCast',
value: function getCast(tvMazeId) {
return (0, _requestPromise2.default)({ url: this.APIURL + 'shows/' + tvMazeId + '/cast', json: true });
}
}, {
key: 'getUpdates',
value: function getUpdates() {
return (0, _requestPromise2.default)({ url: this.APIURL + 'updates/shows', json: true });
}
}, {
key: 'getSeasons',
value: function getSeasons(tvMazeId) {
return (0, _requestPromise2.default)({ url: this.APIURL + 'shows/' + tvMazeId + '/seasons', json: true });
}
}]);
return TVMaze;
}();
exports.default = TVMaze;

20
package.json Normal file
View File

@ -0,0 +1,20 @@
{
"name": "the-100-community-bot",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"author": {
"name": "KaKi87",
"email": "tiana.lemesle@live.fr",
"url": "https://kaki87.net/"
},
"dependencies": {
"console-stamp": "^0.2.7",
"discord.js": "^11.4.2",
"requestretry": "^3.1.0",
"tvmaze": "^0.3.0"
},
"scripts": {
"start": "node index.js"
}
}

779
yarn.lock Normal file
View File

@ -0,0 +1,779 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
ajv@^6.5.5:
version "6.6.1"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.6.1.tgz#6360f5ed0d80f232cc2b294c362d5dc2e538dd61"
integrity sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==
dependencies:
fast-deep-equal "^2.0.1"
fast-json-stable-stringify "^2.0.0"
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
ansi-regex@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
ansi-styles@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
array-find-index@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
asn1@~0.2.3:
version "0.2.4"
resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
dependencies:
safer-buffer "~2.1.0"
assert-plus@1.0.0, assert-plus@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
async-limiter@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
aws-sign2@~0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
aws4@^1.8.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
bcrypt-pbkdf@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
dependencies:
tweetnacl "^0.14.3"
bluebird@^2.3:
version "2.11.0"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1"
integrity sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=
builtin-modules@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
camelcase-keys@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
dependencies:
camelcase "^2.0.0"
map-obj "^1.0.0"
camelcase@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
caseless@~0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
chalk@^1.1.0, chalk@^1.1.1:
version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
dependencies:
ansi-styles "^2.2.1"
escape-string-regexp "^1.0.2"
has-ansi "^2.0.0"
strip-ansi "^3.0.0"
supports-color "^2.0.0"
combined-stream@^1.0.6, combined-stream@~1.0.6:
version "1.0.7"
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828"
integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==
dependencies:
delayed-stream "~1.0.0"
console-stamp@^0.2.7:
version "0.2.7"
resolved "https://registry.yarnpkg.com/console-stamp/-/console-stamp-0.2.7.tgz#f3f1a0bd874a6cec3506940ee1088d1da0821395"
integrity sha512-4QGcEgXSDnErHxX8NLtywyjSRaS9IUV7gPAqYKtIvDM0DYuZErcVQgcKrtJGIK9W821HwqYqaA3FXU1OlgMiIQ==
dependencies:
chalk "^1.1.1"
dateformat "^1.0.11"
merge "^1.2.0"
core-util-is@1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
currently-unhandled@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
dependencies:
array-find-index "^1.0.1"
dashdash@^1.12.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
dependencies:
assert-plus "^1.0.0"
dateformat@^1.0.11:
version "1.0.12"
resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9"
integrity sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=
dependencies:
get-stdin "^4.0.1"
meow "^3.3.0"
decamelize@^1.1.2:
version "1.2.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
discord.js@^11.4.2:
version "11.4.2"
resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-11.4.2.tgz#54586981926521572051f2a30b984aad2b49786e"
integrity sha512-MDwpu0lMFTjqomijDl1Ed9miMQe6kB4ifKdP28QZllmLv/HVOJXhatRgjS8urp/wBlOfx+qAYSXcdI5cKGYsfg==
dependencies:
long "^4.0.0"
prism-media "^0.0.3"
snekfetch "^3.6.4"
tweetnacl "^1.0.0"
ws "^4.0.0"
ecc-jsbn@~0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
dependencies:
jsbn "~0.1.0"
safer-buffer "^2.1.0"
error-ex@^1.2.0:
version "1.3.2"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
dependencies:
is-arrayish "^0.2.1"
escape-string-regexp@^1.0.2:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
extend@^3.0.2, extend@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
extsprintf@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
extsprintf@^1.2.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
fast-deep-equal@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
fast-json-stable-stringify@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
find-up@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
dependencies:
path-exists "^2.0.0"
pinkie-promise "^2.0.0"
forever-agent@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
form-data@~2.3.2:
version "2.3.3"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.6"
mime-types "^2.1.12"
get-stdin@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
getpass@^0.1.1:
version "0.1.7"
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
dependencies:
assert-plus "^1.0.0"
graceful-fs@^4.1.2:
version "4.1.15"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
har-schema@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
har-validator@~5.1.0:
version "5.1.3"
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
dependencies:
ajv "^6.5.5"
har-schema "^2.0.0"
has-ansi@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
dependencies:
ansi-regex "^2.0.0"
hosted-git-info@^2.1.4:
version "2.7.1"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047"
integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==
http-signature@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
dependencies:
assert-plus "^1.0.0"
jsprim "^1.2.2"
sshpk "^1.7.0"
indent-string@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
dependencies:
repeating "^2.0.0"
is-arrayish@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
is-builtin-module@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74=
dependencies:
builtin-modules "^1.0.0"
is-finite@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=
dependencies:
number-is-nan "^1.0.0"
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-utf8@^0.2.0:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
jsbn@~0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
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@0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
json-stringify-safe@~5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
jsprim@^1.2.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
dependencies:
assert-plus "1.0.0"
extsprintf "1.3.0"
json-schema "0.2.3"
verror "1.10.0"
load-json-file@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
dependencies:
graceful-fs "^4.1.2"
parse-json "^2.2.0"
pify "^2.0.0"
pinkie-promise "^2.0.0"
strip-bom "^2.0.0"
lodash@^3.10.0:
version "3.10.1"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=
lodash@^4.17.10:
version "4.17.11"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
long@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
loud-rejection@^1.0.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
dependencies:
currently-unhandled "^0.4.1"
signal-exit "^3.0.0"
map-obj@^1.0.0, map-obj@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
meow@^3.3.0:
version "3.7.0"
resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
dependencies:
camelcase-keys "^2.0.0"
decamelize "^1.1.2"
loud-rejection "^1.0.0"
map-obj "^1.0.1"
minimist "^1.1.3"
normalize-package-data "^2.3.4"
object-assign "^4.0.1"
read-pkg-up "^1.0.1"
redent "^1.0.0"
trim-newlines "^1.0.0"
merge@^1.2.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145"
integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==
mime-db@~1.37.0:
version "1.37.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8"
integrity sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==
mime-types@^2.1.12, mime-types@~2.1.19:
version "2.1.21"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96"
integrity sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==
dependencies:
mime-db "~1.37.0"
minimist@^1.1.3:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
version "2.4.0"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==
dependencies:
hosted-git-info "^2.1.4"
is-builtin-module "^1.0.0"
semver "2 || 3 || 4 || 5"
validate-npm-package-license "^3.0.1"
number-is-nan@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
oauth-sign@~0.9.0:
version "0.9.0"
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
object-assign@^4.0.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
parse-json@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
dependencies:
error-ex "^1.2.0"
path-exists@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
dependencies:
pinkie-promise "^2.0.0"
path-type@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
dependencies:
graceful-fs "^4.1.2"
pify "^2.0.0"
pinkie-promise "^2.0.0"
performance-now@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
pify@^2.0.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
pinkie-promise@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
dependencies:
pinkie "^2.0.0"
pinkie@^2.0.0:
version "2.0.4"
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
prism-media@^0.0.3:
version "0.0.3"
resolved "https://registry.yarnpkg.com/prism-media/-/prism-media-0.0.3.tgz#8842d4fae804f099d3b48a9a38e3c2bab6f4855b"
integrity sha512-c9KkNifSMU/iXT8FFTaBwBMr+rdVcN+H/uNv1o+CuFeTThNZNTOrQ+RgXA1yL/DeLk098duAeRPP3QNPNbhxYQ==
psl@^1.1.24:
version "1.1.29"
resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67"
integrity sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==
punycode@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
punycode@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
qs@~6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
read-pkg-up@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
dependencies:
find-up "^1.0.0"
read-pkg "^1.0.0"
read-pkg@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
dependencies:
load-json-file "^1.0.0"
normalize-package-data "^2.3.2"
path-type "^1.0.0"
redent@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
dependencies:
indent-string "^2.1.0"
strip-indent "^1.0.1"
repeating@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
dependencies:
is-finite "^1.0.0"
request-promise@^0.4.3:
version "0.4.3"
resolved "https://registry.yarnpkg.com/request-promise/-/request-promise-0.4.3.tgz#3c8ddc82f06f8908d720aede1d6794258e22121c"
integrity sha1-PI3cgvBviQjXIK7eHWeUJY4iEhw=
dependencies:
bluebird "^2.3"
chalk "^1.1.0"
lodash "^3.10.0"
request "^2.34"
request@^2.34:
version "2.88.0"
resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
dependencies:
aws-sign2 "~0.7.0"
aws4 "^1.8.0"
caseless "~0.12.0"
combined-stream "~1.0.6"
extend "~3.0.2"
forever-agent "~0.6.1"
form-data "~2.3.2"
har-validator "~5.1.0"
http-signature "~1.2.0"
is-typedarray "~1.0.0"
isstream "~0.1.2"
json-stringify-safe "~5.0.1"
mime-types "~2.1.19"
oauth-sign "~0.9.0"
performance-now "^2.1.0"
qs "~6.5.2"
safe-buffer "^5.1.2"
tough-cookie "~2.4.3"
tunnel-agent "^0.6.0"
uuid "^3.3.2"
requestretry@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/requestretry/-/requestretry-3.1.0.tgz#c8e1976bb946f14889d3604bbad56a01d191c10d"
integrity sha512-DkvCPK6qvwxIuVA5TRCvi626WHC2rWjF/n7SCQvVHAr2JX9i1/cmIpSEZlmHAo+c1bj9rjaKoZ9IsKwCpTkoXA==
dependencies:
extend "^3.0.2"
lodash "^4.17.10"
when "^3.7.7"
safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0:
version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
"semver@2 || 3 || 4 || 5":
version "5.6.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
signal-exit@^3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
snekfetch@^3.6.4:
version "3.6.4"
resolved "https://registry.yarnpkg.com/snekfetch/-/snekfetch-3.6.4.tgz#d13e80a616d892f3d38daae4289f4d258a645120"
integrity sha512-NjxjITIj04Ffqid5lqr7XdgwM7X61c/Dns073Ly170bPQHLm6jkmelye/eglS++1nfTWktpP6Y2bFXjdPlQqdw==
spdx-correct@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==
dependencies:
spdx-expression-parse "^3.0.0"
spdx-license-ids "^3.0.0"
spdx-exceptions@^2.1.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977"
integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==
spdx-expression-parse@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
dependencies:
spdx-exceptions "^2.1.0"
spdx-license-ids "^3.0.0"
spdx-license-ids@^3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz#a59efc09784c2a5bada13cfeaf5c75dd214044d2"
integrity sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==
sshpk@^1.7.0:
version "1.15.2"
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.15.2.tgz#c946d6bd9b1a39d0e8635763f5242d6ed6dcb629"
integrity sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==
dependencies:
asn1 "~0.2.3"
assert-plus "^1.0.0"
bcrypt-pbkdf "^1.0.0"
dashdash "^1.12.0"
ecc-jsbn "~0.1.1"
getpass "^0.1.1"
jsbn "~0.1.0"
safer-buffer "^2.0.2"
tweetnacl "~0.14.0"
strip-ansi@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
dependencies:
ansi-regex "^2.0.0"
strip-bom@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
dependencies:
is-utf8 "^0.2.0"
strip-indent@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
dependencies:
get-stdin "^4.0.1"
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
tough-cookie@~2.4.3:
version "2.4.3"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
dependencies:
psl "^1.1.24"
punycode "^1.4.1"
trim-newlines@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
tunnel-agent@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
dependencies:
safe-buffer "^5.0.1"
tvmaze@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/tvmaze/-/tvmaze-0.3.0.tgz#7c505f0004058f552c7961b492da64e0e3e0bc92"
integrity sha1-fFBfAAQFj1UseWG0ktpk4OPgvJI=
dependencies:
request-promise "^0.4.3"
tweetnacl@^0.14.3, tweetnacl@~0.14.0:
version "0.14.5"
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
tweetnacl@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.0.tgz#713d8b818da42068740bf68386d0479e66fc8a7b"
integrity sha1-cT2LgY2kIGh0C/aDhtBHnmb8ins=
uri-js@^4.2.2:
version "4.2.2"
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
dependencies:
punycode "^2.1.0"
uuid@^3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
validate-npm-package-license@^3.0.1:
version "3.0.4"
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
dependencies:
spdx-correct "^3.0.0"