From 7adc2fcae658d6ede8432db6c4e9b8f1aa970db8 Mon Sep 17 00:00:00 2001 From: Isaac Date: Mon, 16 Aug 2021 14:32:02 +0100 Subject: [PATCH 1/6] refactor(listeners): improve code readability --- src/listeners/messageReactionAdd.js | 54 +++++++++++++------------- src/listeners/messageReactionRemove.js | 22 +++++------ 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/src/listeners/messageReactionAdd.js b/src/listeners/messageReactionAdd.js index 2eb7db6..64f0365 100644 --- a/src/listeners/messageReactionAdd.js +++ b/src/listeners/messageReactionAdd.js @@ -8,49 +8,49 @@ module.exports = class MessageReactionAddEventListener extends EventListener { super(client, { event: 'messageReactionAdd' }); } - async execute(r, u) { + async execute(reaction, user) { - if (r.partial) { + if (reaction.partial) { try { - await r.fetch(); + await reaction.fetch(); } catch (err) { return this.client.log.error(err); } } - if (u.partial) { + if (user.partial) { try { - await u.fetch(); + await user.fetch(); } catch (err) { return this.client.log.error(err); } } - if (u.id === this.client.user.id) return; + if (user.id === this.client.user.id) return; - const guild = r.message.guild; + const guild = reaction.message.guild; if (!guild) return; const settings = await guild.getSettings(); const i18n = this.client.i18n.getLocale(settings.locale); - const channel = r.message.channel; - const member = await guild.members.fetch(u.id); + const channel = reaction.message.channel; + const member = await guild.members.fetch(user.id); - if (settings.blacklist.includes(u.id)) { - return this.client.log.info(`Ignoring blacklisted member ${u.tag}`); + if (settings.blacklist.includes(user.id)) { + return this.client.log.info(`Ignoring blacklisted member ${user.tag}`); } else { settings.blacklist.forEach(element => { if (guild.roles.cache.has(element) && member.roles.cache.has(element)) { - return this.client.log.info(`Ignoring member ${u.tag} with blacklisted role`); + return this.client.log.info(`Ignoring member ${user.tag} with blacklisted role`); } }); } const t_row = await this.client.db.models.Ticket.findOne({ where: { id: channel.id } }); - if (t_row && t_row.opening_message === r.message.id) { - if (r.emoji.name === '๐Ÿ™Œ' && await member.isStaff()) { + if (t_row && t_row.opening_message === reaction.message.id) { + if (reaction.emoji.name === '๐Ÿ™Œ' && await member.isStaff()) { // ticket claiming await t_row.update({ claimed_by: member.user.id }); @@ -74,16 +74,16 @@ module.exports = class MessageReactionAddEventListener extends EventListener { .setFooter(settings.footer, guild.iconURL()) ); } else { - await r.users.remove(u.id); + await reaction.users.remove(user.id); } } else { - const p_row = await this.client.db.models.Panel.findOne({ where: { message: r.message.id } }); + const p_row = await this.client.db.models.Panel.findOne({ where: { message: reaction.message.id } }); if (p_row && typeof p_row.categories !== 'string') { // panels - await r.users.remove(u.id); + await reaction.users.remove(user.id); - const category_id = p_row.categories[r.emoji.name]; + const category_id = p_row.categories[reaction.emoji.name]; if (!category_id) return; const cat_row = await this.client.db.models.Category.findOne({ where: { id: category_id } }); @@ -91,7 +91,7 @@ module.exports = class MessageReactionAddEventListener extends EventListener { const tickets = await this.client.db.models.Ticket.findAndCountAll({ where: { category: cat_row.id, - creator: u.id, + creator: user.id, open: true } }); @@ -102,12 +102,12 @@ module.exports = class MessageReactionAddEventListener extends EventListener { if (cat_row.max_per_member === 1) { const embed = new MessageEmbed() .setColor(settings.error_colour) - .setAuthor(u.username, u.displayAvatarURL()) + .setAuthor(user.username, user.displayAvatarURL()) .setTitle(i18n('commands.new.response.has_a_ticket.title')) .setDescription(i18n('commands.new.response.has_a_ticket.description', tickets.rows[0].id)) .setFooter(footer(settings.footer, i18n('message_will_be_deleted_in', 15)), guild.iconURL()); try { - response = await u.send(embed); + response = await user.send(embed); } catch { response = await channel.send(embed); } @@ -123,28 +123,28 @@ module.exports = class MessageReactionAddEventListener extends EventListener { }); const embed = new MessageEmbed() .setColor(settings.error_colour) - .setAuthor(u.username, u.displayAvatarURL()) + .setAuthor(user.username, user.displayAvatarURL()) .setTitle(i18n('commands.new.response.max_tickets.title', tickets.count)) .setDescription(i18n('commands.new.response.max_tickets.description', settings.command_prefix, list.join('\n'))) - .setFooter(footer(settings.footer, i18n('message_will_be_deleted_in', 15)), u.iconURL()); + .setFooter(footer(settings.footer, i18n('message_will_be_deleted_in', 15)), user.iconURL()); try { - response = await u.send(embed); + response = await user.send(embed); } catch { response = await channel.send(embed); } } } else { try { - await this.client.tickets.create(guild.id, u.id, cat_row.id); + await this.client.tickets.create(guild.id, user.id, cat_row.id); } catch (error) { const embed = new MessageEmbed() .setColor(settings.error_colour) - .setAuthor(u.username, u.displayAvatarURL()) + .setAuthor(user.username, user.displayAvatarURL()) .setTitle(i18n('commands.new.response.error.title')) .setDescription(error.message) .setFooter(footer(settings.footer, i18n('message_will_be_deleted_in', 15)), guild.iconURL()); try { - response = await u.send(embed); + response = await user.send(embed); } catch { response = await channel.send(embed); } diff --git a/src/listeners/messageReactionRemove.js b/src/listeners/messageReactionRemove.js index cb82f51..7acd4c2 100644 --- a/src/listeners/messageReactionRemove.js +++ b/src/listeners/messageReactionRemove.js @@ -7,39 +7,39 @@ module.exports = class MessageReactionRemoveEventListener extends EventListener super(client, { event: 'messageReactionRemove' }); } - async execute(r, u) { + async execute(reaction, user) { // release (unclaim) ticket - if (r.partial) { + if (reaction.partial) { try { - await r.fetch(); + await reaction.fetch(); } catch (err) { return this.client.log.error(err); } } - if (u.partial) { + if (user.partial) { try { - await u.fetch(); + await user.fetch(); } catch (err) { return this.client.log.error(err); } } - if (u.id === this.client.user.id) return; + if (user.id === this.client.user.id) return; - const guild = r.message.guild; + const guild = reaction.message.guild; if (!guild) return; const settings = await guild.getSettings(); const i18n = this.client.i18n.getLocale(settings.locale); - const channel = r.message.channel; - const member = await guild.members.fetch(u.id); + const channel = reaction.message.channel; + const member = await guild.members.fetch(user.id); const t_row = await this.client.db.models.Ticket.findOne({ where: { id: channel.id } }); - if (t_row && t_row.opening_message === r.message.id) { - if (r.emoji.name === '๐Ÿ™Œ' && await member.isStaff()) { + if (t_row && t_row.opening_message === reaction.message.id) { + if (reaction.emoji.name === '๐Ÿ™Œ' && await member.isStaff()) { // ticket claiming await t_row.update({ claimed_by: null }); From 36ad172d23ed5a8520a52c7a45e0004e2e0c4d11 Mon Sep 17 00:00:00 2001 From: Isaac Date: Mon, 16 Aug 2021 14:59:14 +0100 Subject: [PATCH 2/6] build: bump discord.js version and update dependencies Co-authored-by: @donzee529 Co-authored-by: @PuneetGopinath --- package.json | 34 +- pnpm-lock.yaml | 1348 ++++++++++++++++++++++++++++++++++-------------- 2 files changed, 975 insertions(+), 407 deletions(-) diff --git a/package.json b/package.json index 72b7887..85df869 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,18 @@ { "name": "@eartharoid/discord-tickets", - "version": "3.0.0", + "version": "3.1.0", "private": true, "description": "An open-source Discord bot for ticket management", "main": "src/index.js", "scripts": { "contributors:add": "all-contributors add", - "contributors:generate": "all-contributors generate", + "contributors:generate": "all-contributors generate", "lint": "eslint src --fix", "start": "node src/", "test": "echo \"Nothing to test! Run with 'npm start'\" && exit 1" }, "engines": { - "node": ">=14" + "node": ">=16.6" }, "repository": { "type": "git", @@ -32,33 +32,33 @@ "funding": "https://github.com/discord-tickets/bot/?sponsor=1", "dependencies": { "@eartharoid/i18n": "^1.0.0", - "boxen": "^5.0.0", - "command-line-args": "^5.1.1", + "boxen": "^5.0.1", + "command-line-args": "^5.2.0", "cryptr": "^6.0.2", - "discord.js": "^12.5.1", - "dotenv": "^8.2.0", + "discord.js": "^13.1.0", + "dotenv": "^8.6.0", "jsonschema": "^1.4.0", "keyv": "^4.0.3", "leeks.js": "^0.2.2", "leekslazylogger-fastify": "^0.1.1", "mustache": "^4.2.0", - "node-emoji": "^1.10.0", + "node-emoji": "^1.11.0", "node-fetch": "^2.6.1", - "semver": "^7.3.4", - "sequelize": "^6.5.0", + "semver": "^7.3.5", + "sequelize": "^6.6.5", "string-argv": "^0.3.1", "terminal-link": "^2.1.1", "to-time-monthsfork": "^1.1.4" }, "devDependencies": { "all-contributors-cli": "^6.20.0", - "eslint": "^7.21.0", - "mariadb": "^2.5.2", - "mysql2": "^2.2.5", - "nodemon": "^2.0.7", - "pg": "^8.5.1", - "pg-hstore": "^2.3.3", - "tedious": "^11.0.3" + "eslint": "^7.32.0", + "mariadb": "^2.5.4", + "mysql2": "^2.3.0", + "nodemon": "^2.0.12", + "pg": "^8.7.1", + "pg-hstore": "^2.3.4", + "tedious": "^11.4.0" }, "optionalDependencies": { "sqlite3": "^5.0.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c8c0e48..0380b98 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3,48 +3,48 @@ lockfileVersion: 5.3 specifiers: '@eartharoid/i18n': ^1.0.0 all-contributors-cli: ^6.20.0 - boxen: ^5.0.0 - command-line-args: ^5.1.1 + boxen: ^5.0.1 + command-line-args: ^5.2.0 cryptr: ^6.0.2 - discord.js: ^12.5.1 - dotenv: ^8.2.0 - eslint: ^7.21.0 + discord.js: ^13.1.0 + dotenv: ^8.6.0 + eslint: ^7.32.0 jsonschema: ^1.4.0 keyv: ^4.0.3 leeks.js: ^0.2.2 leekslazylogger-fastify: ^0.1.1 - mariadb: ^2.5.2 + mariadb: ^2.5.4 mustache: ^4.2.0 - mysql2: ^2.2.5 - node-emoji: ^1.10.0 + mysql2: ^2.3.0 + node-emoji: ^1.11.0 node-fetch: ^2.6.1 - nodemon: ^2.0.7 - pg: ^8.5.1 - pg-hstore: ^2.3.3 - semver: ^7.3.4 - sequelize: ^6.5.0 + nodemon: ^2.0.12 + pg: ^8.7.1 + pg-hstore: ^2.3.4 + semver: ^7.3.5 + sequelize: ^6.6.5 sqlite3: ^5.0.2 string-argv: ^0.3.1 - tedious: ^11.0.3 + tedious: ^11.4.0 terminal-link: ^2.1.1 to-time-monthsfork: ^1.1.4 dependencies: '@eartharoid/i18n': 1.0.0 - boxen: 5.0.0 - command-line-args: 5.1.1 + boxen: 5.0.1 + command-line-args: 5.2.0 cryptr: 6.0.2 - discord.js: 12.5.1 - dotenv: 8.2.0 + discord.js: 13.1.0 + dotenv: 8.6.0 jsonschema: 1.4.0 keyv: 4.0.3 leeks.js: 0.2.2 leekslazylogger-fastify: 0.1.1 mustache: 4.2.0 - node-emoji: 1.10.0 + node-emoji: 1.11.0 node-fetch: 2.6.1 - semver: 7.3.4 - sequelize: 6.5.0_fb66e8c649bde1be622cc06164c9e22d + semver: 7.3.5 + sequelize: 6.6.5_aa1b3c7f5b5df187fb1a5c6073dca637 string-argv: 0.3.1 terminal-link: 2.1.1 to-time-monthsfork: 1.1.4 @@ -54,85 +54,257 @@ optionalDependencies: devDependencies: all-contributors-cli: 6.20.0 - eslint: 7.21.0 - mariadb: 2.5.2 - mysql2: 2.2.5 - nodemon: 2.0.7 - pg: 8.5.1 - pg-hstore: 2.3.3 - tedious: 11.0.3 + eslint: 7.32.0 + mariadb: 2.5.4 + mysql2: 2.3.0 + nodemon: 2.0.12 + pg: 8.7.1 + pg-hstore: 2.3.4 + tedious: 11.4.0 packages: - /@azure/abort-controller/1.0.2: - resolution: {integrity: sha512-XUyTo+bcyxHEf+jlN2MXA7YU9nxVehaubngHV1MIZZaqYmZqykkoeAz/JMMEeR7t3TcyDwbFa3Zw8BZywmIx4g==} + /@azure/abort-controller/1.0.4: + resolution: {integrity: sha512-lNUmDRVGpanCsiUN3NWxFTdwmdFI53xwhkTFfHDGTYk46ca7Ind3nanJc+U6Zj9Tv+9nTCWRBscWEW1DyKOpTw==} engines: {node: '>=8.0.0'} dependencies: - tslib: 2.1.0 + tslib: 2.3.1 dev: true - /@azure/core-auth/1.2.0: - resolution: {integrity: sha512-KUl+Nwn/Sm6Lw5d3U90m1jZfNSL087SPcqHLxwn2T6PupNKmcgsEbDjHB25gDvHO4h7pBsTlrdJAY7dz+Qk8GA==} + /@azure/core-asynciterator-polyfill/1.0.0: + resolution: {integrity: sha512-kmv8CGrPfN9SwMwrkiBK9VTQYxdFQEGe0BmQk+M8io56P9KNzpAxcWE/1fxJj7uouwN4kXF0BHW8DNlgx+wtCg==} + dev: true + + /@azure/core-auth/1.3.2: + resolution: {integrity: sha512-7CU6DmCHIZp5ZPiZ9r3J17lTKMmYsm/zGvNkjArQwPkrLlZ1TZ+EUYfGgh2X31OLMVAQCTJZW4cXHJi02EbJnA==} + engines: {node: '>=12.0.0'} + dependencies: + '@azure/abort-controller': 1.0.4 + tslib: 2.3.1 + dev: true + + /@azure/core-client/1.3.0: + resolution: {integrity: sha512-4ricu3aM1TQP2vglBcvFX8KgbWVe+7hl1jVAw6BzIGG4CTAvO3ygDS6th3O+zFwGN9xkgXFHa7Tp3u9za8ciIA==} + engines: {node: '>=12.0.0'} + dependencies: + '@azure/abort-controller': 1.0.4 + '@azure/core-asynciterator-polyfill': 1.0.0 + '@azure/core-auth': 1.3.2 + '@azure/core-rest-pipeline': 1.2.0 + '@azure/core-tracing': 1.0.0-preview.13 + tslib: 2.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@azure/core-http/2.1.0: + resolution: {integrity: sha512-Pzj87F4b1RH4PFDUpxkZqCdDZ35c5AjDCt3lsTn3i7yCtrXasEm6PVJYhjwsvYYmtgM7aDZIXexcu/qLLf7kyA==} + engines: {node: '>=12.0.0'} + dependencies: + '@azure/abort-controller': 1.0.4 + '@azure/core-asynciterator-polyfill': 1.0.0 + '@azure/core-auth': 1.3.2 + '@azure/core-tracing': 1.0.0-preview.13 + '@azure/logger': 1.0.2 + '@types/node-fetch': 2.5.12 + '@types/tunnel': 0.0.1 + form-data: 3.0.1 + node-fetch: 2.6.1 + process: 0.11.10 + tough-cookie: 4.0.0 + tslib: 2.3.1 + tunnel: 0.0.6 + uuid: 8.3.2 + xml2js: 0.4.23 + dev: true + + /@azure/core-lro/2.2.0: + resolution: {integrity: sha512-TJo95eNT1dwYOPCb0m1C2zyxVlHuRRkKGeg9TKu8XMF2qh4v6c1weD63r9RVIrLdHdnSqS0n6PTXBpWoB8NqMw==} + engines: {node: '>=12.0.0'} + dependencies: + '@azure/abort-controller': 1.0.4 + '@azure/core-tracing': 1.0.0-preview.13 + '@azure/logger': 1.0.2 + tslib: 2.3.1 + dev: true + + /@azure/core-paging/1.1.3: + resolution: {integrity: sha512-his7Ah40ThEYORSpIAwuh6B8wkGwO/zG7gqVtmSE4WAJ46e36zUDXTKReUCLBDc6HmjjApQQxxcRFy5FruG79A==} engines: {node: '>=8.0.0'} dependencies: - '@azure/abort-controller': 1.0.2 - tslib: 2.1.0 + '@azure/core-asynciterator-polyfill': 1.0.0 + dev: true + + /@azure/core-rest-pipeline/1.2.0: + resolution: {integrity: sha512-oOd8feRcuoSUwflPNLPO8x6v+m4TcJ9DmazlouuG9d64zJJEwaU757ovpRss9zaL8cggUAdm84C4EbtZ/ltMAw==} + engines: {node: '>=12.0.0'} + dependencies: + '@azure/abort-controller': 1.0.4 + '@azure/core-auth': 1.3.2 + '@azure/core-tracing': 1.0.0-preview.13 + '@azure/logger': 1.0.2 + form-data: 3.0.1 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.0 + tslib: 2.3.1 + uuid: 8.3.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@azure/core-tracing/1.0.0-preview.12: + resolution: {integrity: sha512-nvo2Wc4EKZGN6eFu9n3U7OXmASmL8VxoPIH7xaD6OlQqi44bouF0YIi9ID5rEsKLiAU59IYx6M297nqWVMWPDg==} + engines: {node: '>=12.0.0'} + dependencies: + '@opentelemetry/api': 1.0.2 + tslib: 2.3.1 + dev: true + + /@azure/core-tracing/1.0.0-preview.13: + resolution: {integrity: sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==} + engines: {node: '>=12.0.0'} + dependencies: + '@opentelemetry/api': 1.0.2 + tslib: 2.3.1 + dev: true + + /@azure/identity/1.5.1: + resolution: {integrity: sha512-ENYdcHT72PwEb+aiL2G6WIXxdm8mO0LNLZVPXaSRZYNsIshre72MF1H/rnJvcVGX9uVDVClSbNPxXwY5MJPLjw==} + engines: {node: '>=12.0.0'} + dependencies: + '@azure/core-auth': 1.3.2 + '@azure/core-client': 1.3.0 + '@azure/core-rest-pipeline': 1.2.0 + '@azure/core-tracing': 1.0.0-preview.12 + '@azure/logger': 1.0.2 + '@azure/msal-node': 1.0.0-beta.6 + '@types/stoppable': 1.1.1 + axios: 0.21.1 + events: 3.3.0 + jws: 4.0.0 + msal: 1.4.12 + open: 7.4.2 + qs: 6.10.1 + stoppable: 1.1.0 + tslib: 2.3.1 + uuid: 8.3.2 + optionalDependencies: + keytar: 7.7.0 + transitivePeerDependencies: + - debug + - supports-color + dev: true + + /@azure/keyvault-keys/4.3.0: + resolution: {integrity: sha512-OEosl0/rE/mKD5Ji9KaQN7UH+yQnV5MS0MRhGqQIiJrG+qAvAla0MYudJzv3XvBlplpGk0+MVgyL9H3KX/UAwQ==} + engines: {node: '>=8.0.0'} + dependencies: + '@azure/abort-controller': 1.0.4 + '@azure/core-http': 2.1.0 + '@azure/core-lro': 2.2.0 + '@azure/core-paging': 1.1.3 + '@azure/core-tracing': 1.0.0-preview.13 + '@azure/logger': 1.0.2 + tslib: 2.3.1 + dev: true + + /@azure/logger/1.0.2: + resolution: {integrity: sha512-YZNjNV0vL3nN2nedmcjQBcpCTo3oqceXmgiQtEm6fLpucjRZyQKAQruhCmCpRlB1iykqKJJ/Y8CDmT5rIE6IJw==} + engines: {node: '>=8.0.0'} + dependencies: + tslib: 2.3.1 dev: true /@azure/ms-rest-azure-env/2.0.0: resolution: {integrity: sha512-dG76W7ElfLi+fbTjnZVGj+M9e0BIEJmRxU6fHaUQ12bZBe8EJKYb2GV50YWNaP2uJiVQ5+7nXEVj1VN1UQtaEw==} dev: true - /@azure/ms-rest-js/2.2.3: - resolution: {integrity: sha512-sXOhOu/37Tr8428f32Jwuwga975Xw64pYg1UeUwOBMhkNgtn5vUuNRa3fhmem+I6f8EKoi6hOsYDFlaHeZ52jA==} + /@azure/ms-rest-js/2.5.3: + resolution: {integrity: sha512-OZ7qJwazS2nSRtZOA6+0k7x+RJ9D2P0IyUl9iHycyjgtQlINALNRutGqQeBirhIEx2IRQs9TMnnxoh/yRkFEAw==} dependencies: - '@azure/core-auth': 1.2.0 - '@types/node-fetch': 2.5.8 - '@types/tunnel': 0.0.1 + '@azure/core-auth': 1.3.2 abort-controller: 3.0.0 form-data: 2.5.1 node-fetch: 2.6.1 tough-cookie: 3.0.1 tslib: 1.14.1 tunnel: 0.0.6 - uuid: 3.4.0 + uuid: 8.3.2 xml2js: 0.4.23 dev: true - /@azure/ms-rest-nodeauth/3.0.6: - resolution: {integrity: sha512-2twuzsXHdKMzEFI2+Sr82o6yS4ppNGZceYwil8PFo+rJxOZIoBm9e0//YC+dKilV/3F+6K/HuW8LdskDrJEQWA==} + /@azure/ms-rest-nodeauth/3.0.10: + resolution: {integrity: sha512-oel7ibYlredh2wo7XwNYMx4jWlbMkIzCC8t8VpdhsAWDJVNSSce+DYj5jjZn1oED+QsCytVM2B7/QTuLN1/yDw==} dependencies: '@azure/ms-rest-azure-env': 2.0.0 - '@azure/ms-rest-js': 2.2.3 - adal-node: 0.1.28 + '@azure/ms-rest-js': 2.5.3 + adal-node: 0.2.2 + transitivePeerDependencies: + - debug + dev: true + + /@azure/msal-common/4.5.1: + resolution: {integrity: sha512-/i5dXM+QAtO+6atYd5oHGBAx48EGSISkXNXViheliOQe+SIFMDo3gSq3lL54W0suOSAsVPws3XnTaIHlla0PIQ==} + engines: {node: '>=0.8.0'} + dependencies: + debug: 4.3.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@azure/msal-node/1.0.0-beta.6: + resolution: {integrity: sha512-ZQI11Uz1j0HJohb9JZLRD8z0moVcPks1AFW4Q/Gcl67+QvH4aKEJti7fjCcipEEZYb/qzLSO8U6IZgPYytsiJQ==} + dependencies: + '@azure/msal-common': 4.5.1 + axios: 0.21.1 + jsonwebtoken: 8.5.1 + uuid: 8.3.2 + transitivePeerDependencies: + - debug + - supports-color dev: true /@babel/code-frame/7.12.11: resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} dependencies: - '@babel/highlight': 7.13.8 + '@babel/highlight': 7.14.5 dev: true - /@babel/helper-validator-identifier/7.12.11: - resolution: {integrity: sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==} + /@babel/helper-validator-identifier/7.14.9: + resolution: {integrity: sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==} + engines: {node: '>=6.9.0'} dev: true - /@babel/highlight/7.13.8: - resolution: {integrity: sha512-4vrIhfJyfNf+lCtXC2ck1rKSzDwciqF7IWFhXXrSOUC2O5DrVp+w4c6ed4AllTxhTkUP5x2tYj41VaxdVMMRDw==} + /@babel/highlight/7.14.5: + resolution: {integrity: sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.12.11 + '@babel/helper-validator-identifier': 7.14.9 chalk: 2.4.2 js-tokens: 4.0.0 dev: true - /@babel/runtime/7.14.0: - resolution: {integrity: sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==} + /@babel/runtime/7.15.3: + resolution: {integrity: sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==} + engines: {node: '>=6.9.0'} dependencies: - regenerator-runtime: 0.13.7 + regenerator-runtime: 0.13.9 dev: true - /@discordjs/collection/0.1.6: - resolution: {integrity: sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ==} + /@discordjs/builders/0.5.0: + resolution: {integrity: sha512-HP5y4Rqw68o61Qv4qM5tVmDbWi4mdTFftqIOGRo33SNPpLJ1Ga3KEIR2ibKofkmsoQhEpLmopD1AZDs3cKpHuw==} + engines: {node: '>=14.0.0', npm: '>=7.0.0'} + dependencies: + '@sindresorhus/is': 4.0.1 + discord-api-types: 0.22.0 + ow: 0.27.0 + ts-mixer: 6.0.0 + tslib: 2.3.1 + dev: false + + /@discordjs/collection/0.2.1: + resolution: {integrity: sha512-vhxqzzM8gkomw0TYRF3tgx7SwElzUlXT/Aa41O7mOcyN6wIJfj5JmDWaO5XGKsGSsNx7F3i5oIlrucCCWV1Nog==} + engines: {node: '>=14.0.0'} dev: false /@discordjs/form-data/3.0.1: @@ -141,7 +313,7 @@ packages: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 - mime-types: 2.1.28 + mime-types: 2.1.32 dev: false /@eartharoid/deep-merge/0.0.1: @@ -156,14 +328,14 @@ packages: resolution: {integrity: sha512-jJlVTQxHdkuA6prAJ/7kkQhfiTTLioaRT0AQtOcSsOZZzZfzlkKvpcvUtz+qlyrL1oen+KylG0ivlCJNnRYtVA==} dev: false - /@eslint/eslintrc/0.4.0: - resolution: {integrity: sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==} + /@eslint/eslintrc/0.4.3: + resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.1 + debug: 4.3.2 espree: 7.3.1 - globals: 12.4.0 + globals: 13.11.0 ignore: 4.0.6 import-fresh: 3.3.0 js-yaml: 3.14.1 @@ -173,15 +345,45 @@ packages: - supports-color dev: true + /@humanwhocodes/config-array/0.5.0: + resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.0 + debug: 4.3.2 + minimatch: 3.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/object-schema/1.2.0: + resolution: {integrity: sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==} + dev: true + /@js-joda/core/3.2.0: resolution: {integrity: sha512-PMqgJ0sw5B7FKb2d5bWYIoxjri+QlW/Pys7+Rw82jSH0QN3rB05jZ/VrrsUdh1w4+i2kw9JOejXGq/KhDOX7Kg==} dev: true + /@opentelemetry/api/1.0.2: + resolution: {integrity: sha512-DCF9oC89ao8/EJUqrp/beBlDR8Bp2R43jqtzayqCoomIvkwTuPfLcHdVhIGRR69GFlkykFjcDW+V92t0AS7Tww==} + engines: {node: '>=8.0.0'} + dev: true + + /@sapphire/async-queue/1.1.4: + resolution: {integrity: sha512-fFrlF/uWpGOX5djw5Mu2Hnnrunao75WGey0sP0J3jnhmrJ5TAPzHYOmytD5iN/+pMxS+f+u/gezqHa9tPhRHEA==} + engines: {node: '>=14', npm: '>=6'} + dev: false + /@sindresorhus/is/0.14.0: resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} engines: {node: '>=6'} dev: true + /@sindresorhus/is/4.0.1: + resolution: {integrity: sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g==} + engines: {node: '>=10'} + dev: false + /@szmarczak/http-timer/1.1.2: resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} engines: {node: '>=6'} @@ -189,30 +391,51 @@ packages: defer-to-connect: 1.1.3 dev: true - /@types/geojson/7946.0.7: - resolution: {integrity: sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ==} + /@tootallnate/once/1.1.2: + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} dev: true - /@types/node-fetch/2.5.8: - resolution: {integrity: sha512-fbjI6ja0N5ZA8TV53RUqzsKNkl9fv8Oj3T7zxW7FGv1GSH7gwJaNF8dzCjrqKaxKeUpTz4yT1DaJFq/omNpGfw==} + /@types/geojson/7946.0.8: + resolution: {integrity: sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==} + dev: true + + /@types/node-fetch/2.5.12: + resolution: {integrity: sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==} dependencies: - '@types/node': 14.14.28 + '@types/node': 16.6.1 form-data: 3.0.1 dev: true - /@types/node/14.14.28: - resolution: {integrity: sha512-lg55ArB+ZiHHbBBttLpzD07akz0QPrZgUODNakeC09i62dnrywr9mFErHuaPlB6I7z+sEbK+IYmplahvplCj2g==} + /@types/node/14.17.9: + resolution: {integrity: sha512-CMjgRNsks27IDwI785YMY0KLt3co/c0cQ5foxHYv/shC2w8oOnVwz5Ubq1QG5KzrcW+AXk6gzdnxIkDnTvzu3g==} + dev: true + + /@types/node/16.6.1: + resolution: {integrity: sha512-Sr7BhXEAer9xyGuCN3Ek9eg9xPviCF2gfu9kTfuU2HkTVAMYSDeX40fvpmo72n5nansg3nsBjuQBrsS28r+NUw==} /@types/node/8.10.66: resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==} dev: true + /@types/stoppable/1.1.1: + resolution: {integrity: sha512-b8N+fCADRIYYrGZOcmOR8ZNBOqhktWTB/bMUl5LvGtT201QKJZOOH5UsFyI3qtteM6ZAJbJqZoBcLqqxKIwjhw==} + dependencies: + '@types/node': 16.6.1 + dev: true + /@types/tunnel/0.0.1: resolution: {integrity: sha512-AOqu6bQu5MSWwYvehMXLukFHnupHrpZ8nvgae5Ggie9UwzDR1CCwoXgSSWNZJuyOlCdfdsWMA5F2LlmvyoTv8A==} dependencies: - '@types/node': 14.14.28 + '@types/node': 16.6.1 dev: true + /@types/ws/7.4.7: + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + dependencies: + '@types/node': 16.6.1 + dev: false + /abbrev/1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} @@ -221,9 +444,10 @@ packages: engines: {node: '>=6.5'} dependencies: event-target-shim: 5.0.1 + dev: true - /acorn-jsx/5.3.1_acorn@7.4.1: - resolution: {integrity: sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==} + /acorn-jsx/5.3.2_acorn@7.4.1: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: @@ -236,21 +460,6 @@ packages: hasBin: true dev: true - /adal-node/0.1.28: - resolution: {integrity: sha1-RoxLs+u9lrEnBmn0ucuk4AZepIU=} - engines: {node: '>= 0.6.15'} - dependencies: - '@types/node': 8.10.66 - async: 3.2.0 - date-utils: 1.2.21 - jws: 3.2.2 - request: 2.88.2 - underscore: 1.12.0 - uuid: 3.4.0 - xmldom: 0.4.0 - xpath.js: 1.1.0 - dev: true - /adal-node/0.2.2: resolution: {integrity: sha512-luzQ9cXOjUlZoCiWeYbyR+nHwScSrPTDTbOInFphQs/PnwNz6wAIVkbsHEXtvYBnjLctByTTI8ccfpGX100oRQ==} engines: {node: '>= 0.6.15'} @@ -260,14 +469,23 @@ packages: axios: 0.21.1 date-utils: 1.2.21 jws: 3.2.2 - underscore: 1.12.0 + underscore: 1.13.1 uuid: 3.4.0 - xmldom: 0.4.0 + xmldom: 0.6.0 xpath.js: 1.1.0 transitivePeerDependencies: - debug dev: true + /agent-base/6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.2 + transitivePeerDependencies: + - supports-color + dev: true + /ajv/6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: @@ -276,8 +494,8 @@ packages: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - /ajv/7.1.1: - resolution: {integrity: sha512-ga/aqDYnUy/o7vbsRTFhhTsNeXiYb5JWDIcRIeZfwRNCefwjNTVYCGdGSUrEmiu3yDK3vFvNbgJxvrQW4JXrYQ==} + /ajv/8.6.2: + resolution: {integrity: sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==} dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -290,12 +508,12 @@ packages: engines: {node: '>=4'} hasBin: true dependencies: - '@babel/runtime': 7.14.0 - async: 3.2.0 - chalk: 4.1.1 - didyoumean: 1.2.1 + '@babel/runtime': 7.15.3 + async: 3.2.1 + chalk: 4.1.2 + didyoumean: 1.2.2 inquirer: 7.3.3 - json-fixer: 1.6.9 + json-fixer: 1.6.12 lodash: 4.17.21 node-fetch: 2.6.1 pify: 5.0.0 @@ -312,24 +530,15 @@ packages: engines: {node: '>=6'} dev: true - /ansi-escapes/4.3.1: - resolution: {integrity: sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.11.0 - dev: false - /ansi-escapes/4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} dependencies: type-fest: 0.21.3 - dev: true /ansi-regex/2.1.1: resolution: {integrity: sha1-w7M6te42DYbg5ijwRorn7yfWVN8=} engines: {node: '>=0.10.0'} - dev: false optional: true /ansi-regex/4.1.0: @@ -357,17 +566,16 @@ packages: resolution: {integrity: sha1-q8av7tzqUugJzcA3au0845Y10X8=} dev: false - /anymatch/3.1.1: - resolution: {integrity: sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==} + /anymatch/3.1.2: + resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 - picomatch: 2.2.2 + picomatch: 2.3.0 dev: true /aproba/1.2.0: resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==} - dev: false optional: true /are-we-there-yet/1.1.5: @@ -375,7 +583,6 @@ packages: dependencies: delegates: 1.0.0 readable-stream: 2.3.7 - dev: false optional: true /argparse/1.0.10: @@ -393,10 +600,14 @@ packages: resolution: {integrity: sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==} dependencies: safer-buffer: 2.1.2 + dev: false + optional: true /assert-plus/1.0.0: resolution: {integrity: sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=} engines: {node: '>=0.8'} + dev: false + optional: true /astral-regex/2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} @@ -406,11 +617,11 @@ packages: /async/2.6.3: resolution: {integrity: sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==} dependencies: - lodash: 4.17.20 + lodash: 4.17.21 dev: true - /async/3.2.0: - resolution: {integrity: sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==} + /async/3.2.1: + resolution: {integrity: sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==} dev: true /asynckit/0.4.0: @@ -418,20 +629,24 @@ packages: /aws-sign2/0.7.0: resolution: {integrity: sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=} + dev: false + optional: true /aws4/1.11.0: resolution: {integrity: sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==} + dev: false + optional: true /axios/0.21.1: resolution: {integrity: sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==} dependencies: - follow-redirects: 1.13.2 + follow-redirects: 1.14.1 transitivePeerDependencies: - debug dev: true - /balanced-match/1.0.0: - resolution: {integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c=} + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} /base64-js/1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -441,6 +656,8 @@ packages: resolution: {integrity: sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=} dependencies: tweetnacl: 0.14.5 + dev: false + optional: true /bignumber.js/2.4.0: resolution: {integrity: sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg=} @@ -458,6 +675,15 @@ packages: inherits: 2.0.4 readable-stream: 3.6.0 dev: true + optional: true + + /bl/5.0.0: + resolution: {integrity: sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ==} + dependencies: + buffer: 6.0.3 + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: true /block-stream/0.0.9: resolution: {integrity: sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=} @@ -475,21 +701,21 @@ packages: camelcase: 5.3.1 chalk: 3.0.0 cli-boxes: 2.2.1 - string-width: 4.2.0 + string-width: 4.2.2 term-size: 2.2.1 type-fest: 0.8.1 widest-line: 3.1.0 dev: true - /boxen/5.0.0: - resolution: {integrity: sha512-5bvsqw+hhgUi3oYGK0Vf4WpIkyemp60WBInn7+WNfoISzAqk/HX4L7WNROq38E6UR/y3YADpv6pEm4BfkeEAdA==} + /boxen/5.0.1: + resolution: {integrity: sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==} engines: {node: '>=10'} dependencies: ansi-align: 3.0.0 camelcase: 6.2.0 - chalk: 4.1.0 + chalk: 4.1.2 cli-boxes: 2.2.1 - string-width: 4.2.0 + string-width: 4.2.2 type-fest: 0.20.2 widest-line: 3.1.0 wrap-ansi: 7.0.0 @@ -498,7 +724,7 @@ packages: /brace-expansion/1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: - balanced-match: 1.0.0 + balanced-match: 1.0.2 concat-map: 0.0.1 /braces/3.0.2: @@ -523,6 +749,14 @@ packages: base64-js: 1.5.1 ieee754: 1.2.1 dev: true + optional: true + + /buffer/6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true /cacheable-request/6.1.0: resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} @@ -533,14 +767,20 @@ packages: http-cache-semantics: 4.1.0 keyv: 3.1.0 lowercase-keys: 2.0.0 - normalize-url: 4.5.0 + normalize-url: 4.5.1 responselike: 1.0.2 dev: true + /call-bind/1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.1.1 + dev: true + /callsites/3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - dev: true /camelcase/5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} @@ -554,6 +794,8 @@ packages: /caseless/0.12.0: resolution: {integrity: sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=} + dev: false + optional: true /chalk/2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -572,43 +814,34 @@ packages: supports-color: 7.2.0 dev: true - /chalk/4.1.0: - resolution: {integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==} + /chalk/4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - /chalk/4.1.1: - resolution: {integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - /chardet/0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} dev: true - /chokidar/3.5.1: - resolution: {integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==} + /chokidar/3.5.2: + resolution: {integrity: sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==} engines: {node: '>= 8.10.0'} dependencies: - anymatch: 3.1.1 + anymatch: 3.1.2 braces: 3.0.2 - glob-parent: 5.1.1 + glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.1 normalize-path: 3.0.0 - readdirp: 3.5.0 + readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.2 dev: true /chownr/1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - dev: false optional: true /ci-info/2.0.0: @@ -648,7 +881,6 @@ packages: /code-point-at/1.1.0: resolution: {integrity: sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=} engines: {node: '>=0.10.0'} - dev: false optional: true /color-convert/1.9.3: @@ -676,8 +908,8 @@ packages: dependencies: delayed-stream: 1.0.0 - /command-line-args/5.1.1: - resolution: {integrity: sha512-hL/eG8lrll1Qy1ezvkant+trihbGnaKaeEjj6Scyr3DN+RC7iQ5Rz84IeLERfAWDGo0HBSNAakczwgCilDXnWg==} + /command-line-args/5.2.0: + resolution: {integrity: sha512-4zqtU1hYsSJzcJBOcNZIbW5Fbk9BkjCp1pZVhQKoRaWL5J7N4XphDLwo8aWwdQpTugxwu+jf9u2ZhkXiqp5Z6A==} engines: {node: '>=4.0.0'} dependencies: array-back: 3.1.0 @@ -694,7 +926,7 @@ packages: engines: {node: '>=8'} dependencies: dot-prop: 5.3.0 - graceful-fs: 4.2.6 + graceful-fs: 4.2.8 make-dir: 3.1.0 unique-string: 2.0.0 write-file-atomic: 3.0.3 @@ -703,11 +935,11 @@ packages: /console-control-strings/1.1.0: resolution: {integrity: sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=} - dev: false optional: true /core-util-is/1.0.2: resolution: {integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=} + optional: true /cross-spawn/7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} @@ -732,6 +964,8 @@ packages: engines: {node: '>=0.10'} dependencies: assert-plus: 1.0.0 + dev: false + optional: true /date-utils/1.2.21: resolution: {integrity: sha1-YfsWzcEnSzyayq/+n8ad+HIKK2Q=} @@ -749,8 +983,8 @@ packages: dependencies: ms: 2.1.3 - /debug/4.3.1: - resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} + /debug/4.3.2: + resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -772,6 +1006,14 @@ packages: mimic-response: 1.0.1 dev: true + /decompress-response/4.2.1: + resolution: {integrity: sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==} + engines: {node: '>=8'} + dependencies: + mimic-response: 2.1.0 + dev: true + optional: true + /deep-extend/0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -790,7 +1032,6 @@ packages: /delegates/1.0.0: resolution: {integrity: sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=} - dev: false optional: true /denque/1.5.0: @@ -807,31 +1048,31 @@ packages: resolution: {integrity: sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=} engines: {node: '>=0.10'} hasBin: true - dev: false optional: true - /didyoumean/1.2.1: - resolution: {integrity: sha1-6S7f2tplN9SE1zwBcv0eugxJdv8=} + /didyoumean/1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} dev: true - /discord.js/12.5.1: - resolution: {integrity: sha512-VwZkVaUAIOB9mKdca0I5MefPMTQJTNg0qdgi1huF3iwsFwJ0L5s/Y69AQe+iPmjuV6j9rtKoG0Ta0n9vgEIL6w==} - engines: {node: '>=12.0.0'} + /discord-api-types/0.22.0: + resolution: {integrity: sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==} + engines: {node: '>=12'} + dev: false + + /discord.js/13.1.0: + resolution: {integrity: sha512-gxO4CXKdHpqA+WKG+f5RNnd3srTDj5uFJHgOathksDE90YNq/Qijkd2WlMgTTMS6AJoEnHxI7G9eDQHCuZ+xDA==} + engines: {node: '>=16.6.0', npm: '>=7.0.0'} dependencies: - '@discordjs/collection': 0.1.6 + '@discordjs/builders': 0.5.0 + '@discordjs/collection': 0.2.1 '@discordjs/form-data': 3.0.1 - abort-controller: 3.0.0 + '@sapphire/async-queue': 1.1.4 + '@types/ws': 7.4.7 + discord-api-types: 0.22.0 node-fetch: 2.6.1 - prism-media: 1.2.6 - setimmediate: 1.0.5 - tweetnacl: 1.0.3 - ws: 7.4.3 + ws: 7.5.3 transitivePeerDependencies: - - '@discordjs/opus' - bufferutil - - ffmpeg-static - - node-opus - - opusscript - utf-8-validate dev: false @@ -849,9 +1090,16 @@ packages: is-obj: 2.0.0 dev: true - /dotenv/8.2.0: - resolution: {integrity: sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==} - engines: {node: '>=8'} + /dot-prop/6.0.1: + resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} + engines: {node: '>=10'} + dependencies: + is-obj: 2.0.0 + dev: false + + /dotenv/8.6.0: + resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} + engines: {node: '>=10'} dev: false /dottie/2.0.2: @@ -867,6 +1115,8 @@ packages: dependencies: jsbn: 0.1.1 safer-buffer: 2.1.2 + dev: false + optional: true /ecdsa-sig-formatter/1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} @@ -907,6 +1157,11 @@ packages: engines: {node: '>=0.8.0'} dev: true + /escape-string-regexp/4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + /eslint-scope/5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} @@ -927,34 +1182,37 @@ packages: engines: {node: '>=4'} dev: true - /eslint-visitor-keys/2.0.0: - resolution: {integrity: sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==} + /eslint-visitor-keys/2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} dev: true - /eslint/7.21.0: - resolution: {integrity: sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg==} + /eslint/7.32.0: + resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==} engines: {node: ^10.12.0 || >=12.0.0} hasBin: true dependencies: '@babel/code-frame': 7.12.11 - '@eslint/eslintrc': 0.4.0 + '@eslint/eslintrc': 0.4.3 + '@humanwhocodes/config-array': 0.5.0 ajv: 6.12.6 - chalk: 4.1.0 + chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.1 + debug: 4.3.2 doctrine: 3.0.0 enquirer: 2.3.6 + escape-string-regexp: 4.0.0 eslint-scope: 5.1.1 eslint-utils: 2.1.0 - eslint-visitor-keys: 2.0.0 + eslint-visitor-keys: 2.1.0 espree: 7.3.1 esquery: 1.4.0 esutils: 2.0.3 + fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 functional-red-black-tree: 1.0.1 - glob-parent: 5.1.1 - globals: 12.4.0 + glob-parent: 5.1.2 + globals: 13.11.0 ignore: 4.0.6 import-fresh: 3.3.0 imurmurhash: 0.1.4 @@ -962,18 +1220,18 @@ packages: js-yaml: 3.14.1 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 - lodash: 4.17.21 + lodash.merge: 4.6.2 minimatch: 3.0.4 natural-compare: 1.4.0 optionator: 0.9.1 progress: 2.0.3 - regexpp: 3.1.0 - semver: 7.3.4 + regexpp: 3.2.0 + semver: 7.3.5 strip-ansi: 6.0.0 strip-json-comments: 3.1.1 - table: 6.0.7 + table: 6.7.1 text-table: 0.2.0 - v8-compile-cache: 2.2.0 + v8-compile-cache: 2.3.0 transitivePeerDependencies: - supports-color dev: true @@ -983,7 +1241,7 @@ packages: engines: {node: ^10.12.0 || >=12.0.0} dependencies: acorn: 7.4.1 - acorn-jsx: 5.3.1_acorn@7.4.1 + acorn-jsx: 5.3.2_acorn@7.4.1 eslint-visitor-keys: 1.3.0 dev: true @@ -1025,9 +1283,23 @@ packages: /event-target-shim/5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} + dev: true + + /events/3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: true + + /expand-template/2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + dev: true + optional: true /extend/3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: false + optional: true /external-editor/3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} @@ -1041,6 +1313,8 @@ packages: /extsprintf/1.3.0: resolution: {integrity: sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=} engines: {'0': node >=0.6.0} + dev: false + optional: true /fast-deep-equal/3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1096,16 +1370,16 @@ packages: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.1.1 + flatted: 3.2.2 rimraf: 3.0.2 dev: true - /flatted/3.1.1: - resolution: {integrity: sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==} + /flatted/3.2.2: + resolution: {integrity: sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==} dev: true - /follow-redirects/1.13.2: - resolution: {integrity: sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA==} + /follow-redirects/1.14.1: + resolution: {integrity: sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -1116,6 +1390,8 @@ packages: /forever-agent/0.6.1: resolution: {integrity: sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=} + dev: false + optional: true /form-data/2.3.3: resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} @@ -1123,7 +1399,9 @@ packages: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 - mime-types: 2.1.28 + mime-types: 2.1.32 + dev: false + optional: true /form-data/2.5.1: resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} @@ -1131,7 +1409,7 @@ packages: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 - mime-types: 2.1.28 + mime-types: 2.1.32 dev: true /form-data/3.0.1: @@ -1140,9 +1418,14 @@ packages: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 - mime-types: 2.1.28 + mime-types: 2.1.32 dev: true + /fs-constants/1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + dev: true + optional: true + /fs-minipass/1.2.7: resolution: {integrity: sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==} dependencies: @@ -1164,13 +1447,17 @@ packages: resolution: {integrity: sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==} engines: {node: '>=0.6'} dependencies: - graceful-fs: 4.2.6 + graceful-fs: 4.2.8 inherits: 2.0.4 mkdirp: 0.5.5 rimraf: 2.7.1 dev: false optional: true + /function-bind/1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true + /functional-red-black-tree/1.0.1: resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=} dev: true @@ -1186,7 +1473,6 @@ packages: string-width: 1.0.2 strip-ansi: 3.0.1 wide-align: 1.1.3 - dev: false optional: true /generate-function/2.3.1: @@ -1200,6 +1486,14 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: true + /get-intrinsic/1.1.1: + resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==} + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.2 + dev: true + /get-stream/4.1.0: resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} engines: {node: '>=6'} @@ -1218,16 +1512,23 @@ packages: resolution: {integrity: sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=} dependencies: assert-plus: 1.0.0 + dev: false + optional: true - /glob-parent/5.1.1: - resolution: {integrity: sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==} + /github-from-package/0.0.0: + resolution: {integrity: sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=} + dev: true + optional: true + + /glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: is-glob: 4.0.1 dev: true - /glob/7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + /glob/7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -1243,11 +1544,11 @@ packages: ini: 1.3.7 dev: true - /globals/12.4.0: - resolution: {integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==} + /globals/13.11.0: + resolution: {integrity: sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==} engines: {node: '>=8'} dependencies: - type-fest: 0.8.1 + type-fest: 0.20.2 dev: true /got/9.6.0: @@ -1267,12 +1568,14 @@ packages: url-parse-lax: 3.0.0 dev: true - /graceful-fs/4.2.6: - resolution: {integrity: sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==} + /graceful-fs/4.2.8: + resolution: {integrity: sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==} /har-schema/2.0.0: resolution: {integrity: sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=} engines: {node: '>=4'} + dev: false + optional: true /har-validator/5.1.5: resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} @@ -1281,6 +1584,8 @@ packages: dependencies: ajv: 6.12.6 har-schema: 2.0.0 + dev: false + optional: true /has-flag/3.0.0: resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} @@ -1291,9 +1596,13 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + /has-symbols/1.0.2: + resolution: {integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==} + engines: {node: '>= 0.4'} + dev: true + /has-unicode/2.0.1: resolution: {integrity: sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=} - dev: false optional: true /has-yarn/2.1.0: @@ -1301,10 +1610,28 @@ packages: engines: {node: '>=8'} dev: true + /has/1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + /http-cache-semantics/4.1.0: resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} dev: true + /http-proxy-agent/4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.2 + transitivePeerDependencies: + - supports-color + dev: true + /http-signature/1.2.0: resolution: {integrity: sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=} engines: {node: '>=0.8', npm: '>=1.3.7'} @@ -1312,6 +1639,18 @@ packages: assert-plus: 1.0.0 jsprim: 1.4.1 sshpk: 1.16.1 + dev: false + optional: true + + /https-proxy-agent/5.0.0: + resolution: {integrity: sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.2 + transitivePeerDependencies: + - supports-color + dev: true /iconv-lite/0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} @@ -1319,8 +1658,8 @@ packages: dependencies: safer-buffer: 2.1.2 - /iconv-lite/0.6.2: - resolution: {integrity: sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==} + /iconv-lite/0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 @@ -1334,8 +1673,8 @@ packages: resolution: {integrity: sha1-SMptcvbGo68Aqa1K5odr44ieKwk=} dev: true - /ignore-walk/3.0.3: - resolution: {integrity: sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==} + /ignore-walk/3.0.4: + resolution: {integrity: sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==} dependencies: minimatch: 3.0.4 dev: false @@ -1364,8 +1703,8 @@ packages: engines: {node: '>=0.8.19'} dev: true - /inflection/1.12.0: - resolution: {integrity: sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=} + /inflection/1.13.1: + resolution: {integrity: sha512-dldYtl2WlN0QDkIDtg8+xFwOS2Tbmp12t1cHa5/YClU6ZQjTFm7B66UcVbh9NQB+HvT5BAd2t5+yKsBkw5pcqA==} engines: {'0': node >= 0.4.0} dev: false @@ -1390,7 +1729,7 @@ packages: engines: {node: '>=8.0.0'} dependencies: ansi-escapes: 4.3.2 - chalk: 4.1.1 + chalk: 4.1.2 cli-cursor: 3.1.0 cli-width: 3.0.0 external-editor: 3.1.0 @@ -1423,6 +1762,12 @@ packages: ci-info: 2.0.0 dev: true + /is-docker/2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true + /is-extglob/2.1.1: resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} engines: {node: '>=0.10.0'} @@ -1433,7 +1778,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: number-is-nan: 1.0.1 - dev: false optional: true /is-fullwidth-code-point/2.0.0: @@ -1456,7 +1800,7 @@ packages: engines: {node: '>=8'} dependencies: global-dirs: 2.1.0 - is-path-inside: 3.0.2 + is-path-inside: 3.0.3 dev: true /is-npm/4.0.0: @@ -1472,10 +1816,9 @@ packages: /is-obj/2.0.0: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} - dev: true - /is-path-inside/3.0.2: - resolution: {integrity: sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==} + /is-path-inside/3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} dev: true @@ -1486,13 +1829,19 @@ packages: /is-typedarray/1.0.0: resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=} + /is-wsl/2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: true + /is-yarn-global/0.3.0: resolution: {integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==} dev: true /isarray/1.0.0: resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=} - dev: false optional: true /isexe/2.0.0: @@ -1500,6 +1849,8 @@ packages: /isstream/0.1.2: resolution: {integrity: sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=} + dev: false + optional: true /js-tokens/4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -1513,12 +1864,14 @@ packages: esprima: 4.0.1 dev: true - /jsbi/3.1.4: - resolution: {integrity: sha512-52QRRFSsi9impURE8ZUbzAMCLjPm4THO7H2fcuIvaaeFTbSysvkodbQQXIVsNgq/ypDbq6dJiuGKL0vZ/i9hUg==} + /jsbi/3.1.6: + resolution: {integrity: sha512-CGjq13y28FrBA5mAU+rsfHaVKEF9jrw3PhzZpIzTeMiPsT0XRDAS6E7QS8/ZTmFQUtl2MDJsxKQoYJzAhF7B1w==} dev: true /jsbn/0.1.1: resolution: {integrity: sha1-peZUwuWi3rXyAdls77yoDA7y9RM=} + dev: false + optional: true /json-buffer/3.0.0: resolution: {integrity: sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=} @@ -1528,12 +1881,12 @@ packages: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} dev: false - /json-fixer/1.6.9: - resolution: {integrity: sha512-81sxk1GrYNEiBDnxlaKqnFdytAeaYj+CF2CfDH6h6LtLHA1xlx33nQtyhVOLD2ViyIwQP/6jhcSuMP7U3wDSEw==} + /json-fixer/1.6.12: + resolution: {integrity: sha512-BGO9HExf0ZUVYvuWsps71Re513Ss0il1Wp7wYWkir2NthzincvNJEUu82KagEfAkGdjOMsypj3t2JB7drBKWnA==} engines: {node: '>=10'} dependencies: - '@babel/runtime': 7.14.0 - chalk: 4.1.1 + '@babel/runtime': 7.15.3 + chalk: 4.1.2 pegjs: 0.10.0 dev: true @@ -1546,6 +1899,8 @@ packages: /json-schema/0.2.3: resolution: {integrity: sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=} + dev: false + optional: true /json-stable-stringify-without-jsonify/1.0.1: resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=} @@ -1553,11 +1908,29 @@ packages: /json-stringify-safe/5.0.1: resolution: {integrity: sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=} + dev: false + optional: true /jsonschema/1.4.0: resolution: {integrity: sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw==} dev: false + /jsonwebtoken/8.5.1: + resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==} + engines: {node: '>=4', npm: '>=1.4.28'} + dependencies: + jws: 3.2.2 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 5.7.1 + dev: true + /jsprim/1.4.1: resolution: {integrity: sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=} engines: {'0': node >=0.6.0} @@ -1566,6 +1939,8 @@ packages: extsprintf: 1.3.0 json-schema: 0.2.3 verror: 1.10.0 + dev: false + optional: true /jwa/1.4.1: resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} @@ -1575,6 +1950,14 @@ packages: safe-buffer: 5.2.1 dev: true + /jwa/2.0.0: + resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + dev: true + /jws/3.2.2: resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} dependencies: @@ -1582,6 +1965,22 @@ packages: safe-buffer: 5.2.1 dev: true + /jws/4.0.0: + resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} + dependencies: + jwa: 2.0.0 + safe-buffer: 5.2.1 + dev: true + + /keytar/7.7.0: + resolution: {integrity: sha512-YEY9HWqThQc5q5xbXbRwsZTh2PJ36OSYRjSv3NN2xf5s5dpLTjEZnC2YikR29OaVybf9nQ0dJ/80i40RS97t/A==} + requiresBuild: true + dependencies: + node-addon-api: 3.2.1 + prebuild-install: 6.1.4 + dev: true + optional: true + /keyv/3.1.0: resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} dependencies: @@ -1640,16 +2039,52 @@ packages: resolution: {integrity: sha1-soqmKIorn8ZRA1x3EfZathkDMaY=} dev: false - /lodash.toarray/4.4.0: - resolution: {integrity: sha1-JMS/zWsvuji/0FlNsRedjptlZWE=} + /lodash.clonedeep/4.5.0: + resolution: {integrity: sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=} + dev: true + + /lodash.includes/4.3.0: + resolution: {integrity: sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=} + dev: true + + /lodash.isboolean/3.0.3: + resolution: {integrity: sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=} + dev: true + + /lodash.isequal/4.5.0: + resolution: {integrity: sha1-QVxEePK8wwEgwizhDtMib30+GOA=} dev: false - /lodash/4.17.20: - resolution: {integrity: sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==} + /lodash.isinteger/4.0.4: + resolution: {integrity: sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=} + dev: true + + /lodash.isnumber/3.0.3: + resolution: {integrity: sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=} + dev: true + + /lodash.isplainobject/4.0.6: + resolution: {integrity: sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=} + dev: true + + /lodash.isstring/4.0.1: + resolution: {integrity: sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=} + dev: true + + /lodash.merge/4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash.once/4.1.1: + resolution: {integrity: sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=} + dev: true + + /lodash.truncate/4.4.2: + resolution: {integrity: sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=} + dev: true /lodash/4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true /long/4.0.0: resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} @@ -1685,28 +2120,28 @@ packages: semver: 6.3.0 dev: true - /mariadb/2.5.2: - resolution: {integrity: sha512-SfaBl5/LiX2qJNNr7wCQvizVjtWxVm1CUWYKe+y4OMeyYMM6g0GhwX7/BbGtv/O3WthnGrM+Kj1imFnlescO0w==} + /mariadb/2.5.4: + resolution: {integrity: sha512-4vQgMRyBIN9EwSQG0vzjR9D8bscPH0dGPJt67qVlOkHSiSm0xUatg1Pft4o1LzORgeOW4PheiY/HBE9bYYmNCA==} engines: {node: '>= 10.13'} dependencies: - '@types/geojson': 7946.0.7 - '@types/node': 14.14.28 + '@types/geojson': 7946.0.8 + '@types/node': 14.17.9 denque: 1.5.0 - iconv-lite: 0.6.2 + iconv-lite: 0.6.3 long: 4.0.0 moment-timezone: 0.5.33 please-upgrade-node: 3.2.0 dev: true - /mime-db/1.45.0: - resolution: {integrity: sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==} + /mime-db/1.49.0: + resolution: {integrity: sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==} engines: {node: '>= 0.6'} - /mime-types/2.1.28: - resolution: {integrity: sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==} + /mime-types/2.1.32: + resolution: {integrity: sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==} engines: {node: '>= 0.6'} dependencies: - mime-db: 1.45.0 + mime-db: 1.49.0 /mimic-fn/2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} @@ -1718,6 +2153,12 @@ packages: engines: {node: '>=4'} dev: true + /mimic-response/2.1.0: + resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==} + engines: {node: '>=8'} + dev: true + optional: true + /minimatch/3.0.4: resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} dependencies: @@ -1741,6 +2182,11 @@ packages: dev: false optional: true + /mkdirp-classic/0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + dev: true + optional: true + /mkdirp/0.5.5: resolution: {integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==} hasBin: true @@ -1767,6 +2213,13 @@ packages: /ms/2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + /msal/1.4.12: + resolution: {integrity: sha512-gjupwQ6nvNL6mZkl5NIXyUmZhTiEMRu5giNdgHMh8l5EPOnV2Xj6nukY1NIxFacSTkEYUSDB47Pej9GxDYf+1w==} + engines: {node: '>=0.8.0'} + dependencies: + tslib: 1.14.1 + dev: true + /mustache/4.2.0: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} hasBin: true @@ -1776,13 +2229,13 @@ packages: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} dev: true - /mysql2/2.2.5: - resolution: {integrity: sha512-XRqPNxcZTpmFdXbJqb+/CtYVLCx14x1RTeNMD4954L331APu75IC74GDqnZMEt1kwaXy6TySo55rF2F3YJS78g==} + /mysql2/2.3.0: + resolution: {integrity: sha512-0t5Ivps5Tdy5YHk5NdKwQhe/4Qyn2pload+S+UooDBvsqngtzujG1BaTWBihQLfeKO3t3122/GtusBtmHEHqww==} engines: {node: '>= 8.0'} dependencies: denque: 1.5.0 generate-function: 2.3.1 - iconv-lite: 0.6.2 + iconv-lite: 0.6.3 long: 4.0.0 lru-cache: 6.0.0 named-placeholders: 1.1.2 @@ -1797,6 +2250,11 @@ packages: lru-cache: 4.1.5 dev: true + /napi-build-utils/1.0.2: + resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + dev: true + optional: true + /native-duplexpair/1.0.0: resolution: {integrity: sha1-eJkHjmS/PIo9cyYBs9QP8F21j6A=} dev: true @@ -1805,8 +2263,8 @@ packages: resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} dev: true - /needle/2.6.0: - resolution: {integrity: sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==} + /needle/2.8.0: + resolution: {integrity: sha512-ZTq6WYkN/3782H1393me3utVYdq2XyqNUFBsprEE3VMAT0+hP/cItpnITpqsY6ep2yeFE4Tqtqwc74VqUlUYtw==} engines: {node: '>= 4.4.x'} hasBin: true dependencies: @@ -1816,19 +2274,25 @@ packages: dev: false optional: true - /node-abort-controller/1.1.0: - resolution: {integrity: sha512-dEYmUqjtbivotqjraOe8UvhT/poFfog1BQRNsZm/MSEDDESk2cQ1tvD8kGyuN07TM/zoW+n42odL8zTeJupYdQ==} + /node-abi/2.30.0: + resolution: {integrity: sha512-g6bZh3YCKQRdwuO/tSZZYJAw622SjsRfJ2X0Iy4sSOHZ34/sPPdVBn8fev2tj7njzLwuqPw9uMtGsGkO5kIQvg==} + dependencies: + semver: 5.7.1 dev: true - - /node-addon-api/3.1.0: - resolution: {integrity: sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==} - dev: false optional: true - /node-emoji/1.10.0: - resolution: {integrity: sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==} + /node-abort-controller/2.0.0: + resolution: {integrity: sha512-L8RfEgjBTHAISTuagw51PprVAqNZoG6KSB6LQ6H1bskMVkFs5E71IyjauLBv3XbuomJlguWF/VnRHdJ1gqiAqA==} + dev: true + + /node-addon-api/3.2.1: + resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} + optional: true + + /node-emoji/1.11.0: + resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} dependencies: - lodash.toarray: 4.4.0 + lodash: 4.17.21 dev: false /node-fetch/2.6.1: @@ -1841,8 +2305,8 @@ packages: hasBin: true dependencies: fstream: 1.0.12 - glob: 7.1.6 - graceful-fs: 4.2.6 + glob: 7.1.7 + graceful-fs: 4.2.8 mkdirp: 0.5.5 nopt: 3.0.6 npmlog: 4.1.2 @@ -1862,24 +2326,24 @@ packages: dependencies: detect-libc: 1.0.3 mkdirp: 0.5.5 - needle: 2.6.0 + needle: 2.8.0 nopt: 4.0.3 npm-packlist: 1.4.8 npmlog: 4.1.2 rc: 1.2.8 rimraf: 2.7.1 semver: 5.7.1 - tar: 4.4.13 + tar: 4.4.17 dev: false optional: true - /nodemon/2.0.7: - resolution: {integrity: sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA==} + /nodemon/2.0.12: + resolution: {integrity: sha512-egCTmNZdObdBxUBw6ZNwvZ/xzk24CKRs5K6d+5zbmrMr7rOpPmfPeF6OxM3DDpaRx331CQRFEktn+wrFFfBSOA==} engines: {node: '>=8.10.0'} hasBin: true requiresBuild: true dependencies: - chokidar: 3.5.1 + chokidar: 3.5.2 debug: 3.2.7 ignore-by-default: 1.0.1 minimatch: 3.0.4 @@ -1920,13 +2384,13 @@ packages: engines: {node: '>=0.10.0'} dev: true - /normalize-url/4.5.0: - resolution: {integrity: sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==} + /normalize-url/4.5.1: + resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} engines: {node: '>=8'} dev: true - /npm-bundled/1.1.1: - resolution: {integrity: sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==} + /npm-bundled/1.1.2: + resolution: {integrity: sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==} dependencies: npm-normalize-package-bin: 1.0.1 dev: false @@ -1940,8 +2404,8 @@ packages: /npm-packlist/1.4.8: resolution: {integrity: sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==} dependencies: - ignore-walk: 3.0.3 - npm-bundled: 1.1.1 + ignore-walk: 3.0.4 + npm-bundled: 1.1.2 npm-normalize-package-bin: 1.0.1 dev: false optional: true @@ -1953,24 +2417,27 @@ packages: console-control-strings: 1.1.0 gauge: 2.7.4 set-blocking: 2.0.0 - dev: false optional: true /number-is-nan/1.0.1: resolution: {integrity: sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=} engines: {node: '>=0.10.0'} - dev: false optional: true /oauth-sign/0.9.0: resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} + dev: false + optional: true /object-assign/4.1.1: resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=} engines: {node: '>=0.10.0'} - dev: false optional: true + /object-inspect/1.11.0: + resolution: {integrity: sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==} + dev: true + /on-finished/2.3.0: resolution: {integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=} engines: {node: '>= 0.8'} @@ -1990,6 +2457,14 @@ packages: mimic-fn: 2.1.0 dev: true + /open/7.4.2: + resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: true + /optionator/0.9.1: resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} engines: {node: '>= 0.8.0'} @@ -2020,6 +2495,18 @@ packages: dev: false optional: true + /ow/0.27.0: + resolution: {integrity: sha512-SGnrGUbhn4VaUGdU0EJLMwZWSupPmF46hnTRII7aCLCrqixTAC5eKo8kI4/XXf1eaaI8YEVT+3FeGNJI9himAQ==} + engines: {node: '>=12'} + dependencies: + '@sindresorhus/is': 4.0.1 + callsites: 3.1.0 + dot-prop: 6.0.1 + lodash.isequal: 4.5.0 + type-fest: 1.4.0 + vali-date: 1.0.0 + dev: false + /p-cancelable/1.1.0: resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} engines: {node: '>=6'} @@ -2087,16 +2574,18 @@ packages: /performance-now/2.1.0: resolution: {integrity: sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=} + dev: false + optional: true - /pg-connection-string/2.4.0: - resolution: {integrity: sha512-3iBXuv7XKvxeMrIgym7njT+HlZkwZqqGX4Bu9cci8xHZNT+Um1gWKqCsAzcC0d95rcKMU5WBg6YRUcHyV0HZKQ==} + /pg-connection-string/2.5.0: + resolution: {integrity: sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==} dev: true - /pg-hstore/2.3.3: - resolution: {integrity: sha512-qpeTpdkguFgfdoidtfeTho1Q1zPVPbtMHgs8eQ+Aan05iLmIs3Z3oo5DOZRclPGoQ4i68I1kCtQSJSa7i0ZVYg==} + /pg-hstore/2.3.4: + resolution: {integrity: sha512-N3SGs/Rf+xA1M2/n0JBiXFDVMzdekwLZLAO0g7mpDY9ouX+fDI7jS6kTq3JujmYbtNSJ53TJ0q4G98KVZSM4EA==} engines: {node: '>= 0.8.x'} dependencies: - underscore: 1.12.0 + underscore: 1.13.1 dev: true /pg-int8/1.0.1: @@ -2104,16 +2593,16 @@ packages: engines: {node: '>=4.0.0'} dev: true - /pg-pool/3.2.2_pg@8.5.1: - resolution: {integrity: sha512-ORJoFxAlmmros8igi608iVEbQNNZlp89diFVx6yV5v+ehmpMY9sK6QgpmgoXbmkNaBAx8cOOZh9g80kJv1ooyA==} + /pg-pool/3.4.1_pg@8.7.1: + resolution: {integrity: sha512-TVHxR/gf3MeJRvchgNHxsYsTCHQ+4wm3VIHSS19z8NC0+gioEhq1okDY1sm/TYbfoP6JLFx01s0ShvZ3puP/iQ==} peerDependencies: pg: '>=8.0' dependencies: - pg: 8.5.1 + pg: 8.7.1 dev: true - /pg-protocol/1.4.0: - resolution: {integrity: sha512-El+aXWcwG/8wuFICMQjM5ZSAm6OWiJicFdNYo+VY3QP+8vI4SvLIWVe51PppTzMhikUJR+PsyIFKqfdXPz/yxA==} + /pg-protocol/1.5.0: + resolution: {integrity: sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==} dev: true /pg-types/2.2.0: @@ -2127,8 +2616,8 @@ packages: postgres-interval: 1.2.0 dev: true - /pg/8.5.1: - resolution: {integrity: sha512-9wm3yX9lCfjvA98ybCyw2pADUivyNWT/yIP4ZcDVpMN0og70BUWYEGXPCTAQdGTAqnytfRADb7NERrY1qxhIqw==} + /pg/8.7.1: + resolution: {integrity: sha512-7bdYcv7V6U3KAtWjpQJJBww0UEsWuh4yQ/EjNf2HeO/NnvKjpvhEIe/A/TleP6wtmSKnUnghs5A9jUoK6iDdkA==} engines: {node: '>= 8.0.0'} peerDependencies: pg-native: '>=2.0.0' @@ -2138,9 +2627,9 @@ packages: dependencies: buffer-writer: 2.0.0 packet-reader: 1.0.0 - pg-connection-string: 2.4.0 - pg-pool: 3.2.2_pg@8.5.1 - pg-protocol: 1.4.0 + pg-connection-string: 2.5.0 + pg-pool: 3.4.1_pg@8.7.1 + pg-protocol: 1.5.0 pg-types: 2.2.0 pgpass: 1.0.4 dev: true @@ -2151,8 +2640,8 @@ packages: split2: 3.2.2 dev: true - /picomatch/2.2.2: - resolution: {integrity: sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==} + /picomatch/2.3.0: + resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==} engines: {node: '>=8.6'} dev: true @@ -2189,6 +2678,27 @@ packages: xtend: 4.0.2 dev: true + /prebuild-install/6.1.4: + resolution: {integrity: sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==} + engines: {node: '>=6'} + hasBin: true + dependencies: + detect-libc: 1.0.3 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.5 + mkdirp-classic: 0.5.3 + napi-build-utils: 1.0.2 + node-abi: 2.30.0 + npmlog: 4.1.2 + pump: 3.0.0 + rc: 1.2.8 + simple-get: 3.1.0 + tar-fs: 2.1.1 + tunnel-agent: 0.6.0 + dev: true + optional: true + /prelude-ls/1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -2199,29 +2709,15 @@ packages: engines: {node: '>=4'} dev: true - /prism-media/1.2.6: - resolution: {integrity: sha512-I1Ys8HA+9aSKQ2jbkO3r6p9Z+tMpSssGhucgxXvc0sSpOi0kK550rDQnKtAS7Z5TzPQeLJdBmK2Br8x+5137lg==} - peerDependencies: - '@discordjs/opus': ^0.4.0 - ffmpeg-static: ^4.2.7 || ^3.0.0 || ^2.4.0 - node-opus: ^0.3.3 - opusscript: ^0.0.7 - peerDependenciesMeta: - '@discordjs/opus': - optional: true - ffmpeg-static: - optional: true - node-opus: - optional: true - opusscript: - optional: true - dev: false - /process-nextick-args/2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: false optional: true + /process/0.11.10: + resolution: {integrity: sha1-czIwDoQBYb2j5podHZGn1LwW8YI=} + engines: {node: '>= 0.6.0'} + dev: true + /progress/2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} @@ -2256,9 +2752,18 @@ packages: escape-goat: 2.1.1 dev: true + /qs/6.10.1: + resolution: {integrity: sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: true + /qs/6.5.2: resolution: {integrity: sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==} engines: {node: '>=0.6'} + dev: false + optional: true /rc/1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} @@ -2279,7 +2784,6 @@ packages: safe-buffer: 5.1.2 string_decoder: 1.1.1 util-deprecate: 1.0.2 - dev: false optional: true /readable-stream/3.6.0: @@ -2291,19 +2795,19 @@ packages: util-deprecate: 1.0.2 dev: true - /readdirp/3.5.0: - resolution: {integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==} + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} dependencies: - picomatch: 2.2.2 + picomatch: 2.3.0 dev: true - /regenerator-runtime/0.13.7: - resolution: {integrity: sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==} + /regenerator-runtime/0.13.9: + resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} dev: true - /regexpp/3.1.0: - resolution: {integrity: sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==} + /regexpp/3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} dev: true @@ -2338,7 +2842,7 @@ packages: is-typedarray: 1.0.0 isstream: 0.1.2 json-stringify-safe: 5.0.1 - mime-types: 2.1.28 + mime-types: 2.1.32 oauth-sign: 0.9.0 performance-now: 2.1.0 qs: 6.5.2 @@ -2346,6 +2850,8 @@ packages: tough-cookie: 2.5.0 tunnel-agent: 0.6.0 uuid: 3.4.0 + dev: false + optional: true /require-directory/2.1.1: resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=} @@ -2390,7 +2896,7 @@ packages: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} hasBin: true dependencies: - glob: 7.1.6 + glob: 7.1.7 dev: false optional: true @@ -2398,7 +2904,7 @@ packages: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: - glob: 7.1.6 + glob: 7.1.7 dev: true /run-async/2.4.1: @@ -2415,7 +2921,6 @@ packages: /safe-buffer/5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: false optional: true /safe-buffer/5.2.1: @@ -2453,8 +2958,8 @@ packages: hasBin: true dev: true - /semver/7.3.4: - resolution: {integrity: sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==} + /semver/7.3.5: + resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} engines: {node: '>=10'} hasBin: true dependencies: @@ -2469,8 +2974,8 @@ packages: engines: {node: '>= 10.0.0'} dev: false - /sequelize/6.5.0_fb66e8c649bde1be622cc06164c9e22d: - resolution: {integrity: sha512-owBt8fnzVy8E1OvyCyfCdVk7OOLyPVrBCMEf+CvRReC5oCyo+UqeXCtwaex9L6LM9ifZ1i3TG3sFeM5MgLK0CQ==} + /sequelize/6.6.5_aa1b3c7f5b5df187fb1a5c6073dca637: + resolution: {integrity: sha512-QyRrJrDRiwuiILqTMHUA1yWOPIL12KlfmgZ3hnzQwbMvp2vJ6fzu9bYJQB+qPMosck4mBUggY4Cjoc6Et8FBIQ==} engines: {node: '>=10.0.0'} peerDependencies: mariadb: '*' @@ -2493,24 +2998,24 @@ packages: tedious: optional: true dependencies: - debug: 4.3.1 + debug: 4.3.2 dottie: 2.0.2 - inflection: 1.12.0 - lodash: 4.17.20 - mariadb: 2.5.2 + inflection: 1.13.1 + lodash: 4.17.21 + mariadb: 2.5.4 moment: 2.29.1 moment-timezone: 0.5.33 - mysql2: 2.2.5 - pg: 8.5.1 - pg-hstore: 2.3.3 + mysql2: 2.3.0 + pg: 8.7.1 + pg-hstore: 2.3.4 retry-as-promised: 3.2.0 - semver: 7.3.4 + semver: 7.3.5 sequelize-pool: 6.1.0 sqlite3: 5.0.2 - tedious: 11.0.3 + tedious: 11.4.0 toposort-class: 1.0.1 uuid: 8.3.2 - validator: 10.11.0 + validator: 13.6.0 wkx: 0.5.0 transitivePeerDependencies: - supports-color @@ -2519,10 +3024,6 @@ packages: /set-blocking/2.0.0: resolution: {integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=} - /setimmediate/1.0.5: - resolution: {integrity: sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=} - dev: false - /shebang-command/2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -2535,9 +3036,31 @@ packages: engines: {node: '>=8'} dev: true + /side-channel/1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.1 + object-inspect: 1.11.0 + dev: true + /signal-exit/3.0.3: resolution: {integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==} + /simple-concat/1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + dev: true + optional: true + + /simple-get/3.1.0: + resolution: {integrity: sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==} + dependencies: + decompress-response: 4.2.1 + once: 1.4.0 + simple-concat: 1.0.1 + dev: true + optional: true + /slice-ansi/4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} @@ -2568,7 +3091,7 @@ packages: node-gyp: optional: true dependencies: - node-addon-api: 3.1.0 + node-addon-api: 3.2.1 node-pre-gyp: 0.11.0 optionalDependencies: node-gyp: 3.8.0 @@ -2594,6 +3117,13 @@ packages: jsbn: 0.1.1 safer-buffer: 2.1.2 tweetnacl: 0.14.5 + dev: false + optional: true + + /stoppable/1.1.0: + resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} + engines: {node: '>=4', npm: '>=6'} + dev: true /string-argv/0.3.1: resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} @@ -2607,7 +3137,6 @@ packages: code-point-at: 1.1.0 is-fullwidth-code-point: 1.0.0 strip-ansi: 3.0.1 - dev: false optional: true /string-width/3.1.0: @@ -2618,14 +3147,6 @@ packages: is-fullwidth-code-point: 2.0.0 strip-ansi: 5.2.0 - /string-width/4.2.0: - resolution: {integrity: sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==} - engines: {node: '>=8'} - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.0 - /string-width/4.2.2: resolution: {integrity: sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==} engines: {node: '>=8'} @@ -2633,13 +3154,11 @@ packages: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.0 - dev: true /string_decoder/1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 - dev: false optional: true /string_decoder/1.3.0: @@ -2653,7 +3172,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: ansi-regex: 2.1.1 - dev: false optional: true /strip-ansi/5.2.0: @@ -2690,26 +3208,51 @@ packages: dependencies: has-flag: 4.0.0 - /supports-hyperlinks/2.1.0: - resolution: {integrity: sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==} + /supports-hyperlinks/2.2.0: + resolution: {integrity: sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 supports-color: 7.2.0 dev: false - /table/6.0.7: - resolution: {integrity: sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g==} + /table/6.7.1: + resolution: {integrity: sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==} engines: {node: '>=10.0.0'} dependencies: - ajv: 7.1.1 - lodash: 4.17.21 + ajv: 8.6.2 + lodash.clonedeep: 4.5.0 + lodash.truncate: 4.4.2 slice-ansi: 4.0.0 string-width: 4.2.2 + strip-ansi: 6.0.0 dev: true + /tar-fs/2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 + dev: true + optional: true + + /tar-stream/2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.0 + dev: true + optional: true + /tar/2.2.2: resolution: {integrity: sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==} + deprecated: This version of tar is no longer supported, and will not receive security updates. Please upgrade asap. dependencies: block-stream: 0.0.9 fstream: 1.0.12 @@ -2717,8 +3260,8 @@ packages: dev: false optional: true - /tar/4.4.13: - resolution: {integrity: sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==} + /tar/4.4.17: + resolution: {integrity: sha512-q7OwXq6NTdcYIa+k58nEMV3j1euhDhGCs/VRw9ymx/PbH0jtIM2+VTgDE/BW3rbLkrBUXs5fzEKgic5oUciu7g==} engines: {node: '>=4.5'} dependencies: chownr: 1.1.4 @@ -2731,24 +3274,27 @@ packages: dev: false optional: true - /tedious/11.0.3: - resolution: {integrity: sha512-KoJlY8gFgSf1njhM7wD2po3R5y2tjEbp3lGo4R9uBt5M/ogf/AeTDH8caFDD+RrYqAxRbOmzBOjDNggBI7ERaw==} + /tedious/11.4.0: + resolution: {integrity: sha512-A7DYRH0EJL5b4vj8X8KVRyWVk7OZCXkHltMlkmMgOJEfPPMv41X+iNIeOCZ7zJ4/fvaJHkvfsKYuOzL+Eda+TQ==} engines: {node: '>= 10'} dependencies: - '@azure/ms-rest-nodeauth': 3.0.6 + '@azure/identity': 1.5.1 + '@azure/keyvault-keys': 4.3.0 + '@azure/ms-rest-nodeauth': 3.0.10 '@js-joda/core': 3.2.0 adal-node: 0.2.2 - bl: 4.1.0 + bl: 5.0.0 depd: 2.0.0 - iconv-lite: 0.6.2 - jsbi: 3.1.4 + iconv-lite: 0.6.3 + jsbi: 3.1.6 native-duplexpair: 1.0.0 - node-abort-controller: 1.1.0 + node-abort-controller: 2.0.0 punycode: 2.1.1 readable-stream: 3.6.0 sprintf-js: 1.1.2 transitivePeerDependencies: - debug + - supports-color dev: true /term-size/2.2.1: @@ -2760,8 +3306,8 @@ packages: resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} engines: {node: '>=8'} dependencies: - ansi-escapes: 4.3.1 - supports-hyperlinks: 2.1.0 + ansi-escapes: 4.3.2 + supports-hyperlinks: 2.2.0 dev: false /text-table/0.2.0: @@ -2815,6 +3361,8 @@ packages: dependencies: psl: 1.8.0 punycode: 2.1.1 + dev: false + optional: true /tough-cookie/3.0.1: resolution: {integrity: sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==} @@ -2825,18 +3373,31 @@ packages: punycode: 2.1.1 dev: true + /tough-cookie/4.0.0: + resolution: {integrity: sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==} + engines: {node: '>=6'} + dependencies: + psl: 1.8.0 + punycode: 2.1.1 + universalify: 0.1.2 + dev: true + + /ts-mixer/6.0.0: + resolution: {integrity: sha512-nXIb1fvdY5CBSrDIblLn73NW0qRDk5yJ0Sk1qPBF560OdJfQp9jhl+0tzcY09OZ9U+6GpeoI9RjwoIKFIoB9MQ==} + dev: false + /tslib/1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib/2.1.0: - resolution: {integrity: sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==} - dev: true + /tslib/2.3.1: + resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} /tunnel-agent/0.6.0: resolution: {integrity: sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=} dependencies: safe-buffer: 5.2.1 + optional: true /tunnel/0.0.6: resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} @@ -2845,10 +3406,8 @@ packages: /tweetnacl/0.14.5: resolution: {integrity: sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=} - - /tweetnacl/1.0.3: - resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} dev: false + optional: true /type-check/0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} @@ -2857,26 +3416,24 @@ packages: prelude-ls: 1.2.1 dev: true - /type-fest/0.11.0: - resolution: {integrity: sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==} - engines: {node: '>=8'} - dev: false - /type-fest/0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - dev: false /type-fest/0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - dev: true /type-fest/0.8.1: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} dev: true + /type-fest/1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + dev: false + /typedarray-to-buffer/3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} dependencies: @@ -2894,8 +3451,8 @@ packages: debug: 2.6.9 dev: true - /underscore/1.12.0: - resolution: {integrity: sha512-21rQzss/XPMjolTiIezSu3JAjgagXKROtNrYFEOWK109qY1Uv2tVjPTZ1ci2HgvQDA16gHYSthQIJfB+XId/rQ==} + /underscore/1.13.1: + resolution: {integrity: sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==} dev: true /unique-string/2.0.0: @@ -2905,6 +3462,11 @@ packages: crypto-random-string: 2.0.0 dev: true + /universalify/0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + dev: true + /update-notifier/4.1.3: resolution: {integrity: sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==} engines: {node: '>=8'} @@ -2941,19 +3503,24 @@ packages: /uuid/3.4.0: resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. hasBin: true /uuid/8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true - dev: false - /v8-compile-cache/2.2.0: - resolution: {integrity: sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==} + /v8-compile-cache/2.3.0: + resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} dev: true - /validator/10.11.0: - resolution: {integrity: sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==} + /vali-date/1.0.0: + resolution: {integrity: sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=} + engines: {node: '>=0.10.0'} + dev: false + + /validator/13.6.0: + resolution: {integrity: sha512-gVgKbdbHgtxpRyR8K0O6oFZPhhB5tT1jeEHZR0Znr9Svg03U0+r9DXWMrnRAB+HtCStDQKlaIZm42tVsVjqtjg==} engines: {node: '>= 0.10'} dev: false @@ -2964,6 +3531,8 @@ packages: assert-plus: 1.0.0 core-util-is: 1.0.2 extsprintf: 1.3.0 + dev: false + optional: true /which-module/2.0.0: resolution: {integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=} @@ -2989,19 +3558,18 @@ packages: resolution: {integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==} dependencies: string-width: 1.0.2 - dev: false optional: true /widest-line/3.1.0: resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} engines: {node: '>=8'} dependencies: - string-width: 4.2.0 + string-width: 4.2.2 /wkx/0.5.0: resolution: {integrity: sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==} dependencies: - '@types/node': 14.14.28 + '@types/node': 16.6.1 dev: false /word-wrap/1.2.3: @@ -3023,7 +3591,7 @@ packages: engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 - string-width: 4.2.0 + string-width: 4.2.2 strip-ansi: 6.0.0 dev: false @@ -3039,8 +3607,8 @@ packages: typedarray-to-buffer: 3.1.5 dev: true - /ws/7.4.3: - resolution: {integrity: sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==} + /ws/7.5.3: + resolution: {integrity: sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==} engines: {node: '>=8.3.0'} peerDependencies: bufferutil: ^4.0.1 @@ -3070,8 +3638,8 @@ packages: engines: {node: '>=4.0'} dev: true - /xmldom/0.4.0: - resolution: {integrity: sha512-2E93k08T30Ugs+34HBSTQLVtpi6mCddaY8uO+pMNk1pqSjV5vElzn4mmh6KLxN3hki8rNcHSYzILoh3TEWORvA==} + /xmldom/0.6.0: + resolution: {integrity: sha512-iAcin401y58LckRZ0TkI4k0VSM1Qg0KGSc3i8rU+xrxe19A/BN1zHyVSJY7uoutVlaTSzYyk/v5AmkewAP7jtg==} engines: {node: '>=10.0.0'} dev: true From f827e9500fd4c9ded7f6a6503a339a4a495771b4 Mon Sep 17 00:00:00 2001 From: Isaac Date: Mon, 16 Aug 2021 15:02:53 +0100 Subject: [PATCH 3/6] chore: set version to 3.1.0-dev Co-authored-by: @PuneetGopinath --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 85df869..b43272a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@eartharoid/discord-tickets", - "version": "3.1.0", + "version": "3.1.0-dev", "private": true, "description": "An open-source Discord bot for ticket management", "main": "src/index.js", From 6cd6721baa8dad50e0aed7ca446532eecfb7202f Mon Sep 17 00:00:00 2001 From: Isaac Date: Mon, 16 Aug 2021 15:03:53 +0100 Subject: [PATCH 4/6] refactor(pterodactyl): bump image version Co-authored-by: @donzee529 --- pterodactyl.egg.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pterodactyl.egg.json b/pterodactyl.egg.json index 9b60098..07c4b7f 100644 --- a/pterodactyl.egg.json +++ b/pterodactyl.egg.json @@ -10,7 +10,7 @@ "description": "https:\/\/discordtickets.app", "features": null, "images": [ - "quay.io\/parkervcp\/pterodactyl-images:debian_nodejs-14" + "quay.io\/parkervcp\/pterodactyl-images:debian_nodejs-16" ], "file_denylist": [], "startup": "if [[ ! -z ${VERSION} ]]; then\r\n echo -e \\\"Using version ${VERSION}\\\";\r\nelse\r\n echo -e \\\"Please set the VERSION variable \\(e.g. v3.0.0\\)\\\";\r\n exit 0;\r\nfi;\r\n\r\nif [[ -d .git ]]; then\r\n git fetch --all --tags;\r\n git checkout tags\/${VERSION};\r\nfi;\r\n\r\nif [[ ! -z ${PLUGINS} ]]; then\r\n \/usr\/local\/bin\/npm install ${PLUGINS};\r\nfi;\r\n\r\nif [ -f \/home\/container\/package.json ]; then\r\n \/usr\/local\/bin\/npm install --production;\r\nfi;\r\n\r\n\/usr\/local\/bin\/npm start", From 96d1ddc48c8203228023ceea2e0ef8dad868c6cc Mon Sep 17 00:00:00 2001 From: Isaac Date: Mon, 16 Aug 2021 15:04:13 +0100 Subject: [PATCH 5/6] refactor: update node version check --- src/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index 29b1d1e..6258af8 100644 --- a/src/index.js +++ b/src/index.js @@ -24,8 +24,9 @@ process.title = 'Discord Tickets'; -const node_version = Number(process.versions.node.split('.')[0]); -if (node_version < 14) return console.log(`\x07Error: Discord Tickets does not work on Node v${node_version}. Please upgrade to v14 or above.`); +const min_node_version = '16.6.0'; +const semver = require('semver'); +if (semver.lt(process.versions.node, min_node_version)) return console.log(`\x07Error: Discord Tickets does not work on Node v${process.versions.node}; please upgrade to v${min_node_version} or above.`); const leeks = require('leeks.js'); const fs = require('fs'); From 0f10908ee0c250fe734663f82f7c628e34c9afed Mon Sep 17 00:00:00 2001 From: Puneet Gopinath Date: Tue, 17 Aug 2021 01:35:20 +0530 Subject: [PATCH 6/6] refactor: update to discord.js v13 (#203) * build: bump djs version * refactor(add): update * refactor(blacklist): update * refactor(close): update * refactor(help): update * refactor(new): update * refactor(panel): update * refactor(remove): update * refactor(stats): update * refactor(survey): update * refactor(tag): update * refactor(topic): update * refactor(guild): update, now Structures doesn't exist Also I don't know if this would work actually, let's see * refactor(guild_member) * refactor(index.js): add intents I can't understand how you do the indentation, sorry if I made a mistake * Update package.json * fix(intents): add `DIRECT_MESSAGES` intents - also fix code style and indentation * style: fix properties order and indentation * fix(guild) * Update and rename message.js to messageCreate.js * Update guild.js * refactor(manager): fix * Update manager.js * fix(help) * style: fix spacing * fix: permission overwrites * fix(new) * fix(presence): rename activity to activities * fix(presence): fix debug message * fix: update channel types * Update new.js * fix(embeds): update footer function * fix: broken code * style: add new lines around embed blocks * fix(messages): update remaining `send()` calls * fix(messages): i missed one * build: replace fastify logger with standard logger * refactor: update message and reaction collectors Co-authored-by: Isaac --- package.json | 2 +- pnpm-lock.yaml | 27 +-- src/commands/add.js | 92 +++++---- src/commands/blacklist.js | 86 ++++---- src/commands/close.js | 185 ++++++++++-------- src/commands/help.js | 26 +-- src/commands/new.js | 129 +++++++----- src/commands/panel.js | 50 +++-- src/commands/remove.js | 90 +++++---- src/commands/settings.js | 10 +- src/commands/stats.js | 32 +-- src/commands/survey.js | 20 +- src/commands/tag.js | 80 ++++---- src/commands/topic.js | 56 +++--- src/index.js | 20 +- src/listeners/guildDelete.js | 2 +- .../{message.js => messageCreate.js} | 25 ++- src/listeners/messageDelete.js | 2 +- src/listeners/messageReactionAdd.js | 45 ++--- src/listeners/messageReactionRemove.js | 24 +-- src/listeners/messageUpdate.js | 2 +- src/listeners/ready.js | 2 +- src/logger.js | 2 +- src/modules/commands/command.js | 4 +- src/modules/commands/manager.js | 80 ++++---- src/modules/structures.js | 9 - src/modules/tickets/manager.js | 164 +++++++++------- src/structures/guild.js | 21 -- src/structures/guild_member.js | 14 -- src/utils/discord.js | 67 +++++-- 30 files changed, 749 insertions(+), 619 deletions(-) rename src/listeners/{message.js => messageCreate.js} (76%) delete mode 100644 src/modules/structures.js delete mode 100644 src/structures/guild.js delete mode 100644 src/structures/guild_member.js diff --git a/package.json b/package.json index b43272a..8d1277d 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "jsonschema": "^1.4.0", "keyv": "^4.0.3", "leeks.js": "^0.2.2", - "leekslazylogger-fastify": "^0.1.1", + "leekslazylogger": "^3.0.2", "mustache": "^4.2.0", "node-emoji": "^1.11.0", "node-fetch": "^2.6.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0380b98..fc6940e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,7 +12,7 @@ specifiers: jsonschema: ^1.4.0 keyv: ^4.0.3 leeks.js: ^0.2.2 - leekslazylogger-fastify: ^0.1.1 + leekslazylogger: ^3.0.2 mariadb: ^2.5.4 mustache: ^4.2.0 mysql2: ^2.3.0 @@ -39,7 +39,7 @@ dependencies: jsonschema: 1.4.0 keyv: 4.0.3 leeks.js: 0.2.2 - leekslazylogger-fastify: 0.1.1 + leekslazylogger: 3.0.2 mustache: 4.2.0 node-emoji: 1.11.0 node-fetch: 2.6.1 @@ -1124,10 +1124,6 @@ packages: safe-buffer: 5.2.1 dev: true - /ee-first/1.1.1: - resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} - dev: false - /emoji-regex/7.0.3: resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} @@ -1326,10 +1322,6 @@ packages: resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=} dev: true - /fastify-plugin/3.0.0: - resolution: {integrity: sha512-ZdCvKEEd92DNLps5n0v231Bha8bkz1DjnPP/aEz37rz/q42Z5JVLmgnqR4DYuNn3NXAO3IDCPyRvgvxtJ4Ym4w==} - dev: false - /figures/3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -2004,14 +1996,6 @@ packages: resolution: {integrity: sha512-cXbDc4a0ft0pQwN2ubagjsT1xKBeW0CP6pPmbUo+KvKynFwaqtGaBjdtpwkBO5NdwSw2OcJ89BYe9mjeZEfzQQ==} dev: false - /leekslazylogger-fastify/0.1.1: - resolution: {integrity: sha512-O/BFEYpsjCX3/6/GnhwajJ/CA/T9F4AwiRAPyN6y7ET0PgPfv+Q6uLktKiK/ZBcVH0f+VunSPdD0UyTXbzj7wQ==} - dependencies: - fastify-plugin: 3.0.0 - leekslazylogger: 3.0.2 - on-finished: 2.3.0 - dev: false - /leekslazylogger/3.0.2: resolution: {integrity: sha512-eXgQuEgoSIbtwJRQXy/DHFp1255C4br+x6CtOnrBb5j3GwmeARPMutPur1cMB5YonKBZxFXnvZLqQhr69qKg5A==} dependencies: @@ -2438,13 +2422,6 @@ packages: resolution: {integrity: sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==} dev: true - /on-finished/2.3.0: - resolution: {integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=} - engines: {node: '>= 0.8'} - dependencies: - ee-first: 1.1.1 - dev: false - /once/1.4.0: resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} dependencies: diff --git a/src/commands/add.js b/src/commands/add.js index 1a3e384..54ea608 100644 --- a/src/commands/add.js +++ b/src/commands/add.js @@ -36,65 +36,75 @@ module.exports = class AddCommand extends Command { * @returns {Promise} */ async execute(message, args) { - const settings = await message.guild.getSettings(); + const settings = await this.client.utils.getSettings(message.guild); const i18n = this.client.i18n.getLocale(settings.locale); const ticket = message.mentions.channels.first() ?? message.channel; const t_row = await this.client.tickets.resolve(ticket.id, message.guild.id); if (!t_row) { - return await message.channel.send( - new MessageEmbed() - .setColor(settings.error_colour) - .setTitle(i18n('commands.add.response.not_a_ticket.title')) - .setDescription(i18n('commands.add.response.not_a_ticket.description')) - .setFooter(settings.footer, message.guild.iconURL()) - ); + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setTitle(i18n('commands.add.response.not_a_ticket.title')) + .setDescription(i18n('commands.add.response.not_a_ticket.description')) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } const member = message.mentions.members.first() ?? message.guild.members.cache.get(args); if (!member) { - return await message.channel.send( - new MessageEmbed() - .setColor(settings.error_colour) - .setTitle(i18n('commands.add.response.no_member.title')) - .setDescription(i18n('commands.add.response.no_member.description')) - .setFooter(settings.footer, message.guild.iconURL()) - ); + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setTitle(i18n('commands.add.response.no_member.title')) + .setDescription(i18n('commands.add.response.no_member.description')) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } - if (t_row.creator !== message.author.id && !await message.member.isStaff()) { - return await message.channel.send( - new MessageEmbed() - .setColor(settings.error_colour) - .setTitle(i18n('commands.add.response.no_permission.title')) - .setDescription(i18n('commands.add.response.no_permission.description')) - .setFooter(settings.footer, message.guild.iconURL()) - ); + if (t_row.creator !== message.author.id && !await this.client.utils.isStaff(message.member)) { + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setTitle(i18n('commands.add.response.no_permission.title')) + .setDescription(i18n('commands.add.response.no_permission.description')) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } if (message.channel.id !== ticket.id) { - await message.channel.send( - new MessageEmbed() - .setColor(settings.success_colour) - .setAuthor(member.user.username, member.user.displayAvatarURL()) - .setTitle(i18n('commands.add.response.added.title')) - .setDescription(i18n('commands.add.response.added.description', member.toString(), ticket.toString())) - .setFooter(settings.footer, message.guild.iconURL()) - ); + await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.success_colour) + .setAuthor(member.user.username, member.user.displayAvatarURL()) + .setTitle(i18n('commands.add.response.added.title')) + .setDescription(i18n('commands.add.response.added.description', member.toString(), ticket.toString())) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } - await ticket.send( - new MessageEmbed() - .setColor(settings.colour) - .setAuthor(member.user.username, member.user.displayAvatarURL()) - .setTitle(i18n('ticket.member_added.title')) - .setDescription(i18n('ticket.member_added.description', member.toString(), message.author.toString())) - .setFooter(settings.footer, message.guild.iconURL()) - ); + await ticket.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.colour) + .setAuthor(member.user.username, member.user.displayAvatarURL()) + .setTitle(i18n('ticket.member_added.title')) + .setDescription(i18n('ticket.member_added.description', member.toString(), message.author.toString())) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); - await ticket.updateOverwrite(member, { + await ticket.permissionOverwrites.edit(member, { ATTACH_FILES: true, READ_MESSAGE_HISTORY: true, SEND_MESSAGES: true, @@ -105,4 +115,4 @@ module.exports = class AddCommand extends Command { this.client.log.info(`${message.author.tag} added ${member.user.tag} to ${ticket.id}`); } -}; \ No newline at end of file +}; diff --git a/src/commands/blacklist.js b/src/commands/blacklist.js index 0c9581d..ef7b90c 100644 --- a/src/commands/blacklist.js +++ b/src/commands/blacklist.js @@ -33,19 +33,21 @@ module.exports = class BlacklistCommand extends Command { * @returns {Promise} */ async execute(message, args) { - const settings = await message.guild.getSettings(); + const settings = await this.client.utils.getSettings(message.guild); const i18n = this.client.i18n.getLocale(settings.locale); const member = message.mentions.members.first(); - if (member && (await member.isStaff() || member.hasPermission(this.permissions))) { - return await message.channel.send( - new MessageEmbed() - .setColor(settings.colour) - .setTitle(i18n('commands.blacklist.response.illegal_action.title')) - .setDescription(i18n('commands.blacklist.response.illegal_action.description', `<@${member.id}>`)) - .setFooter(settings.footer, message.guild.iconURL()) - ); + if (member && (await this.client.utils.isStaff(member) || member.permissions.has(this.permissions))) { + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.colour) + .setTitle(i18n('commands.blacklist.response.illegal_action.title')) + .setDescription(i18n('commands.blacklist.response.illegal_action.description', `<@${member.id}>`)) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } @@ -60,13 +62,15 @@ module.exports = class BlacklistCommand extends Command { } else if (/\d{17,19}/.test(input)) { id = input; } else if (settings.blacklist.length === 0) { - return await message.channel.send( - new MessageEmbed() - .setColor(settings.colour) - .setTitle(i18n('commands.blacklist.response.empty_list.title')) - .setDescription(i18n('commands.blacklist.response.empty_list.description', settings.command_prefix)) - .setFooter(settings.footer, message.guild.iconURL()) - ); + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.colour) + .setTitle(i18n('commands.blacklist.response.empty_list.title')) + .setDescription(i18n('commands.blacklist.response.empty_list.description', settings.command_prefix)) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } else { // list blacklisted members const blacklist = settings.blacklist.map(element => { @@ -74,13 +78,15 @@ module.exports = class BlacklistCommand extends Command { if (is_role) return `ยป <@&${element}> (\`${element}\`)`; else return `ยป <@${element}> (\`${element}\`)`; }); - return await message.channel.send( - new MessageEmbed() - .setColor(settings.colour) - .setTitle(i18n('commands.blacklist.response.list.title')) - .setDescription(blacklist.join('\n')) - .setFooter(settings.footer, message.guild.iconURL()) - ); + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.colour) + .setTitle(i18n('commands.blacklist.response.list.title')) + .setDescription(blacklist.join('\n')) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } const is_role = role !== undefined || message.guild.roles.cache.has(id); @@ -91,25 +97,29 @@ module.exports = class BlacklistCommand extends Command { if (index === -1) { new_blacklist.push(id); - await message.channel.send( - new MessageEmbed() - .setColor(settings.colour) - .setTitle(i18n(`commands.blacklist.response.${member_or_role}_added.title`)) - .setDescription(i18n(`commands.blacklist.response.${member_or_role}_added.description`, id)) - .setFooter(settings.footer, message.guild.iconURL()) - ); + await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.colour) + .setTitle(i18n(`commands.blacklist.response.${member_or_role}_added.title`)) + .setDescription(i18n(`commands.blacklist.response.${member_or_role}_added.description`, id)) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } else { new_blacklist.splice(index, 1); - await message.channel.send( - new MessageEmbed() - .setColor(settings.colour) - .setTitle(i18n(`commands.blacklist.response.${member_or_role}_removed.title`)) - .setDescription(i18n(`commands.blacklist.response.${member_or_role}_removed.description`, id)) - .setFooter(settings.footer, message.guild.iconURL()) - ); + await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.colour) + .setTitle(i18n(`commands.blacklist.response.${member_or_role}_removed.title`)) + .setDescription(i18n(`commands.blacklist.response.${member_or_role}_removed.description`, id)) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } settings.blacklist = new_blacklist; await settings.save(); } -}; \ No newline at end of file +}; diff --git a/src/commands/close.js b/src/commands/close.js index d3c6d7c..a63f958 100644 --- a/src/commands/close.js +++ b/src/commands/close.js @@ -7,7 +7,6 @@ const { } = require('discord.js'); const { Op } = require('sequelize'); const toTime = require('to-time-monthsfork'); -const { footer } = require('../utils/discord'); module.exports = class CloseCommand extends Command { constructor(client) { @@ -60,7 +59,7 @@ module.exports = class CloseCommand extends Command { const arg_reason = this.args[1].name; const arg_time = this.args[2].name; - const settings = await message.guild.getSettings(); + const settings = await this.client.utils.getSettings(message.guild); const i18n = this.client.i18n.getLocale(settings.locale); if (args[arg_time]) { @@ -69,13 +68,15 @@ module.exports = class CloseCommand extends Command { try { period = toTime(args[arg_time]).ms(); } catch { - return await message.channel.send( - new MessageEmbed() - .setColor(settings.error_colour) - .setTitle(i18n('commands.close.response.invalid_time.title')) - .setDescription(i18n('commands.close.response.invalid_time.description')) - .setFooter(settings.footer, message.guild.iconURL()) - ); + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setTitle(i18n('commands.close.response.invalid_time.title')) + .setDescription(i18n('commands.close.response.invalid_time.description')) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } const tickets = await this.client.db.models.Ticket.findAndCountAll({ @@ -86,38 +87,46 @@ module.exports = class CloseCommand extends Command { }); if (tickets.count === 0) { - return await message.channel.send( - new MessageEmbed() - .setColor(settings.error_colour) - .setTitle(i18n('commands.close.response.no_tickets.title')) - .setDescription(i18n('commands.close.response.no_tickets.description')) - .setFooter(settings.footer, message.guild.iconURL()) - ); + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setTitle(i18n('commands.close.response.no_tickets.title')) + .setDescription(i18n('commands.close.response.no_tickets.description')) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } else { - const collector_message = await message.channel.send( - new MessageEmbed() - .setColor(settings.colour) - .setTitle(i18n('commands.close.response.confirm_multiple.title')) - .setDescription(i18n('commands.close.response.confirm_multiple.description', tickets.count, tickets.count)) - .setFooter(settings.footer, message.guild.iconURL()) - ); + const collector_message = await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.colour) + .setTitle(i18n('commands.close.response.confirm_multiple.title')) + .setDescription(i18n('commands.close.response.confirm_multiple.description', tickets.count, tickets.count)) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); await collector_message.react('โœ…'); - const collector_filter = (reaction, user) => user.id === message.author.id && reaction.emoji.name === 'โœ…'; - - const collector = collector_message.createReactionCollector(collector_filter, { time: 30000 }); + const filter = (reaction, user) => user.id === message.author.id && reaction.emoji.name === 'โœ…'; + const collector = collector_message.createReactionCollector({ + filter, + time: 30000 + }); collector.on('collect', async () => { await collector_message.reactions.removeAll(); - await message.channel.send( - new MessageEmbed() - .setColor(settings.success_colour) - .setTitle(i18n('commands.close.response.closed_multiple.title', tickets.count, tickets.count)) - .setDescription(i18n('commands.close.response.closed_multiple.description', tickets.count, tickets.count)) - .setFooter(settings.footer, message.guild.iconURL()) - ); + await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.success_colour) + .setTitle(i18n('commands.close.response.closed_multiple.title', tickets.count, tickets.count)) + .setDescription(i18n('commands.close.response.closed_multiple.description', tickets.count, tickets.count)) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); for (const ticket of tickets.rows) { await this.client.tickets.close(ticket.id, message.author.id, message.guild.id, args[arg_reason]); @@ -128,14 +137,16 @@ module.exports = class CloseCommand extends Command { collector.on('end', async collected => { if (collected.size === 0) { await collector_message.reactions.removeAll(); - await collector_message.edit( - new MessageEmbed() - .setColor(settings.error_colour) - .setAuthor(message.author.username, message.author.displayAvatarURL()) - .setTitle(i18n('commands.close.response.confirmation_timeout.title')) - .setDescription(i18n('commands.close.response.confirmation_timeout.description')) - .setFooter(footer(settings.footer, i18n('message_will_be_deleted_in', 15)), message.guild.iconURL()) - ); + await collector_message.edit({ + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setAuthor(message.author.username, message.author.displayAvatarURL()) + .setTitle(i18n('commands.close.response.confirmation_timeout.title')) + .setDescription(i18n('commands.close.response.confirmation_timeout.description')) + .setFooter(this.client.utils.footer(settings.footer, i18n('message_will_be_deleted_in', 15)), message.guild.iconURL()) + ] + }); setTimeout(async () => { await collector_message .delete() @@ -155,41 +166,49 @@ module.exports = class CloseCommand extends Command { t_row = await this.client.tickets.resolve(args[arg_ticket], message.guild.id); if (!t_row) { - return await message.channel.send( - new MessageEmbed() - .setColor(settings.error_colour) - .setTitle(i18n('commands.close.response.unresolvable.title')) - .setDescription(i18n('commands.close.response.unresolvable.description', args[arg_ticket])) - .setFooter(settings.footer, message.guild.iconURL()) - ); + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setTitle(i18n('commands.close.response.unresolvable.title')) + .setDescription(i18n('commands.close.response.unresolvable.description', args[arg_ticket])) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } } else { t_row = await this.client.db.models.Ticket.findOne({ where: { id: message.channel.id } }); if (!t_row) { - return await message.channel.send( - new MessageEmbed() - .setColor(settings.error_colour) - .setTitle(i18n('commands.close.response.not_a_ticket.title')) - .setDescription(i18n('commands.close.response.not_a_ticket.description', settings.command_prefix)) - .setFooter(settings.footer, message.guild.iconURL()) - ); + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setTitle(i18n('commands.close.response.not_a_ticket.title')) + .setDescription(i18n('commands.close.response.not_a_ticket.description', settings.command_prefix)) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } } - const collector_message = await message.channel.send( - new MessageEmbed() - .setColor(settings.colour) - .setTitle(i18n('commands.close.response.confirm.title')) - .setDescription(i18n('commands.close.response.confirm.description', t_row.number)) - .setFooter(settings.footer, message.guild.iconURL()) - ); + const collector_message = await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.colour) + .setTitle(i18n('commands.close.response.confirm.title')) + .setDescription(i18n('commands.close.response.confirm.description', t_row.number)) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); await collector_message.react('โœ…'); - const collector_filter = (reaction, user) => user.id === message.author.id && reaction.emoji.name === 'โœ…'; - - const collector = collector_message.createReactionCollector(collector_filter, { time: 30000 }); + const filter = (reaction, user) => user.id === message.author.id && reaction.emoji.name === 'โœ…'; + const collector = collector_message.createReactionCollector({ + filter, + time: 30000 + }); collector.on('collect', async () => { collector.stop(); @@ -198,13 +217,15 @@ module.exports = class CloseCommand extends Command { await collector_message.delete(); } else { await collector_message.reactions.removeAll(); - await collector_message.edit( - new MessageEmbed() - .setColor(settings.success_colour) - .setTitle(i18n('commands.close.response.closed.title')) - .setDescription(i18n('commands.close.response.closed.description', t_row.number)) - .setFooter(settings.footer, message.guild.iconURL()) - ); + await collector_message.edit({ + embeds: [ + new MessageEmbed() + .setColor(settings.success_colour) + .setTitle(i18n('commands.close.response.closed.title')) + .setDescription(i18n('commands.close.response.closed.description', t_row.number)) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } await this.client.tickets.close(t_row.id, message.author.id, message.guild.id, args[arg_reason]); @@ -213,14 +234,16 @@ module.exports = class CloseCommand extends Command { collector.on('end', async collected => { if (collected.size === 0) { await collector_message.reactions.removeAll(); - await collector_message.edit( - new MessageEmbed() - .setColor(settings.error_colour) - .setAuthor(message.author.username, message.author.displayAvatarURL()) - .setTitle(i18n('commands.close.response.confirmation_timeout.title')) - .setDescription(i18n('commands.close.response.confirmation_timeout.description')) - .setFooter(footer(settings.footer, i18n('message_will_be_deleted_in', 15)), message.guild.iconURL()) - ); + await collector_message.edit({ + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setAuthor(message.author.username, message.author.displayAvatarURL()) + .setTitle(i18n('commands.close.response.confirmation_timeout.title')) + .setDescription(i18n('commands.close.response.confirmation_timeout.description')) + .setFooter(this.client.utils.footer(settings.footer, i18n('message_will_be_deleted_in', 15)), message.guild.iconURL()) + ] + }); setTimeout(async () => { await collector_message .delete() @@ -234,4 +257,4 @@ module.exports = class CloseCommand extends Command { } } -}; \ No newline at end of file +}; diff --git a/src/commands/help.js b/src/commands/help.js index e43e486..ed500cc 100644 --- a/src/commands/help.js +++ b/src/commands/help.js @@ -33,7 +33,7 @@ module.exports = class HelpCommand extends Command { * @returns {Promise} */ async execute(message, args) { - const settings = await message.guild.getSettings(); + const settings = await this.client.utils.getSettings(message.guild); const i18n = this.client.i18n.getLocale(settings.locale); const cmd = this.manager.commands.find(command => command.aliases.includes(args.toLowerCase())); @@ -41,9 +41,9 @@ module.exports = class HelpCommand extends Command { if (cmd) { return await cmd.sendUsage(message.channel, args); } else { - const is_staff = await message.member.isStaff(); + const is_staff = await this.client.utils.isStaff(message.member); const commands = this.manager.commands.filter(command => { - if (command.permissions.length >= 1) return message.member.hasPermission(command.permissions); + if (command.permissions.length >= 1) return message.member.permissions.has(command.permissions); else if (command.staff_only) return is_staff; else return true; }); @@ -53,14 +53,16 @@ module.exports = class HelpCommand extends Command { : command.description; return `**\`${settings.command_prefix}${command.name}\` ยท** ${description}`; }); - return await message.channel.send( - new MessageEmbed() - .setColor(settings.colour) - .setTitle(i18n('commands.help.response.list.title')) - .setDescription(i18n('commands.help.response.list.description', { prefix: settings.command_prefix })) - .addField(i18n('commands.help.response.list.fields.commands'), list.join('\n')) - .setFooter(settings.footer, message.guild.iconURL()) - ); + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.colour) + .setTitle(i18n('commands.help.response.list.title')) + .setDescription(i18n('commands.help.response.list.description', { prefix: settings.command_prefix })) + .addField(i18n('commands.help.response.list.fields.commands'), list.join('\n')) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } } -}; \ No newline at end of file +}; diff --git a/src/commands/new.js b/src/commands/new.js index 52d9e82..cc91203 100644 --- a/src/commands/new.js +++ b/src/commands/new.js @@ -3,7 +3,6 @@ const { Message, // eslint-disable-line no-unused-vars MessageEmbed } = require('discord.js'); -const { footer } = require('../utils/discord'); const { letters } = require('../utils/emoji'); const { wait } = require('../utils'); @@ -37,7 +36,7 @@ module.exports = class NewCommand extends Command { * @returns {Promise} */ async execute(message, args) { - const settings = await message.guild.getSettings(); + const settings = await this.client.utils.getSettings(message.guild); const i18n = this.client.i18n.getLocale(settings.locale); const editOrSend = async (msg, content) => { @@ -57,12 +56,16 @@ module.exports = class NewCommand extends Command { if (tickets.count >= cat_row.max_per_member) { if (cat_row.max_per_member === 1) { response = await editOrSend(response, - new MessageEmbed() - .setColor(settings.error_colour) - .setAuthor(message.author.username, message.author.displayAvatarURL()) - .setTitle(i18n('commands.new.response.has_a_ticket.title')) - .setDescription(i18n('commands.new.response.has_a_ticket.description', tickets.rows[0].id)) - .setFooter(footer(settings.footer, i18n('message_will_be_deleted_in', 15)), message.guild.iconURL()) + { + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setAuthor(message.author.username, message.author.displayAvatarURL()) + .setTitle(i18n('commands.new.response.has_a_ticket.title')) + .setDescription(i18n('commands.new.response.has_a_ticket.description', tickets.rows[0].id)) + .setFooter(this.client.utils.footer(settings.footer, i18n('message_will_be_deleted_in', 15)), message.guild.iconURL()) + ] + } ); } else { const list = tickets.rows.map(row => { @@ -75,33 +78,45 @@ module.exports = class NewCommand extends Command { } }); response = await editOrSend(response, - new MessageEmbed() - .setColor(settings.error_colour) - .setAuthor(message.author.username, message.author.displayAvatarURL()) - .setTitle(i18n('commands.new.response.max_tickets.title', tickets.count)) - .setDescription(i18n('commands.new.response.max_tickets.description', settings.command_prefix, list.join('\n'))) - .setFooter(footer(settings.footer, i18n('message_will_be_deleted_in', 15)), message.guild.iconURL()) + { + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setAuthor(message.author.username, message.author.displayAvatarURL()) + .setTitle(i18n('commands.new.response.max_tickets.title', tickets.count)) + .setDescription(i18n('commands.new.response.max_tickets.description', settings.command_prefix, list.join('\n'))) + .setFooter(this.client.utils.footer(settings.footer, i18n('message_will_be_deleted_in', 15)), message.guild.iconURL()) + ] + } ); } } else { try { const t_row = await this.client.tickets.create(message.guild.id, message.author.id, cat_row.id, args); response = await editOrSend(response, - new MessageEmbed() - .setColor(settings.success_colour) - .setAuthor(message.author.username, message.author.displayAvatarURL()) - .setTitle(i18n('commands.new.response.created.title')) - .setDescription(i18n('commands.new.response.created.description', `<#${t_row.id}>`)) - .setFooter(footer(settings.footer, i18n('message_will_be_deleted_in', 15)), message.guild.iconURL()) + { + embeds: [ + new MessageEmbed() + .setColor(settings.success_colour) + .setAuthor(message.author.username, message.author.displayAvatarURL()) + .setTitle(i18n('commands.new.response.created.title')) + .setDescription(i18n('commands.new.response.created.description', `<#${t_row.id}>`)) + .setFooter(this.client.utils.footer(settings.footer, i18n('message_will_be_deleted_in', 15)), message.guild.iconURL()) + ] + } ); } catch (error) { response = await editOrSend(response, - new MessageEmbed() - .setColor(settings.error_colour) - .setAuthor(message.author.username, message.author.displayAvatarURL()) - .setTitle(i18n('commands.new.response.error.title')) - .setDescription(error.message) - .setFooter(footer(settings.footer, i18n('message_will_be_deleted_in', 15)), message.guild.iconURL()) + { + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setAuthor(message.author.username, message.author.displayAvatarURL()) + .setTitle(i18n('commands.new.response.error.title')) + .setDescription(error.message) + .setFooter(this.client.utils.footer(settings.footer, i18n('message_will_be_deleted_in', 15)), message.guild.iconURL()) + ] + } ); } } @@ -119,39 +134,45 @@ module.exports = class NewCommand extends Command { const categories = await this.client.db.models.Category.findAndCountAll({ where: { guild: message.guild.id } }); if (categories.count === 0) { - return await message.channel.send( - new MessageEmbed() - .setColor(settings.error_colour) - .setAuthor(message.author.username, message.author.displayAvatarURL()) - .setTitle(i18n('commands.new.response.no_categories.title')) - .setDescription(i18n('commands.new.response.no_categories.description')) - .setFooter(settings.footer, message.guild.iconURL()) - ); + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setAuthor(message.author.username, message.author.displayAvatarURL()) + .setTitle(i18n('commands.new.response.no_categories.title')) + .setDescription(i18n('commands.new.response.no_categories.description')) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } else if (categories.count === 1) { create(categories.rows[0]); // skip the category selection } else { const letters_array = Object.values(letters); // convert the A-Z emoji object to an array const category_list = categories.rows.map((category, i) => `${letters_array[i]} ยป ${category.name}`); // list category names with an A-Z emoji - const collector_message = await message.channel.send( - new MessageEmbed() - .setColor(settings.colour) - .setAuthor(message.author.username, message.author.displayAvatarURL()) - .setTitle(i18n('commands.new.response.select_category.title')) - .setDescription(i18n('commands.new.response.select_category.description', category_list.join('\n'))) - .setFooter(footer(settings.footer, i18n('collector_expires_in', 30)), message.guild.iconURL()) - ); + const collector_message = await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.colour) + .setAuthor(message.author.username, message.author.displayAvatarURL()) + .setTitle(i18n('commands.new.response.select_category.title')) + .setDescription(i18n('commands.new.response.select_category.description', category_list.join('\n'))) + .setFooter(this.client.utils.footer(settings.footer, i18n('collector_expires_in', 30)), message.guild.iconURL()) + ] + }); for (const i in categories.rows) { collector_message.react(letters_array[i]); // add the correct number of letter reactions await wait(1000); // 1 reaction per second rate-limit } - const collector_filter = (reaction, user) => { + const filter = (reaction, user) => { const allowed = letters_array.slice(0, categories.count); // get the first x letters of the emoji array return user.id === message.author.id && allowed.includes(reaction.emoji.name); }; - - const collector = collector_message.createReactionCollector(collector_filter, { time: 30000 }); + const collector = collector_message.createReactionCollector({ + filter, + time: 30000 + }); collector.on('collect', async reaction => { collector.stop(); @@ -168,14 +189,16 @@ module.exports = class NewCommand extends Command { collector.on('end', async collected => { if (collected.size === 0) { await collector_message.reactions.removeAll(); - await collector_message.edit( - new MessageEmbed() - .setColor(settings.error_colour) - .setAuthor(message.author.username, message.author.displayAvatarURL()) - .setTitle(i18n('commands.new.response.select_category_timeout.title')) - .setDescription(i18n('commands.new.response.select_category_timeout.description')) - .setFooter(footer(settings.footer, i18n('message_will_be_deleted_in', 15)), message.guild.iconURL()) - ); + await collector_message.edit({ + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setAuthor(message.author.username, message.author.displayAvatarURL()) + .setTitle(i18n('commands.new.response.select_category_timeout.title')) + .setDescription(i18n('commands.new.response.select_category_timeout.description')) + .setFooter(this.client.utils.footer(settings.footer, i18n('message_will_be_deleted_in', 15)), message.guild.iconURL()) + ] + }); setTimeout(async () => { await collector_message .delete() diff --git a/src/commands/panel.js b/src/commands/panel.js index b228b5f..d7399d4 100644 --- a/src/commands/panel.js +++ b/src/commands/panel.js @@ -69,7 +69,7 @@ module.exports = class PanelCommand extends Command { const arg_emoji = this.args[2].name; const arg_categories = this.args[3].name; - const settings = await message.guild.getSettings(); + const settings = await this.client.utils.getSettings(message.guild); const i18n = this.client.i18n.getLocale(settings.locale); if (!args[arg_emoji]) args[arg_emoji] = []; @@ -87,13 +87,15 @@ module.exports = class PanelCommand extends Command { }); if (invalid_category) { - return await message.channel.send( - new MessageEmbed() - .setColor(settings.error_colour) - .setTitle(i18n('commands.panel.response.invalid_category.title')) - .setDescription(i18n('commands.panel.response.invalid_category.description')) - .setFooter(settings.footer, message.guild.iconURL()) - ); + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setTitle(i18n('commands.panel.response.invalid_category.title')) + .setDescription(i18n('commands.panel.response.invalid_category.description')) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } let panel_channel, @@ -124,23 +126,25 @@ module.exports = class PanelCommand extends Command { position: 1, rateLimitPerUser: 30, reason: `${message.author.tag} created a new reaction-less panel`, - type: 'text' + type: 'GUILD_TEXT' }); embed.setDescription(args[arg_description]); - panel_message = await panel_channel.send(embed); + panel_message = await panel_channel.send({ embeds: [embed] }); this.client.log.info(`${message.author.tag} has created a new reaction-less panel`); } else { if (args[arg_categories].length !== args[arg_emoji].length) { // send error - return await message.channel.send( - new MessageEmbed() - .setColor(settings.error_colour) - .setTitle(i18n('commands.panel.response.mismatch.title')) - .setDescription(i18n('commands.panel.response.mismatch.description')) - .setFooter(settings.footer, message.guild.iconURL()) - ); + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setTitle(i18n('commands.panel.response.mismatch.title')) + .setDescription(i18n('commands.panel.response.mismatch.description')) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } else { panel_channel = await message.guild.channels.create('create-a-ticket', { permissionOverwrites: [ @@ -156,7 +160,7 @@ module.exports = class PanelCommand extends Command { ], position: 1, reason: `${message.author.tag} created a new panel`, - type: 'text' + type: 'GUILD_TEXT' }); if (args[arg_emoji].length === 1) { @@ -164,7 +168,7 @@ module.exports = class PanelCommand extends Command { categories_map = {}; categories_map[args[arg_emoji][0]] = args[arg_categories][0]; embed.setDescription(args[arg_description]); - panel_message = await panel_channel.send(embed); + panel_message = await panel_channel.send({ embeds: [embed] }); await panel_message.react(args[arg_emoji][0]); } else { // multi category @@ -183,7 +187,11 @@ module.exports = class PanelCommand extends Command { } embed.setDescription(args[arg_description] + '\n' + description); - panel_message = await panel_channel.send(embed); + panel_message = await panel_channel.send({ + embeds: [ + embed + ] + }); for (const emoji of args[arg_emoji]) { await panel_message.react(emoji); @@ -196,7 +204,7 @@ module.exports = class PanelCommand extends Command { } } - message.channel.send(`โœ… ${panel_channel}`); + message.channel.send({ content: `โœ… ${panel_channel}` }); await this.client.db.models.Panel.create({ categories: categories_map, diff --git a/src/commands/remove.js b/src/commands/remove.js index d610303..0b148c8 100644 --- a/src/commands/remove.js +++ b/src/commands/remove.js @@ -36,63 +36,73 @@ module.exports = class RemoveCommand extends Command { * @returns {Promise} */ async execute(message, args) { - const settings = await message.guild.getSettings(); + const settings = await this.client.utils.getSettings(message.guild); const i18n = this.client.i18n.getLocale(settings.locale); const ticket = message.mentions.channels.first() ?? message.channel; const t_row = await this.client.tickets.resolve(ticket.id, message.guild.id); if (!t_row) { - return await message.channel.send( - new MessageEmbed() - .setColor(settings.error_colour) - .setTitle(i18n('commands.remove.response.not_a_ticket.title')) - .setDescription(i18n('commands.remove.response.not_a_ticket.description')) - .setFooter(settings.footer, message.guild.iconURL()) - ); + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setTitle(i18n('commands.remove.response.not_a_ticket.title')) + .setDescription(i18n('commands.remove.response.not_a_ticket.description')) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } const member = message.mentions.members.first() ?? message.guild.members.cache.get(args); if (!member) { - return await message.channel.send( - new MessageEmbed() - .setColor(settings.error_colour) - .setTitle(i18n('commands.remove.response.no_member.title')) - .setDescription(i18n('commands.remove.response.no_member.description')) - .setFooter(settings.footer, message.guild.iconURL()) - ); + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setTitle(i18n('commands.remove.response.no_member.title')) + .setDescription(i18n('commands.remove.response.no_member.description')) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } - if (t_row.creator !== message.author.id && !await message.member.isStaff()) { - return await message.channel.send( - new MessageEmbed() - .setColor(settings.error_colour) - .setTitle(i18n('commands.remove.response.no_permission.title')) - .setDescription(i18n('commands.remove.response.no_permission.description')) - .setFooter(settings.footer, message.guild.iconURL()) - ); + if (t_row.creator !== message.author.id && !await this.client.utils.isStaff(message.member)) { + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setTitle(i18n('commands.remove.response.no_permission.title')) + .setDescription(i18n('commands.remove.response.no_permission.description')) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } if (message.channel.id !== ticket.id) { - await message.channel.send( - new MessageEmbed() - .setColor(settings.success_colour) - .setAuthor(member.user.username, member.user.displayAvatarURL()) - .setTitle(i18n('commands.remove.response.removed.title')) - .setDescription(i18n('commands.remove.response.removed.description', member.toString(), ticket.toString())) - .setFooter(settings.footer, message.guild.iconURL()) - ); + await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.success_colour) + .setAuthor(member.user.username, member.user.displayAvatarURL()) + .setTitle(i18n('commands.remove.response.removed.title')) + .setDescription(i18n('commands.remove.response.removed.description', member.toString(), ticket.toString())) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } - await ticket.send( - new MessageEmbed() - .setColor(settings.colour) - .setAuthor(member.user.username, member.user.displayAvatarURL()) - .setTitle(i18n('ticket.member_removed.title')) - .setDescription(i18n('ticket.member_removed.description', member.toString(), message.author.toString())) - .setFooter(settings.footer, message.guild.iconURL()) - ); + await ticket.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.colour) + .setAuthor(member.user.username, member.user.displayAvatarURL()) + .setTitle(i18n('ticket.member_removed.title')) + .setDescription(i18n('ticket.member_removed.description', member.toString(), message.author.toString())) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); await ticket.permissionOverwrites .get(member.user.id) @@ -100,4 +110,4 @@ module.exports = class RemoveCommand extends Command { this.client.log.info(`${message.author.tag} removed ${member.user.tag} from ${ticket.id}`); } -}; \ No newline at end of file +}; diff --git a/src/commands/settings.js b/src/commands/settings.js index 5929502..1b9cdea 100644 --- a/src/commands/settings.js +++ b/src/commands/settings.js @@ -31,7 +31,7 @@ module.exports = class SettingsCommand extends Command { * @returns {Promise} */ async execute(message) { - const settings = await message.guild.getSettings(); + const settings = await this.client.utils.getSettings(message.guild); const i18n = this.client.i18n.getLocale(settings.locale); const attachments = [...message.attachments.values()]; @@ -48,7 +48,7 @@ module.exports = class SettingsCommand extends Command { if (!valid) { this.client.log.warn('Settings validation error'); - return await message.channel.send(i18n('commands.settings.response.invalid', errors.map(error => `\`${error.stack}\``).join(',\n'))); + return await message.channel.send({ content: i18n('commands.settings.response.invalid', errors.map(error => `\`${error.stack}\``).join(',\n')) }); } settings.colour = data.colour; @@ -84,7 +84,7 @@ module.exports = class SettingsCommand extends Command { if (cat_channel.name !== c.name) await cat_channel.setName(c.name, `Tickets category updated by ${message.author.tag}`); for (const r of c.roles) { - await cat_channel.updateOverwrite(r, { + await cat_channel.permissionOverwrites.edit(r, { ATTACH_FILES: true, READ_MESSAGE_HISTORY: true, SEND_MESSAGES: true, @@ -114,7 +114,7 @@ module.exports = class SettingsCommand extends Command { ], position: 1, reason: `Tickets category created by ${message.author.tag}`, - type: 'category' + type: 'GUILD_CATEGORY' }); await this.client.db.models.Category.create({ @@ -149,7 +149,7 @@ module.exports = class SettingsCommand extends Command { } this.client.log.success(`Updated guild settings for "${message.guild.name}"`); - return await message.channel.send(i18n('commands.settings.response.updated')); + return await message.channel.send({ content: i18n('commands.settings.response.updated') }); } else { // upload settings as json to be edited diff --git a/src/commands/stats.js b/src/commands/stats.js index 9ccbb65..91ad106 100644 --- a/src/commands/stats.js +++ b/src/commands/stats.js @@ -27,7 +27,7 @@ module.exports = class StatsCommand extends Command { * @returns {Promise} */ async execute(message) { - const settings = await message.guild.getSettings(); + const settings = await this.client.utils.getSettings(message.guild); const i18n = this.client.i18n.getLocale(settings.locale); const messages = await this.client.db.models.Message.findAndCountAll(); @@ -62,19 +62,25 @@ module.exports = class StatsCommand extends Command { if (stats.messages) guild_embed.addField(i18n('commands.stats.fields.messages'), stats.messages, true); - await message.channel.send(guild_embed); + await message.channel.send({ + embeds: [ + guild_embed + ] + }); if (this.client.guilds.cache.size > 1) { - await message.channel.send( - new MessageEmbed() - .setColor(settings.colour) - .setTitle(i18n('commands.stats.response.global.title')) - .setDescription(i18n('commands.stats.response.global.description')) - .addField(i18n('commands.stats.fields.tickets'), stats.tickets, true) - .addField(i18n('commands.stats.fields.response_time.title'), i18n('commands.stats.fields.response_time.minutes', stats.response_time), true) - .addField(i18n('commands.stats.fields.messages'), stats.messages, true) - .setFooter(settings.footer, message.guild.iconURL()) - ); + await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.colour) + .setTitle(i18n('commands.stats.response.global.title')) + .setDescription(i18n('commands.stats.response.global.description')) + .addField(i18n('commands.stats.fields.tickets'), stats.tickets, true) + .addField(i18n('commands.stats.fields.response_time.title'), i18n('commands.stats.fields.response_time.minutes', stats.response_time), true) + .addField(i18n('commands.stats.fields.messages'), stats.messages, true) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } } -}; \ No newline at end of file +}; diff --git a/src/commands/survey.js b/src/commands/survey.js index 2655954..313d532 100644 --- a/src/commands/survey.js +++ b/src/commands/survey.js @@ -38,7 +38,7 @@ module.exports = class SurveyCommand extends Command { * @returns {Promise} */ async execute(message, args) { - const settings = await message.guild.getSettings(); + const settings = await this.client.utils.getSettings(message.guild); const i18n = this.client.i18n.getLocale(settings.locale); const survey = await this.client.db.models.Survey.findOne({ @@ -90,13 +90,15 @@ module.exports = class SurveyCommand extends Command { const surveys = await this.client.db.models.Survey.findAll({ where: { guild: message.guild.id } }); const list = surveys.map(s => `โฏ **\`${s.name}\`**`); - return await message.channel.send( - new MessageEmbed() - .setColor(settings.colour) - .setTitle(i18n('commands.survey.response.list.title')) - .setDescription(list.join('\n')) - .setFooter(settings.footer, message.guild.iconURL()) - ); + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.colour) + .setTitle(i18n('commands.survey.response.list.title')) + .setDescription(list.join('\n')) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } } -}; \ No newline at end of file +}; diff --git a/src/commands/tag.js b/src/commands/tag.js index 2d3423e..805375b 100644 --- a/src/commands/tag.js +++ b/src/commands/tag.js @@ -37,7 +37,7 @@ module.exports = class TagCommand extends Command { * @returns {Promise} */ async execute(message, args) { - const settings = await message.guild.getSettings(); + const settings = await this.client.utils.getSettings(message.guild); const i18n = this.client.i18n.getLocale(settings.locale); const t_row = await this.client.db.models.Ticket.findOne({ where: { id: message.channel.id } }); @@ -52,13 +52,15 @@ module.exports = class TagCommand extends Command { const requires_ticket = placeholders.some(p => p.startsWith('ticket.')); if (requires_ticket && !t_row) { - return await message.channel.send( - new MessageEmbed() - .setColor(settings.error_colour) - .setTitle(i18n('commands.tag.response.not_a_ticket.title')) - .setDescription(i18n('commands.tag.response.not_a_ticket.description')) - .setFooter(settings.footer, message.guild.iconURL()) - ); + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setTitle(i18n('commands.tag.response.not_a_ticket.title')) + .setDescription(i18n('commands.tag.response.not_a_ticket.description')) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } const expected = placeholders @@ -72,13 +74,15 @@ module.exports = class TagCommand extends Command { try { args = parseArgs(expected, { argv: argv(args) }); } catch (error) { - return await message.channel.send( - new MessageEmbed() - .setColor(settings.error_colour) - .setTitle(i18n('commands.tag.response.error')) - .setDescription(`\`\`\`${error.message}\`\`\``) - .setFooter(settings.footer, message.guild.iconURL()) - ); + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setTitle(i18n('commands.tag.response.error')) + .setDescription(`\`\`\`${error.message}\`\`\``) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } } else { args = {}; @@ -87,13 +91,15 @@ module.exports = class TagCommand extends Command { for (const p of expected) { if (!args[p.name]) { const list = expected.map(p => `\`${p.name}\``); - return await message.channel.send( - new MessageEmbed() - .setColor(settings.error_colour) - .setTitle(i18n('commands.tag.response.error')) - .setDescription(i18n('commands.tag.response.missing', list.join(', '))) - .setFooter(settings.footer, message.guild.iconURL()) - ); + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setTitle(i18n('commands.tag.response.error')) + .setDescription(i18n('commands.tag.response.missing', list.join(', '))) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } } @@ -104,21 +110,25 @@ module.exports = class TagCommand extends Command { // note that this regex is slightly different to the other const text = tag.replace(/(? this.client.i18n.resolve(args, $1)); - return await message.channel.send( - new MessageEmbed() - .setColor(settings.colour) - .setDescription(text) - ); + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.colour) + .setDescription(text) + ] + }); } else { const list = Object.keys(settings.tags).map(t => `โฏ **\`${t}\`**`); - return await message.channel.send( - new MessageEmbed() - .setColor(settings.colour) - .setTitle(i18n('commands.tag.response.list.title')) - .setDescription(list.join('\n')) - .setFooter(settings.footer, message.guild.iconURL()) - ); + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.colour) + .setTitle(i18n('commands.tag.response.list.title')) + .setDescription(list.join('\n')) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } } -}; \ No newline at end of file +}; diff --git a/src/commands/topic.js b/src/commands/topic.js index c3250c3..9da4d42 100644 --- a/src/commands/topic.js +++ b/src/commands/topic.js @@ -30,19 +30,21 @@ module.exports = class TopicCommand extends Command { * @returns {Promise} */ async execute(message, args) { - const settings = await message.guild.getSettings(); + const settings = await this.client.utils.getSettings(message.guild); const i18n = this.client.i18n.getLocale(settings.locale); const t_row = await this.client.db.models.Ticket.findOne({ where: { id: message.channel.id } }); if (!t_row) { - return await message.channel.send( - new MessageEmbed() - .setColor(settings.error_colour) - .setTitle(i18n('commands.topic.response.not_a_ticket.title')) - .setDescription(i18n('commands.topic.response.not_a_ticket.description')) - .setFooter(settings.footer, message.guild.iconURL()) - ); + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setTitle(i18n('commands.topic.response.not_a_ticket.title')) + .setDescription(i18n('commands.topic.response.not_a_ticket.description')) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); } await t_row.update({ topic: this.client.cryptr.encrypt(args) }); @@ -56,24 +58,28 @@ module.exports = class TopicCommand extends Command { .replace(/{+\s?(tag|ping|mention)?\s?}+/gi, member.user.toString()); const opening_message = await message.channel.messages.fetch(t_row.opening_message); - await opening_message.edit( - new MessageEmbed() - .setColor(settings.colour) - .setAuthor(member.user.username, member.user.displayAvatarURL()) - .setDescription(description) - .addField(i18n('ticket.opening_message.fields.topic'), args) - .setFooter(settings.footer, message.guild.iconURL()) - ); + await opening_message.edit({ + embeds: [ + new MessageEmbed() + .setColor(settings.colour) + .setAuthor(member.user.username, member.user.displayAvatarURL()) + .setDescription(description) + .addField(i18n('ticket.opening_message.fields.topic'), args) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); - await message.channel.send( - new MessageEmbed() - .setColor(settings.success_colour) - .setAuthor(message.author.username, message.author.displayAvatarURL()) - .setTitle(i18n('commands.topic.response.changed.title')) - .setDescription(i18n('commands.topic.response.changed.description')) - .setFooter(settings.footer, message.guild.iconURL()) - ); + await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.success_colour) + .setAuthor(message.author.username, message.author.displayAvatarURL()) + .setTitle(i18n('commands.topic.response.changed.title')) + .setDescription(i18n('commands.topic.response.changed.description')) + .setFooter(settings.footer, message.guild.iconURL()) + ] + }); this.client.log.info(`${message.author.tag} changed the topic of ${message.channel.id}`); } -}; \ No newline at end of file +}; diff --git a/src/index.js b/src/index.js index 6258af8..af5001c 100644 --- a/src/index.js +++ b/src/index.js @@ -83,7 +83,7 @@ process.on('unhandledRejection', error => { log.error(error); }); -const { selectPresence } = require('./utils/discord'); +const DiscordUtils = require('./utils/discord'); const Cryptr = require('cryptr'); const I18n = require('@eartharoid/i18n'); const ListenerLoader = require('./modules/listeners/loader'); @@ -93,14 +93,12 @@ const TicketManager = require('./modules/tickets/manager'); const fetch = require('node-fetch'); -require('./modules/structures')(); // load extended structures before creating the client - const { Client, Intents } = require('discord.js'); // eslint-disable-next-line no-unused-vars -const FastifyLogger = require('leekslazylogger-fastify'); +const Logger = require('leekslazylogger'); /** * The Discord client @@ -110,13 +108,18 @@ const FastifyLogger = require('leekslazylogger-fastify'); class Bot extends Client { constructor() { super({ + intents: [ + Intents.FLAGS.GUILDS, + Intents.FLAGS.GUILD_MEMBERS, + Intents.FLAGS.GUILD_MESSAGES, + Intents.FLAGS.GUILD_MESSAGE_REACTIONS + ], partials: [ 'CHANNEL', 'MESSAGE', 'REACTION' ], - presence: selectPresence(), - ws: { intents: Intents.NON_PRIVILEGED } + presence: DiscordUtils.selectPresence() }); (async () => { @@ -125,7 +128,7 @@ class Bot extends Client { /** * A [leekslazylogger](https://logger.eartharoid.me) instance - * @type {FastifyLogger} + * @type {Logger} */ this.log = log; @@ -170,6 +173,9 @@ class Bot extends Client { this.plugins = new PluginManager(this); this.plugins.load(); // load plugins + /** Some utility methods */ + this.utils = new DiscordUtils(this); + this.log.info('Connecting to Discord API...'); this.login(); diff --git a/src/listeners/guildDelete.js b/src/listeners/guildDelete.js index f98544d..6d06581 100644 --- a/src/listeners/guildDelete.js +++ b/src/listeners/guildDelete.js @@ -7,6 +7,6 @@ module.exports = class GuildDeleteEventListener extends EventListener { async execute(guild) { this.client.log.info(`Removed from "${guild.name}"`); - // await guild.deleteSettings(); + await guild.deleteSettings(); } }; \ No newline at end of file diff --git a/src/listeners/message.js b/src/listeners/messageCreate.js similarity index 76% rename from src/listeners/message.js rename to src/listeners/messageCreate.js index 872085d..f1de5d6 100644 --- a/src/listeners/message.js +++ b/src/listeners/messageCreate.js @@ -1,17 +1,16 @@ const EventListener = require('../modules/listeners/listener'); const { MessageEmbed } = require('discord.js'); -const { footer } = require('../utils/discord'); -module.exports = class MessageEventListener extends EventListener { +module.exports = class MessageCreateEventListener extends EventListener { constructor(client) { - super(client, { event: 'message' }); + super(client, { event: 'messageCreate' }); } async execute(message) { if (!message.guild) return; - const settings = await message.guild.getSettings(); + const settings = await this.client.utils.getSettings(message.guild); const i18n = this.client.i18n.getLocale(settings.locale); const t_row = await this.client.db.models.Ticket.findOne({ where: { id: message.channel.id } }); @@ -53,11 +52,11 @@ module.exports = class MessageEventListener extends EventListener { .setAuthor(message.author.username, message.author.displayAvatarURL()) .setTitle(i18n('commands.new.response.has_a_ticket.title')) .setDescription(i18n('commands.new.response.has_a_ticket.description', tickets.rows[0].id)) - .setFooter(footer(settings.footer, i18n('message_will_be_deleted_in', 15)), message.guild.iconURL()); + .setFooter(this.client.utils.footer(settings.footer, i18n('message_will_be_deleted_in', 15)), message.guild.iconURL()); try { - response = await message.author.send(embed); + response = await message.author.send({ embeds: [embed] }); } catch { - response = await message.channel.send(embed); + response = await message.channel.send({ embeds: [embed] }); } } else { const list = tickets.rows.map(row => { @@ -74,11 +73,11 @@ module.exports = class MessageEventListener extends EventListener { .setAuthor(message.author.username, message.author.displayAvatarURL()) .setTitle(i18n('commands.new.response.max_tickets.title', tickets.count)) .setDescription(i18n('commands.new.response.max_tickets.description', settings.command_prefix, list.join('\n'))) - .setFooter(footer(settings.footer, i18n('message_will_be_deleted_in', 15)), message.author.iconURL()); + .setFooter(this.client.utils.footer(settings.footer, i18n('message_will_be_deleted_in', 15)), message.author.iconURL()); try { - response = await message.author.send(embed); + response = await message.author.send({ embeds: [embed] }); } catch { - response = await message.channel.send(embed); + response = await message.channel.send({ embeds: [embed] }); } } } else { @@ -90,11 +89,11 @@ module.exports = class MessageEventListener extends EventListener { .setAuthor(message.author.username, message.author.displayAvatarURL()) .setTitle(i18n('commands.new.response.error.title')) .setDescription(error.message) - .setFooter(footer(settings.footer, i18n('message_will_be_deleted_in', 15)), message.guild.iconURL()); + .setFooter(this.client.utils.footer(settings.footer, i18n('message_will_be_deleted_in', 15)), message.guild.iconURL()); try { - response = await message.author.send(embed); + response = await message.author.send({ embeds: [embed] }); } catch { - response = await message.channel.send(embed); + response = await message.channel.send({ embeds: [embed] }); } } } diff --git a/src/listeners/messageDelete.js b/src/listeners/messageDelete.js index 0bc1ff9..d817a59 100644 --- a/src/listeners/messageDelete.js +++ b/src/listeners/messageDelete.js @@ -8,7 +8,7 @@ module.exports = class MessageDeleteEventListener extends EventListener { async execute(message) { if (!message.guild) return; - const settings = await message.guild.getSettings(); + const settings = await this.client.utils.getSettings(message.guild); if (settings.log_messages && !message.system) this.client.tickets.archives.deleteMessage(message); // mark the message as deleted in the database (if it exists) } diff --git a/src/listeners/messageReactionAdd.js b/src/listeners/messageReactionAdd.js index 64f0365..e72c936 100644 --- a/src/listeners/messageReactionAdd.js +++ b/src/listeners/messageReactionAdd.js @@ -1,7 +1,6 @@ const EventListener = require('../modules/listeners/listener'); const { MessageEmbed } = require('discord.js'); -const { footer } = require('../utils/discord'); module.exports = class MessageReactionAddEventListener extends EventListener { constructor(client) { @@ -31,7 +30,7 @@ module.exports = class MessageReactionAddEventListener extends EventListener { const guild = reaction.message.guild; if (!guild) return; - const settings = await guild.getSettings(); + const settings = await this.client.utils.getSettings(guild); const i18n = this.client.i18n.getLocale(settings.locale); const channel = reaction.message.channel; @@ -50,29 +49,31 @@ module.exports = class MessageReactionAddEventListener extends EventListener { const t_row = await this.client.db.models.Ticket.findOne({ where: { id: channel.id } }); if (t_row && t_row.opening_message === reaction.message.id) { - if (reaction.emoji.name === '๐Ÿ™Œ' && await member.isStaff()) { + if (reaction.emoji.name === '๐Ÿ™Œ' && await this.client.utils.isStaff(member)) { // ticket claiming await t_row.update({ claimed_by: member.user.id }); - await channel.updateOverwrite(member.user.id, { VIEW_CHANNEL: true }, `Ticket claimed by ${member.user.tag}`); + await channel.permissionOverwrites.edit(member.user.id, { VIEW_CHANNEL: true }, `Ticket claimed by ${member.user.tag}`); const cat_row = await this.client.db.models.Category.findOne({ where: { id: t_row.category } }); for (const role of cat_row.roles) { - await channel.updateOverwrite(role, { VIEW_CHANNEL: false }, `Ticket claimed by ${member.user.tag}`); + await channel.permissionOverwrites.edit(role, { VIEW_CHANNEL: false }, `Ticket claimed by ${member.user.tag}`); } this.client.log.info(`${member.user.tag} has claimed "${channel.name}" in "${guild.name}"`); - await channel.send( - new MessageEmbed() - .setColor(settings.colour) - .setAuthor(member.user.username, member.user.displayAvatarURL()) - .setTitle(i18n('ticket.claimed.title')) - .setDescription(i18n('ticket.claimed.description', member.toString())) - .setFooter(settings.footer, guild.iconURL()) - ); + await channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.colour) + .setAuthor(member.user.username, member.user.displayAvatarURL()) + .setTitle(i18n('ticket.claimed.title')) + .setDescription(i18n('ticket.claimed.description', member.toString())) + .setFooter(settings.footer, guild.iconURL()) + ] + }); } else { await reaction.users.remove(user.id); } @@ -105,11 +106,11 @@ module.exports = class MessageReactionAddEventListener extends EventListener { .setAuthor(user.username, user.displayAvatarURL()) .setTitle(i18n('commands.new.response.has_a_ticket.title')) .setDescription(i18n('commands.new.response.has_a_ticket.description', tickets.rows[0].id)) - .setFooter(footer(settings.footer, i18n('message_will_be_deleted_in', 15)), guild.iconURL()); + .setFooter(this.client.utils.footer(settings.footer, i18n('message_will_be_deleted_in', 15)), guild.iconURL()); try { - response = await user.send(embed); + response = await user.send({ embeds: [embed] }); } catch { - response = await channel.send(embed); + response = await channel.send({ embeds: [embed] }); } } else { const list = tickets.rows.map(row => { @@ -126,11 +127,11 @@ module.exports = class MessageReactionAddEventListener extends EventListener { .setAuthor(user.username, user.displayAvatarURL()) .setTitle(i18n('commands.new.response.max_tickets.title', tickets.count)) .setDescription(i18n('commands.new.response.max_tickets.description', settings.command_prefix, list.join('\n'))) - .setFooter(footer(settings.footer, i18n('message_will_be_deleted_in', 15)), user.iconURL()); + .setFooter(this.client.utils.footer(settings.footer, i18n('message_will_be_deleted_in', 15)), user.iconURL()); try { - response = await user.send(embed); + response = await user.send({ embeds: [embed] }); } catch { - response = await channel.send(embed); + response = await channel.send({ embeds: [embed] }); } } } else { @@ -142,11 +143,11 @@ module.exports = class MessageReactionAddEventListener extends EventListener { .setAuthor(user.username, user.displayAvatarURL()) .setTitle(i18n('commands.new.response.error.title')) .setDescription(error.message) - .setFooter(footer(settings.footer, i18n('message_will_be_deleted_in', 15)), guild.iconURL()); + .setFooter(this.client.utils.footer(settings.footer, i18n('message_will_be_deleted_in', 15)), guild.iconURL()); try { - response = await user.send(embed); + response = await user.send({ embeds: [embed] }); } catch { - response = await channel.send(embed); + response = await channel.send({ embeds: [embed] }); } } } diff --git a/src/listeners/messageReactionRemove.js b/src/listeners/messageReactionRemove.js index 7acd4c2..d3d274d 100644 --- a/src/listeners/messageReactionRemove.js +++ b/src/listeners/messageReactionRemove.js @@ -30,7 +30,7 @@ module.exports = class MessageReactionRemoveEventListener extends EventListener const guild = reaction.message.guild; if (!guild) return; - const settings = await guild.getSettings(); + const settings = await this.client.utils.getSettings(guild); const i18n = this.client.i18n.getLocale(settings.locale); const channel = reaction.message.channel; @@ -39,7 +39,7 @@ module.exports = class MessageReactionRemoveEventListener extends EventListener const t_row = await this.client.db.models.Ticket.findOne({ where: { id: channel.id } }); if (t_row && t_row.opening_message === reaction.message.id) { - if (reaction.emoji.name === '๐Ÿ™Œ' && await member.isStaff()) { + if (reaction.emoji.name === '๐Ÿ™Œ' && await this.client.utils.isStaff(member)) { // ticket claiming await t_row.update({ claimed_by: null }); @@ -51,19 +51,21 @@ module.exports = class MessageReactionRemoveEventListener extends EventListener const cat_row = await this.client.db.models.Category.findOne({ where: { id: t_row.category } }); for (const role of cat_row.roles) { - await channel.updateOverwrite(role, { VIEW_CHANNEL: true }, `Ticket released by ${member.user.tag}`); + await channel.permissionOverwrites.edit(role, { VIEW_CHANNEL: true }, `Ticket released by ${member.user.tag}`); } this.client.log.info(`${member.user.tag} has released "${channel.name}" in "${guild.name}"`); - await channel.send( - new MessageEmbed() - .setColor(settings.colour) - .setAuthor(member.user.username, member.user.displayAvatarURL()) - .setTitle(i18n('ticket.released.title')) - .setDescription(i18n('ticket.released.description', member.toString())) - .setFooter(settings.footer, guild.iconURL()) - ); + await channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.colour) + .setAuthor(member.user.username, member.user.displayAvatarURL()) + .setTitle(i18n('ticket.released.title')) + .setDescription(i18n('ticket.released.description', member.toString())) + .setFooter(settings.footer, guild.iconURL()) + ] + }); } } } diff --git a/src/listeners/messageUpdate.js b/src/listeners/messageUpdate.js index 8ab7b18..ec286d5 100644 --- a/src/listeners/messageUpdate.js +++ b/src/listeners/messageUpdate.js @@ -16,7 +16,7 @@ module.exports = class MessageUpdateEventListener extends EventListener { if (!newm.guild) return; - const settings = await newm.guild.getSettings(); + const settings = await this.client.utils.getSettings(newm.guild); if (settings.log_messages && !newm.system) this.client.tickets.archives.updateMessage(newm); // update the message in the database } diff --git a/src/listeners/ready.js b/src/listeners/ready.js index fbc6b53..3230b54 100644 --- a/src/listeners/ready.js +++ b/src/listeners/ready.js @@ -20,7 +20,7 @@ module.exports = class ReadyEventListener extends EventListener { setInterval(() => { const presence = selectPresence(); this.client.user.setPresence(presence); - this.client.log.debug(`Updated presence: ${presence.activity.type} ${presence.activity.name}`); + this.client.log.debug(`Updated presence: ${presence.activities[0].type} ${presence.activities[0].name}`); }, this.client.config.presence.duration * 1000); } diff --git a/src/logger.js b/src/logger.js index 2fb156e..7768cd6 100644 --- a/src/logger.js +++ b/src/logger.js @@ -1,6 +1,6 @@ const { path } = require('./utils/fs'); const config = require('../user/config'); -const Logger = require('leekslazylogger-fastify'); +const Logger = require('leekslazylogger'); module.exports = new Logger({ debug: config.debug, directory: path('./logs/'), diff --git a/src/modules/commands/command.js b/src/modules/commands/command.js index 9403341..f4a0237 100644 --- a/src/modules/commands/command.js +++ b/src/modules/commands/command.js @@ -122,7 +122,7 @@ module.exports = class Command { * @returns {Promise} */ async sendUsage(channel, alias) { - const settings = await channel.guild.getSettings(); + const settings = await this.client.utils.getSettings(channel.guild); if (!alias) alias = this.name; const prefix = settings.command_prefix; @@ -156,7 +156,7 @@ module.exports = class Command { } this.args.forEach(arg => addArgs(embed, arg)); - return await channel.send(embed); + return await channel.send({ embeds: [embed] }); } diff --git a/src/modules/commands/manager.js b/src/modules/commands/manager.js index 7dd6210..ff99568 100644 --- a/src/modules/commands/manager.js +++ b/src/modules/commands/manager.js @@ -72,7 +72,7 @@ module.exports = class CommandManager { async handle(message) { if (message.author.bot) return; // ignore self and other bots - const settings = await message.guild.getSettings(); + const settings = await this.client.utils.getSettings(message.guild); const i18n = this.client.i18n.getLocale(settings.locale); const prefix = settings.command_prefix; const escaped_prefix = prefix.toLowerCase().replace(/(?=\W)/g, '\\'); // (lazy) escape every character so it can be used in a RexExp @@ -122,14 +122,16 @@ module.exports = class CommandManager { if (!bot_permissions.has(required_bot_permissions)) { const perms = required_bot_permissions.map(p => `\`${p}\``).join(', '); if (bot_permissions.has(['EMBED_LINKS', 'SEND_MESSAGES'])) { - await message.channel.send( - new MessageEmbed() - .setColor('ORANGE') - .setTitle(i18n('bot.missing_permissions.title')) - .setDescription(i18n('bot.missing_permissions.description', perms)) - ); + await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor('ORANGE') + .setTitle(i18n('bot.missing_permissions.title')) + .setDescription(i18n('bot.missing_permissions.description', perms)) + ] + }); } else if (bot_permissions.has('SEND_MESSAGES')) { - await message.channel.send('โš ๏ธ ' + i18n('bot.missing_permissions.description', perms)); + await message.channel.send({ content: 'โš ๏ธ ' + i18n('bot.missing_permissions.description', perms) }); } else if (bot_permissions.has('ADD_REACTIONS')) { await message.react('โš ๏ธ'); } else { @@ -138,24 +140,28 @@ module.exports = class CommandManager { return; } - const missing_permissions = cmd.permissions instanceof Array && !message.member.hasPermission(cmd.permissions); + const missing_permissions = cmd.permissions instanceof Array && !message.member.permissions.has(cmd.permissions); if (missing_permissions) { const perms = cmd.permissions.map(p => `\`${p}\``).join(', '); - return await message.channel.send( - new MessageEmbed() - .setColor(settings.error_colour) - .setTitle(i18n('missing_permissions.title')) - .setDescription(i18n('missing_permissions.description', perms)) - ); + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setTitle(i18n('missing_permissions.title')) + .setDescription(i18n('missing_permissions.description', perms)) + ] + }); } - if (cmd.staff_only && await message.member.isStaff() === false) { - return await message.channel.send( - new MessageEmbed() - .setColor(settings.error_colour) - .setTitle(i18n('staff_only.title')) - .setDescription(i18n('staff_only.description')) - ); + if (cmd.staff_only && await this.client.utils.isStaff(message.member) === false) { + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setTitle(i18n('staff_only.title')) + .setDescription(i18n('staff_only.description')) + ] + }); } let args = raw_args; @@ -165,12 +171,14 @@ module.exports = class CommandManager { args = parseArgs(cmd.args, { argv: argv(raw_args) }); } catch (error) { const help_cmd = `${settings.command_prefix}${i18n('commands.help.name')} ${cmd_name}`; - return await message.channel.send( - new MessageEmbed() - .setColor(settings.error_colour) - .setTitle(i18n('cmd_usage.invalid_named_args.title')) - .setDescription(i18n('cmd_usage.invalid_named_args.description', error.message, help_cmd)) - ); + return await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.error_colour) + .setTitle(i18n('cmd_usage.invalid_named_args.title')) + .setDescription(i18n('cmd_usage.invalid_named_args.description', error.message, help_cmd)) + ] + }); } for (const arg of cmd.args) { if (arg.required && args[arg.name] === undefined) { @@ -191,13 +199,15 @@ module.exports = class CommandManager { } catch (e) { this.client.log.warn(`An error occurred whilst executing the ${cmd.name} command`); this.client.log.error(e); - await message.channel.send( - new MessageEmbed() - .setColor('ORANGE') - .setTitle(i18n('command_execution_error.title')) - .setDescription(i18n('command_execution_error.description')) - ); // hopefully no user will ever see this message + await message.channel.send({ + embeds: [ + new MessageEmbed() + .setColor('ORANGE') + .setTitle(i18n('command_execution_error.title')) + .setDescription(i18n('command_execution_error.description')) + ] + }); // hopefully no user will ever see this message } } -}; \ No newline at end of file +}; diff --git a/src/modules/structures.js b/src/modules/structures.js deleted file mode 100644 index ac5167f..0000000 --- a/src/modules/structures.js +++ /dev/null @@ -1,9 +0,0 @@ -const fs = require('fs'); -const { path } = require('../utils/fs'); - -module.exports = () => { - const files = fs.readdirSync(path('./src/structures')) - .filter(file => file.endsWith('.js')); - - for (const file of files) require(`../structures/${file}`); -}; \ No newline at end of file diff --git a/src/modules/tickets/manager.js b/src/modules/tickets/manager.js index bb065a5..da9d228 100644 --- a/src/modules/tickets/manager.js +++ b/src/modules/tickets/manager.js @@ -2,7 +2,6 @@ const EventEmitter = require('events'); const TicketArchives = require('./archives'); const { MessageEmbed } = require('discord.js'); -const { footer } = require('../../utils/discord'); /** Manages tickets */ module.exports = class TicketManager extends EventEmitter { @@ -51,10 +50,10 @@ module.exports = class TicketManager extends EventEmitter { parent: category_id, reason: `${creator.user.tag} requested a new ticket channel`, topic: `${creator}${topic.length > 0 ? ` | ${topic}` : ''}`, - type: 'text' + type: 'GUILD_TEXT' }); - t_channel.updateOverwrite(creator_id, { + t_channel.permissionOverwrites.edit(creator_id, { ATTACH_FILES: true, READ_MESSAGE_HISTORY: true, SEND_MESSAGES: true, @@ -71,7 +70,7 @@ module.exports = class TicketManager extends EventEmitter { }); (async () => { - const settings = await guild.getSettings(); + const settings = await this.client.utils.getSettings(guild); const i18n = this.client.i18n.getLocale(settings.locale); topic = t_row.topic @@ -85,11 +84,11 @@ module.exports = class TicketManager extends EventEmitter { ? '@here' : `<@&${id}>`); - await t_channel.send(mentions.join(', ')); + await t_channel.send({ content: mentions.join(', ') }); } if (cat_row.image) { - await t_channel.send(cat_row.image); + await t_channel.send({ content: cat_row.image }); } const description = cat_row.opening_message @@ -103,7 +102,10 @@ module.exports = class TicketManager extends EventEmitter { if (topic) embed.addField(i18n('ticket.opening_message.fields.topic'), topic); - const sent = await t_channel.send(creator.user.toString(), embed); + const sent = await t_channel.send({ + content: creator.user.toString(), + embeds: [embed] + }); await sent.pin({ reason: 'Ticket opening message' }); await t_row.update({ opening_message: sent.id }); @@ -128,17 +130,21 @@ module.exports = class TicketManager extends EventEmitter { } if (cat_row.require_topic && topic.length === 0) { - const collector_message = await t_channel.send( - new MessageEmbed() - .setColor(settings.colour) - .setTitle('โš ๏ธ ' + i18n('commands.new.request_topic.title')) - .setDescription(i18n('commands.new.request_topic.description')) - .setFooter(footer(settings.footer, i18n('collector_expires_in', 120)), guild.iconURL()) - ); + const collector_message = await t_channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.colour) + .setTitle('โš ๏ธ ' + i18n('commands.new.request_topic.title')) + .setDescription(i18n('commands.new.request_topic.description')) + .setFooter(this.client.utils.footer(settings.footer, i18n('collector_expires_in', 120)), guild.iconURL()) + ] + }); - const collector_filter = message => message.author.id === t_row.creator; - - const collector = t_channel.createMessageCollector(collector_filter, { time: 120000 }); + const filter = message => message.author.id === t_row.creator; + const collector = t_channel.createMessageCollector({ + filter, + time: 120000 + }); collector.on('collect', async message => { topic = message.content; @@ -161,22 +167,26 @@ module.exports = class TicketManager extends EventEmitter { .delete() .catch(() => this.client.log.warn('Failed to delete topic collector message')); if (cat_row.opening_questions) { - await t_channel.send( - new MessageEmbed() - .setColor(settings.colour) - .setDescription(i18n('ticket.questions', questions)) - .setFooter(settings.footer, guild.iconURL()) - ); + await t_channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.colour) + .setDescription(i18n('ticket.questions', questions)) + .setFooter(settings.footer, guild.iconURL()) + ] + }); } }); } else { if (cat_row.opening_questions) { - await t_channel.send( - new MessageEmbed() - .setColor(settings.colour) - .setDescription(i18n('ticket.questions', questions)) - .setFooter(settings.footer, guild.iconURL()) - ); + await t_channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.colour) + .setDescription(i18n('ticket.questions', questions)) + .setFooter(settings.footer, guild.iconURL()) + ] + }); } } })(); @@ -203,7 +213,7 @@ module.exports = class TicketManager extends EventEmitter { this.emit('beforeClose', ticket_id); const guild = this.client.guilds.cache.get(t_row.guild); - const settings = await guild.getSettings(); + const settings = await this.client.utils.getSettings(guild); const i18n = this.client.i18n.getLocale(settings.locale); const channel = await this.client.channels.fetch(t_row.id); @@ -224,14 +234,16 @@ module.exports = class TicketManager extends EventEmitter { const description = reason ? i18n('ticket.closed_by_member_with_reason.description', closer.user.toString(), reason) : i18n('ticket.closed_by_member.description', closer.user.toString()); - await channel.send( - new MessageEmbed() - .setColor(settings.success_colour) - .setAuthor(closer.user.username, closer.user.displayAvatarURL()) - .setTitle(i18n('ticket.closed.title')) - .setDescription(description) - .setFooter(settings.footer, guild.iconURL()) - ); + await channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.success_colour) + .setAuthor(closer.user.username, closer.user.displayAvatarURL()) + .setTitle(i18n('ticket.closed.title')) + .setDescription(description) + .setFooter(settings.footer, guild.iconURL()) + ] + }); setTimeout(async () => { await channel.delete(`Ticket channel closed by ${closer.user.tag}${reason ? `: "${reason}"` : ''}`); @@ -242,13 +254,15 @@ module.exports = class TicketManager extends EventEmitter { const description = reason ? i18n('ticket.closed_with_reason.description') : i18n('ticket.closed.description'); - await channel.send( - new MessageEmbed() - .setColor(settings.success_colour) - .setTitle(i18n('ticket.closed.title')) - .setDescription(description) - .setFooter(settings.footer, guild.iconURL()) - ); + await channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.success_colour) + .setTitle(i18n('ticket.closed.title')) + .setDescription(description) + .setFooter(settings.footer, guild.iconURL()) + ] + }); setTimeout(async () => { await channel.delete(`Ticket channel closed${reason ? `: "${reason}"` : ''}`); @@ -272,20 +286,25 @@ module.exports = class TicketManager extends EventEmitter { }); if (survey) { - const r_collector_message = await channel.send( - creator.toString(), - new MessageEmbed() - .setColor(settings.colour) - .setTitle(i18n('ticket.survey.start.title')) - .setDescription(i18n('ticket.survey.start.description', creator.toString(), survey.questions.length)) - .setFooter(i18n('collector_expires_in', 60)) - ); + const r_collector_message = await channel.send({ + content: creator.toString(), + embeds: [ + new MessageEmbed() + .setColor(settings.colour) + .setTitle(i18n('ticket.survey.start.title')) + .setDescription(i18n('ticket.survey.start.description', creator.toString(), survey.questions.length)) + .setFooter(i18n('collector_expires_in', 60)) + ] + }); await r_collector_message.react('โœ…'); - const collector_filter = (reaction, user) => user.id === creator.user.id && reaction.emoji.name === 'โœ…'; + const filter = (reaction, user) => user.id === creator.user.id && reaction.emoji.name === 'โœ…'; - const r_collector = r_collector_message.createReactionCollector(collector_filter, { time: 60000 }); + const r_collector = r_collector_message.createReactionCollector({ + filter, + time: 60000 + }); r_collector.on('collect', async () => { r_collector.stop(); @@ -293,17 +312,20 @@ module.exports = class TicketManager extends EventEmitter { let answers = []; let number = 1; for (const question of survey.questions) { - await channel.send( - new MessageEmbed() - .setColor(settings.colour) - .setTitle(`${number++}/${survey.questions.length}`) - .setDescription(question) - .setFooter(i18n('collector_expires_in', 60)) - ); + await channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.colour) + .setTitle(`${number++}/${survey.questions.length}`) + .setDescription(question) + .setFooter(i18n('collector_expires_in', 60)) + ] + }); try { - const collected = await channel.awaitMessages(filter, { + const collected = await channel.awaitMessages({ errors: ['time'], + filter, max: 1, time: 60000 }); @@ -313,13 +335,15 @@ module.exports = class TicketManager extends EventEmitter { } } - await channel.send( - new MessageEmbed() - .setColor(settings.success_colour) - .setTitle(i18n('ticket.survey.complete.title')) - .setDescription(i18n('ticket.survey.complete.description')) - .setFooter(settings.footer, guild.iconURL()) - ); + await channel.send({ + embeds: [ + new MessageEmbed() + .setColor(settings.success_colour) + .setTitle(i18n('ticket.survey.complete.title')) + .setDescription(i18n('ticket.survey.complete.description')) + .setFooter(settings.footer, guild.iconURL()) + ] + }); answers = answers.map(a => this.client.cryptr.encrypt(a)); await this.client.db.models.SurveyResponse.create({ diff --git a/src/structures/guild.js b/src/structures/guild.js deleted file mode 100644 index 392464e..0000000 --- a/src/structures/guild.js +++ /dev/null @@ -1,21 +0,0 @@ -const { Structures } = require('discord.js'); - -Structures.extend('Guild', Guild => class extends Guild { - constructor(client, data) { - super(client, data); - } - - async deleteSettings() { - const row = await this.settings; - return await row.destroy(); - } - - async getSettings() { - const data = { id: this.id }; - const [settings] = await this.client.db.models.Guild.findOrCreate({ - defaults: data, - where: data - }); - return settings; - } -}); \ No newline at end of file diff --git a/src/structures/guild_member.js b/src/structures/guild_member.js deleted file mode 100644 index ae53569..0000000 --- a/src/structures/guild_member.js +++ /dev/null @@ -1,14 +0,0 @@ -const { Structures } = require('discord.js'); - -Structures.extend('GuildMember', GuildMember => class extends GuildMember { - constructor(client, data, guild) { - super(client, data, guild); - } - - async isStaff() { - const guild_categories = await this.client.db.models.Category.findAll({ where: { guild: this.guild.id } }); - - return guild_categories.some(cat => cat.roles.some(r => this.roles.cache.has(r))); - } - -}); \ No newline at end of file diff --git a/src/utils/discord.js b/src/utils/discord.js index 55b59ae..6b97178 100644 --- a/src/utils/discord.js +++ b/src/utils/discord.js @@ -1,23 +1,66 @@ -const config = require('../../user/config'); +const { + Guild, // eslint-disable-line no-unused-vars + GuildMember // eslint-disable-line no-unused-vars +} = require('discord.js'); +const config = require('../../user/config'); let current_presence = -1; -module.exports = { +module.exports = class DiscordUtils { + constructor(client) { + this.client = client; + } + /** - * + * Generate embed footer text * @param {string} text * @param {string} [additional] * @returns {string} */ - footer: (text, additional) => { + footer(text, additional) { if (text && additional) return `${text} | ${additional}`; else return additional || text || ''; - }, + } + + /** + * Check if a guild member is staff + * @param {GuildMember} member - the guild member + * @returns {boolean} + */ + async isStaff(member) { + const guild_categories = await this.client.db.models.Category.findAll({ where: { guild: member.guild.id } }); + return guild_categories.some(cat => cat.roles.some(r => member.roles.cache.has(r))); + } + + /** + * get a guild's settings + * @param {Guild} guild - The Guild + * @returns {Promise} + */ + async getSettings(guild) { + const data = { id: guild.id }; + const [settings] = await this.client.db.models.Guild.findOrCreate({ + defaults: data, + where: data + }); + return settings; + } + + /** + * Delete a guild's settings + * @param {Guild} guild - The Guild + * @returns {Promise} + */ + async deleteSettings(guild) { + const row = await this.getSettings(guild); + return await row.destroy(); + } + /** * Select a presence from the config * @returns {PresenceData} */ - selectPresence: () => { + static selectPresence() { const length = config.presence.presences.length; if (length === 0) return {}; @@ -42,11 +85,13 @@ module.exports = { } = config.presence.presences[num]; return { - activity: { - name, - type, - url - }, + activities: [ + { + name, + type, + url + } + ], status }; }