From b2cfe870db2301ec91c01c1bee944e2dab7779e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikuro=E3=81=95=E3=81=84=E3=81=AA?= Date: Tue, 3 Aug 2021 15:17:45 +0900 Subject: [PATCH] =?UTF-8?q?Slash=20Commands=20=E3=81=AB=E5=AF=BE=E5=BF=9C?= =?UTF-8?q?=20(#27)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: Add slash-command * feat: Add commandIntoBody * lint: Remove eslint-disable * refactor: Refactor with commandOptionTypeMap * fix: Move command into abst * feat: Improve definitions * feat: Add DiscordCommand template * deps: Bump dependencies * deps: Add discord.js-slash-command * feat: Add InteractionsCommandReceiver * feat: Enable interactions * fix: Remove unused methods * deps: Use discord.js dev * fix: Fix for dev version * fix: Add intents * fix: Fix for new API * fix: Fix options order * feat: Hard code guild id * fix: Migrate deprecation * ci: Bump node version --- .github/workflows/lint.yaml | 4 +- .github/workflows/test.yaml | 4 +- docker/bot.Dockerfile | 4 +- docker/web.Dockerfile | 2 +- package.json | 18 +- pnpm-lock.yaml | 789 +++++++++++++++------------ src/bot/abst/command.ts | 65 +++ src/bot/play/notify.ts | 2 +- src/bot/run/release.ts | 18 +- src/bot/skin/discord-command.ts | 63 +++ src/bot/skin/discord-message.ts | 13 +- src/bot/skin/interactions-command.ts | 136 +++++ src/bot/skin/notifier.ts | 2 +- 13 files changed, 727 insertions(+), 393 deletions(-) create mode 100644 src/bot/abst/command.ts create mode 100644 src/bot/skin/discord-command.ts create mode 100644 src/bot/skin/interactions-command.ts diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 10e4b38..7c9c72b 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -10,9 +10,9 @@ jobs: steps: - uses: actions/checkout@v1 - name: Setup Node.js - uses: actions/setup-node@v2-beta + uses: actions/setup-node@v2 with: - node-version: "12" + node-version: "14" - name: Install dependencies run: npm install --no-save - name: Run lint diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 2374859..95bf879 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -10,9 +10,9 @@ jobs: steps: - uses: actions/checkout@v1 - name: Setup Node.js - uses: actions/setup-node@v2-beta + uses: actions/setup-node@v2 with: - node-version: "12" + node-version: "14" - name: Install dependencies run: npm install --no-save - name: Run test diff --git a/docker/bot.Dockerfile b/docker/bot.Dockerfile index 16a67d9..04adaa2 100644 --- a/docker/bot.Dockerfile +++ b/docker/bot.Dockerfile @@ -1,4 +1,4 @@ -FROM node:12.18.4-alpine as BUILD +FROM node:14.17.4-alpine3.14 as BUILD COPY . . @@ -6,7 +6,7 @@ RUN npm install --no-save && npm run build:bot # --- -FROM node:12.18.4-alpine +FROM node:14.17.4-alpine3.14 RUN addgroup -g 1993 -S bot \ && adduser -u 1993 -S bot -G bot diff --git a/docker/web.Dockerfile b/docker/web.Dockerfile index b72a2c8..c2c36be 100644 --- a/docker/web.Dockerfile +++ b/docker/web.Dockerfile @@ -1,4 +1,4 @@ -FROM node:12.18.1-alpine +FROM node:14.17.4-alpine3.14 EXPOSE 3000 diff --git a/package.json b/package.json index c63eb72..f81a4f9 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "lint:fix": "npm run lint -- --fix" }, "dependencies": { - "discord.js": "^12.5.3", + "discord.js": "^13.0.0-dev.t1627949059.35fa3b3", "dotenv": "^10.0.0", "faunadb": "^4.3.0", "mutex-promise": "^0.1.0", @@ -30,20 +30,20 @@ }, "devDependencies": { "@types/jest": "^26.0.24", - "@types/node": "^16.3.3", - "@types/node-fetch": "^2.5.11", - "@types/react": "^17.0.14", - "@typescript-eslint/eslint-plugin": "^4.28.3", - "@typescript-eslint/parser": "^4.28.3", - "esbuild": "^0.12.15", - "eslint": "^7.31.0", + "@types/node": "^16.4.10", + "@types/node-fetch": "^2.5.12", + "@types/react": "^17.0.15", + "@typescript-eslint/eslint-plugin": "^4.29.0", + "@typescript-eslint/parser": "^4.29.0", + "esbuild": "^0.12.17", + "eslint": "^7.32.0", "eslint-config-next": "^11.0.1", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^3.4.0", "eslint-plugin-react": "^7.24.0", "jest": "^27.0.6", "prettier": "^2.3.2", - "ts-jest": "^27.0.3", + "ts-jest": "^27.0.4", "ts-node": "^10.1.0", "typescript": "^4.3.5" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7a842e9..0e2669a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2,15 +2,15 @@ lockfileVersion: 5.3 specifiers: '@types/jest': ^26.0.24 - '@types/node': ^16.3.3 - '@types/node-fetch': ^2.5.11 - '@types/react': ^17.0.14 - '@typescript-eslint/eslint-plugin': ^4.28.3 - '@typescript-eslint/parser': ^4.28.3 - discord.js: ^12.5.3 + '@types/node': ^16.4.10 + '@types/node-fetch': ^2.5.12 + '@types/react': ^17.0.15 + '@typescript-eslint/eslint-plugin': ^4.29.0 + '@typescript-eslint/parser': ^4.29.0 + discord.js: ^13.0.0-dev.t1627949059.35fa3b3 dotenv: ^10.0.0 - esbuild: ^0.12.15 - eslint: ^7.31.0 + esbuild: ^0.12.17 + eslint: ^7.32.0 eslint-config-next: ^11.0.1 eslint-config-prettier: ^8.3.0 eslint-plugin-prettier: ^3.4.0 @@ -24,12 +24,12 @@ specifiers: react: ^17.0.2 react-dom: ^17.0.2 toml: ^3.0.0 - ts-jest: ^27.0.3 + ts-jest: ^27.0.4 ts-node: ^10.1.0 typescript: ^4.3.5 dependencies: - discord.js: 12.5.3 + discord.js: 13.0.0-dev.t1627949059.35fa3b3 dotenv: 10.0.0 faunadb: 4.3.0 mutex-promise: 0.1.0 @@ -41,21 +41,21 @@ dependencies: devDependencies: '@types/jest': 26.0.24 - '@types/node': 16.3.3 - '@types/node-fetch': 2.5.11 - '@types/react': 17.0.14 - '@typescript-eslint/eslint-plugin': 4.28.3_8d80150af46925e6d182e1bd373160e8 - '@typescript-eslint/parser': 4.28.3_eslint@7.31.0+typescript@4.3.5 - esbuild: 0.12.15 - eslint: 7.31.0 - eslint-config-next: 11.0.1_e9bd7c215b1c76b8938b8446225cb7ea - eslint-config-prettier: 8.3.0_eslint@7.31.0 - eslint-plugin-prettier: 3.4.0_19f511d6aa08b367b6cb59e8f50291ca - eslint-plugin-react: 7.24.0_eslint@7.31.0 + '@types/node': 16.4.10 + '@types/node-fetch': 2.5.12 + '@types/react': 17.0.15 + '@typescript-eslint/eslint-plugin': 4.29.0_48ea228fa0647506aa803d17f48b59f7 + '@typescript-eslint/parser': 4.29.0_eslint@7.32.0+typescript@4.3.5 + esbuild: 0.12.17 + eslint: 7.32.0 + eslint-config-next: 11.0.1_364f6739f1a077bdf2998405af31cd57 + eslint-config-prettier: 8.3.0_eslint@7.32.0 + eslint-plugin-prettier: 3.4.0_5a48a349ffec60f5257b5f148f5199c3 + eslint-plugin-react: 7.24.0_eslint@7.32.0 jest: 27.0.6_ts-node@10.1.0 prettier: 2.3.2 - ts-jest: 27.0.3_jest@27.0.6+typescript@4.3.5 - ts-node: 10.1.0_11f741051fc5aebfd1e77a6b4af6c1cd + ts-jest: 27.0.4_52cc4273aa16028085013af47e479e10 + ts-node: 10.1.0_e287c1681c60c4bb6db69c8dc5a794e9 typescript: 4.3.5 packages: @@ -72,24 +72,24 @@ packages: '@babel/highlight': 7.14.5 dev: true - /@babel/compat-data/7.14.7: - resolution: {integrity: sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==} + /@babel/compat-data/7.14.9: + resolution: {integrity: sha512-p3QjZmMGHDGdpcwEYYWu7i7oJShJvtgMjJeb0W95PPhSm++3lm8YXYOh45Y6iCN9PkZLTZ7CIX5nFrp7pw7TXw==} engines: {node: '>=6.9.0'} dev: true - /@babel/core/7.14.6: - resolution: {integrity: sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==} + /@babel/core/7.14.8: + resolution: {integrity: sha512-/AtaeEhT6ErpDhInbXmjHcUQXH0L0TEgscfcxk1qbOvLuKCa5aZT0SOOtDKFY96/CLROwbLSKyFor6idgNaU4Q==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.14.5 - '@babel/generator': 7.14.5 - '@babel/helper-compilation-targets': 7.14.5_@babel+core@7.14.6 - '@babel/helper-module-transforms': 7.14.5 - '@babel/helpers': 7.14.6 - '@babel/parser': 7.14.7 + '@babel/generator': 7.14.9 + '@babel/helper-compilation-targets': 7.14.5_@babel+core@7.14.8 + '@babel/helper-module-transforms': 7.14.8 + '@babel/helpers': 7.14.8 + '@babel/parser': 7.14.9 '@babel/template': 7.14.5 - '@babel/traverse': 7.14.7 - '@babel/types': 7.14.5 + '@babel/traverse': 7.14.9 + '@babel/types': 7.14.9 convert-source-map: 1.8.0 debug: 4.3.2 gensync: 1.0.0-beta.2 @@ -100,23 +100,23 @@ packages: - supports-color dev: true - /@babel/generator/7.14.5: - resolution: {integrity: sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==} + /@babel/generator/7.14.9: + resolution: {integrity: sha512-4yoHbhDYzFa0GLfCzLp5GxH7vPPMAHdZjyE7M/OajM9037zhx0rf+iNsJwp4PT0MSFpwjG7BsHEbPkBQpZ6cYA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.14.5 + '@babel/types': 7.14.9 jsesc: 2.5.2 source-map: 0.5.7 dev: true - /@babel/helper-compilation-targets/7.14.5_@babel+core@7.14.6: + /@babel/helper-compilation-targets/7.14.5_@babel+core@7.14.8: resolution: {integrity: sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.14.7 - '@babel/core': 7.14.6 + '@babel/compat-data': 7.14.9 + '@babel/core': 7.14.8 '@babel/helper-validator-option': 7.14.5 browserslist: 4.16.6 semver: 6.3.0 @@ -128,49 +128,49 @@ packages: dependencies: '@babel/helper-get-function-arity': 7.14.5 '@babel/template': 7.14.5 - '@babel/types': 7.14.5 + '@babel/types': 7.14.9 dev: true /@babel/helper-get-function-arity/7.14.5: resolution: {integrity: sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.14.5 + '@babel/types': 7.14.9 dev: true /@babel/helper-hoist-variables/7.14.5: resolution: {integrity: sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.14.5 + '@babel/types': 7.14.9 dev: true /@babel/helper-member-expression-to-functions/7.14.7: resolution: {integrity: sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.14.5 + '@babel/types': 7.14.9 dev: true /@babel/helper-module-imports/7.14.5: resolution: {integrity: sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.14.5 + '@babel/types': 7.14.9 dev: true - /@babel/helper-module-transforms/7.14.5: - resolution: {integrity: sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==} + /@babel/helper-module-transforms/7.14.8: + resolution: {integrity: sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-module-imports': 7.14.5 '@babel/helper-replace-supers': 7.14.5 - '@babel/helper-simple-access': 7.14.5 + '@babel/helper-simple-access': 7.14.8 '@babel/helper-split-export-declaration': 7.14.5 - '@babel/helper-validator-identifier': 7.14.5 + '@babel/helper-validator-identifier': 7.14.9 '@babel/template': 7.14.5 - '@babel/traverse': 7.14.7 - '@babel/types': 7.14.5 + '@babel/traverse': 7.14.9 + '@babel/types': 7.14.9 transitivePeerDependencies: - supports-color dev: true @@ -179,7 +179,7 @@ packages: resolution: {integrity: sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.14.5 + '@babel/types': 7.14.9 dev: true /@babel/helper-plugin-utils/7.14.5: @@ -193,28 +193,28 @@ packages: dependencies: '@babel/helper-member-expression-to-functions': 7.14.7 '@babel/helper-optimise-call-expression': 7.14.5 - '@babel/traverse': 7.14.7 - '@babel/types': 7.14.5 + '@babel/traverse': 7.14.9 + '@babel/types': 7.14.9 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-simple-access/7.14.5: - resolution: {integrity: sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==} + /@babel/helper-simple-access/7.14.8: + resolution: {integrity: sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.14.5 + '@babel/types': 7.14.9 dev: true /@babel/helper-split-export-declaration/7.14.5: resolution: {integrity: sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.14.5 + '@babel/types': 7.14.9 dev: true - /@babel/helper-validator-identifier/7.14.5: - resolution: {integrity: sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==} + /@babel/helper-validator-identifier/7.14.9: + resolution: {integrity: sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==} engines: {node: '>=6.9.0'} /@babel/helper-validator-option/7.14.5: @@ -222,13 +222,13 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helpers/7.14.6: - resolution: {integrity: sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==} + /@babel/helpers/7.14.8: + resolution: {integrity: sha512-ZRDmI56pnV+p1dH6d+UN6GINGz7Krps3+270qqI9UJ4wxYThfAIcI5i7j5vXC4FJ3Wap+S9qcebxeYiqn87DZw==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.14.5 - '@babel/traverse': 7.14.7 - '@babel/types': 7.14.5 + '@babel/traverse': 7.14.9 + '@babel/types': 7.14.9 transitivePeerDependencies: - supports-color dev: true @@ -237,154 +237,154 @@ packages: resolution: {integrity: sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.14.5 + '@babel/helper-validator-identifier': 7.14.9 chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser/7.14.7: - resolution: {integrity: sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==} + /@babel/parser/7.14.9: + resolution: {integrity: sha512-RdUTOseXJ8POjjOeEBEvNMIZU/nm4yu2rufRkcibzkkg7DmQvXU8v3M4Xk9G7uuI86CDGkKcuDWgioqZm+mScQ==} engines: {node: '>=6.0.0'} hasBin: true dev: true - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.14.6: + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.14.8: resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.14.6 + '@babel/core': 7.14.8 '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.14.6: + /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.14.8: resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.14.6 + '@babel/core': 7.14.8 '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.14.6: + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.14.8: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.14.6 + '@babel/core': 7.14.8 '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.14.6: + /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.14.8: resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.14.6 + '@babel/core': 7.14.8 '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.14.6: + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.14.8: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.14.6 + '@babel/core': 7.14.8 '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.14.6: + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.14.8: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.14.6 + '@babel/core': 7.14.8 '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.14.6: + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.14.8: resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.14.6 + '@babel/core': 7.14.8 '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.14.6: + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.14.8: resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.14.6 + '@babel/core': 7.14.8 '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.14.6: + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.14.8: resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.14.6 + '@babel/core': 7.14.8 '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.14.6: + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.14.8: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.14.6 + '@babel/core': 7.14.8 '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.14.6: + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.14.8: resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.14.6 + '@babel/core': 7.14.8 '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.14.6: + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.14.8: resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.14.6 + '@babel/core': 7.14.8 '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-typescript/7.14.5_@babel+core@7.14.6: + /@babel/plugin-syntax-typescript/7.14.5_@babel+core@7.14.8: resolution: {integrity: sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.14.6 + '@babel/core': 7.14.8 '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/runtime-corejs3/7.14.7: - resolution: {integrity: sha512-Wvzcw4mBYbTagyBVZpAJWI06auSIj033T/yNE0Zn1xcup83MieCddZA7ls3kme17L4NOGBrQ09Q+nKB41RLWBA==} + /@babel/runtime-corejs3/7.14.9: + resolution: {integrity: sha512-64RiH2ON4/y8qYtoa8rUiyam/tUVyGqRyNYhe+vCRGmjnV4bUlZvY+mwd0RrmLoCpJpdq3RsrNqKb7SJdw/4kw==} engines: {node: '>=6.9.0'} dependencies: - core-js-pure: 3.15.2 - regenerator-runtime: 0.13.7 + core-js-pure: 3.16.0 + regenerator-runtime: 0.13.9 dev: true /@babel/runtime/7.12.5: resolution: {integrity: sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==} dependencies: - regenerator-runtime: 0.13.7 + regenerator-runtime: 0.13.9 dev: false - /@babel/runtime/7.14.6: - resolution: {integrity: sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==} + /@babel/runtime/7.14.8: + resolution: {integrity: sha512-twj3L8Og5SaCRCErB4x4ajbvBIVV77CGeFglHpeg5WC5FF8TZzBWXtTJ4MqaD9QszLYTtr+IsaAL2rEUevb+eg==} engines: {node: '>=6.9.0'} dependencies: - regenerator-runtime: 0.13.7 + regenerator-runtime: 0.13.9 dev: true /@babel/template/7.14.5: @@ -392,32 +392,32 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.14.5 - '@babel/parser': 7.14.7 - '@babel/types': 7.14.5 + '@babel/parser': 7.14.9 + '@babel/types': 7.14.9 dev: true - /@babel/traverse/7.14.7: - resolution: {integrity: sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==} + /@babel/traverse/7.14.9: + resolution: {integrity: sha512-bldh6dtB49L8q9bUyB7bC20UKgU+EFDwKJylwl234Kv+ySZeMD31Xeht6URyueQ6LrRRpF2tmkfcZooZR9/e8g==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.14.5 - '@babel/generator': 7.14.5 + '@babel/generator': 7.14.9 '@babel/helper-function-name': 7.14.5 '@babel/helper-hoist-variables': 7.14.5 '@babel/helper-split-export-declaration': 7.14.5 - '@babel/parser': 7.14.7 - '@babel/types': 7.14.5 + '@babel/parser': 7.14.9 + '@babel/types': 7.14.9 debug: 4.3.2 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types/7.14.5: - resolution: {integrity: sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==} + /@babel/types/7.14.9: + resolution: {integrity: sha512-u0bLTnv3DFHeaQLYzb7oRJ1JHr1sv/SYDM7JSqHFFLwXG1wTZRughxFI5NCP8qBEo1rVVsn7Yg2Lvw49nne/Ow==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.14.5 + '@babel/helper-validator-identifier': 7.14.9 to-fast-properties: 2.0.0 dev: true @@ -433,8 +433,20 @@ packages: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true - /@discordjs/collection/0.1.6: - resolution: {integrity: sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ==} + /@discordjs/builders/0.3.0: + resolution: {integrity: sha512-yFBPqohVAtCWoDTQCYk5ubgmkiRbGpbiR4RfYGHCmV5S2YZc7j8WzfKVksjuy2o5IWRfXFsW6G2Lr+KpW41pEA==} + engines: {node: '>=14.0.0', npm: '>=7.0.0'} + dependencies: + '@sindresorhus/is': 4.0.1 + discord-api-types: 0.22.0 + ow: 0.26.0 + ts-mixer: 5.4.1 + tslib: 2.3.0 + 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: @@ -443,7 +455,7 @@ packages: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 - mime-types: 2.1.31 + mime-types: 2.1.32 dev: false /@eslint/eslintrc/0.4.3: @@ -516,8 +528,8 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.0.6 - '@types/node': 16.3.3 - chalk: 4.1.1 + '@types/node': 16.4.10 + chalk: 4.1.2 jest-message-util: 27.0.6 jest-util: 27.0.6 slash: 3.0.0 @@ -537,9 +549,9 @@ packages: '@jest/test-result': 27.0.6 '@jest/transform': 27.0.6 '@jest/types': 27.0.6 - '@types/node': 16.3.3 + '@types/node': 16.4.10 ansi-escapes: 4.3.2 - chalk: 4.1.1 + chalk: 4.1.2 emittery: 0.8.1 exit: 0.1.2 graceful-fs: 4.2.6 @@ -575,7 +587,7 @@ packages: dependencies: '@jest/fake-timers': 27.0.6 '@jest/types': 27.0.6 - '@types/node': 16.3.3 + '@types/node': 16.4.10 jest-mock: 27.0.6 dev: true @@ -585,7 +597,7 @@ packages: dependencies: '@jest/types': 27.0.6 '@sinonjs/fake-timers': 7.1.2 - '@types/node': 16.3.3 + '@types/node': 16.4.10 jest-message-util: 27.0.6 jest-mock: 27.0.6 jest-util: 27.0.6 @@ -614,7 +626,7 @@ packages: '@jest/test-result': 27.0.6 '@jest/transform': 27.0.6 '@jest/types': 27.0.6 - chalk: 4.1.1 + chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 glob: 7.1.7 @@ -672,10 +684,10 @@ packages: resolution: {integrity: sha512-rj5Dw+mtIcntAUnMlW/Vju5mr73u8yg+irnHwzgtgoeI6cCPOvUwQ0D1uQtc/APmWgvRweEb1g05pkUpxH3iCA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/core': 7.14.6 + '@babel/core': 7.14.8 '@jest/types': 27.0.6 babel-plugin-istanbul: 6.0.0 - chalk: 4.1.1 + chalk: 4.1.2 convert-source-map: 1.8.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.6 @@ -697,9 +709,9 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.3 '@types/istanbul-reports': 3.0.1 - '@types/node': 16.3.3 + '@types/node': 16.4.10 '@types/yargs': 15.0.14 - chalk: 4.1.1 + chalk: 4.1.2 dev: true /@jest/types/27.0.6: @@ -708,9 +720,9 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.3 '@types/istanbul-reports': 3.0.1 - '@types/node': 16.3.3 + '@types/node': 16.4.10 '@types/yargs': 16.0.4 - chalk: 4.1.1 + chalk: 4.1.2 dev: true /@next/env/11.0.1: @@ -783,6 +795,16 @@ packages: resolution: {integrity: sha512-Myxw//kzromB9yWgS8qYGuGVf91oBUUJpNvy5eM50sqvmKLbKjwLxohJnkWGTeeI9v9IBMtPLxz5Gc60FIfvCA==} 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/4.0.1: + resolution: {integrity: sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g==} + engines: {node: '>=10'} + dev: false + /@sinonjs/commons/1.8.3: resolution: {integrity: sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==} dependencies: @@ -812,15 +834,15 @@ packages: resolution: {integrity: sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==} dev: true - /@tsconfig/node16/1.0.1: - resolution: {integrity: sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA==} + /@tsconfig/node16/1.0.2: + resolution: {integrity: sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==} dev: true /@types/babel__core/7.1.15: resolution: {integrity: sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==} dependencies: - '@babel/parser': 7.14.7 - '@babel/types': 7.14.5 + '@babel/parser': 7.14.9 + '@babel/types': 7.14.9 '@types/babel__generator': 7.6.3 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.14.2 @@ -829,26 +851,26 @@ packages: /@types/babel__generator/7.6.3: resolution: {integrity: sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==} dependencies: - '@babel/types': 7.14.5 + '@babel/types': 7.14.9 dev: true /@types/babel__template/7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.14.7 - '@babel/types': 7.14.5 + '@babel/parser': 7.14.9 + '@babel/types': 7.14.9 dev: true /@types/babel__traverse/7.14.2: resolution: {integrity: sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==} dependencies: - '@babel/types': 7.14.5 + '@babel/types': 7.14.9 dev: true /@types/graceful-fs/4.1.5: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} dependencies: - '@types/node': 16.3.3 + '@types/node': 16.4.10 dev: true /@types/istanbul-lib-coverage/2.0.3: @@ -878,15 +900,15 @@ packages: resolution: {integrity: sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==} dev: true - /@types/node-fetch/2.5.11: - resolution: {integrity: sha512-2upCKaqVZETDRb8A2VTaRymqFBEgH8u6yr96b/u3+1uQEPDRo3mJLEiPk7vdXBHRtjwkjqzFYMJXrt0Z9QsYjQ==} + /@types/node-fetch/2.5.12: + resolution: {integrity: sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==} dependencies: - '@types/node': 16.3.3 + '@types/node': 16.4.10 form-data: 3.0.1 dev: true - /@types/node/16.3.3: - resolution: {integrity: sha512-8h7k1YgQKxKXWckzFCMfsIwn0Y61UK6tlD6y2lOb3hTOIMlK3t9/QwHOhc81TwU+RMf0As5fj7NPjroERCnejQ==} + /@types/node/16.4.10: + resolution: {integrity: sha512-TmVHsm43br64js9BqHWqiDZA+xMtbUpI1MBIA0EyiBmoV9pcEYFOSdj5fr6enZNfh4fChh+AGOLIzGwJnkshyQ==} /@types/prettier/2.3.2: resolution: {integrity: sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==} @@ -896,8 +918,8 @@ packages: resolution: {integrity: sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==} dev: true - /@types/react/17.0.14: - resolution: {integrity: sha512-0WwKHUbWuQWOce61UexYuWTGuGY/8JvtUe/dtQ6lR4sZ3UiylHotJeWpf3ArP9+DSGUoLY3wbU59VyMrJps5VQ==} + /@types/react/17.0.15: + resolution: {integrity: sha512-uTKHDK9STXFHLaKv6IMnwp52fm0hwU+N89w/p9grdUqcFA6WuqDyPhaWopbNyE1k/VhgzmHl8pu1L4wITtmlLw==} dependencies: '@types/prop-types': 15.7.4 '@types/scheduler': 0.16.2 @@ -912,6 +934,12 @@ packages: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} dev: true + /@types/ws/7.4.7: + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + dependencies: + '@types/node': 16.4.10 + dev: false + /@types/yargs-parser/20.2.1: resolution: {integrity: sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==} dev: true @@ -928,8 +956,8 @@ packages: '@types/yargs-parser': 20.2.1 dev: true - /@typescript-eslint/eslint-plugin/4.28.3_8d80150af46925e6d182e1bd373160e8: - resolution: {integrity: sha512-jW8sEFu1ZeaV8xzwsfi6Vgtty2jf7/lJmQmDkDruBjYAbx5DA8JtbcMnP0rNPUG+oH5GoQBTSp+9613BzuIpYg==} + /@typescript-eslint/eslint-plugin/4.29.0_48ea228fa0647506aa803d17f48b59f7: + resolution: {integrity: sha512-eiREtqWRZ8aVJcNru7cT/AMVnYd9a2UHsfZT8MR1dW3UUEg6jDv9EQ9Cq4CUPZesyQ58YUpoAADGv71jY8RwgA==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: '@typescript-eslint/parser': ^4.0.0 @@ -939,11 +967,11 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/experimental-utils': 4.28.3_eslint@7.31.0+typescript@4.3.5 - '@typescript-eslint/parser': 4.28.3_eslint@7.31.0+typescript@4.3.5 - '@typescript-eslint/scope-manager': 4.28.3 + '@typescript-eslint/experimental-utils': 4.29.0_eslint@7.32.0+typescript@4.3.5 + '@typescript-eslint/parser': 4.29.0_eslint@7.32.0+typescript@4.3.5 + '@typescript-eslint/scope-manager': 4.29.0 debug: 4.3.2 - eslint: 7.31.0 + eslint: 7.32.0 functional-red-black-tree: 1.0.1 regexpp: 3.2.0 semver: 7.3.5 @@ -953,26 +981,26 @@ packages: - supports-color dev: true - /@typescript-eslint/experimental-utils/4.28.3_eslint@7.31.0+typescript@4.3.5: - resolution: {integrity: sha512-zZYl9TnrxwEPi3FbyeX0ZnE8Hp7j3OCR+ELoUfbwGHGxWnHg9+OqSmkw2MoCVpZksPCZYpQzC559Ee9pJNHTQw==} + /@typescript-eslint/experimental-utils/4.29.0_eslint@7.32.0+typescript@4.3.5: + resolution: {integrity: sha512-FpNVKykfeaIxlArLUP/yQfv/5/3rhl1ov6RWgud4OgbqWLkEq7lqgQU9iiavZRzpzCRQV4XddyFz3wFXdkiX9w==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: eslint: '*' dependencies: '@types/json-schema': 7.0.8 - '@typescript-eslint/scope-manager': 4.28.3 - '@typescript-eslint/types': 4.28.3 - '@typescript-eslint/typescript-estree': 4.28.3_typescript@4.3.5 - eslint: 7.31.0 + '@typescript-eslint/scope-manager': 4.29.0 + '@typescript-eslint/types': 4.29.0 + '@typescript-eslint/typescript-estree': 4.29.0_typescript@4.3.5 + eslint: 7.32.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@7.31.0 + eslint-utils: 3.0.0_eslint@7.32.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/parser/4.28.3_eslint@7.31.0+typescript@4.3.5: - resolution: {integrity: sha512-ZyWEn34bJexn/JNYvLQab0Mo5e+qqQNhknxmc8azgNd4XqspVYR5oHq9O11fLwdZMRcj4by15ghSlIEq+H5ltQ==} + /@typescript-eslint/parser/4.29.0_eslint@7.32.0+typescript@4.3.5: + resolution: {integrity: sha512-+92YRNHFdXgq+GhWQPT2bmjX09X7EH36JfgN2/4wmhtwV/HPxozpCNst8jrWcngLtEVd/4zAwA6BKojAlf+YqA==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -981,31 +1009,31 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 4.28.3 - '@typescript-eslint/types': 4.28.3 - '@typescript-eslint/typescript-estree': 4.28.3_typescript@4.3.5 + '@typescript-eslint/scope-manager': 4.29.0 + '@typescript-eslint/types': 4.29.0 + '@typescript-eslint/typescript-estree': 4.29.0_typescript@4.3.5 debug: 4.3.2 - eslint: 7.31.0 + eslint: 7.32.0 typescript: 4.3.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager/4.28.3: - resolution: {integrity: sha512-/8lMisZ5NGIzGtJB+QizQ5eX4Xd8uxedFfMBXOKuJGP0oaBBVEMbJVddQKDXyyB0bPlmt8i6bHV89KbwOelJiQ==} + /@typescript-eslint/scope-manager/4.29.0: + resolution: {integrity: sha512-HPq7XAaDMM3DpmuijxLV9Io8/6pQnliiXMQUcAdjpJJSR+fdmbD/zHCd7hMkjJn04UQtCQBtshgxClzg6NIS2w==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dependencies: - '@typescript-eslint/types': 4.28.3 - '@typescript-eslint/visitor-keys': 4.28.3 + '@typescript-eslint/types': 4.29.0 + '@typescript-eslint/visitor-keys': 4.29.0 dev: true - /@typescript-eslint/types/4.28.3: - resolution: {integrity: sha512-kQFaEsQBQVtA9VGVyciyTbIg7S3WoKHNuOp/UF5RG40900KtGqfoiETWD/v0lzRXc+euVE9NXmfer9dLkUJrkA==} + /@typescript-eslint/types/4.29.0: + resolution: {integrity: sha512-2YJM6XfWfi8pgU2HRhTp7WgRw78TCRO3dOmSpAvIQ8MOv4B46JD2chnhpNT7Jq8j0APlIbzO1Bach734xxUl4A==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dev: true - /@typescript-eslint/typescript-estree/4.28.3_typescript@4.3.5: - resolution: {integrity: sha512-YAb1JED41kJsqCQt1NcnX5ZdTA93vKFCMP4lQYG6CFxd0VzDJcKttRlMrlG+1qiWAw8+zowmHU1H0OzjWJzR2w==} + /@typescript-eslint/typescript-estree/4.29.0_typescript@4.3.5: + resolution: {integrity: sha512-8ZpNHDIOyqzzgZrQW9+xQ4k5hM62Xy2R4RPO3DQxMc5Rq5QkCdSpk/drka+DL9w6sXNzV5nrdlBmf8+x495QXQ==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: typescript: '*' @@ -1013,8 +1041,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 4.28.3 - '@typescript-eslint/visitor-keys': 4.28.3 + '@typescript-eslint/types': 4.29.0 + '@typescript-eslint/visitor-keys': 4.29.0 debug: 4.3.2 globby: 11.0.4 is-glob: 4.0.1 @@ -1025,11 +1053,11 @@ packages: - supports-color dev: true - /@typescript-eslint/visitor-keys/4.28.3: - resolution: {integrity: sha512-ri1OzcLnk1HH4gORmr1dllxDzzrN6goUIz/P4MHFV0YZJDCADPR3RvYNp0PW2SetKTThar6wlbFTL00hV2Q+fg==} + /@typescript-eslint/visitor-keys/4.29.0: + resolution: {integrity: sha512-LoaofO1C/jAJYs0uEpYMXfHboGXzOJeV118X4OsZu9f7rG7Pr9B3+4HTU8+err81rADa4xfQmAxnRnPAI2jp+Q==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dependencies: - '@typescript-eslint/types': 4.28.3 + '@typescript-eslint/types': 4.29.0 eslint-visitor-keys: 2.1.0 dev: true @@ -1172,8 +1200,8 @@ packages: resolution: {integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==} engines: {node: '>=6.0'} dependencies: - '@babel/runtime': 7.14.6 - '@babel/runtime-corejs3': 7.14.7 + '@babel/runtime': 7.14.8 + '@babel/runtime-corejs3': 7.14.9 dev: true /array-includes/3.1.3: @@ -1182,7 +1210,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.18.3 + es-abstract: 1.18.5 get-intrinsic: 1.1.1 is-string: 1.0.6 dev: true @@ -1198,7 +1226,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.18.3 + es-abstract: 1.18.5 dev: true /array.prototype.flatmap/1.2.4: @@ -1207,7 +1235,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.18.3 + es-abstract: 1.18.5 function-bind: 1.1.1 dev: true @@ -1258,8 +1286,8 @@ packages: engines: {node: '>= 0.4'} dev: false - /axe-core/4.3.1: - resolution: {integrity: sha512-3WVgVPs/7OnKU3s+lqMtkv3wQlg3WxK1YifmpJSDO0E1aPBrZWlrrTO6cxRqCXLuX2aYgCljqXIQd0VnRidV0g==} + /axe-core/4.3.2: + resolution: {integrity: sha512-5LMaDRWm8ZFPAEdzTYmgjjEdj1YnQcpfrVajO/sn/LhbpGp0Y0H64c2hLZI1gRMxfA+w1S71Uc/nHaOXgcCvGg==} engines: {node: '>=4'} dev: true @@ -1267,19 +1295,19 @@ packages: resolution: {integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==} dev: true - /babel-jest/27.0.6_@babel+core@7.14.6: + /babel-jest/27.0.6_@babel+core@7.14.8: resolution: {integrity: sha512-iTJyYLNc4wRofASmofpOc5NK9QunwMk+TLFgGXsTFS8uEqmd8wdI7sga0FPe2oVH3b5Agt/EAK1QjPEuKL8VfA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.14.6 + '@babel/core': 7.14.8 '@jest/transform': 27.0.6 '@jest/types': 27.0.6 '@types/babel__core': 7.1.15 babel-plugin-istanbul: 6.0.0 - babel-preset-jest: 27.0.6_@babel+core@7.14.6 - chalk: 4.1.1 + babel-preset-jest: 27.0.6_@babel+core@7.14.8 + chalk: 4.1.2 graceful-fs: 4.2.6 slash: 3.0.0 transitivePeerDependencies: @@ -1304,7 +1332,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@babel/template': 7.14.5 - '@babel/types': 7.14.5 + '@babel/types': 7.14.9 '@types/babel__core': 7.1.15 '@types/babel__traverse': 7.14.2 dev: true @@ -1313,35 +1341,35 @@ packages: resolution: {integrity: sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=} dev: false - /babel-preset-current-node-syntax/1.0.1_@babel+core@7.14.6: + /babel-preset-current-node-syntax/1.0.1_@babel+core@7.14.8: resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.14.6 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.14.6 - '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.14.6 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.14.6 - '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.14.6 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.14.6 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.14.6 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.14.6 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.14.6 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.14.6 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.14.6 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.14.6 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.14.6 - dev: true - - /babel-preset-jest/27.0.6_@babel+core@7.14.6: + '@babel/core': 7.14.8 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.14.8 + '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.14.8 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.14.8 + '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.14.8 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.14.8 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.14.8 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.14.8 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.14.8 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.14.8 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.14.8 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.14.8 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.14.8 + dev: true + + /babel-preset-jest/27.0.6_@babel+core@7.14.8: resolution: {integrity: sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.14.6 + '@babel/core': 7.14.8 babel-plugin-jest-hoist: 27.0.6 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.14.6 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.14.8 dev: true /balanced-match/1.0.2: @@ -1375,7 +1403,7 @@ packages: dependencies: ansi-align: 3.0.0 camelcase: 6.2.0 - chalk: 4.1.1 + chalk: 4.1.2 cli-boxes: 2.2.1 string-width: 4.2.2 type-fest: 0.20.2 @@ -1464,9 +1492,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001245 + caniuse-lite: 1.0.30001248 colorette: 1.2.2 - electron-to-chromium: 1.3.779 + electron-to-chromium: 1.3.793 escalade: 3.1.1 node-releases: 1.1.73 @@ -1487,8 +1515,8 @@ packages: resolution: {integrity: sha1-M3dm2hWAEhD92VbCLpxokaudAzc=} dev: false - /buffer-from/1.1.1: - resolution: {integrity: sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==} + /buffer-from/1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true /buffer-xor/1.0.3: @@ -1528,7 +1556,6 @@ packages: /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==} @@ -1539,8 +1566,8 @@ packages: resolution: {integrity: sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==} engines: {node: '>=10'} - /caniuse-lite/1.0.30001245: - resolution: {integrity: sha512-768fM9j1PKXpOCKws6eTo3RHmvTUsG9UrpT4WoREFeZgJBTi4/X9g565azS/rVUGtqb8nt7FjLeF5u4kukERnA==} + /caniuse-lite/1.0.30001248: + resolution: {integrity: sha512-NwlQbJkxUFJ8nMErnGtT0QTM2TJ33xgz4KXJSMIrjXIbDVdaYueGyjOrLKRtJC+rTiWfi6j5cnZN1NBiSBJGNw==} /chalk/2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -1558,8 +1585,8 @@ packages: supports-color: 7.2.0 dev: false - /chalk/4.1.1: - resolution: {integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==} + /chalk/4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 @@ -1680,8 +1707,8 @@ packages: safe-buffer: 5.1.2 dev: true - /core-js-pure/3.15.2: - resolution: {integrity: sha512-D42L7RYh1J2grW8ttxoY1+17Y4wXZeKe7uyplAI3FkNQyI5OgBIAjUfFiTPfL1rs0qLpxaabITNbjKl1Sp82tA==} + /core-js-pure/3.16.0: + resolution: {integrity: sha512-wzlhZNepF/QA9yvx3ePDgNGudU5KDB8lu/TRPKelYA/QtSnkS/cLl2W+TIdEX1FAFcBr0YpY7tPDlcmXJ7AyiQ==} requiresBuild: true dev: true @@ -1761,7 +1788,7 @@ packages: peerDependencies: postcss: ^8.2.1 dependencies: - caniuse-lite: 1.0.30001245 + caniuse-lite: 1.0.30001248 postcss: 8.2.13 dev: false @@ -1908,24 +1935,26 @@ packages: path-type: 4.0.0 dev: true - /discord.js/12.5.3: - resolution: {integrity: sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw==} - 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.0.0-dev.t1627949059.35fa3b3: + resolution: {integrity: sha512-FTqarqq0FM+5JGLm7rrr5dapx+8d2dkOnmvgWyPQFIwLD0UW2MkwAznQ5Qa5mba28d0epFFnXlWzzCqbtfR01Q==} + engines: {node: '>=14.6.0', npm: '>=7.0.0'} dependencies: - '@discordjs/collection': 0.1.6 + '@discordjs/builders': 0.3.0 + '@discordjs/collection': 0.2.1 '@discordjs/form-data': 3.0.1 + '@sapphire/async-queue': 1.1.4 + '@types/ws': 7.4.7 abort-controller: 3.0.0 + discord-api-types: 0.22.0 node-fetch: 2.6.1 - prism-media: 1.3.1 - setimmediate: 1.0.5 - tweetnacl: 1.0.3 ws: 7.5.3 transitivePeerDependencies: - - '@discordjs/opus' - bufferutil - - ffmpeg-static - - node-opus - - opusscript - utf-8-validate dev: false @@ -1960,6 +1989,13 @@ packages: webidl-conversions: 5.0.0 dev: true + /dot-prop/6.0.1: + resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} + engines: {node: '>=10'} + dependencies: + is-obj: 2.0.0 + dev: false + /dotenv/10.0.0: resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} engines: {node: '>=10'} @@ -1970,8 +2006,8 @@ packages: engines: {node: '>=10'} dev: false - /electron-to-chromium/1.3.779: - resolution: {integrity: sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==} + /electron-to-chromium/1.3.793: + resolution: {integrity: sha512-l9NrGV6Mr4ov5mayYPvIWcwklNw5ROmy6rllzz9dCACw9nKE5y+s5uQk+CBJMetxrWZ6QJFsvEfG6WDcH2IGUg==} /elliptic/6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} @@ -2025,8 +2061,8 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract/1.18.3: - resolution: {integrity: sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==} + /es-abstract/1.18.5: + resolution: {integrity: sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -2035,6 +2071,7 @@ packages: get-intrinsic: 1.1.1 has: 1.0.3 has-symbols: 1.0.2 + internal-slot: 1.0.3 is-callable: 1.2.3 is-negative-zero: 2.0.1 is-regex: 1.1.3 @@ -2062,8 +2099,8 @@ packages: resolution: {integrity: sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=} dev: false - /esbuild/0.12.15: - resolution: {integrity: sha512-72V4JNd2+48eOVCXx49xoSWHgC3/cCy96e7mbXKY+WOWghN00cCmlGnwVLRhRHorvv0dgCyuMYBZlM2xDM5OQw==} + /esbuild/0.12.17: + resolution: {integrity: sha512-GshKJyVYUnlSXIZj/NheC2O0Kblh42CS7P1wJyTbbIHevTG4jYMS9NNw8EOd8dDWD0dzydYHS01MpZoUcQXB4g==} hasBin: true requiresBuild: true dev: true @@ -2099,7 +2136,7 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-next/11.0.1_e9bd7c215b1c76b8938b8446225cb7ea: + /eslint-config-next/11.0.1_364f6739f1a077bdf2998405af31cd57: resolution: {integrity: sha512-yy63K4Bmy8amE6VMb26CZK6G99cfVX3JaMTvuvmq/LL8/b8vKHcauUZREBTAQ+2DrIvlH4YrFXrkQ1vpYDL9Eg==} peerDependencies: eslint: ^7.23.0 @@ -2111,27 +2148,27 @@ packages: dependencies: '@next/eslint-plugin-next': 11.0.1 '@rushstack/eslint-patch': 1.0.6 - '@typescript-eslint/parser': 4.28.3_eslint@7.31.0+typescript@4.3.5 - eslint: 7.31.0 + '@typescript-eslint/parser': 4.29.0_eslint@7.32.0+typescript@4.3.5 + eslint: 7.32.0 eslint-import-resolver-node: 0.3.4 - eslint-import-resolver-typescript: 2.4.0_af3c5ebbf5d724335f85761a63ef0220 - eslint-plugin-import: 2.23.4_eslint@7.31.0 - eslint-plugin-jsx-a11y: 6.4.1_eslint@7.31.0 - eslint-plugin-react: 7.24.0_eslint@7.31.0 - eslint-plugin-react-hooks: 4.2.0_eslint@7.31.0 + eslint-import-resolver-typescript: 2.4.0_ee2ddb12623c985c36290f985ad5559c + eslint-plugin-import: 2.23.4_eslint@7.32.0 + eslint-plugin-jsx-a11y: 6.4.1_eslint@7.32.0 + eslint-plugin-react: 7.24.0_eslint@7.32.0 + eslint-plugin-react-hooks: 4.2.0_eslint@7.32.0 next: 11.0.1_f31b35bdaa3b7c2fce82404f09d2dac4 typescript: 4.3.5 transitivePeerDependencies: - supports-color dev: true - /eslint-config-prettier/8.3.0_eslint@7.31.0: + /eslint-config-prettier/8.3.0_eslint@7.32.0: resolution: {integrity: sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 7.31.0 + eslint: 7.32.0 dev: true /eslint-import-resolver-node/0.3.4: @@ -2141,7 +2178,7 @@ packages: resolve: 1.20.0 dev: true - /eslint-import-resolver-typescript/2.4.0_af3c5ebbf5d724335f85761a63ef0220: + /eslint-import-resolver-typescript/2.4.0_ee2ddb12623c985c36290f985ad5559c: resolution: {integrity: sha512-useJKURidCcldRLCNKWemr1fFQL1SzB3G4a0li6lFGvlc5xGe1hY343bvG07cbpCzPuM/lK19FIJB3XGFSkplA==} engines: {node: '>=4'} peerDependencies: @@ -2149,8 +2186,8 @@ packages: eslint-plugin-import: '*' dependencies: debug: 4.3.2 - eslint: 7.31.0 - eslint-plugin-import: 2.23.4_eslint@7.31.0 + eslint: 7.32.0 + eslint-plugin-import: 2.23.4_eslint@7.32.0 glob: 7.1.7 is-glob: 4.0.1 resolve: 1.20.0 @@ -2167,7 +2204,7 @@ packages: pkg-dir: 2.0.0 dev: true - /eslint-plugin-import/2.23.4_eslint@7.31.0: + /eslint-plugin-import/2.23.4_eslint@7.32.0: resolution: {integrity: sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ==} engines: {node: '>=4'} peerDependencies: @@ -2177,7 +2214,7 @@ packages: array.prototype.flat: 1.2.4 debug: 2.6.9 doctrine: 2.1.0 - eslint: 7.31.0 + eslint: 7.32.0 eslint-import-resolver-node: 0.3.4 eslint-module-utils: 2.6.1 find-up: 2.1.0 @@ -2191,27 +2228,27 @@ packages: tsconfig-paths: 3.10.1 dev: true - /eslint-plugin-jsx-a11y/6.4.1_eslint@7.31.0: + /eslint-plugin-jsx-a11y/6.4.1_eslint@7.32.0: resolution: {integrity: sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg==} engines: {node: '>=4.0'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 dependencies: - '@babel/runtime': 7.14.6 + '@babel/runtime': 7.14.8 aria-query: 4.2.2 array-includes: 3.1.3 ast-types-flow: 0.0.7 - axe-core: 4.3.1 + axe-core: 4.3.2 axobject-query: 2.2.0 damerau-levenshtein: 1.0.7 emoji-regex: 9.2.2 - eslint: 7.31.0 + eslint: 7.32.0 has: 1.0.3 jsx-ast-utils: 3.2.0 language-tags: 1.0.5 dev: true - /eslint-plugin-prettier/3.4.0_19f511d6aa08b367b6cb59e8f50291ca: + /eslint-plugin-prettier/3.4.0_5a48a349ffec60f5257b5f148f5199c3: resolution: {integrity: sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==} engines: {node: '>=6.0.0'} peerDependencies: @@ -2222,22 +2259,22 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: 7.31.0 - eslint-config-prettier: 8.3.0_eslint@7.31.0 + eslint: 7.32.0 + eslint-config-prettier: 8.3.0_eslint@7.32.0 prettier: 2.3.2 prettier-linter-helpers: 1.0.0 dev: true - /eslint-plugin-react-hooks/4.2.0_eslint@7.31.0: + /eslint-plugin-react-hooks/4.2.0_eslint@7.32.0: resolution: {integrity: sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 dependencies: - eslint: 7.31.0 + eslint: 7.32.0 dev: true - /eslint-plugin-react/7.24.0_eslint@7.31.0: + /eslint-plugin-react/7.24.0_eslint@7.32.0: resolution: {integrity: sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==} engines: {node: '>=4'} peerDependencies: @@ -2246,7 +2283,7 @@ packages: array-includes: 3.1.3 array.prototype.flatmap: 1.2.4 doctrine: 2.1.0 - eslint: 7.31.0 + eslint: 7.32.0 has: 1.0.3 jsx-ast-utils: 3.2.0 minimatch: 3.0.4 @@ -2273,13 +2310,13 @@ packages: eslint-visitor-keys: 1.3.0 dev: true - /eslint-utils/3.0.0_eslint@7.31.0: + /eslint-utils/3.0.0_eslint@7.32.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: - eslint: 7.31.0 + eslint: 7.32.0 eslint-visitor-keys: 2.1.0 dev: true @@ -2293,8 +2330,8 @@ packages: engines: {node: '>=10'} dev: true - /eslint/7.31.0: - resolution: {integrity: sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA==} + /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: @@ -2302,7 +2339,7 @@ packages: '@eslint/eslintrc': 0.4.3 '@humanwhocodes/config-array': 0.5.0 ajv: 6.12.6 - chalk: 4.1.1 + chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.2 doctrine: 3.0.0 @@ -2414,7 +2451,7 @@ packages: cross-spawn: 7.0.3 get-stream: 6.0.1 human-signals: 2.1.0 - is-stream: 2.0.0 + is-stream: 2.0.1 merge-stream: 2.0.0 npm-run-path: 4.0.1 onetime: 5.1.2 @@ -2480,7 +2517,7 @@ packages: base64-js: 1.5.1 boxen: 5.0.1 btoa-lite: 1.0.0 - chalk: 4.1.1 + chalk: 4.1.2 cross-fetch: 3.1.4 dotenv: 8.6.0 fn-annotate: 1.2.0 @@ -2534,12 +2571,12 @@ packages: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.2.1 + flatted: 3.2.2 rimraf: 3.0.2 dev: true - /flatted/3.2.1: - resolution: {integrity: sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==} + /flatted/3.2.2: + resolution: {integrity: sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==} dev: true /fn-annotate/1.2.0: @@ -2557,7 +2594,7 @@ packages: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 - mime-types: 2.1.31 + mime-types: 2.1.32 dev: true /fs.realpath/1.0.0: @@ -2846,7 +2883,6 @@ packages: get-intrinsic: 1.1.1 has: 1.0.3 side-channel: 1.0.4 - dev: true /is-arguments/1.1.0: resolution: {integrity: sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==} @@ -2945,6 +2981,11 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + /is-obj/2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + dev: false + /is-potential-custom-element-name/1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: true @@ -2956,8 +2997,8 @@ packages: call-bind: 1.0.2 has-symbols: 1.0.2 - /is-stream/2.0.0: - resolution: {integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==} + /is-stream/2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} dev: true @@ -2977,7 +3018,7 @@ packages: dependencies: available-typed-arrays: 1.0.4 call-bind: 1.0.2 - es-abstract: 1.18.3 + es-abstract: 1.18.5 foreach: 2.0.5 has-symbols: 1.0.2 dev: false @@ -3003,7 +3044,7 @@ packages: resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.14.6 + '@babel/core': 7.14.8 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.0.0 semver: 6.3.0 @@ -3055,8 +3096,8 @@ packages: '@jest/environment': 27.0.6 '@jest/test-result': 27.0.6 '@jest/types': 27.0.6 - '@types/node': 16.3.3 - chalk: 4.1.1 + '@types/node': 16.4.10 + chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 expect: 27.0.6 @@ -3088,7 +3129,7 @@ packages: '@jest/core': 27.0.6_ts-node@10.1.0 '@jest/test-result': 27.0.6 '@jest/types': 27.0.6 - chalk: 4.1.1 + chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.6 import-local: 3.0.2 @@ -3114,11 +3155,11 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.14.6 + '@babel/core': 7.14.8 '@jest/test-sequencer': 27.0.6 '@jest/types': 27.0.6 - babel-jest: 27.0.6_@babel+core@7.14.6 - chalk: 4.1.1 + babel-jest: 27.0.6_@babel+core@7.14.8 + chalk: 4.1.2 deepmerge: 4.2.2 glob: 7.1.7 graceful-fs: 4.2.6 @@ -3135,7 +3176,7 @@ packages: jest-validate: 27.0.6 micromatch: 4.0.4 pretty-format: 27.0.6 - ts-node: 10.1.0_11f741051fc5aebfd1e77a6b4af6c1cd + ts-node: 10.1.0_e287c1681c60c4bb6db69c8dc5a794e9 transitivePeerDependencies: - bufferutil - canvas @@ -3147,7 +3188,7 @@ packages: resolution: {integrity: sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==} engines: {node: '>= 10.14.2'} dependencies: - chalk: 4.1.1 + chalk: 4.1.2 diff-sequences: 26.6.2 jest-get-type: 26.3.0 pretty-format: 26.6.2 @@ -3157,7 +3198,7 @@ packages: resolution: {integrity: sha512-Z1mqgkTCSYaFgwTlP/NUiRzdqgxmmhzHY1Tq17zL94morOHfHu3K4bgSgl+CR4GLhpV8VxkuOYuIWnQ9LnFqmg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - chalk: 4.1.1 + chalk: 4.1.2 diff-sequences: 27.0.6 jest-get-type: 27.0.6 pretty-format: 27.0.6 @@ -3175,7 +3216,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.0.6 - chalk: 4.1.1 + chalk: 4.1.2 jest-get-type: 27.0.6 jest-util: 27.0.6 pretty-format: 27.0.6 @@ -3188,10 +3229,10 @@ packages: '@jest/environment': 27.0.6 '@jest/fake-timers': 27.0.6 '@jest/types': 27.0.6 - '@types/node': 16.3.3 + '@types/node': 16.4.10 jest-mock: 27.0.6 jest-util: 27.0.6 - jsdom: 16.6.0 + jsdom: 16.7.0 transitivePeerDependencies: - bufferutil - canvas @@ -3206,7 +3247,7 @@ packages: '@jest/environment': 27.0.6 '@jest/fake-timers': 27.0.6 '@jest/types': 27.0.6 - '@types/node': 16.3.3 + '@types/node': 16.4.10 jest-mock: 27.0.6 jest-util: 27.0.6 dev: true @@ -3227,7 +3268,7 @@ packages: dependencies: '@jest/types': 27.0.6 '@types/graceful-fs': 4.1.5 - '@types/node': 16.3.3 + '@types/node': 16.4.10 anymatch: 3.1.2 fb-watchman: 2.0.1 graceful-fs: 4.2.6 @@ -3245,13 +3286,13 @@ packages: resolution: {integrity: sha512-cjpH2sBy+t6dvCeKBsHpW41mjHzXgsavaFMp+VWRf0eR4EW8xASk1acqmljFtK2DgyIECMv2yCdY41r2l1+4iA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/traverse': 7.14.7 + '@babel/traverse': 7.14.9 '@jest/environment': 27.0.6 '@jest/source-map': 27.0.6 '@jest/test-result': 27.0.6 '@jest/types': 27.0.6 - '@types/node': 16.3.3 - chalk: 4.1.1 + '@types/node': 16.4.10 + chalk: 4.1.2 co: 4.6.0 expect: 27.0.6 is-generator-fn: 2.1.0 @@ -3279,7 +3320,7 @@ packages: resolution: {integrity: sha512-OFgF2VCQx9vdPSYTHWJ9MzFCehs20TsyFi6bIHbk5V1u52zJOnvF0Y/65z3GLZHKRuTgVPY4Z6LVePNahaQ+tA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - chalk: 4.1.1 + chalk: 4.1.2 jest-diff: 27.0.6 jest-get-type: 27.0.6 pretty-format: 27.0.6 @@ -3292,7 +3333,7 @@ packages: '@babel/code-frame': 7.14.5 '@jest/types': 27.0.6 '@types/stack-utils': 2.0.1 - chalk: 4.1.1 + chalk: 4.1.2 graceful-fs: 4.2.6 micromatch: 4.0.4 pretty-format: 27.0.6 @@ -3305,7 +3346,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.0.6 - '@types/node': 16.3.3 + '@types/node': 16.4.10 dev: true /jest-pnp-resolver/1.2.2_jest-resolve@27.0.6: @@ -3341,7 +3382,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.0.6 - chalk: 4.1.1 + chalk: 4.1.2 escalade: 3.1.1 graceful-fs: 4.2.6 jest-pnp-resolver: 1.2.2_jest-resolve@27.0.6 @@ -3360,8 +3401,8 @@ packages: '@jest/test-result': 27.0.6 '@jest/transform': 27.0.6 '@jest/types': 27.0.6 - '@types/node': 16.3.3 - chalk: 4.1.1 + '@types/node': 16.4.10 + chalk: 4.1.2 emittery: 0.8.1 exit: 0.1.2 graceful-fs: 4.2.6 @@ -3397,7 +3438,7 @@ packages: '@jest/transform': 27.0.6 '@jest/types': 27.0.6 '@types/yargs': 16.0.4 - chalk: 4.1.1 + chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -3422,7 +3463,7 @@ packages: resolution: {integrity: sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@types/node': 16.3.3 + '@types/node': 16.4.10 graceful-fs: 4.2.6 dev: true @@ -3430,18 +3471,18 @@ packages: resolution: {integrity: sha512-NTHaz8He+ATUagUgE7C/UtFcRoHqR2Gc+KDfhQIyx+VFgwbeEMjeP+ILpUTLosZn/ZtbNdCF5LkVnN/l+V751A==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/core': 7.14.6 - '@babel/generator': 7.14.5 - '@babel/parser': 7.14.7 - '@babel/plugin-syntax-typescript': 7.14.5_@babel+core@7.14.6 - '@babel/traverse': 7.14.7 - '@babel/types': 7.14.5 + '@babel/core': 7.14.8 + '@babel/generator': 7.14.9 + '@babel/parser': 7.14.9 + '@babel/plugin-syntax-typescript': 7.14.5_@babel+core@7.14.8 + '@babel/traverse': 7.14.9 + '@babel/types': 7.14.9 '@jest/transform': 27.0.6 '@jest/types': 27.0.6 '@types/babel__traverse': 7.14.2 '@types/prettier': 2.3.2 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.14.6 - chalk: 4.1.1 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.14.8 + chalk: 4.1.2 expect: 27.0.6 graceful-fs: 4.2.6 jest-diff: 27.0.6 @@ -3463,8 +3504,8 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.0.6 - '@types/node': 16.3.3 - chalk: 4.1.1 + '@types/node': 16.4.10 + chalk: 4.1.2 graceful-fs: 4.2.6 is-ci: 3.0.0 picomatch: 2.3.0 @@ -3476,7 +3517,7 @@ packages: dependencies: '@jest/types': 27.0.6 camelcase: 6.2.0 - chalk: 4.1.1 + chalk: 4.1.2 jest-get-type: 27.0.6 leven: 3.1.0 pretty-format: 27.0.6 @@ -3488,9 +3529,9 @@ packages: dependencies: '@jest/test-result': 27.0.6 '@jest/types': 27.0.6 - '@types/node': 16.3.3 + '@types/node': 16.4.10 ansi-escapes: 4.3.2 - chalk: 4.1.1 + chalk: 4.1.2 jest-util: 27.0.6 string-length: 4.0.2 dev: true @@ -3499,7 +3540,7 @@ packages: resolution: {integrity: sha512-mk0umAQ5lT+CaOJ+Qp01N6kz48sJG2kr2n1rX0koqKf6FIygQV0qLOdN9SCYID4IVeSigDOcPeGLozdMLYfb5g==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@types/node': 16.3.3 + '@types/node': 16.4.10 merge-stream: 2.0.0 supports-color: 8.1.1 dev: false @@ -3508,7 +3549,7 @@ packages: resolution: {integrity: sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 16.3.3 + '@types/node': 16.4.10 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -3545,8 +3586,8 @@ packages: esprima: 4.0.1 dev: true - /jsdom/16.6.0: - resolution: {integrity: sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==} + /jsdom/16.7.0: + resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} engines: {node: '>=10'} peerDependencies: canvas: ^2.5.0 @@ -3705,6 +3746,10 @@ packages: resolution: {integrity: sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=} dev: true + /lodash.isequal/4.5.0: + resolution: {integrity: sha1-QVxEePK8wwEgwizhDtMib30+GOA=} + dev: false + /lodash.merge/4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true @@ -3781,15 +3826,15 @@ packages: brorand: 1.1.0 dev: false - /mime-db/1.48.0: - resolution: {integrity: sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==} + /mime-db/1.49.0: + resolution: {integrity: sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==} engines: {node: '>= 0.6'} - /mime-types/2.1.31: - resolution: {integrity: sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==} + /mime-types/2.1.32: + resolution: {integrity: sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==} engines: {node: '>= 0.6'} dependencies: - mime-db: 1.48.0 + mime-db: 1.49.0 /mimic-fn/2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} @@ -3881,7 +3926,7 @@ packages: browserify-zlib: 0.2.0 browserslist: 4.16.6 buffer: 5.6.0 - caniuse-lite: 1.0.30001245 + caniuse-lite: 1.0.30001248 chalk: 2.4.2 chokidar: 3.5.1 constants-browserify: 1.0.0 @@ -4036,7 +4081,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.18.3 + es-abstract: 1.18.5 dev: true /object.fromentries/2.0.4: @@ -4045,7 +4090,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.18.3 + es-abstract: 1.18.5 has: 1.0.3 dev: true @@ -4055,7 +4100,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.18.3 + es-abstract: 1.18.5 dev: true /once/1.4.0: @@ -4099,6 +4144,18 @@ packages: resolution: {integrity: sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=} dev: false + /ow/0.26.0: + resolution: {integrity: sha512-22YUQW9d6oUSCpIQuBV25djtC1uMtpWqmtUYnuh2UHWeNMpppCFCvq3eSBIWWMDbe2UVq26kWYvBHDzOIu5NYg==} + 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.3.0 + vali-date: 1.0.0 + dev: false + /p-each-series/2.2.0: resolution: {integrity: sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==} engines: {node: '>=8'} @@ -4334,24 +4391,6 @@ packages: react-is: 17.0.2 dev: true - /prism-media/1.3.1: - resolution: {integrity: sha512-nyYAa3KB4qteJIqdguKmwxTJgy55xxUtkJ3uRnOvO5jO+frci+9zpRXw6QZVcfDeva3S654fU9+26P2OSTzjHw==} - peerDependencies: - '@discordjs/opus': ^0.5.0 - ffmpeg-static: ^4.2.7 || ^3.0.0 || ^2.4.0 - node-opus: ^0.3.3 - opusscript: ^0.0.8 - 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 @@ -4533,8 +4572,8 @@ packages: picomatch: 2.3.0 dev: false - /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==} /regexp.prototype.flags/1.3.1: resolution: {integrity: sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==} @@ -4694,7 +4733,6 @@ packages: 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==} @@ -4721,7 +4759,7 @@ packages: /source-map-support/0.5.19: resolution: {integrity: sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==} dependencies: - buffer-from: 1.1.1 + buffer-from: 1.1.2 source-map: 0.6.1 dev: true @@ -4863,7 +4901,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.3 - es-abstract: 1.18.3 + es-abstract: 1.18.5 get-intrinsic: 1.1.1 has-symbols: 1.0.2 internal-slot: 1.0.3 @@ -5079,16 +5117,27 @@ packages: punycode: 2.1.1 dev: true - /ts-jest/27.0.3_jest@27.0.6+typescript@4.3.5: - resolution: {integrity: sha512-U5rdMjnYam9Ucw+h0QvtNDbc5+88nxt7tbIvqaZUhFrfG4+SkWhMXjejCLVGcpILTPuV+H3W/GZDZrnZFpPeXw==} + /ts-jest/27.0.4_52cc4273aa16028085013af47e479e10: + resolution: {integrity: sha512-c4E1ECy9Xz2WGfTMyHbSaArlIva7Wi2p43QOMmCqjSSjHP06KXv+aT+eSY+yZMuqsMi3k7pyGsGj2q5oSl5WfQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@types/jest': ^26.0.0 + babel-jest: '>=27.0.0 <28' jest: ^27.0.0 typescript: '>=3.8 <5.0' + peerDependenciesMeta: + '@babel/core': + optional: true + '@types/jest': + optional: true + babel-jest: + optional: true dependencies: + '@types/jest': 26.0.24 bs-logger: 0.2.6 - buffer-from: 1.1.1 + buffer-from: 1.1.2 fast-json-stable-stringify: 2.1.0 jest: 27.0.6_ts-node@10.1.0 jest-util: 27.0.6 @@ -5101,7 +5150,11 @@ packages: yargs-parser: 20.2.9 dev: true - /ts-node/10.1.0_11f741051fc5aebfd1e77a6b4af6c1cd: + /ts-mixer/5.4.1: + resolution: {integrity: sha512-Zo9HgPCtNouDgJ+LGtrzVOjSg8+7WGQktIKLwAfaNrlOK1mWGlz1ejsAF/YqUEqAGjUTeB5fEg8gH9Aui6w9xA==} + dev: false + + /ts-node/10.1.0_e287c1681c60c4bb6db69c8dc5a794e9: resolution: {integrity: sha512-6szn3+J9WyG2hE+5W8e0ruZrzyk1uFLYye6IGMBadnOzDh8aP7t8CbFpsfCiEx2+wMixAhjFt7lOZC4+l+WbEA==} engines: {node: '>=12.0.0'} hasBin: true @@ -5119,8 +5172,8 @@ packages: '@tsconfig/node10': 1.0.8 '@tsconfig/node12': 1.0.9 '@tsconfig/node14': 1.0.1 - '@tsconfig/node16': 1.0.1 - '@types/node': 16.3.3 + '@tsconfig/node16': 1.0.2 + '@types/node': 16.4.10 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 @@ -5154,6 +5207,10 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true + /tslib/2.3.0: + resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} + dev: false + /tsutils/3.21.0_typescript@4.3.5: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} @@ -5172,10 +5229,6 @@ packages: resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} dev: false - /tweetnacl/1.0.3: - resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} - dev: false - /type-check/0.3.2: resolution: {integrity: sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=} engines: {node: '>= 0.8.0'} @@ -5209,6 +5262,11 @@ packages: engines: {node: '>=8'} dev: false + /type-fest/1.3.0: + resolution: {integrity: sha512-mYUYkAy6fPatVWtUeCV/qGeGL3IVucmdJOzeAEfwgCJDx8gP0JaW8jn6KQ5xDfPec31e0KXWn5EUOZMhquR1zA==} + engines: {node: '>=10'} + dev: false + /typedarray-to-buffer/3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} dependencies: @@ -5301,6 +5359,11 @@ packages: source-map: 0.7.3 dev: true + /vali-date/1.0.0: + resolution: {integrity: sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=} + engines: {node: '>=0.10.0'} + dev: false + /validate-npm-package-license/3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: @@ -5395,7 +5458,7 @@ packages: dependencies: available-typed-arrays: 1.0.4 call-bind: 1.0.2 - es-abstract: 1.18.3 + es-abstract: 1.18.5 foreach: 2.0.5 function-bind: 1.1.1 has-symbols: 1.0.2 diff --git a/src/bot/abst/command.ts b/src/bot/abst/command.ts new file mode 100644 index 0000000..aec187f --- /dev/null +++ b/src/bot/abst/command.ts @@ -0,0 +1,65 @@ +export interface ApplicationCommand { + name: string; + description: string; + options: ApplicationCommandOption[]; +} + +export const commandIntoBody = (command: ApplicationCommand): unknown => ({ + ...command, + options: command.options.map(optionIntoRawValue), +}); + +export interface ApplicationCommandOption { + type: number; + name: string; + description: string; + required?: boolean; + choices?: ApplicationCommandOptionChoice[]; + options?: ApplicationCommandOption[]; +} + +const optionIntoRawValue = (self: ApplicationCommandOption): unknown => ({ + ...self, + options: self.options?.map(optionIntoRawValue), +}); + +export type ApplicationCommandOptionType = + | "SUB_COMMAND" + | "SUB_COMMAND_GROUP" + | "STRING" + | "INTEGER" + | "BOOLEAN" + | "USER" + | "CHANNEL" + | "ROLE"; + +export const commandOptionTypeMap: Record< + ApplicationCommandOptionType, + number +> = { + SUB_COMMAND: 1, + SUB_COMMAND_GROUP: 2, + STRING: 3, + INTEGER: 4, + BOOLEAN: 5, + USER: 6, + CHANNEL: 7, + ROLE: 8, +}; + +export const commandOptionTypeReverseMap: Record< + number, + ApplicationCommandOptionType +> = Object.fromEntries( + ( + Object.entries(commandOptionTypeMap) as [ + ApplicationCommandOptionType, + number, + ][] + ).map<[number, ApplicationCommandOptionType]>(([key, value]) => [value, key]), +); + +export interface ApplicationCommandOptionChoice { + name: string; + value: string | number; +} diff --git a/src/bot/play/notify.ts b/src/bot/play/notify.ts index 0a4b7d5..b277acf 100644 --- a/src/bot/play/notify.ts +++ b/src/bot/play/notify.ts @@ -22,7 +22,7 @@ const fetchErrorHandler = new MessageEmbed() .setColor(yellow) .setTitle("通知データ取得のエラー発生") - .setDescription(reason), + .setDescription(`${reason}`), ); return null; }; diff --git a/src/bot/run/release.ts b/src/bot/run/release.ts index 89d1e68..1005075 100644 --- a/src/bot/run/release.ts +++ b/src/bot/run/release.ts @@ -1,7 +1,8 @@ +import { Client, Intents } from "discord.js"; import { messageHandler, procs } from "./procs"; -import { Client } from "discord.js"; import { FaunaDB } from "../skin/fauna-db"; import { GitHubApi } from "../skin/github-api"; +import { InteractionsCommandReceiver } from "../skin/interactions-command"; import { SubscriptionNotifier } from "../skin/notifier"; import { TomlLoader } from "../skin/toml-loader"; import dotenv from "dotenv"; @@ -15,18 +16,29 @@ dotenv.config(); const db = new FaunaDB(process.env.FAUNA_SECRET || "UNSET"); const analecta = await loader.load(); - const client = new Client(); + const client = new Client({ + intents: [ + Intents.FLAGS.DIRECT_MESSAGES, + Intents.FLAGS.GUILDS, + Intents.FLAGS.GUILD_MESSAGES, + ], + }); const notifier = new SubscriptionNotifier(analecta, client.users, db); db.onUpdate(notifier); const query = new GitHubApi(); const builtProcs = procs(analecta, db, query); + const interactions = new InteractionsCommandReceiver(client); + interactions.onReceive(async (message) => { + await builtProcs(analecta, message); + }); + client.on("ready", () => { console.log("I got ready."); }); - client.on("message", messageHandler(analecta, builtProcs)); + client.on("messageCreate", messageHandler(analecta, builtProcs)); client.login(process.env.DISCORD_TOKEN); })().catch((err) => console.error(err)); diff --git a/src/bot/skin/discord-command.ts b/src/bot/skin/discord-command.ts new file mode 100644 index 0000000..b999129 --- /dev/null +++ b/src/bot/skin/discord-command.ts @@ -0,0 +1,63 @@ +import { + ApplicationCommand, + ApplicationCommandOption, + ApplicationCommandOptionType, +} from "../abst/command"; +import { DiscordId } from "../exp/discord-id"; +import { MessageEmbed } from "discord.js"; + +export interface InteractionDataOption { + name: string; + type: ApplicationCommandOptionType; + value?: string; + options?: readonly InteractionDataOption[]; +} + +export interface InteractionData { + id: string; + name: string; + resolved?: string; + options?: readonly InteractionDataOption[]; +} + +export interface Interaction { + type: "1" | "2"; + token: string; + data: InteractionData; +} + +export class DiscordCommand implements ApplicationCommand { + constructor(private readonly interaction: Interaction) {} + + get name(): string { + throw new Error("Method not implemented."); + } + + get description(): string { + throw new Error("Method not implemented."); + } + + get options(): ApplicationCommandOption[] { + throw new Error("Method not implemented."); + } + + getAuthorId(): DiscordId { + throw new Error("Method not implemented."); + } + + matchCommand(regex: RegExp): Promise { + throw new Error("Method not implemented."); + } + + reply(message: string): Promise { + throw new Error("Method not implemented."); + } + + sendEmbed(embed: MessageEmbed): Promise { + throw new Error("Method not implemented."); + } + + panic(reason: unknown): never { + throw new Error("Method not implemented."); + } +} diff --git a/src/bot/skin/discord-message.ts b/src/bot/skin/discord-message.ts index 42668a1..5ecfefe 100644 --- a/src/bot/skin/discord-message.ts +++ b/src/bot/skin/discord-message.ts @@ -17,13 +17,8 @@ export class DiscordMessage implements Message { return Promise.resolve(regex.exec(this.raw.content.split("\n")[0])); } - async withTyping(callee: () => Promise): Promise { - try { - this.raw.channel.startTyping(); - return await callee(); - } finally { - this.raw.channel.stopTyping(true); - } + withTyping(callee: () => Promise): Promise { + return callee(); } async reply(message: string): Promise { @@ -31,7 +26,7 @@ export class DiscordMessage implements Message { } async sendEmbed(embed: MessageEmbed): Promise { - await this.raw.channel.send(embed); + await this.raw.channel.send({ embeds: [embed] }); } panic(reason: unknown): never { @@ -40,7 +35,7 @@ export class DiscordMessage implements Message { new MessageEmbed() .setColor(yellow) .setTitle("エラー発生, リトライはされません") - .setDescription(reason), + .setDescription(`${reason}`), ); throw reason; } diff --git a/src/bot/skin/interactions-command.ts b/src/bot/skin/interactions-command.ts new file mode 100644 index 0000000..5498876 --- /dev/null +++ b/src/bot/skin/interactions-command.ts @@ -0,0 +1,136 @@ +import { + ApplicationCommand, + ApplicationCommandOption, + commandOptionTypeMap, +} from "../abst/command"; +import type { Client, CommandInteraction } from "discord.js"; +import type { DiscordId } from "../exp/discord-id"; +import type { Message } from "../abst/message"; + +const organizationOption: ApplicationCommandOption = { + name: "org", + description: "The organization name.", + type: commandOptionTypeMap.STRING, +}; + +const repositoryOption: ApplicationCommandOption = { + name: "repo", + description: "The repository name.", + type: commandOptionTypeMap.STRING, + required: true, +}; + +const branchOption: ApplicationCommandOption = { + name: "branch", + description: "The branch name.", + type: commandOptionTypeMap.STRING, +}; + +const issueOption: ApplicationCommandOption = { + name: "issue", + description: "The issue number.", + type: commandOptionTypeMap.INTEGER, +}; + +const repositoryCommand: ApplicationCommand = { + name: "ghr", + description: "Fetch the repository.", + options: [repositoryOption, organizationOption], +}; + +const branchCommand: ApplicationCommand = { + name: "ghb", + description: "Fetch the branch in the repository.", + options: [repositoryOption, organizationOption, branchOption], +}; + +const issueCommand: ApplicationCommand = { + name: "ghi", + description: "Fetch the issue in the repository.", + options: [repositoryOption, organizationOption, issueOption], +}; + +const prCommand: ApplicationCommand = { + name: "ghi", + description: "Fetch the pull request in the repository.", + options: [repositoryOption, organizationOption, issueOption], +}; + +const commands = [repositoryCommand, branchCommand, issueCommand, prCommand]; + +export type Handler = (message: Message) => Promise; + +export class InteractionsCommandReceiver { + constructor(private readonly client: Client) { + client.on("messageCreate", async () => { + if (this.initialized) { + return; + } + this.initialized = true; + const registrar = client.guilds.cache.get("683939861539192860")?.commands; + if (!registrar) { + return; + } + await Promise.all(commands.map((command) => registrar.create(command))); + }); + client.on("interactionCreate", (interaction) => { + if (!interaction.isCommand()) { + return; + } + this.onCommand(interaction); + }); + } + + private initialized = false; + + private handlers: Handler[] = []; + + onReceive(handler: Handler): void { + this.handlers.push(handler); + } + + private onCommand(interaction: CommandInteraction) { + const commandStr = this.buildCommandStr(interaction); + const message: Message = this.buildMessage(interaction, commandStr); + for (const handler of this.handlers) { + handler(message); + } + } + + private buildMessage( + interaction: CommandInteraction, + commandStr: string, + ): Message { + return { + getAuthorId: () => interaction.user.id as DiscordId, + matchPlainText: () => Promise.resolve(null), + matchCommand: (regex) => Promise.resolve(regex.exec(commandStr)), + withTyping: (callee) => callee(), + reply: (text) => { + interaction.reply(text); + return Promise.resolve(); + }, + sendEmbed: (embed) => { + interaction.reply({ embeds: [embed] }); + return Promise.resolve(); + }, + panic: (reason) => { + console.error(reason); + throw new Error(); + }, + }; + } + + private buildCommandStr(interaction: CommandInteraction): string { + let commandStr = `/${interaction.commandName} `; + commandStr += interaction.options.data + .filter(({ name }) => name !== "branch") + .map(({ value }) => value) + .join("/"); + commandStr += interaction.options.data + .filter(({ name }) => name === "branch") + .map(({ value }) => value) + .join(" "); + return commandStr; + } +} diff --git a/src/bot/skin/notifier.ts b/src/bot/skin/notifier.ts index ce211f0..2aff62c 100644 --- a/src/bot/skin/notifier.ts +++ b/src/bot/skin/notifier.ts @@ -72,7 +72,7 @@ export class SubscriptionNotifier implements UpdateHandler { return async (mes: MessageEmbed): Promise => { const user = await this.users.fetch(userId); const dm = await user.createDM(); - await dm.send(mes); + await dm.send({ embeds: [mes] }); }; }