From f21a7f91f827c4b9ba19fede9b2a980ce3d955d0 Mon Sep 17 00:00:00 2001 From: zS1L3NT Windows Date: Wed, 9 Aug 2023 04:38:20 +0800 Subject: [PATCH] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20update=20packages=20and=20?= =?UTF-8?q?add=20linting?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 10 +- .eslintrc.json | 43 + .github/workflows/publish-npm.yml | 2 +- .prettierrc | 17 +- package.json | 31 +- pnpm-lock.yaml | 1164 +++++++++++++++-- src/@types/global.d.ts | 1 + src/NovaBot.ts | 28 +- src/bases/BaseBotCache.ts | 7 +- src/bases/BaseGuildCache.ts | 10 +- src/builders/HelpBuilder.ts | 83 +- src/builders/ResponseBuilder.ts | 4 +- src/builders/SlashBuilder.ts | 15 +- .../interactions/buttons/help-maximum.ts | 10 +- .../interactions/buttons/help-minimum.ts | 10 +- src/defaults/interactions/commands/help.ts | 15 +- .../interactions/commands/set-alias.ts | 38 +- .../interactions/commands/set-log-channel.ts | 31 +- .../interactions/commands/set-prefix.ts | 27 +- .../interactions/events/guildCreate.ts | 9 +- .../interactions/events/guildDelete.ts | 2 +- .../interactions/events/roleUpdate.ts | 10 +- .../interactions/selectMenus/help-item.ts | 11 +- src/defaults/middleware/IsAdminMiddleware.ts | 2 +- src/index.ts | 4 +- src/interactions/button.ts | 13 +- src/interactions/command.ts | 19 +- src/interactions/event.ts | 6 +- src/interactions/modal.ts | 8 +- src/interactions/selectMenu.ts | 13 +- src/utils/ChannelCleaner.ts | 11 +- src/utils/DateHelper.ts | 8 +- src/utils/EventSetupHelper.ts | 72 +- src/utils/FilesSetupHelper.ts | 19 +- src/utils/LogManager.ts | 16 +- src/utils/SlashCommandDeployer.ts | 10 +- 36 files changed, 1418 insertions(+), 361 deletions(-) create mode 100644 .eslintrc.json diff --git a/.editorconfig b/.editorconfig index 9c34fd3..77ffcf6 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,3 +1,7 @@ -[*] -indent_size = 4 -indent_style = tab \ No newline at end of file +[*] +indent_size = 4 +indent_style = tab + +[{*.yml, *.yaml}] +indent_size = 2 +indent_style = space \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..ff5b167 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,43 @@ +{ + "env": { + // "browser": true, + // "es2021": true, + "node": true + }, + "extends": [ + // "next/core-web-vitals", + "eslint:recommended", + // "plugin:react/recommended", + "plugin:@typescript-eslint/recommended", + "prettier" + ], + "overrides": [], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": "latest", + "sourceType": "module" + }, + "plugins": [ + // "react", + "@typescript-eslint", + "simple-import-sort" + ], + "rules": { + "@typescript-eslint/ban-ts-comment": "off", + "@typescript-eslint/ban-types": "warn", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-unused-vars": "warn", + "linebreak-style": ["error", "unix"], + "no-empty": "warn", + "no-empty-function": "off", + "no-empty-pattern": "warn", + // "react/react-in-jsx-scope": "off", + "simple-import-sort/imports": [ + "warn", + { + "groups": [["^\\w"], ["^@\\w+"], ["^@/"], ["^\\."]] + } + ] + } +} \ No newline at end of file diff --git a/.github/workflows/publish-npm.yml b/.github/workflows/publish-npm.yml index a2a59e6..e62135f 100644 --- a/.github/workflows/publish-npm.yml +++ b/.github/workflows/publish-npm.yml @@ -18,7 +18,7 @@ jobs: - name: Performing Pnpm Install on Workspace uses: pnpm/action-setup@v2.1.0 with: - version: 7.10.0 + version: latest run_install: true - name: Transpiling TypeScript diff --git a/.prettierrc b/.prettierrc index 56eb3d4..9aa805f 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,8 +1,11 @@ -{ - "semi": false, - "arrowParens": "avoid", - "trailingComma": "none", - "jsxSingleQuote": false, - "jsxBracketSameLine": true, - "printWidth": 100 +{ + "semi": false, + "arrowParens": "avoid", + "trailingComma": "all", + "jsxSingleQuote": false, + "printWidth": 100, + "singleAttributePerLine": true, + "bracketSameLine": true, + "useTabs": true, + "tabWidth": 4 } \ No newline at end of file diff --git a/package.json b/package.json index f4babd4..8a2c307 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,14 @@ { "name": "nova-bot", - "version": "3.0.2", + "version": "3.0.3", "description": "Nova Bot, a framework for building Discord Bots", "main": "dist/index.js", "types": "dist/index.d.ts", "author": "zS1L3NT (https://www.zectan.com)", "license": "GPL-3.0", "scripts": { - "build": "tsc" + "build": "tsc", + "lint": "tsc --noEmit && eslint src --fix && prettier src --write" }, "repository": { "type": "git", @@ -17,17 +18,27 @@ "discordjs" ], "dependencies": { - "@discordjs/rest": "1.7.0", - "@prisma/client": "^4.12.0", - "@types/luxon": "^3.3.0", - "@types/node": "^18.15.11", + "@discordjs/rest": "2.0.0", + "@prisma/client": "^5.1.1", + "@types/luxon": "^3.3.1", + "@types/node": "^20.4.8", "after-every": "^1.0.4", - "discord-api-types": "0.37.39", - "discord.js": "^14.9.0", + "discord-api-types": "0.37.52", + "discord.js": "^14.12.1", "escape-string-regexp": "4.0.0", "luxon": "^3.3.0", "no-try": "^3.1.0", - "prisma": "^4.12.0", - "typescript": "^4.9.5" + "prisma": "^5.1.1", + "typescript": "^5.1.6" + }, + "devDependencies": { + "@types/node": "latest", + "@typescript-eslint/eslint-plugin": "latest", + "@typescript-eslint/parser": "latest", + "eslint": "latest", + "eslint-config-prettier": "latest", + "eslint-plugin-simple-import-sort": "latest", + "prettier": "latest", + "typescript": "latest" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1b44a8d..430930c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,26 +6,26 @@ settings: dependencies: '@discordjs/rest': - specifier: 1.7.0 - version: 1.7.0 + specifier: 2.0.0 + version: 2.0.0 '@prisma/client': - specifier: ^4.12.0 - version: 4.12.0(prisma@4.12.0) + specifier: ^5.1.1 + version: 5.1.1(prisma@5.1.1) '@types/luxon': - specifier: ^3.3.0 - version: 3.3.0 + specifier: ^3.3.1 + version: 3.3.1 '@types/node': - specifier: ^18.15.11 - version: 18.15.11 + specifier: ^20.4.8 + version: 20.4.8 after-every: specifier: ^1.0.4 version: 1.0.4 discord-api-types: - specifier: 0.37.39 - version: 0.37.39 + specifier: 0.37.52 + version: 0.37.52 discord.js: - specifier: ^14.9.0 - version: 14.9.0 + specifier: ^14.12.1 + version: 14.12.1 escape-string-regexp: specifier: 4.0.0 version: 4.0.0 @@ -36,61 +36,183 @@ dependencies: specifier: ^3.1.0 version: 3.1.0 prisma: - specifier: ^4.12.0 - version: 4.12.0 + specifier: ^5.1.1 + version: 5.1.1 typescript: - specifier: ^4.9.5 - version: 4.9.5 + specifier: ^5.1.6 + version: 5.1.6 + +devDependencies: + '@typescript-eslint/eslint-plugin': + specifier: latest + version: 6.3.0(@typescript-eslint/parser@6.3.0)(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/parser': + specifier: latest + version: 6.3.0(eslint@8.46.0)(typescript@5.1.6) + eslint: + specifier: latest + version: 8.46.0 + eslint-config-prettier: + specifier: latest + version: 9.0.0(eslint@8.46.0) + eslint-plugin-simple-import-sort: + specifier: latest + version: 10.0.0(eslint@8.46.0) + prettier: + specifier: latest + version: 3.0.1 packages: - /@discordjs/builders@1.6.1: - resolution: {integrity: sha512-CCcLwn/8ANhlAbhlE18fcaN0hfXTen53/JiwZs1t9oE/Cqa9maA8ZRarkCIsXF4J7J/MYnd0J6IsxeKsq+f6mw==} + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + + /@discordjs/builders@1.6.4: + resolution: {integrity: sha512-ARFKvmAkLhfkQQiNxqi0YIWqwUExvBRtvdtMFVJXvJoibsGkFrB/DWTf9byU7BTVUfsmW8w7NM55tYXR5S/iSg==} engines: {node: '>=16.9.0'} dependencies: - '@discordjs/formatters': 0.3.0 - '@discordjs/util': 0.2.0 - '@sapphire/shapeshift': 3.8.2 - discord-api-types: 0.37.39 + '@discordjs/formatters': 0.3.1 + '@discordjs/util': 1.0.0 + '@sapphire/shapeshift': 3.9.2 + discord-api-types: 0.37.52 fast-deep-equal: 3.1.3 ts-mixer: 6.0.3 - tslib: 2.5.0 + tslib: 2.6.1 dev: false - /@discordjs/collection@1.5.0: - resolution: {integrity: sha512-suyVndkEAAWrGxyw/CPGdtXoRRU6AUNkibtnbJevQzpelkJh3Q1gQqWDpqf5i39CnAn5+LrN0YS+cULeEjq2Yw==} + /@discordjs/collection@1.5.2: + resolution: {integrity: sha512-LDplPy8SPbc8MYkuCdnLRGWqygAX97E8NH7gA9uz+NZ/hXknUKJHuxsOmhC6pmHnF9Zmg0kvfwrDjGsRIljt9g==} engines: {node: '>=16.9.0'} dev: false - /@discordjs/formatters@0.3.0: - resolution: {integrity: sha512-Fc4MomalbP8HMKEMor3qUiboAKDtR7PSBoPjwm7WYghVRwgJlj5WYvUsriLsxeKk8+Qq2oy+HJlGTUkGvX0YnA==} + /@discordjs/formatters@0.3.1: + resolution: {integrity: sha512-M7X4IGiSeh4znwcRGcs+49B5tBkNDn4k5bmhxJDAUhRxRHTiFAOTVUNQ6yAKySu5jZTnCbSvTYHW3w0rAzV1MA==} engines: {node: '>=16.9.0'} dependencies: - discord-api-types: 0.37.39 + discord-api-types: 0.37.52 dev: false - /@discordjs/rest@1.7.0: - resolution: {integrity: sha512-r2HzmznRIo8IDGYBWqQfkEaGN1LrFfWQd3dSyC4tOpMU8nuVvFUEw6V/lwnG44jyOq+vgyDny2fxeUDMt9I4aQ==} + /@discordjs/rest@2.0.0: + resolution: {integrity: sha512-CW9ldfzsRzUbHcS4Oqu5+Moo+yrQ5qQ9groKNxPOzcoq2nuXa/fXOXkuQtQHcTeSVXsC9cmJ56M8gBDBUyLgGA==} engines: {node: '>=16.9.0'} dependencies: - '@discordjs/collection': 1.5.0 - '@discordjs/util': 0.2.0 + '@discordjs/collection': 1.5.2 + '@discordjs/util': 1.0.0 '@sapphire/async-queue': 1.5.0 - '@sapphire/snowflake': 3.4.2 - discord-api-types: 0.37.39 - file-type: 18.2.1 - tslib: 2.5.0 - undici: 5.21.2 + '@sapphire/snowflake': 3.5.1 + '@vladfrangu/async_event_emitter': 2.2.2 + discord-api-types: 0.37.52 + magic-bytes.js: 1.0.15 + tslib: 2.6.1 + undici: 5.23.0 dev: false - /@discordjs/util@0.2.0: - resolution: {integrity: sha512-/8qNbebFzLWKOOg+UV+RB8itp4SmU5jw0tBUD3ifElW6rYNOj1Ku5JaSW7lLl/WgjjxF01l/1uQPCzkwr110vg==} + /@discordjs/util@1.0.0: + resolution: {integrity: sha512-U2Iiab0mo8cFe+o4ZY4GROoAetGjFYA1PhhxiXEW82LuPUjOU/seHZDtVjDpOf6n3rz4IRm84wNtgHdpqRY5CA==} engines: {node: '>=16.9.0'} dev: false - /@prisma/client@4.12.0(prisma@4.12.0): - resolution: {integrity: sha512-j9/ighfWwux97J2dS15nqhl60tYoH8V0IuSsgZDb6bCFcQD3fXbXmxjYC8GHhIgOk3lB7Pq+8CwElz2MiDpsSg==} - engines: {node: '>=14.17'} + /@discordjs/ws@1.0.0: + resolution: {integrity: sha512-POiImjuQJzwCxjJs4JCtDcTjzvjVsVQbnsaoW/F03yTVdrj/xSpmgv4383AnpNEYXI+CA6ggkz37phZDsZQ1NQ==} + engines: {node: '>=16.9.0'} + dependencies: + '@discordjs/collection': 1.5.2 + '@discordjs/rest': 2.0.0 + '@discordjs/util': 1.0.0 + '@sapphire/async-queue': 1.5.0 + '@types/ws': 8.5.5 + '@vladfrangu/async_event_emitter': 2.2.2 + discord-api-types: 0.37.52 + tslib: 2.6.1 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@eslint-community/eslint-utils@4.4.0(eslint@8.46.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.46.0 + eslint-visitor-keys: 3.4.2 + dev: true + + /@eslint-community/regexpp@4.6.2: + resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc@2.1.1: + resolution: {integrity: sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.20.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js@8.46.0: + resolution: {integrity: sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@humanwhocodes/config-array@0.11.10: + resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + + /@humanwhocodes/object-schema@1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + dev: true + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + dev: true + + /@prisma/client@5.1.1(prisma@5.1.1): + resolution: {integrity: sha512-fxcCeK5pMQGcgCqCrWsi+I2rpIbk0rAhdrN+ke7f34tIrgPwA68ensrpin+9+fZvuV2OtzHmuipwduSY6HswdA==} + engines: {node: '>=16.13'} requiresBuild: true peerDependencies: prisma: '*' @@ -98,16 +220,16 @@ packages: prisma: optional: true dependencies: - '@prisma/engines-version': 4.12.0-67.659ef412370fa3b41cd7bf6e94587c1dfb7f67e7 - prisma: 4.12.0 + '@prisma/engines-version': 5.1.1-1.6a3747c37ff169c90047725a05a6ef02e32ac97e + prisma: 5.1.1 dev: false - /@prisma/engines-version@4.12.0-67.659ef412370fa3b41cd7bf6e94587c1dfb7f67e7: - resolution: {integrity: sha512-JIHNj5jlXb9mcaJwakM0vpgRYJIAurxTUqM0iX0tfEQA5XLZ9ONkIckkhuAKdAzocZ+80GYg7QSsfpjg7OxbOA==} + /@prisma/engines-version@5.1.1-1.6a3747c37ff169c90047725a05a6ef02e32ac97e: + resolution: {integrity: sha512-owZqbY/wucbr65bXJ/ljrHPgQU5xXTSkmcE/JcbqE1kusuAXV/TLN3/exmz21SZ5rJ7WDkyk70J2G/n68iogbQ==} dev: false - /@prisma/engines@4.12.0: - resolution: {integrity: sha512-0alKtnxhNB5hYU+ymESBlGI4b9XrGGSdv7Ud+8TE/fBNOEhIud0XQsAR+TrvUZgS4na5czubiMsODw0TUrgkIA==} + /@prisma/engines@5.1.1: + resolution: {integrity: sha512-NV/4nVNWFZSJCCIA3HIFJbbDKO/NARc9ej0tX5S9k2EVbkrFJC4Xt9b0u4rNZWL4V+F5LAjvta8vzEUw0rw+HA==} requiresBuild: true dev: false @@ -116,41 +238,244 @@ packages: engines: {node: '>=v14.0.0', npm: '>=7.0.0'} dev: false - /@sapphire/shapeshift@3.8.2: - resolution: {integrity: sha512-NXpnJAsxN3/h9TqQPntOeVWZrpIuucqXI3IWF6tj2fWCoRLCuVK5wx7Dtg7pRrtkYfsMUbDqgKoX26vrC5iYfA==} + /@sapphire/shapeshift@3.9.2: + resolution: {integrity: sha512-YRbCXWy969oGIdqR/wha62eX8GNHsvyYi0Rfd4rNW6tSVVa8p0ELiMEuOH/k8rgtvRoM+EMV7Csqz77YdwiDpA==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} dependencies: fast-deep-equal: 3.1.3 lodash: 4.17.21 dev: false - /@sapphire/snowflake@3.4.2: - resolution: {integrity: sha512-KJwlv5gkGjs1uFV7/xx81n3tqgBwBJvH94n1xDyH3q+JSmtsMeSleJffarEBfG2yAFeJiFA4BnGOK6FFPHc19g==} + /@sapphire/snowflake@3.5.1: + resolution: {integrity: sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} dev: false - /@tokenizer/token@0.3.0: - resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + /@types/json-schema@7.0.12: + resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + dev: true + + /@types/luxon@3.3.1: + resolution: {integrity: sha512-XOS5nBcgEeP2PpcqJHjCWhUCAzGfXIU8ILOSLpx2FhxqMW9KdxgCGXNOEKGVBfveKtIpztHzKK5vSRVLyW/NqA==} dev: false - /@types/luxon@3.3.0: - resolution: {integrity: sha512-uKRI5QORDnrGFYgcdAVnHvEIvEZ8noTpP/Bg+HeUzZghwinDlIS87DEenV5r1YoOF9G4x600YsUXLWZ19rmTmg==} + /@types/node@20.4.8: + resolution: {integrity: sha512-0mHckf6D2DiIAzh8fM8f3HQCvMKDpK94YQ0DSVkfWTG9BZleYIWudw9cJxX8oCk9bM+vAkDyujDV6dmKHbvQpg==} dev: false - /@types/node@18.15.11: - resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==} + /@types/semver@7.5.0: + resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} + dev: true + + /@types/ws@8.5.5: + resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} + dependencies: + '@types/node': 20.4.8 dev: false - /@types/ws@8.5.4: - resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} + /@typescript-eslint/eslint-plugin@6.3.0(@typescript-eslint/parser@6.3.0)(eslint@8.46.0)(typescript@5.1.6): + resolution: {integrity: sha512-IZYjYZ0ifGSLZbwMqIip/nOamFiWJ9AH+T/GYNZBWkVcyNQOFGtSMoWV7RvY4poYCMZ/4lHzNl796WOSNxmk8A==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.6.2 + '@typescript-eslint/parser': 6.3.0(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/scope-manager': 6.3.0 + '@typescript-eslint/type-utils': 6.3.0(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/utils': 6.3.0(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/visitor-keys': 6.3.0 + debug: 4.3.4 + eslint: 8.46.0 + graphemer: 1.4.0 + ignore: 5.2.4 + natural-compare: 1.4.0 + natural-compare-lite: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.1(typescript@5.1.6) + typescript: 5.1.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@6.3.0(eslint@8.46.0)(typescript@5.1.6): + resolution: {integrity: sha512-ibP+y2Gr6p0qsUkhs7InMdXrwldjxZw66wpcQq9/PzAroM45wdwyu81T+7RibNCh8oc0AgrsyCwJByncY0Ongg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@types/node': 18.15.11 + '@typescript-eslint/scope-manager': 6.3.0 + '@typescript-eslint/types': 6.3.0 + '@typescript-eslint/typescript-estree': 6.3.0(typescript@5.1.6) + '@typescript-eslint/visitor-keys': 6.3.0 + debug: 4.3.4 + eslint: 8.46.0 + typescript: 5.1.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager@6.3.0: + resolution: {integrity: sha512-WlNFgBEuGu74ahrXzgefiz/QlVb+qg8KDTpknKwR7hMH+lQygWyx0CQFoUmMn1zDkQjTBBIn75IxtWss77iBIQ==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.3.0 + '@typescript-eslint/visitor-keys': 6.3.0 + dev: true + + /@typescript-eslint/type-utils@6.3.0(eslint@8.46.0)(typescript@5.1.6): + resolution: {integrity: sha512-7Oj+1ox1T2Yc8PKpBvOKWhoI/4rWFd1j7FA/rPE0lbBPXTKjdbtC+7Ev0SeBjEKkIhKWVeZSP+mR7y1Db1CdfQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.3.0(typescript@5.1.6) + '@typescript-eslint/utils': 6.3.0(eslint@8.46.0)(typescript@5.1.6) + debug: 4.3.4 + eslint: 8.46.0 + ts-api-utils: 1.0.1(typescript@5.1.6) + typescript: 5.1.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@6.3.0: + resolution: {integrity: sha512-K6TZOvfVyc7MO9j60MkRNWyFSf86IbOatTKGrpTQnzarDZPYPVy0oe3myTMq7VjhfsUAbNUW8I5s+2lZvtx1gg==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/typescript-estree@6.3.0(typescript@5.1.6): + resolution: {integrity: sha512-Xh4NVDaC4eYKY4O3QGPuQNp5NxBAlEvNQYOqJquR2MePNxO11E5K3t5x4M4Mx53IZvtpW+mBxIT0s274fLUocg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.3.0 + '@typescript-eslint/visitor-keys': 6.3.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.1(typescript@5.1.6) + typescript: 5.1.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@6.3.0(eslint@8.46.0)(typescript@5.1.6): + resolution: {integrity: sha512-hLLg3BZE07XHnpzglNBG8P/IXq/ZVXraEbgY7FM0Cnc1ehM8RMdn9mat3LubJ3KBeYXXPxV1nugWbQPjGeJk6Q==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) + '@types/json-schema': 7.0.12 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 6.3.0 + '@typescript-eslint/types': 6.3.0 + '@typescript-eslint/typescript-estree': 6.3.0(typescript@5.1.6) + eslint: 8.46.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@6.3.0: + resolution: {integrity: sha512-kEhRRj7HnvaSjux1J9+7dBen15CdWmDnwrpyiHsFX6Qx2iW5LOBUgNefOFeh2PjWPlNwN8TOn6+4eBU3J/gupw==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.3.0 + eslint-visitor-keys: 3.4.2 + dev: true + + /@vladfrangu/async_event_emitter@2.2.2: + resolution: {integrity: sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==} + engines: {node: '>=v14.0.0', npm: '>=7.0.0'} dev: false + /acorn-jsx@5.3.2(acorn@8.10.0): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.10.0 + dev: true + + /acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + /after-every@1.0.4: resolution: {integrity: sha512-7C52dg4QuBw2BoOeQu8mgGO1Ut/YhrqIdDxuh9MMnGu7eo0pyq5CLkoXPkF5ZytTdeKQ6+D0yolSTi8ejRzITw==} dev: false + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -158,57 +483,420 @@ packages: streamsearch: 1.1.0 dev: false - /discord-api-types@0.37.39: - resolution: {integrity: sha512-hkhQsQyzsTJITp311WXvHZh9j4RAMfIk2hPmsWeOTN50QTpg6zqmJNfel9D/8lYNvsU01wzw9281Yke8NhYyHg==} + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /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 + dev: true + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /discord-api-types@0.37.52: + resolution: {integrity: sha512-TP99aMgY6rHuDIy056GDm1j2nGOcaLbFpjVbvAmv6N6vhkjHNqHXCHVqKtGisaQ8D15slbxTHNl/SSkPdx2syg==} dev: false - /discord.js@14.9.0: - resolution: {integrity: sha512-ygGms5xP4hG+QrrY9k7d/OYCzMltSMtdl/2Snzq/nLCiZo+Sna91Ulv9l0+B5Jd/Czcq37B7wJAnmja7GOa+bg==} + /discord.js@14.12.1: + resolution: {integrity: sha512-gGjhTkauIPgFXxpBl0UZgyehrKhDe90cIS8Hn1xFBYQ63EuUAkKoUqRNmc/pcla6DD16s4cUz5tAbdSpXivnxw==} engines: {node: '>=16.9.0'} dependencies: - '@discordjs/builders': 1.6.1 - '@discordjs/collection': 1.5.0 - '@discordjs/formatters': 0.3.0 - '@discordjs/rest': 1.7.0 - '@discordjs/util': 0.2.0 - '@sapphire/snowflake': 3.4.2 - '@types/ws': 8.5.4 - discord-api-types: 0.37.39 + '@discordjs/builders': 1.6.4 + '@discordjs/collection': 1.5.2 + '@discordjs/formatters': 0.3.1 + '@discordjs/rest': 2.0.0 + '@discordjs/util': 1.0.0 + '@discordjs/ws': 1.0.0 + '@sapphire/snowflake': 3.5.1 + '@types/ws': 8.5.5 + discord-api-types: 0.37.52 fast-deep-equal: 3.1.3 lodash.snakecase: 4.1.1 - tslib: 2.5.0 - undici: 5.21.2 + tslib: 2.6.1 + undici: 5.23.0 ws: 8.13.0 transitivePeerDependencies: - bufferutil - utf-8-validate dev: false + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - dev: false + + /eslint-config-prettier@9.0.0(eslint@8.46.0): + resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.46.0 + dev: true + + /eslint-plugin-simple-import-sort@10.0.0(eslint@8.46.0): + resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} + peerDependencies: + eslint: '>=5.0.0' + dependencies: + eslint: 8.46.0 + dev: true + + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /eslint-visitor-keys@3.4.2: + resolution: {integrity: sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint@8.46.0: + resolution: {integrity: sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) + '@eslint-community/regexpp': 4.6.2 + '@eslint/eslintrc': 2.1.1 + '@eslint/js': 8.46.0 + '@humanwhocodes/config-array': 0.11.10 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.2 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.20.0 + graphemer: 1.4.0 + ignore: 5.2.4 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.10.0 + acorn-jsx: 5.3.2(acorn@8.10.0) + eslint-visitor-keys: 3.4.2 + dev: true + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: false - /file-type@18.2.1: - resolution: {integrity: sha512-Yw5MtnMv7vgD2/6Bjmmuegc8bQEVA9GmAyaR18bMYWKqsWDG9wgYZ1j4I6gNMF5Y5JBDcUcjRQqNQx7Y8uotcg==} - engines: {node: '>=14.16'} + /fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} dependencies: - readable-web-to-node-stream: 3.0.2 - strtok3: 7.0.0 - token-types: 5.0.1 - dev: false + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: false + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + dependencies: + reusify: 1.0.4 + dev: true + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.0.4 + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache@3.0.4: + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.7 + rimraf: 3.0.2 + dev: true + + /flatted@3.2.7: + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /globals@13.20.0: + resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.1 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /ignore@5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + dev: true + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: false + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true /lodash.snakecase@4.1.1: resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} @@ -218,100 +906,291 @@ packages: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: false + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + /luxon@3.3.0: resolution: {integrity: sha512-An0UCfG/rSiqtAIiBPO0Y9/zAnHUZxAMiCpTd5h2smgsj7GGmcenvrvww2cqNA8/4A5ZrD1gJpHN2mIHZQF+Mg==} engines: {node: '>=12'} dev: false + /magic-bytes.js@1.0.15: + resolution: {integrity: sha512-bpRmwbRHqongRhA+mXzbLWjVy7ylqmfMBYaQkSs6pac0z6hBTvsgrH0r4FBYd/UYVJBmS6Rp/O+oCCQVLzKV1g==} + dev: false + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + /no-try@3.1.0: resolution: {integrity: sha512-4QyjqXvAcbjqEiV5fj8a6ZW/8VWx7SVq0qI2WhbgQ+XgnQ3vMa6zRw99x0pIG6Rgwv1uavlBJq/dP5DNMSzuiw==} dev: false - /peek-readable@5.0.0: - resolution: {integrity: sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==} - engines: {node: '>=14.16'} - dev: false + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true - /prisma@4.12.0: - resolution: {integrity: sha512-xqVper4mbwl32BWzLpdznHAYvYDWQQWK2tBfXjdUD397XaveRyAP7SkBZ6kFlIg8kKayF4hvuaVtYwXd9BodAg==} - engines: {node: '>=14.17'} + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prettier@3.0.1: + resolution: {integrity: sha512-fcOWSnnpCrovBsmFZIGIy9UqK2FaI7Hqax+DIO0A9UxeVoY4iweyaFjS5TavZN97Hfehph0nhsZnjlVKzEQSrQ==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /prisma@5.1.1: + resolution: {integrity: sha512-WJFG/U7sMmcc6TjJTTifTfpI6Wjoh55xl4AzopVwAdyK68L9/ogNo8QQ2cxuUjJf/Wa82z/uhyh3wMzvRIBphg==} + engines: {node: '>=16.13'} hasBin: true requiresBuild: true dependencies: - '@prisma/engines': 4.12.0 + '@prisma/engines': 5.1.1 dev: false - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + /punycode@2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - dev: false + glob: 7.2.3 + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true - /readable-web-to-node-stream@3.0.2: - resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} dependencies: - readable-stream: 3.6.2 - dev: false + shebang-regex: 3.0.0 + dev: true - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: false + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true /streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} dev: false - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} dependencies: - safe-buffer: 5.2.1 - dev: false + ansi-regex: 5.0.1 + dev: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true - /strtok3@7.0.0: - resolution: {integrity: sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==} - engines: {node: '>=14.16'} + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} dependencies: - '@tokenizer/token': 0.3.0 - peek-readable: 5.0.0 - dev: false + has-flag: 4.0.0 + dev: true + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true - /token-types@5.0.1: - resolution: {integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==} - engines: {node: '>=14.16'} + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} dependencies: - '@tokenizer/token': 0.3.0 - ieee754: 1.2.1 - dev: false + is-number: 7.0.0 + dev: true + + /ts-api-utils@1.0.1(typescript@5.1.6): + resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==} + engines: {node: '>=16.13.0'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.1.6 + dev: true /ts-mixer@6.0.3: resolution: {integrity: sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==} dev: false - /tslib@2.5.0: - resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} + /tslib@2.6.1: + resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} dev: false - /typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /typescript@5.1.6: + resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} + engines: {node: '>=14.17'} hasBin: true - dev: false - /undici@5.21.2: - resolution: {integrity: sha512-f6pTQ9RF4DQtwoWSaC42P/NKlUjvezVvd9r155ohqkwFNRyBKM3f3pcty3ouusefNRyM25XhIQEbeQ46sZDJfQ==} - engines: {node: '>=12.18'} + /undici@5.23.0: + resolution: {integrity: sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==} + engines: {node: '>=14.0'} dependencies: busboy: 1.6.0 dev: false - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: false + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.0 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true /ws@8.13.0: resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} @@ -325,3 +1204,12 @@ packages: utf-8-validate: optional: true dev: false + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts index a25206e..7f86b68 100644 --- a/src/@types/global.d.ts +++ b/src/@types/global.d.ts @@ -1,4 +1,5 @@ declare global { + // eslint-disable-next-line no-var var logger: { discord: (...args: any[]) => void info: (...args: any[]) => void diff --git a/src/NovaBot.ts b/src/NovaBot.ts index cfd21c5..28cf47f 100644 --- a/src/NovaBot.ts +++ b/src/NovaBot.ts @@ -1,18 +1,25 @@ -import { PrismaClient } from "@prisma/client" import AfterEvery from "after-every" import { BitFieldResolvable, Client, GatewayIntentsString, PermissionFlagsBits } from "discord.js" import { useTryAsync } from "no-try" +import { PrismaClient } from "@prisma/client" + import { - BaseBotCache, BaseEntry, BaseGuildCache, EventSetupHelper, FilesSetupHelper, iBaseBotCache, - iBaseGuildCache, SlashCommandDeployer + BaseBotCache, + BaseEntry, + BaseGuildCache, + EventSetupHelper, + FilesSetupHelper, + iBaseBotCache, + iBaseGuildCache, + SlashCommandDeployer, } from "./" export default abstract class NovaBot< P extends PrismaClient, E extends BaseEntry, GC extends BaseGuildCache, - BC extends BaseBotCache + BC extends BaseBotCache, > { /** * The display name of the bot. @@ -83,13 +90,14 @@ export default abstract class NovaBot< /** * Instance of the prisma database client */ - abstract prisma: P + abstract prisma: P /** * This method will get called once your bot receives the "ready" event from Discord * * @param botCache The bot cache that is used by your bot */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars onSetup(botCache: BC) {} /** @@ -110,7 +118,7 @@ export default abstract class NovaBot< logger.info(`Logged in as ${this.name}`) let i = 0 - let count = bot.guilds.cache.size + const count = bot.guilds.cache.size const getTag = () => `[${`${++i}`.padStart(`${count}`.length, "0")}/${count}]` Promise.allSettled( bot.guilds.cache.map(async guild => { @@ -119,18 +127,18 @@ export default abstract class NovaBot< blacklist.push(guild.id) return logger.error( getTag(), - `❌ Couldn't find an entry for Guild(${guild.name})` + `❌ Couldn't find an entry for Guild(${guild.name})`, ) } const [deployErr] = await useTryAsync(() => - new SlashCommandDeployer(guild.id, esh.fsh.commandFiles).deploy() + new SlashCommandDeployer(guild.id, esh.fsh.commandFiles).deploy(), ) if (deployErr) { blacklist.push(guild.id) return logger.error( getTag(), - `❌ Couldn't get Slash Command permission for Guild(${guild.name})` + `❌ Couldn't get Slash Command permission for Guild(${guild.name})`, ) } @@ -142,7 +150,7 @@ export default abstract class NovaBot< } logger.info(getTag(), `✅ Restored cache for Guild(${guild.name})`) - }) + }), ).then(() => { logger.info(`✅ All bot cache restored`) }) diff --git a/src/bases/BaseBotCache.ts b/src/bases/BaseBotCache.ts index c56105c..300437e 100644 --- a/src/bases/BaseBotCache.ts +++ b/src/bases/BaseBotCache.ts @@ -8,7 +8,7 @@ export type iBaseBotCache< P extends PrismaClient, E extends BaseEntry, GC extends BaseGuildCache, - BC extends BaseBotCache + BC extends BaseBotCache, > = new (GCClass: iBaseGuildCache, bot: Client, prisma: P) => BC /** @@ -20,7 +20,7 @@ export type iBaseBotCache< export default abstract class BaseBotCache< P extends PrismaClient, E extends BaseEntry, - GC extends BaseGuildCache + GC extends BaseGuildCache, > { /** * The collection that contains all GuildCaches. @@ -33,7 +33,7 @@ export default abstract class BaseBotCache< * The Discord Client that is used to interact with the Discord API. */ public readonly bot: Client, - public readonly prisma: P + public readonly prisma: P, ) { this.onConstruct() } @@ -71,6 +71,7 @@ export default abstract class BaseBotCache< * * @param cache The GuildCache that was just created. */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars onSetGuildCache(cache: GC) {} /** diff --git a/src/bases/BaseGuildCache.ts b/src/bases/BaseGuildCache.ts index 504d908..9f3e8ee 100644 --- a/src/bases/BaseGuildCache.ts +++ b/src/bases/BaseGuildCache.ts @@ -8,7 +8,7 @@ import { Alias } from "./BaseEntry" export type iBaseGuildCache< P extends PrismaClient, E extends BaseEntry, - GC extends BaseGuildCache + GC extends BaseGuildCache, > = new (bot: Client, guild: Guild, prisma: P) => GC /** @@ -19,7 +19,7 @@ export type iBaseGuildCache< export default abstract class BaseGuildCache< P extends PrismaClient, E extends BaseEntry, - GC extends BaseGuildCache + GC extends BaseGuildCache, > { /** * The instance of the logger for this Guild @@ -50,7 +50,7 @@ export default abstract class BaseGuildCache< * The Discord Guild that this GuildCache is for. */ public readonly guild: Guild, - public readonly prisma: P + public readonly prisma: P, ) { this.onConstruct() setInterval(() => this.refresh(), 15_000) @@ -73,7 +73,7 @@ export default abstract class BaseGuildCache< try { this.entry = await (this.prisma).entry.update({ data, - where: { guild_id: this.guild.id } + where: { guild_id: this.guild.id }, }) } catch (err) { this.refresh() @@ -81,7 +81,7 @@ export default abstract class BaseGuildCache< this.logger.log({ title: (err).name, description: (err).message, - color: Colors.Red + color: Colors.Red, }) } } diff --git a/src/builders/HelpBuilder.ts b/src/builders/HelpBuilder.ts index 2a5973a..b7daccb 100644 --- a/src/builders/HelpBuilder.ts +++ b/src/builders/HelpBuilder.ts @@ -1,25 +1,38 @@ import { - ActionRowBuilder, ButtonBuilder, ButtonStyle, Colors, EmbedBuilder, SelectMenuBuilder + ActionRowBuilder, + ButtonBuilder, + ButtonStyle, + Colors, + EmbedBuilder, + StringSelectMenuBuilder, } from "discord.js" import { PrismaClient } from "@prisma/client" import { - BaseBotCache, BaseEntry, BaseGuildCache, CommandPayload, CommandType, FilesSetupHelper + BaseBotCache, + BaseEntry, + BaseGuildCache, + CommandPayload, + CommandType, + FilesSetupHelper, } from "../" class HelpBuilder< P extends PrismaClient, E extends BaseEntry, GC extends BaseGuildCache, - BC extends BaseBotCache + BC extends BaseBotCache, > { private readonly QUESTION = "https://firebasestorage.googleapis.com/v0/b/zectan-projects.appspot.com/o/question.png?alt=media&token=fc6d0312-1ed2-408d-9309-5abe69c467c3" private readonly WARNING = "https://firebasestorage.googleapis.com/v0/b/zectan-projects.appspot.com/o/warning.png?alt=media&token=bc9c95ca-27df-40eb-a015-6d23b88eae31" - constructor(private readonly fsh: FilesSetupHelper, private readonly cache: GC) {} + constructor( + private readonly fsh: FilesSetupHelper, + private readonly cache: GC, + ) {} buildMaximum(): CommandPayload { return { @@ -32,20 +45,22 @@ class HelpBuilder< .addFields( Array.from(this.fsh.commandFiles.entries()).map(([name, commandFile]) => ({ name, - value: commandFile.data.description - })) - ) + value: commandFile.data.description, + })), + ), ], components: [ - new ActionRowBuilder().addComponents(this.createSelectMenu()), + new ActionRowBuilder().addComponents( + this.createSelectMenu(), + ), new ActionRowBuilder().addComponents( new ButtonBuilder() .setCustomId("help-minimum") .setLabel("Show Help Overview") .setStyle(ButtonStyle.Primary) - .setEmoji("➖") - ) - ] + .setEmoji("➖"), + ), + ], } } @@ -62,10 +77,10 @@ class HelpBuilder< `ADMINISTRATOR is currently missing from the list of permissions in <@&${ this.cache.guild.roles.botRoleFor(this.cache.bot.user!)!.id }>`, - "All interactions with the bot will be temporarily unavailable until this permission is added." - ].join("\n") - ) - ] + "All interactions with the bot will be temporarily unavailable until this permission is added.", + ].join("\n"), + ), + ], } } @@ -80,20 +95,22 @@ class HelpBuilder< ...this.fsh.helpMessage(this.cache).split("\n"), "", "Click the button below to see all available commands", - "Use the select menu below to find out more about a specific command" - ].join("\n") - ) + "Use the select menu below to find out more about a specific command", + ].join("\n"), + ), ], components: [ - new ActionRowBuilder().addComponents(this.createSelectMenu()), + new ActionRowBuilder().addComponents( + this.createSelectMenu(), + ), new ActionRowBuilder().addComponents( new ButtonBuilder() .setCustomId("help-maximum") .setLabel("Show all Commands") .setStyle(ButtonStyle.Primary) - .setEmoji("➕") - ) - ] + .setEmoji("➕"), + ), + ], } } @@ -112,7 +129,7 @@ class HelpBuilder< : commandFile.only === CommandType.Slash ? "Slash Commands" : "Message Commands" - }**` + }**`, ] if (alias) { @@ -126,7 +143,7 @@ class HelpBuilder< const values = [ `**(${option.required ? "required" : "optional"})**`, `**About**: _${option.description}_`, - `**Type**: ${option.requirements}` + `**Type**: ${option.requirements}`, ] if (option.default) { values.push(`**Default**: \`${option.default}\``) @@ -134,7 +151,7 @@ class HelpBuilder< embed.addFields({ name: `[${i + 1}]\t__${option.name}__`, - value: values.join("\n") + value: values.join("\n"), }) } } @@ -144,28 +161,30 @@ class HelpBuilder< return { embeds: [embed], components: [ - new ActionRowBuilder().addComponents(this.createSelectMenu()), + new ActionRowBuilder().addComponents( + this.createSelectMenu(), + ), new ActionRowBuilder().addComponents( new ButtonBuilder() .setCustomId("help-minimum") .setLabel("Back") .setStyle(ButtonStyle.Primary) - .setEmoji("⬅") - ) - ] + .setEmoji("⬅"), + ), + ], } } createSelectMenu() { - return new SelectMenuBuilder() + return new StringSelectMenuBuilder() .setCustomId("help-item") .setPlaceholder("Choose a command") .addOptions( Array.from(this.fsh.commandFiles.entries()).map(([name, commandFile]) => ({ label: name, value: name, - description: commandFile.data.description - })) + description: commandFile.data.description, + })), ) } } diff --git a/src/builders/ResponseBuilder.ts b/src/builders/ResponseBuilder.ts index 190542d..3e682ac 100644 --- a/src/builders/ResponseBuilder.ts +++ b/src/builders/ResponseBuilder.ts @@ -2,7 +2,7 @@ import { EmbedBuilder } from "discord.js" enum Emoji { GOOD = "https://firebasestorage.googleapis.com/v0/b/zectan-projects.appspot.com/o/good.png?alt=media&token=4b833fc2-b8ff-4d5c-add2-f5a6029664fb", - BAD = "https://firebasestorage.googleapis.com/v0/b/zectan-projects.appspot.com/o/bad.png?alt=media&token=cbd48c77-784c-4f86-8de1-7335b452a894" + BAD = "https://firebasestorage.googleapis.com/v0/b/zectan-projects.appspot.com/o/bad.png?alt=media&token=cbd48c77-784c-4f86-8de1-7335b452a894", } export default class ResponseBuilder { @@ -14,7 +14,7 @@ export default class ResponseBuilder { /** * The message to show on the embed */ - public readonly content: string + public readonly content: string, ) {} /** diff --git a/src/builders/SlashBuilder.ts b/src/builders/SlashBuilder.ts index 9500ef4..41d0425 100644 --- a/src/builders/SlashBuilder.ts +++ b/src/builders/SlashBuilder.ts @@ -3,7 +3,10 @@ import { SlashCommandBuilder } from "discord.js" import { iSlashData } from "../" export default class SlashBuilder { - constructor(private readonly name: string, private readonly data: iSlashData) {} + constructor( + private readonly name: string, + private readonly data: iSlashData, + ) {} buildCommand() { return this.build(SlashCommandBuilder) @@ -48,7 +51,7 @@ export default class SlashBuilder { boolean .setName(option.name) .setDescription(option.description) - .setRequired(option.required) + .setRequired(option.required), ) break case "user": @@ -56,7 +59,7 @@ export default class SlashBuilder { user .setName(option.name) .setDescription(option.description) - .setRequired(option.required) + .setRequired(option.required), ) break case "role": @@ -64,7 +67,7 @@ export default class SlashBuilder { role .setName(option.name) .setDescription(option.description) - .setRequired(option.required) + .setRequired(option.required), ) break case "channel": @@ -72,7 +75,7 @@ export default class SlashBuilder { channel .setName(option.name) .setDescription(option.description) - .setRequired(option.required) + .setRequired(option.required), ) break case "mentionable": @@ -80,7 +83,7 @@ export default class SlashBuilder { mentionable .setName(option.name) .setDescription(option.description) - .setRequired(option.required) + .setRequired(option.required), ) break } diff --git a/src/defaults/interactions/buttons/help-maximum.ts b/src/defaults/interactions/buttons/help-maximum.ts index df662da..d89b368 100644 --- a/src/defaults/interactions/buttons/help-maximum.ts +++ b/src/defaults/interactions/buttons/help-maximum.ts @@ -1,14 +1,20 @@ import { PrismaClient } from "@prisma/client" import { - BaseBotCache, BaseButton, BaseEntry, BaseGuildCache, ButtonHelper, FilesSetupHelper, HelpBuilder + BaseBotCache, + BaseButton, + BaseEntry, + BaseGuildCache, + ButtonHelper, + FilesSetupHelper, + HelpBuilder, } from "../../.." export default class< P extends PrismaClient, E extends BaseEntry, GC extends BaseGuildCache, - BC extends BaseBotCache + BC extends BaseBotCache, > extends BaseButton { override defer = false override ephemeral = false diff --git a/src/defaults/interactions/buttons/help-minimum.ts b/src/defaults/interactions/buttons/help-minimum.ts index 3d7934d..a5186b4 100644 --- a/src/defaults/interactions/buttons/help-minimum.ts +++ b/src/defaults/interactions/buttons/help-minimum.ts @@ -1,14 +1,20 @@ import { PrismaClient } from "@prisma/client" import { - BaseBotCache, BaseButton, BaseEntry, BaseGuildCache, ButtonHelper, FilesSetupHelper, HelpBuilder + BaseBotCache, + BaseButton, + BaseEntry, + BaseGuildCache, + ButtonHelper, + FilesSetupHelper, + HelpBuilder, } from "../../.." export default class< P extends PrismaClient, E extends BaseEntry, GC extends BaseGuildCache, - BC extends BaseBotCache + BC extends BaseBotCache, > extends BaseButton { override defer = false override ephemeral = false diff --git a/src/defaults/interactions/commands/help.ts b/src/defaults/interactions/commands/help.ts index 2dc7e97..1f13970 100644 --- a/src/defaults/interactions/commands/help.ts +++ b/src/defaults/interactions/commands/help.ts @@ -1,20 +1,25 @@ import { PrismaClient } from "@prisma/client" import { - BaseBotCache, BaseCommand, BaseEntry, BaseGuildCache, CommandHelper, FilesSetupHelper, - HelpBuilder + BaseBotCache, + BaseCommand, + BaseEntry, + BaseGuildCache, + CommandHelper, + FilesSetupHelper, + HelpBuilder, } from "../../.." export default class< P extends PrismaClient, E extends BaseEntry, GC extends BaseGuildCache, - BC extends BaseBotCache + BC extends BaseBotCache, > extends BaseCommand { override defer = true override ephemeral = true override data = { - description: "Shows you this help message" + description: "Shows you this help message", } override middleware = [] @@ -27,7 +32,7 @@ export default class< return helper.isMessageCommand(false) } - override converter(helper: CommandHelper) {} + override converter() {} override async execute(helper: CommandHelper) { helper.respond(new HelpBuilder(this.fsh, helper.cache).buildMinimum(), null) diff --git a/src/defaults/interactions/commands/set-alias.ts b/src/defaults/interactions/commands/set-alias.ts index d4d3cae..7579657 100644 --- a/src/defaults/interactions/commands/set-alias.ts +++ b/src/defaults/interactions/commands/set-alias.ts @@ -3,14 +3,20 @@ import { Colors } from "discord.js" import { PrismaClient } from "@prisma/client" import { - BaseCommand, BaseEntry, BaseGuildCache, CommandHelper, CommandType, IsAdminMiddleware, - iSlashStringOption, ResponseBuilder + BaseCommand, + BaseEntry, + BaseGuildCache, + CommandHelper, + CommandType, + IsAdminMiddleware, + iSlashStringOption, + ResponseBuilder, } from "../../.." export default class< P extends PrismaClient, E extends BaseEntry, - GC extends BaseGuildCache + GC extends BaseGuildCache, > extends BaseCommand { override defer = true override ephemeral = true @@ -23,19 +29,19 @@ export default class< type: "string" as const, choices: [], requirements: "Valid message command", - required: true + required: true, }, { name: "alias", description: [ "The alias you want to set", - "Leave empty to unset the alias for this command" + "Leave empty to unset the alias for this command", ].join("\n"), type: "string" as const, requirements: "Alphabetic text", - required: false - } - ] + required: false, + }, + ], } override only = CommandType.Slash @@ -48,9 +54,9 @@ export default class< .map(c => ({ name: c, value: c })) } - override condition(helper: CommandHelper) {} + override condition() {} - override converter(helper: CommandHelper) {} + override converter() {} override async execute(helper: CommandHelper) { const command = helper.string("command")! @@ -67,7 +73,7 @@ export default class< } await (helper.cache.prisma).alias.create({ - data: { alias, command, guild_id: helper.cache.guild.id } + data: { alias, command, guild_id: helper.cache.guild.id }, }) helper.respond(ResponseBuilder.good(`Set Alias for \`${command}\` to \`${alias}\``)) helper.cache.logger.log({ @@ -76,10 +82,10 @@ export default class< description: [ `<@${helper.member.id}> added an alias for a command`, `**Command**: ${command}`, - `**Alias**: ${alias}` + `**Alias**: ${alias}`, ].join("\n"), command: "set-alias", - color: Colors.Blue + color: Colors.Blue, }) } else { if (!alias_) { @@ -87,7 +93,7 @@ export default class< } await (helper.cache.prisma).alias.delete({ - where: { alias_command: { alias: alias_.alias, command } } + where: { alias_command: { alias: alias_.alias, command } }, }) helper.respond(ResponseBuilder.good(`Removed Alias for \`${command}\``)) helper.cache.logger.log({ @@ -96,10 +102,10 @@ export default class< description: [ `<@${helper.member.id}> removed an alias for a command`, `**Command**: ${command}`, - `**Alias**: ${alias}` + `**Alias**: ${alias}`, ].join("\n"), command: "set-alias", - color: Colors.Blue + color: Colors.Blue, }) } } diff --git a/src/defaults/interactions/commands/set-log-channel.ts b/src/defaults/interactions/commands/set-log-channel.ts index 20bd168..c698843 100644 --- a/src/defaults/interactions/commands/set-log-channel.ts +++ b/src/defaults/interactions/commands/set-log-channel.ts @@ -3,14 +3,19 @@ import { Colors, TextChannel } from "discord.js" import { PrismaClient } from "@prisma/client" import { - BaseCommand, BaseEntry, BaseGuildCache, CommandHelper, CommandType, IsAdminMiddleware, - ResponseBuilder + BaseCommand, + BaseEntry, + BaseGuildCache, + CommandHelper, + CommandType, + IsAdminMiddleware, + ResponseBuilder, } from "../../.." export default class< P extends PrismaClient, E extends BaseEntry, - GC extends BaseGuildCache + GC extends BaseGuildCache, > extends BaseCommand { override defer = true override ephemeral = true @@ -21,21 +26,21 @@ export default class< name: "channel", description: [ "The channel which you would want to set as the log channel", - "Leave this empty to unset the log channel" + "Leave this empty to unset the log channel", ].join("\n"), type: "channel" as const, requirements: "Text channel that isn't already the log channel", - required: false - } - ] + required: false, + }, + ], } override only = CommandType.Slash override middleware = [new IsAdminMiddleware()] - override condition(helper: CommandHelper) {} + override condition() {} - override converter(helper: CommandHelper) {} + override converter() {} override async execute(helper: CommandHelper) { const channel = helper.channel("channel") @@ -48,7 +53,7 @@ export default class< //@ts-ignore await helper.cache.update({ log_channel_id: channel.id }) helper.respond( - ResponseBuilder.good(`Log channel reassigned to \`#${channel.name}\``) + ResponseBuilder.good(`Log channel reassigned to \`#${channel.name}\``), ) helper.cache.logger.log({ member: helper.member, @@ -56,10 +61,10 @@ export default class< description: [ `<@${helper.member.id}> changed the log channel`, oldChannelId ? `**Old Log Channel**: <#${oldChannelId}>` : null, - `**New Log Channel**: <#${channel.id}>` + `**New Log Channel**: <#${channel.id}>`, ].join("\n"), command: "set-log-channel", - color: Colors.Blue + color: Colors.Blue, }) } } else if (channel === null) { @@ -71,7 +76,7 @@ export default class< title: `Log channel unassigned`, description: `<@${helper.member.id}> unassigned the log channel\b**Old Log Channel**: <#${oldChannelId}>`, command: "set-log-channel", - color: Colors.Blue + color: Colors.Blue, }) } else { helper.respond(ResponseBuilder.bad(`Please select a text channel`)) diff --git a/src/defaults/interactions/commands/set-prefix.ts b/src/defaults/interactions/commands/set-prefix.ts index 2ef5c29..1a090f1 100644 --- a/src/defaults/interactions/commands/set-prefix.ts +++ b/src/defaults/interactions/commands/set-prefix.ts @@ -3,14 +3,19 @@ import { Colors } from "discord.js" import { PrismaClient } from "@prisma/client" import { - BaseCommand, BaseEntry, BaseGuildCache, CommandHelper, CommandType, IsAdminMiddleware, - ResponseBuilder + BaseCommand, + BaseEntry, + BaseGuildCache, + CommandHelper, + CommandType, + IsAdminMiddleware, + ResponseBuilder, } from "../../.." export default class< P extends PrismaClient, E extends BaseEntry, - GC extends BaseGuildCache + GC extends BaseGuildCache, > extends BaseCommand { override defer = true override ephemeral = true @@ -21,21 +26,21 @@ export default class< name: "prefix", description: [ "The message prefix to trigger message commands", - "Leave this empty to unset the prefix" + "Leave this empty to unset the prefix", ].join("\n"), type: "string" as const, requirements: "Text", - required: false - } - ] + required: false, + }, + ], } override only = CommandType.Slash override middleware = [new IsAdminMiddleware()] - override condition(helper: CommandHelper) {} + override condition() {} - override converter(helper: CommandHelper) {} + override converter() {} override async execute(helper: CommandHelper) { const prefix = helper.string("prefix") @@ -50,10 +55,10 @@ export default class< description: [ `<@${helper.member.id}> changed the server's message command prefix`, oldPrefix ? `**Old Prefix**: ${oldPrefix}` : null, - `**New Prefix**: ${prefix}` + `**New Prefix**: ${prefix}`, ].join("\n"), command: "set-prefix", - color: Colors.Blue + color: Colors.Blue, }) } } diff --git a/src/defaults/interactions/events/guildCreate.ts b/src/defaults/interactions/events/guildCreate.ts index febe68b..7837aba 100644 --- a/src/defaults/interactions/events/guildCreate.ts +++ b/src/defaults/interactions/events/guildCreate.ts @@ -3,14 +3,19 @@ import { Guild } from "discord.js" import { PrismaClient } from "@prisma/client" import { - BaseBotCache, BaseEntry, BaseEvent, BaseGuildCache, FilesSetupHelper, SlashCommandDeployer + BaseBotCache, + BaseEntry, + BaseEvent, + BaseGuildCache, + FilesSetupHelper, + SlashCommandDeployer, } from "../../.." export default class< P extends PrismaClient, E extends BaseEntry, GC extends BaseGuildCache, - BC extends BaseBotCache + BC extends BaseBotCache, > extends BaseEvent { override name = "guildCreate" as const diff --git a/src/defaults/interactions/events/guildDelete.ts b/src/defaults/interactions/events/guildDelete.ts index 2bce81d..7c818c2 100644 --- a/src/defaults/interactions/events/guildDelete.ts +++ b/src/defaults/interactions/events/guildDelete.ts @@ -8,7 +8,7 @@ export default class< P extends PrismaClient, E extends BaseEntry, GC extends BaseGuildCache, - BC extends BaseBotCache + BC extends BaseBotCache, > extends BaseEvent { override name = "guildDelete" as const diff --git a/src/defaults/interactions/events/roleUpdate.ts b/src/defaults/interactions/events/roleUpdate.ts index f4532f7..74eb9dc 100644 --- a/src/defaults/interactions/events/roleUpdate.ts +++ b/src/defaults/interactions/events/roleUpdate.ts @@ -8,7 +8,7 @@ export default class< P extends PrismaClient, E extends BaseEntry, GC extends BaseGuildCache, - BC extends BaseBotCache + BC extends BaseBotCache, > extends BaseEvent { override name = "roleUpdate" as const @@ -29,9 +29,9 @@ export default class< title: `Administrator Permission Missing`, description: [ `ADMINISTRATOR was removed from my list of permissions in <@&${oldRole.id}>`, - "I need this role to operate properly, if not none of my commands will work." + "I need this role to operate properly, if not none of my commands will work.", ].join("\n"), - color: Colors.Red + color: Colors.Red, }) } @@ -44,9 +44,9 @@ export default class< title: `Administrator Permission Restored`, description: [ `ADMINISTRATOR was added to my list of permissions in <@&${oldRole.id}>`, - "Thank you for restoring my permissions, now I can function properly" + "Thank you for restoring my permissions, now I can function properly", ].join("\n"), - color: Colors.Green + color: Colors.Green, }) } } diff --git a/src/defaults/interactions/selectMenus/help-item.ts b/src/defaults/interactions/selectMenus/help-item.ts index 00bf3ad..c617e17 100644 --- a/src/defaults/interactions/selectMenus/help-item.ts +++ b/src/defaults/interactions/selectMenus/help-item.ts @@ -1,15 +1,20 @@ import { PrismaClient } from "@prisma/client" import { - BaseBotCache, BaseEntry, BaseGuildCache, BaseSelectMenu, FilesSetupHelper, HelpBuilder, - SelectMenuHelper + BaseBotCache, + BaseEntry, + BaseGuildCache, + BaseSelectMenu, + FilesSetupHelper, + HelpBuilder, + SelectMenuHelper, } from "../../.." export default class< P extends PrismaClient, E extends BaseEntry, GC extends BaseGuildCache, - BC extends BaseBotCache + BC extends BaseBotCache, > extends BaseSelectMenu { override defer = false override ephemeral = false diff --git a/src/defaults/middleware/IsAdminMiddleware.ts b/src/defaults/middleware/IsAdminMiddleware.ts index 00b02d4..cddffa5 100644 --- a/src/defaults/middleware/IsAdminMiddleware.ts +++ b/src/defaults/middleware/IsAdminMiddleware.ts @@ -7,7 +7,7 @@ import { BaseEntry, BaseGuildCache, CommandHelper, CommandMiddleware, ResponseBu export default class IsAdminMiddleware< P extends PrismaClient, E extends BaseEntry, - GC extends BaseGuildCache + GC extends BaseGuildCache, > extends CommandMiddleware { override handler(helper: CommandHelper) { if ( diff --git a/src/index.ts b/src/index.ts index 9a0c1b9..9839287 100644 --- a/src/index.ts +++ b/src/index.ts @@ -13,14 +13,14 @@ export { CommandHelper, CommandMiddleware, CommandType, - default as BaseCommand + default as BaseCommand, } from "./interactions/command" export { default as BaseEvent, EventMiddleware } from "./interactions/event" export { default as BaseModal, ModalHelper, ModalMiddleware } from "./interactions/modal" export { default as BaseSelectMenu, SelectMenuHelper, - SelectMenuMiddleware + SelectMenuMiddleware, } from "./interactions/selectMenu" export { default as IsAdminMiddleware } from "./defaults/middleware/IsAdminMiddleware" export * from "./NovaBot" diff --git a/src/interactions/button.ts b/src/interactions/button.ts index 630e98d..6b9417c 100644 --- a/src/interactions/button.ts +++ b/src/interactions/button.ts @@ -7,7 +7,7 @@ import { BaseEntry, BaseGuildCache, CommandPayload, ResponseBuilder } from "../" export default abstract class BaseButton< P extends PrismaClient, E extends BaseEntry, - GC extends BaseGuildCache + GC extends BaseGuildCache, > { /** * If the button interaction should be deferred @@ -38,13 +38,13 @@ export type iButtonMiddleware< P extends PrismaClient, E extends BaseEntry, GC extends BaseGuildCache, - BM extends ButtonMiddleware + BM extends ButtonMiddleware, > = new () => BM export abstract class ButtonMiddleware< P extends PrismaClient, E extends BaseEntry, - GC extends BaseGuildCache + GC extends BaseGuildCache, > { /** * The function that should handle the button interaction @@ -58,9 +58,12 @@ export abstract class ButtonMiddleware< export class ButtonHelper< P extends PrismaClient, E extends BaseEntry, - GC extends BaseGuildCache + GC extends BaseGuildCache, > { - constructor(public readonly cache: GC, public readonly interaction: ButtonInteraction) {} + constructor( + public readonly cache: GC, + public readonly interaction: ButtonInteraction, + ) {} /** * The GuildMember that pressednt the button diff --git a/src/interactions/command.ts b/src/interactions/command.ts index 25fa04c..ffa1dbb 100644 --- a/src/interactions/command.ts +++ b/src/interactions/command.ts @@ -1,5 +1,10 @@ import { - ChatInputCommandInteraction, GuildChannel, GuildMember, Message, Role, User + ChatInputCommandInteraction, + GuildChannel, + GuildMember, + Message, + Role, + User, } from "discord.js" import escapeStringRegexp from "escape-string-regexp" @@ -9,13 +14,13 @@ import { BaseEntry, BaseGuildCache, CommandPayload, iSlashData, ResponseBuilder export enum CommandType { Slash = "slash", - Message = "message" + Message = "message", } export default abstract class BaseCommand< P extends PrismaClient, E extends BaseEntry, - GC extends BaseGuildCache + GC extends BaseGuildCache, > { /** * If the slash command should be deferred @@ -89,7 +94,7 @@ export default abstract class BaseCommand< export abstract class CommandMiddleware< P extends PrismaClient, E extends BaseEntry, - GC extends BaseGuildCache + GC extends BaseGuildCache, > { /** * The function that should handle the message or slash interaction @@ -103,7 +108,7 @@ export abstract class CommandMiddleware< export class CommandHelper< P extends PrismaClient, E extends BaseEntry, - GC extends BaseGuildCache + GC extends BaseGuildCache, > { private responded = false private response: Message | undefined @@ -123,7 +128,7 @@ export class CommandHelper< public readonly type: CommandType, public readonly cache: GC, public readonly interaction?: ChatInputCommandInteraction, - public readonly message?: Message + public readonly message?: Message, ) {} /** @@ -175,7 +180,7 @@ export class CommandHelper< return !!this.match( hasArgs === null ? `^${commandRegex}` - : `^${commandRegex}(?:(?= *${hasArgs ? "" : "$"})(?!\\w+))` + : `^${commandRegex}(?:(?= *${hasArgs ? "" : "$"})(?!\\w+))`, ) } diff --git a/src/interactions/event.ts b/src/interactions/event.ts index f83214f..979c352 100644 --- a/src/interactions/event.ts +++ b/src/interactions/event.ts @@ -9,7 +9,7 @@ export default abstract class BaseEvent< E extends BaseEntry, GC extends BaseGuildCache, BC extends BaseBotCache, - N extends keyof ClientEvents + N extends keyof ClientEvents, > { /** * The name of the event @@ -37,7 +37,7 @@ export type iEventMiddleware< GC extends BaseGuildCache, BC extends BaseBotCache, N extends keyof ClientEvents, - EM extends EventMiddleware + EM extends EventMiddleware, > = new () => EM export abstract class EventMiddleware< @@ -45,7 +45,7 @@ export abstract class EventMiddleware< E extends BaseEntry, GC extends BaseGuildCache, BC extends BaseBotCache, - N extends keyof ClientEvents + N extends keyof ClientEvents, > { /** * The function that should handle the event diff --git a/src/interactions/modal.ts b/src/interactions/modal.ts index 2cf3057..6ed47e1 100644 --- a/src/interactions/modal.ts +++ b/src/interactions/modal.ts @@ -7,7 +7,7 @@ import { BaseEntry, BaseGuildCache, CommandPayload, ResponseBuilder } from "../" export default abstract class BaseModal< P extends PrismaClient, E extends BaseEntry, - GC extends BaseGuildCache + GC extends BaseGuildCache, > { /** * If the modal submission should be deferred @@ -37,7 +37,7 @@ export default abstract class BaseModal< export abstract class ModalMiddleware< P extends PrismaClient, E extends BaseEntry, - GC extends BaseGuildCache + GC extends BaseGuildCache, > { /** * The function that should handle the modal interaction @@ -51,11 +51,11 @@ export abstract class ModalMiddleware< export class ModalHelper< P extends PrismaClient, E extends BaseEntry, - GC extends BaseGuildCache + GC extends BaseGuildCache, > { constructor( public readonly cache: GC, - public readonly interaction: ModalMessageModalSubmitInteraction + public readonly interaction: ModalMessageModalSubmitInteraction, ) {} /** diff --git a/src/interactions/selectMenu.ts b/src/interactions/selectMenu.ts index 48dad6f..7d4aea5 100644 --- a/src/interactions/selectMenu.ts +++ b/src/interactions/selectMenu.ts @@ -1,4 +1,4 @@ -import { GuildMember, Message, SelectMenuInteraction } from "discord.js" +import { GuildMember, Message, StringSelectMenuInteraction } from "discord.js" import { PrismaClient } from "@prisma/client" @@ -7,7 +7,7 @@ import { BaseEntry, BaseGuildCache, CommandPayload, ResponseBuilder } from "../" export default abstract class BaseSelectMenu< P extends PrismaClient, E extends BaseEntry, - GC extends BaseGuildCache + GC extends BaseGuildCache, > { /** * If the select menu interaction should be deferred @@ -37,7 +37,7 @@ export default abstract class BaseSelectMenu< export abstract class SelectMenuMiddleware< P extends PrismaClient, E extends BaseEntry, - GC extends BaseGuildCache + GC extends BaseGuildCache, > { /** * The function that should handle the select menu interaction @@ -51,9 +51,12 @@ export abstract class SelectMenuMiddleware< export class SelectMenuHelper< P extends PrismaClient, E extends BaseEntry, - GC extends BaseGuildCache + GC extends BaseGuildCache, > { - constructor(public readonly cache: GC, public readonly interaction: SelectMenuInteraction) {} + constructor( + public readonly cache: GC, + public readonly interaction: StringSelectMenuInteraction, + ) {} /** * The GuildMember that pressednt the button diff --git a/src/utils/ChannelCleaner.ts b/src/utils/ChannelCleaner.ts index b63e2a8..3ea7a9a 100644 --- a/src/utils/ChannelCleaner.ts +++ b/src/utils/ChannelCleaner.ts @@ -1,6 +1,7 @@ -import { PrismaClient } from "@prisma/client" import { Collection, Message, TextChannel } from "discord.js" +import { PrismaClient } from "@prisma/client" + import { BaseEntry, BaseGuildCache } from "../" /** @@ -9,7 +10,7 @@ import { BaseEntry, BaseGuildCache } from "../" export default class ChannelCleaner< P extends PrismaClient, E extends BaseEntry, - GC extends BaseGuildCache + GC extends BaseGuildCache, > { private excluded: (message: Message) => boolean private channel?: TextChannel @@ -27,7 +28,7 @@ export default class ChannelCleaner< /** * The only messages that should be in the Channel */ - private readonly messageIds: string[] + private readonly messageIds: string[], ) { this.excluded = () => false } @@ -54,7 +55,7 @@ export default class ChannelCleaner< for (const message of messages.values()) { if (!this.excluded(message) && !this.messageIds.includes(message.id)) { logger.warn( - `Message(${message.content}) shouldn't be in Channel(${channel.name})` + `Message(${message.content}) shouldn't be in Channel(${channel.name})`, ) message.delete().catch(err => logger.warn("Failed to delete message", err)) } else { @@ -69,7 +70,7 @@ export default class ChannelCleaner< logger.warn(`Channel(${channel.id}) has no Message(${messageId})`) this.messageIds.splice( this.messageIds.findIndex(m => m === messageId), - 1 + 1, ) removeCount++ } diff --git a/src/utils/DateHelper.ts b/src/utils/DateHelper.ts index 780eadf..e6368aa 100644 --- a/src/utils/DateHelper.ts +++ b/src/utils/DateHelper.ts @@ -10,7 +10,7 @@ export default class DateHelper { Thu: "Thursday", Fri: "Friday", Sat: "Saturday", - Sun: "Sunday" + Sun: "Sunday", } static nameOfMonths = [ "January", @@ -24,7 +24,7 @@ export default class DateHelper { "September", "October", "November", - "December" + "December", ] static readonly longerMonths = [0, 2, 4, 6, 7, 9, 11] @@ -73,9 +73,9 @@ export default class DateHelper { month: month + 1, day, hour, - minute + minute, }, - { zone: "Asia/Singapore" } + { zone: "Asia/Singapore" }, ) } diff --git a/src/utils/EventSetupHelper.ts b/src/utils/EventSetupHelper.ts index a9bda88..e5af81e 100644 --- a/src/utils/EventSetupHelper.ts +++ b/src/utils/EventSetupHelper.ts @@ -1,24 +1,35 @@ import { - ButtonInteraction, ChatInputCommandInteraction, Message, ModalMessageModalSubmitInteraction, - SelectMenuInteraction + ButtonInteraction, + ChatInputCommandInteraction, + Message, + ModalMessageModalSubmitInteraction, + StringSelectMenuInteraction, } from "discord.js" import { PrismaClient } from "@prisma/client" import { - BaseBotCache, BaseEntry, BaseGuildCache, ButtonHelper, CommandHelper, CommandType, - FilesSetupHelper, ModalHelper, ResponseBuilder, SelectMenuHelper + BaseBotCache, + BaseEntry, + BaseGuildCache, + ButtonHelper, + CommandHelper, + CommandType, + FilesSetupHelper, + ModalHelper, + ResponseBuilder, + SelectMenuHelper, } from "../" export default class EventSetupHelper< P extends PrismaClient, E extends BaseEntry, GC extends BaseGuildCache, - BC extends BaseBotCache + BC extends BaseBotCache, > { constructor( private readonly botCache: BC, - public readonly fsh: FilesSetupHelper + public readonly fsh: FilesSetupHelper, ) { for (const eventFile of this.fsh.eventFiles) { this.botCache.bot.on(eventFile.name, async (...args) => { @@ -47,7 +58,8 @@ export default class EventSetupHelper< if (interaction.isChatInputCommand()) await this.onSlashInteraction(cache, interaction) if (interaction.isButton()) await this.onButtonInteraction(cache, interaction) - if (interaction.isSelectMenu()) await this.onSelectMenuInteraction(cache, interaction) + if (interaction.isStringSelectMenu()) + await this.onSelectMenuInteraction(cache, interaction) if (interaction.isModalSubmit() && interaction.isFromMessage()) await this.onModalInteraction(cache, interaction) }) @@ -69,7 +81,7 @@ export default class EventSetupHelper< await message.channel .sendTyping() .catch(err => - logger.warn("Failed to send typing after message command", err) + logger.warn("Failed to send typing after message command", err), ) let broke = false @@ -83,14 +95,14 @@ export default class EventSetupHelper< } catch (err) { logger.error("Error executing message command", err) helper.respond( - ResponseBuilder.bad("There was an error while executing this command!") + ResponseBuilder.bad("There was an error while executing this command!"), ) } } else { helper.respond( ResponseBuilder.bad( - "Bot needs ADMINISTRATOR permissions to use this message command" - ) + "Bot needs ADMINISTRATOR permissions to use this message command", + ), ) } @@ -105,13 +117,13 @@ export default class EventSetupHelper< CommandType.Slash, cache, interaction, - undefined + undefined, ) const commandFile = this.fsh.commandFiles.get(interaction.commandName) if (!commandFile) return logger.discord( - `Opening SlashInteraction(${interaction.commandName}) for User(${interaction.user.tag})` + `Opening SlashInteraction(${interaction.commandName}) for User(${interaction.user.tag})`, ) if (commandFile.defer) { @@ -135,17 +147,19 @@ export default class EventSetupHelper< } catch (err) { logger.error("Error executing slash interaction", err) helper.respond( - ResponseBuilder.bad("There was an error while executing this command!") + ResponseBuilder.bad("There was an error while executing this command!"), ) } } else { helper.respond( - ResponseBuilder.bad("Bot needs ADMINISTRATOR permissions to use this slash command") + ResponseBuilder.bad( + "Bot needs ADMINISTRATOR permissions to use this slash command", + ), ) } logger.discord( - `Closing SlashInteraction(${interaction.commandName}) for User(${interaction.user.tag})` + `Closing SlashInteraction(${interaction.commandName}) for User(${interaction.user.tag})`, ) } @@ -155,7 +169,7 @@ export default class EventSetupHelper< if (!buttonFile) return logger.discord( - `Opening ButtonInteraction(${interaction.customId}) for User(${interaction.user.tag})` + `Opening ButtonInteraction(${interaction.customId}) for User(${interaction.user.tag})`, ) if (buttonFile.defer) { @@ -177,27 +191,27 @@ export default class EventSetupHelper< } catch (err) { logger.error("Error executing button interaction", err) helper.respond( - ResponseBuilder.bad("There was an error while executing this command!") + ResponseBuilder.bad("There was an error while executing this command!"), ) } } else { helper.respond( - ResponseBuilder.bad("Bot needs ADMINISTRATOR permissions to use this button") + ResponseBuilder.bad("Bot needs ADMINISTRATOR permissions to use this button"), ) } logger.discord( - `Closing ButtonInteraction(${interaction.customId}) for User(${interaction.user.tag})` + `Closing ButtonInteraction(${interaction.customId}) for User(${interaction.user.tag})`, ) } - private async onSelectMenuInteraction(cache: GC, interaction: SelectMenuInteraction) { + private async onSelectMenuInteraction(cache: GC, interaction: StringSelectMenuInteraction) { const helper = new SelectMenuHelper(cache, interaction) const selectMenuFile = this.fsh.selectMenuFiles.get(interaction.customId) if (!selectMenuFile) return logger.discord( - `Opening SelectMenuInteraction(${interaction.customId}) for User(${interaction.user.tag})` + `Opening SelectMenuInteraction(${interaction.customId}) for User(${interaction.user.tag})`, ) if (selectMenuFile.defer) { @@ -219,17 +233,17 @@ export default class EventSetupHelper< } catch (err) { logger.error("Error executing select menu command", err) helper.respond( - ResponseBuilder.bad("There was an error while executing this command!") + ResponseBuilder.bad("There was an error while executing this command!"), ) } } else { helper.respond( - ResponseBuilder.bad("Bot needs ADMINISTRATOR permissions to use this select menu") + ResponseBuilder.bad("Bot needs ADMINISTRATOR permissions to use this select menu"), ) } logger.discord( - `Closing SelectMenuInteraction(${interaction.customId}) for User(${interaction.user.tag})` + `Closing SelectMenuInteraction(${interaction.customId}) for User(${interaction.user.tag})`, ) } @@ -239,7 +253,7 @@ export default class EventSetupHelper< if (!modalFile) return logger.discord( - `Opening ModalInteraction(${interaction.customId}) for User(${interaction.user.tag})` + `Opening ModalInteraction(${interaction.customId}) for User(${interaction.user.tag})`, ) if (modalFile.defer) { @@ -261,17 +275,17 @@ export default class EventSetupHelper< } catch (err) { logger.error("Error executing select menu command", err) helper.respond( - ResponseBuilder.bad("There was an error while executing this command!") + ResponseBuilder.bad("There was an error while executing this command!"), ) } } else { helper.respond( - ResponseBuilder.bad("Bot needs ADMINISTRATOR permissions to use this modal") + ResponseBuilder.bad("Bot needs ADMINISTRATOR permissions to use this modal"), ) } logger.discord( - `Closing ModalInteraction(${interaction.customId}) for User(${interaction.user.tag})` + `Closing ModalInteraction(${interaction.customId}) for User(${interaction.user.tag})`, ) } } diff --git a/src/utils/FilesSetupHelper.ts b/src/utils/FilesSetupHelper.ts index f400ee3..7abc6f5 100644 --- a/src/utils/FilesSetupHelper.ts +++ b/src/utils/FilesSetupHelper.ts @@ -6,8 +6,14 @@ import path from "path" import { PrismaClient } from "@prisma/client" import { - BaseBotCache, BaseButton, BaseCommand, BaseEntry, BaseEvent, BaseGuildCache, BaseModal, - BaseSelectMenu + BaseBotCache, + BaseButton, + BaseCommand, + BaseEntry, + BaseEvent, + BaseGuildCache, + BaseModal, + BaseSelectMenu, } from "../" import ButtonHelpMaximum from "../defaults/interactions/buttons/help-maximum" import ButtonHelpMinimum from "../defaults/interactions/buttons/help-minimum" @@ -24,7 +30,7 @@ export default class FilesSetupHelper< P extends PrismaClient, E extends BaseEntry, GC extends BaseGuildCache, - BC extends BaseBotCache + BC extends BaseBotCache, > { readonly commandFiles = new Collection>() readonly buttonFiles = new Collection>() @@ -35,7 +41,7 @@ export default class FilesSetupHelper< constructor( public readonly directory: string, public readonly icon: string, - public readonly helpMessage: (cache: GC) => string + public readonly helpMessage: (cache: GC) => string, ) { this.commandFiles.set("help", new CommandHelp(this)) this.commandFiles.set("set-alias", new CommandSetAlias(this.readEntities("messages") ?? [])) @@ -47,7 +53,7 @@ export default class FilesSetupHelper< this.eventFiles.push( new EventGuildCreate(this), new EventGuildDelete(), - new EventRoleUpdate() + new EventRoleUpdate(), ) this.setupCommands() @@ -64,6 +70,7 @@ export default class FilesSetupHelper< } private require(location: string): T { + // eslint-disable-next-line @typescript-eslint/no-var-requires const file = require(path.join(this.directory, location)) if ("default" in file) { return file.default @@ -101,7 +108,7 @@ export default class FilesSetupHelper< for (const fileName of fileNames) { const name = fileName.split(".")[0]! const SelectMenu = this.require BaseSelectMenu>( - `selectMenus/${fileName}` + `selectMenus/${fileName}`, ) this.selectMenuFiles.set(name, new SelectMenu()) } diff --git a/src/utils/LogManager.ts b/src/utils/LogManager.ts index 7484850..f066450 100644 --- a/src/utils/LogManager.ts +++ b/src/utils/LogManager.ts @@ -9,14 +9,14 @@ type LogData = { title: string description: string | string[] command?: string - color?: typeof Colors[keyof typeof Colors] + color?: (typeof Colors)[keyof typeof Colors] embeds?: EmbedBuilder[] } export default class LogManager< P extends PrismaClient, E extends BaseEntry, - GC extends BaseGuildCache + GC extends BaseGuildCache, > { constructor(private readonly cache: BaseGuildCache) {} @@ -38,7 +38,7 @@ export default class LogManager< } const member = this.cache.guild.members.cache.find( - m => m.user.id === this.cache.bot.user!.id + m => m.user.id === this.cache.bot.user!.id, )! if (member.permissions.has(PermissionFlagsBits.SendMessages)) { logChannel.send({ @@ -47,7 +47,7 @@ export default class LogManager< author: data.member ? { name: data.member.user.tag, - iconURL: data.member.user.displayAvatarURL() + iconURL: data.member.user.displayAvatarURL(), } : undefined, title: data.title, @@ -58,12 +58,12 @@ export default class LogManager< timestamp: new Date(), footer: data.command ? { - text: `Command: ${data.command}` + text: `Command: ${data.command}`, } - : undefined + : undefined, }), - ...(data.embeds ?? []) - ] + ...(data.embeds ?? []), + ], }) } } diff --git a/src/utils/SlashCommandDeployer.ts b/src/utils/SlashCommandDeployer.ts index 7d953d1..ffa55c7 100644 --- a/src/utils/SlashCommandDeployer.ts +++ b/src/utils/SlashCommandDeployer.ts @@ -1,5 +1,5 @@ -import { Routes } from "discord-api-types/v10" import { Collection, SlashCommandBuilder } from "discord.js" +import { Routes } from "discord-api-types/v10" import { REST } from "@discordjs/rest" import { PrismaClient } from "@prisma/client" @@ -9,19 +9,19 @@ import { BaseCommand, BaseEntry, BaseGuildCache, SlashBuilder } from "../" export default class SlashCommandDeployer< P extends PrismaClient, E extends BaseEntry, - GC extends BaseGuildCache + GC extends BaseGuildCache, > { private readonly commands: SlashCommandBuilder[] constructor( private readonly guildId: string, - commandFiles: Collection> + commandFiles: Collection>, ) { this.guildId = guildId this.commands = Array.from(commandFiles.entries()).map(([name, file]) => file.data instanceof SlashCommandBuilder ? file.data - : new SlashBuilder(name, file.data).buildCommand() + : new SlashBuilder(name, file.data).buildCommand(), ) } @@ -31,7 +31,7 @@ export default class SlashCommandDeployer< async deploy() { const rest = new REST().setToken(process.env.DISCORD__TOKEN) await rest.put(Routes.applicationGuildCommands(process.env.DISCORD__BOT_ID, this.guildId), { - body: this.commands.map(command => command.toJSON()) + body: this.commands.map(command => command.toJSON()), }) } }