diff --git a/index.js b/index.js index 4f02c4297a19da4401cd7588fd04de20554257a1..7add2e2cf46016f929d35830e775eb5ae984b6b2 100644 --- a/index.js +++ b/index.js @@ -1,44 +1,22 @@ ;(async function() { - const Discord = require("discord.js") - const client = new Discord.Client() + const fs = require("fs") + const Eris = require("eris") - client.on("message", async msg => { - if (msg.author.bot) { - return - } - - global.database.userInstance.get(msg.author.id).then(async user => { - let prom = 1 - if(!user) { - prom = global.database.userInstance.create(msg.author) - user = {messageCount: 0} - } - await prom - - global.database.userInstance.update(msg.author, {messageCount: user.messageCount + 1}) - }) - - msg.content = msg.content.trim() - if (msg.content.startsWith("<@!727636604692332616>") || msg.content.startsWith("<@727636604692332616>")) { - if (msg.author.id !== "439790095122300928" && msg.author.id !== "367078598399492107") { - return - } - - global.database.userInstance.gets().then(users => { - msg.channel.send( - users.map(user => ({user: msg.guild.members.resolve(user.discordId), messageCount: user.messageCount})) - .map(user => `${user.user.user.username}: ${user.messageCount}`) - .join`\n` - ) - }) - } + const bot = new Eris.CommandClient("NzI3NjM2NjA0NjkyMzMyNjE2.XvuubQ.O14MrObhsIPFphHmhsEjoGdDXZ8", {}, { + description: "Skateboard Project admin helper", + owner: "Skateboard Project" }) - await client.login("NzI3NjM2NjA0NjkyMzMyNjE2.XvuubQ.O14MrObhsIPFphHmhsEjoGdDXZ8").then(() => {console.log("bot connected")}) + fs.readdirSync(__dirname + "/src/commands/") + .filter(filename => filename.endsWith(".js")) + .map(filename => filename.substr(0, filename.length - 3)) + .map(filenameNoExt => require(__dirname + "/src/commands/" + filenameNoExt)) + .forEach(file => file(bot)) + + bot.on("ready", () => console.log("Bot connected")) - global.client = client - global.guild = client.guilds.resolve("725032845206224968") + global.database = require("./src/utils/database") + await global.database.init() - global.database = require("./database") - global.database.init() + bot.connect() })() diff --git a/package.json b/package.json index a882a08a2c3d47acf1f8852c8ef296a470eaaa55..73333148ed05c40c4e87650318163e5102da9655 100644 --- a/package.json +++ b/package.json @@ -3,8 +3,11 @@ "version": "1.0.0", "main": "index.js", "license": "MIT", + "scripts": { + "start": "node index.js" + }, "dependencies": { - "discord.js": "^12.2.0", + "eris": "^0.13.3", "sqlite-async": "^1.1.0" } } diff --git a/src/commands/bot.js b/src/commands/bot.js new file mode 100644 index 0000000000000000000000000000000000000000..1b6f32b6a51292757f9d2ff686207aae51f0a9e5 --- /dev/null +++ b/src/commands/bot.js @@ -0,0 +1,14 @@ +module.exports = bot => { + bot.registerCommand("dbVersion", + async msg => await global.database.botInstance.get().then(row => row.version), + { + description: "Get db version", + fullDescription: "Get the database version.", + requirements: { + custom: msg => { + return msg.channel.permissionsOf(msg.member.id).has("administrator") + } + } + } + ) +} diff --git a/src/commands/channel.js b/src/commands/channel.js new file mode 100644 index 0000000000000000000000000000000000000000..1e12faf172a4ad4421cbee53417f34429475ed0f --- /dev/null +++ b/src/commands/channel.js @@ -0,0 +1,148 @@ +const {Constants: Permission} = require("eris") + +const utils = require("../utils/utils") + +const channelInfos = msg => { + return { + embed: { + title: "Channel infos", + type: "rich", + fields: [ + {name: "channel name", value: msg.channel.name, inline: true}, + {name: "mention", value: msg.channel.mention, inline: true}, + {name: "topic", value: msg.channel.topic && msg.channel.topic.length ? msg.channel.topic : "no topic set", inline: false}, + { + name: "type", + value: (()=>{ + switch(msg.channel.type) { + case 0: return "Text channel" + case 2: return "Voice channel" + case 4: return "Category channel" + default: return msg.channel.type + } + })(), + inline: true + }, + {name: "is nsfw", value: msg.channel.nsfw, inline: true} + ] + } + } +} + +const createChannel = (bot, msg, args) => { + if (args.length === 0) { + return "You need to specify a channel name." + } + + const category = utils.getChannel(bot, msg.channel.parentID) + if (category.channels.filter(channel => channel.type === 0).length >= 5) { + return "You can't have more than 5 text channel in a category." + } + + utils.getGuild(bot).createChannel(args.join` `, 0, { + parentID: msg.channel.parentID + }) + .then(channel => msg.channel.createMessage(`Success ${channel.mention}`)) + .catch(e => { + msg.channel.createMessage(`An error happened, please contact <@${utils.ids.botDev}>: +${e.stack}`) + }) +} + +const deleteChannel = (bot, msg, args) => { + return "WIP" + /* + Please enter the confirmation number to continue 3437 + */ +} + +const configCommands = { + name: async (bot, msg, args) => { + await msg.channel.edit({name: args.join` `}) + return "Success" + }, + topic: async (bot, msg, args) => { + await msg.channel.edit({topic: args.join` `}) + return "Success" + }, + visibility: async (bot, msg, args) => { + return "WIP" + }, + default: () => { + return getConfigChannelOptionsString() + } +} +function getConfigChannelOptionsString() { + return "Config name is not valid, please use one of `" + Object.getOwnPropertyNames(configCommands).join("`, `") + "`" +} + +module.exports = bot => { + const channelCommand = bot.registerCommand("channel", channelInfos, { + description: "Manage channels", + fullDescription: "This command can be used to manage channels." + }) + channelCommand.registerSubcommand("info", channelInfos, { + aliases: ["infos", "i"], + description: "Give info for current channel", + fullDescription: "This command gives information about the current channel." + }) + channelCommand.registerSubcommand("create", (msg, args) => createChannel(bot, msg, args), { + aliases: ["new", "mk"], + description: "Create a new channel", + fullDescription: "This command allows leaders to create a new channel in the current category.", + requirements: { + custom: + async msg => + ( + msg.member.roles.includes(utils.ids.roles.teamLead) && + await global.database.categoryRoleInstance.getsByCategory(msg.channel.parentID) + .then(res => res + .map(el => el.roleId) + .filter(el => msg.member.roles.includes(el)) + .length !== 0 + ) + ) || + msg.channel.permissionsOf(msg.member.id).has("administrator") + } + }) + channelCommand.registerSubcommand("delete", (msg, args) => deleteChannel(bot, msg, args), { + aliases: ["rm", "remove"], + description: "Delete current channel ", + fullDescription: "This command allows leader to delete the current channel.\n⚠️️️️️️️️️ this is not reversible ⚠️️️️️️️️️", + requirements: { + custom: + async msg => + ( + msg.member.roles.includes(utils.ids.roles.teamLead) && + await global.database.categoryRoleInstance.getsByCategory(msg.channel.parentID) + .then(res => res + .map(el => el.roleId) + .filter(el => msg.member.roles.includes(el)) + .length !== 0 + ) + ) || + msg.channel.permissionsOf(msg.member.id).has("administrator") + } + }) + const configCommand = channelCommand.registerSubcommand("config", (msg, args) => configCommands.default(), { + description: "Configure current channel", + fullDescription: "This command allows leader to configure the current channel.️️️️️️️️️", + requirements: { + custom: + async msg => + ( + msg.member.roles.includes(utils.ids.roles.teamLead) && + await global.database.categoryRoleInstance.getsByCategory(msg.channel.parentID) + .then(res => res + .map(el => el.roleId) + .filter(el => msg.member.roles.includes(el)) + .length !== 0 + ) + ) || + msg.channel.permissionsOf(msg.member.id).has("administrator") + } + }) + configCommand.registerSubcommand("name", (msg, args) => configCommands.name(bot, msg, args)) + configCommand.registerSubcommand("topic", (msg, args) => configCommands.topic(bot, msg, args), {aliases: ["desc", "description"]}) + configCommand.registerSubcommand("visibility", (msg, args) => configCommands.visibility(bot, msg, args), {aliases: ["vis"]}) +} diff --git a/src/commands/poll.js b/src/commands/poll.js new file mode 100644 index 0000000000000000000000000000000000000000..c73a10a0043947cb123196c969c51ab00b170715 --- /dev/null +++ b/src/commands/poll.js @@ -0,0 +1,6 @@ +module.exports = bot => { + bot.registerCommand("poll", "POLLS !!!", { + description: "Manage polls", + fullDescription: "This command can be used to manage polls." + }); +} diff --git a/database/abstractInstance.js b/src/database/abstractInstance.js similarity index 100% rename from database/abstractInstance.js rename to src/database/abstractInstance.js diff --git a/database/bot.js b/src/database/bot.js similarity index 100% rename from database/bot.js rename to src/database/bot.js diff --git a/src/database/categoryRole.js b/src/database/categoryRole.js new file mode 100644 index 0000000000000000000000000000000000000000..bd40d195161b14f11076c21ddf4d6a89e492dfcd --- /dev/null +++ b/src/database/categoryRole.js @@ -0,0 +1,49 @@ +const AbstractInstance = require("./abstractInstance") + +class Instance extends AbstractInstance { + constructor(db) { + super(db) + this.updates = { + 2: () => this.db.run(` +create table if not exists categoryRole ( + categoryId text not null, + roleId text not null, + + primary key(categoryId, roleId) +) + `), + 3: async () => { + await this.create("728334680306352190", "727116447989497866") + } + } + } + + gets() { + return this.db.all("select * from categoryRole") + } + + getsByCategory(categoryId) { + return this.db.all(`select * from categoryRole where categoryId = ?`, categoryId) + } + + getsByRole(roleId) { + return this.db.all(`select * from categoryRole where roleId = ?`, roleId) + } + + get(categoryId, roleId) { + return this.db.get(`select * from categoryRole where categoryId = ? and roleId = ?`, roleId) + } + + create(categoryId, roleId) { + if(!categoryId || !roleId) { + throw new Error("one param is undefined") + } + return this.db.run(`insert into categoryRole(categoryId, roleId) values (?, ?)`, categoryId, roleId) + } + + delete(categoryId, roleId) { + return this.db.run(`delete from categoryRole where categoryId = ? and roleId = ?`, categoryId, roleId) + } +} + +module.exports = Instance diff --git a/database/user.js b/src/database/user.js similarity index 100% rename from database/user.js rename to src/database/user.js diff --git a/database.js b/src/utils/database.js similarity index 54% rename from database.js rename to src/utils/database.js index 8fc09cf8e89a17c8fa480c589ce83f0e2d863cde..061caa83a35637fb5e7e09133ad251349e230be4 100644 --- a/database.js +++ b/src/utils/database.js @@ -1,7 +1,7 @@ const fs = require("fs") -const DEFAULT_DB_FILE = __dirname + "/db.db" +const DEFAULT_DB_FILE = __dirname + "/../../db.db" const sqlite3 = require('sqlite-async') -const BotInstance = require("./database/bot") +const BotInstance = require("../database/bot") class Database { async init(dbFile = DEFAULT_DB_FILE) { @@ -27,10 +27,10 @@ class Database { } }) - const updates = fs.readdirSync(__dirname + "/database/") + const updates = fs.readdirSync(__dirname + "/../database/") .filter(filename => filename !== "abstractInstance.js" && filename !== "bot.js" && filename.endsWith(".js")) .map(filename => filename.substr(0, filename.length - 3)) - .map(filenameNoExt => ({filenameNoExt, instanceClass: require(__dirname + "/database/" + filenameNoExt)})) + .map(filenameNoExt => ({filenameNoExt, instanceClass: require(__dirname + "/../database/" + filenameNoExt)})) .map(InstanceInfos => { const Instance = new InstanceInfos.instanceClass(this.db) this[InstanceInfos.filenameNoExt + "Instance"] = Instance @@ -60,50 +60,6 @@ class Database { console.log("No database update required") } }) - - /* - this.db.get("SELECT version FROM Bot", async (err, row) => { - if (!err) { - const {version} = row - let newVersion = version - - Object.entries(this.botInstance.updates).forEach(entry => { - if (+entry[0] > version) { - entry[1]() - newVersion = Math.max(newVersion, +entry[0]) - } - }) - */ - /* - const updates = fs.readdirSync(__dirname + "/../database/") - .filter(filename => filename !== "abstractInstance.js" && filename !== "bot.js" && filename.endsWith(".js")) - .map(filename => filename.substr(0, filename.length - 3)) - .map(filenameNoExt => ({filenameNoExt, instanceClass: require(__dirname + "/../database/" + filenameNoExt)})) - .map(InstanceInfos => { - const Instance = new InstanceInfos.instanceClass(this.db) - this[InstanceInfos.filenameNoExt + "Instance"] = Instance - return Instance - }) - .map(instance => instance.updates) - */ - - // console.log(updates) - // do upgrade for all file in ./database - // set newVersion to max found - /* - if (newVersion !== version) { - this.db.run("UPDATE bot set version = ?", newVersion, error => { - if (!error) { - console.log("Successfully updated database") - } - }) - } else { - console.log("No database update required") - } - } else { - } - }) - */ } } diff --git a/src/utils/utils.js b/src/utils/utils.js new file mode 100644 index 0000000000000000000000000000000000000000..d5392c5a226a46d8c1c841ca04fcd172fa5809e3 --- /dev/null +++ b/src/utils/utils.js @@ -0,0 +1,29 @@ +const utils = {} + +utils.discordLimits = { + reactionPerMessage: 20 +} + +utils.ids = { + guild: "725032845206224968", + bot: "727636604692332616", + botDev: "439790095122300928", + roles: { + moderator: "726886455447781538", + gameDirector: "726140729398657136", + teamLead: "726140349680058439" + } +} + +utils.commonPerm = { + moderator: msg => msg.member.roles.cache.find(role => role.id === utils.ids.roles.moderator), + gameDirector: msg => msg.member.roles.cache.find(role => role.id === utils.ids.roles.gameDirector), + teamLead: msg => msg.member.roles.cache.find(role => role.id === utils.ids.roles.teamLead) +} +utils.commonPerm.gameDirectorUp = msg => utils.commonPerm.gameDirector(msg) || utils.commonPerm.moderator(msg) +utils.commonPerm.teamLeadUp = msg => utils.commonPerm.teamLead(msg) || utils.commonPerm.gameDirectorUp(msg) + +utils.getGuild = bot => bot.guilds.find(guild => guild.id === utils.ids.guild) +utils.getChannel = (bot, channelId) => utils.getGuild(bot).channels.find(channel => channel.id === channelId) + +module.exports = utils diff --git a/yarn.lock b/yarn.lock index 66ce0b5863ec0ff99312a41e8607d7e7a950c10b..b7ab6987d41e362878311322f9a943e0827eb42a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,32 +2,11 @@ # yarn lockfile v1 -"@discordjs/collection@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-0.1.5.tgz#1781c620b4c88d619bd0373a1548e5a6025e3d3a" - integrity sha512-CU1q0UXQUpFNzNB7gufgoisDHP7n+T3tkqTsp3MNUkVJ5+hS3BCvME8uCXAUFlz+6T2FbTCu75A+yQ7HMKqRKw== - -"@discordjs/form-data@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@discordjs/form-data/-/form-data-3.0.1.tgz#5c9e6be992e2e57d0dfa0e39979a850225fb4697" - integrity sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -51,11 +30,6 @@ are-we-there-yet@~1.1.2: delegates "^1.0.0" readable-stream "^2.0.6" -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -79,13 +53,6 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -113,11 +80,6 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -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= - delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" @@ -128,24 +90,15 @@ detect-libc@^1.0.2: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= -discord.js@^12.2.0: - version "12.2.0" - resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-12.2.0.tgz#31018732e42a495c92655055192221eab2ad11a9" - integrity sha512-Ueb/0SOsxXyqwvwFYFe0msMrGqH1OMqpp2Dpbplnlr4MzcRrFWwsBM9gKNZXPVBHWUKiQkwU8AihXBXIvTTSvg== - dependencies: - "@discordjs/collection" "^0.1.5" - "@discordjs/form-data" "^3.0.1" - abort-controller "^3.0.0" - node-fetch "^2.6.0" - prism-media "^1.2.0" - setimmediate "^1.0.5" - tweetnacl "^1.0.3" +eris@^0.13.3: + version "0.13.3" + resolved "https://registry.yarnpkg.com/eris/-/eris-0.13.3.tgz#22abb71f9ce0d453200b537cad457dc39c7b302b" + integrity sha512-WBtLyknOWZpYZL9yPhez0oKUWvYpunSg43hGxawwjwSf3gFXmbEPYrT8KlmZXtpJnX16eQ7mzIq+MgSh3LarEg== + dependencies: ws "^7.2.1" - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + optionalDependencies: + opusscript "^0.0.7" + tweetnacl "^1.0.1" fs-minipass@^1.2.5: version "1.2.7" @@ -239,18 +192,6 @@ isarray@~1.0.0: resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== - -mime-types@^2.1.12: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== - dependencies: - mime-db "1.44.0" - minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -304,11 +245,6 @@ needle@^2.2.1: iconv-lite "^0.4.4" sax "^1.2.4" -node-fetch@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" - integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== - node-pre-gyp@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054" @@ -381,6 +317,11 @@ once@^1.3.0: dependencies: wrappy "1" +opusscript@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/opusscript/-/opusscript-0.0.7.tgz#7dd7ec55b302d26bf588e6fc3feb090b8c7da856" + integrity sha512-DcBadTdYTUuH9zQtepsLjQn4Ll6rs3dmeFvN+SD0ThPnxRBRm/WC1zXWPg+wgAJimB784gdZvUMA57gDP7FdVg== + os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -404,11 +345,6 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -prism-media@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/prism-media/-/prism-media-1.2.2.tgz#4f1c841f248b67d325a24b4e6b1a491b8f50a24f" - integrity sha512-I+nkWY212lJ500jLe4tN9tWO7nRiBAVdMv76P9kffZjYhw20raMlW1HSSvS+MLXC9MmbNZCazMrAr+5jEEgTuw== - process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -474,11 +410,6 @@ set-blocking@~2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - signal-exit@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -555,7 +486,7 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.3" -tweetnacl@^1.0.3: +tweetnacl@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== @@ -578,9 +509,9 @@ wrappy@1: integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= ws@^7.2.1: - version "7.3.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.0.tgz#4b2f7f219b3d3737bc1a2fbf145d825b94d38ffd" - integrity sha512-iFtXzngZVXPGgpTlP1rBqsUK82p9tKqsWRPg5L56egiljujJT3vGAYnHANvFxBieXrTFavhzhxW52jnaWV+w2w== + version "7.3.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" + integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== yallist@^3.0.0, yallist@^3.0.3: version "3.1.1"