diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..7e1a1b6 --- /dev/null +++ b/.env.example @@ -0,0 +1,8 @@ +PORT=3000 + +# Discord +DISCORD_TOKEN=xxxxxxxxxxxxxxxx +DISCORD_STATUS_NAME=Morgane AI +DISCORD_STATUS_STATE=Serving the multiverse +SERVERS_PER_SHARD=150 +OWNER_ID=123456789012345678 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 999871c..0000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,54 +0,0 @@ -name: Build and Deploy - -on: - push: - branches: - - main - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - - name: Remove existing prod branch (if exists) - run: | - git fetch --prune - git show-ref --verify --quiet refs/heads/prod && git branch -D prod || true - git push origin --delete prod || true - - - name: Create prod branch from main - run: | - git checkout -b prod - git push -u origin prod - - - name: Use Node.js 20.x - uses: actions/setup-node@v2 - with: - node-version: 20.x - - - name: Install pnpm - run: npm install -g pnpm - - - name: Install dependencies with pnpm - run: pnpm install - - - name: Build with pnpm - run: pnpm build - - - name: Modify .gitignore - run: | - rm .gitignore || true - echo ".env" > .gitignore - echo "node_modules" >> .gitignore - rm -rf src - - - name: Push changes to prod branch - run: | - git config --global user.email "contact@jeremysoler.com" - git config --global user.name "Garder500[Bot]" - git add . - git commit -m "Update everythings" - git push origin prod --force diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 37ef224..0000000 --- a/.gitignore +++ /dev/null @@ -1,132 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# vuepress v2.x temp and cache directory -.temp -.cache - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* - -local.db \ No newline at end of file diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 222861c..0000000 --- a/.prettierrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "tabWidth": 2, - "useTabs": false -} diff --git a/.swcrc b/.swcrc deleted file mode 100644 index 15605f3..0000000 --- a/.swcrc +++ /dev/null @@ -1,71 +0,0 @@ -{ - "jsc": { - "parser": { - "syntax": "typescript", - "tsx": false - }, - "target": "es5", - "loose": false, - "minify": { - "compress": { - "arguments": false, - "arrows": true, - "booleans": true, - "booleans_as_integers": false, - "collapse_vars": true, - "comparisons": true, - "computed_props": true, - "conditionals": true, - "dead_code": true, - "directives": true, - "drop_console": false, - "drop_debugger": true, - "evaluate": true, - "expression": false, - "hoist_funs": false, - "hoist_props": true, - "hoist_vars": false, - "if_return": true, - "join_vars": true, - "keep_classnames": false, - "keep_fargs": true, - "keep_fnames": false, - "keep_infinity": false, - "loops": true, - "negate_iife": true, - "properties": true, - "reduce_funcs": false, - "reduce_vars": false, - "side_effects": true, - "switches": true, - "typeofs": true, - "unsafe": false, - "unsafe_arrows": false, - "unsafe_comps": false, - "unsafe_Function": false, - "unsafe_math": false, - "unsafe_symbols": false, - "unsafe_methods": false, - "unsafe_proto": false, - "unsafe_regexp": false, - "unsafe_undefined": false, - "unused": true, - "const_to_let": true, - "pristine_globals": true - }, - "mangle": { - "toplevel": false, - "keep_classnames": false, - "keep_fnames": false, - "keep_private_props": false, - "ie8": false, - "safari10": false - } - } - }, - "module": { - "type": "commonjs" - }, - "minify": true, - "isModule": true -} diff --git a/.swcrc.example b/.swcrc.example new file mode 100644 index 0000000..549af3b --- /dev/null +++ b/.swcrc.example @@ -0,0 +1,24 @@ +{ + "jsc": { + "target": "es2020", + "parser": { + "syntax": "typescript", + "tsx": false, + "decorators": true, + "dynamicImport": true + }, + "transform": { + "react": { + "runtime": "automatic" + } + } + }, + "module": { + "type": "commonjs", + "strict": true, + "strictMode": true, + "noInterop": false + }, + "minify": false, + "sourceMaps": true +} diff --git a/README.md b/README.md index 50d528e..477064d 100644 --- a/README.md +++ b/README.md @@ -1 +1,184 @@ -Second test. +

Ketsuna • Morgane AI

+ +

+Back-end Fastify/Prisma, Front-end Next.js, Bot Discord.js.
+AI assistant full-stack clés en main. +

+ +

+Node >=20 +PNPM >=8 +Prisma +MIT +

+ +--- + +## Sommaire +- [Fonctionnalités](#fonctionnalités) +- [Liens rapides](#liens-rapides) +- [Prérequis](#prérequis) +- [Installation Ubuntu / Debian](#installation-ubuntudebian) +- [Variables d’environnement](#variables-denvironnement) +- [Commandes Discord](#commandes-discord) +- [Routes Web](#routes-web) +- [Mise à jour](#mise-à-jour) +- [Contributors](#contributors) +- [Licence](#licence) + +--- + +## Fonctionnalités + +| Module | ✅ | +|--------|:--:| +| API REST (Fastify + SWC) | ✓ | +| Bot Discord (discord.js v14) | ✓ | +| Front-end React / Next 14 | ✓ | +| Sharding, PM2, Prisma ORM | ✓ | +| Génération img/texte (StableHorde) | ✓ | + +--- + +## Liens rapides + +| | | +|---|---| +| **Support Discord** | | +| **Top.gg** | | +| **Inviter le bot** | | + +--- + +## Prérequis + +* Ubuntu 22.04 LTS / Debian 12 +* **Node.js ≥ 20** +* **PNPM ≥ 8** et **PM2** (gestionnaire de processus) +* **ffmpeg** + **yt-dlp** (audio/vidéo) +* Build tools (`# apt install build-essential libvips-dev`) + +--- + +## Commandes Discord + +- `/ia imagine ` Image IA +- `/ia animate` Diaporama + musique YouTube +- `/ia ask` Réponse texte +- `/ia login / logout` Lier compte StableHorde +- `/ia give` Donner des kudos +- `/ia config` Préférences +- `/ia help` Aide détaillée + +## Routes Web + +- / Accueil +- /cgu Conditions d’utilisation +- /privacy Politique confidentialité + +## Installation Ubuntu/Debian + +```bash +# 1. Base system +sudo apt update && sudo apt upgrade -y +sudo apt install -y curl git build-essential libvips-dev ffmpeg + +# 2. Node 20 LTS +curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - +sudo apt install -y nodejs + +# 3. PNPM & PM2 +npm install -g pnpm pm2 + +# 4. yt-dlp (stand-alone) +sudo curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp \ + -o /usr/local/bin/yt-dlp && sudo chmod +x /usr/local/bin/yt-dlp + +# 5. Cloner le dépôt +git clone https://github.com/celesteoffi/ketsuna-Morgane-ai.git +cd ketsuna-Morgane-ai + +# 6. Dépendances projet +pnpm install + +# 7. Variables d’env. +cp .env.example .env && nano .env # → remplissez vos tokens +# (optionnel) SWC : +cp .swcrc.example .swcrc + +# 8. Base de données +pnpm migrate # crée les tables (SQLite par défaut) + +# 9. Build & start +pnpm build +pm2 start "pnpm start" --name ketsuna + +# 10. (sharding Discord, si besoin) +pm2 start "node dist/shard.js" --name ketsuna-sharder + +# Démarrage au boot +pm2 save && pm2 startup +``` +--- + +## Variables d’environnement + +``` +PORT=3000 + +# Discord +DISCORD_TOKEN=xxxxxxxxxxxxxxxx +DISCORD_STATUS_NAME=Morgane AI +DISCORD_STATUS_STATE=Serving the multiverse +SERVERS_PER_SHARD=150 +OWNER_ID=123456789012345678 +``` +Copiez .env.example, collez vos valeurs. + +--- + +## mise à jour + +```bash +git pull +pnpm install +pnpm migrate +pnpm build +pm2 restart ketsuna +``` + +## Contributors + +- [garder500](https://github.com/garder500) - creator and maintainer +- [trail-l31](https://github.com/trail-l31) - contributor +- [celesteoffi](https://github.com/celesteoffi) - Keeps the script working + + +## License + +This project is licensed under the [MIT License](https://opensource.org/license/mit/) + +``` +MIT License +----------- +© 2023 Jeremy S. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +``` diff --git a/package.json b/package.json index 7c7751e..e426079 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "fastify": "^4.25.1", "i18n": "^0.15.1", "next": "^14.0.4", + "node-fetch": "^3.3.2", "react": "^18.2.0", "react-dom": "^18.2.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2649e68..284851a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,271 +1,186 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@emotion/cache': - specifier: ^11.11.0 - version: 11.11.0 - '@emotion/react': - specifier: ^11.11.3 - version: 11.11.3(@types/react@18.2.45)(react@18.2.0) - '@emotion/styled': - specifier: ^11.11.0 - version: 11.11.0(@emotion/react@11.11.3)(@types/react@18.2.45)(react@18.2.0) - '@fontsource/roboto': - specifier: ^5.0.8 - version: 5.0.8 - '@libsql/client': - specifier: 0.3.6 - version: 0.3.6 - '@mui/icons-material': - specifier: ^5.15.2 - version: 5.15.2(@mui/material@5.15.2)(@types/react@18.2.45)(react@18.2.0) - '@mui/material': - specifier: ^5.15.2 - version: 5.15.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@mui/material-nextjs': - specifier: ^5.15.0 - version: 5.15.0(@emotion/cache@11.11.0)(@mui/material@5.15.2)(@types/react@18.2.45)(next@14.0.4)(react@18.2.0) - '@prisma/adapter-libsql': - specifier: ^5.7.1 - version: 5.7.1(@libsql/client@0.3.6) - '@prisma/client': - specifier: 5.8.1 - version: 5.8.1(prisma@5.8.1) - '@zeldafan0225/ai_horde': - specifier: ^5.0.10 - version: 5.0.10 - discord.js: - specifier: 14.15.0-dev.1703981435-136c66c21 - version: 14.15.0-dev.1703981435-136c66c21 - dotenv: - specifier: ^16.3.1 - version: 16.3.1 - fastify: - specifier: ^4.25.1 - version: 4.25.1 - i18n: - specifier: ^0.15.1 - version: 0.15.1 - next: - specifier: ^14.0.4 - version: 14.0.4(react-dom@18.2.0)(react@18.2.0) - react: - specifier: ^18.2.0 - version: 18.2.0 - react-dom: - specifier: ^18.2.0 - version: 18.2.0(react@18.2.0) - -devDependencies: - '@swc/cli': - specifier: ^0.1.63 - version: 0.1.63(@swc/core@1.3.101) - '@swc/core': - specifier: ^1.3.101 - version: 1.3.101 - '@types/centra': - specifier: ^2.2.3 - version: 2.2.3 - '@types/i18n': - specifier: ^0.13.10 - version: 0.13.10 - '@types/node': - specifier: '*' - version: 20.10.5 - '@types/react': - specifier: ^18.0.23 - version: 18.2.45 - '@types/react-dom': - specifier: ^18.0.7 - version: 18.2.18 - cross-env: - specifier: ^7.0.3 - version: 7.0.3 - nodemon: - specifier: ^3.0.2 - version: 3.0.2 - prisma: - specifier: ^5.8.1 - version: 5.8.1 - ts-node: - specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.3.101)(@types/node@20.10.5)(typescript@5.3.3) - typescript: - specifier: ^5.3.3 - version: 5.3.3 +importers: + + .: + dependencies: + '@emotion/cache': + specifier: ^11.11.0 + version: 11.11.0 + '@emotion/react': + specifier: ^11.11.3 + version: 11.11.3(@types/react@18.2.45)(react@18.2.0) + '@emotion/styled': + specifier: ^11.11.0 + version: 11.11.0(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react@18.2.0) + '@fontsource/roboto': + specifier: ^5.0.8 + version: 5.0.8 + '@libsql/client': + specifier: 0.3.6 + version: 0.3.6 + '@mui/icons-material': + specifier: ^5.15.2 + version: 5.15.2(@mui/material@5.15.2(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@emotion/styled@11.11.0(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react@18.2.45)(react@18.2.0) + '@mui/material': + specifier: ^5.15.2 + version: 5.15.2(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@emotion/styled@11.11.0(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@mui/material-nextjs': + specifier: ^5.15.0 + version: 5.15.0(@emotion/cache@11.11.0)(@mui/material@5.15.2(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@emotion/styled@11.11.0(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react@18.2.45)(next@14.0.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0) + '@prisma/adapter-libsql': + specifier: ^5.7.1 + version: 5.7.1(@libsql/client@0.3.6) + '@prisma/client': + specifier: 5.8.1 + version: 5.8.1(prisma@5.8.1) + '@zeldafan0225/ai_horde': + specifier: ^5.0.10 + version: 5.0.10 + discord.js: + specifier: 14.15.0-dev.1703981435-136c66c21 + version: 14.15.0-dev.1703981435-136c66c21 + dotenv: + specifier: ^16.3.1 + version: 16.3.1 + fastify: + specifier: ^4.25.1 + version: 4.25.1 + i18n: + specifier: ^0.15.1 + version: 0.15.1 + next: + specifier: ^14.0.4 + version: 14.0.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + node-fetch: + specifier: ^3.3.2 + version: 3.3.2 + react: + specifier: ^18.2.0 + version: 18.2.0 + react-dom: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) + devDependencies: + '@swc/cli': + specifier: ^0.1.63 + version: 0.1.63(@swc/core@1.3.101(@swc/helpers@0.5.2))(chokidar@3.5.3) + '@swc/core': + specifier: ^1.3.101 + version: 1.3.101(@swc/helpers@0.5.2) + '@types/centra': + specifier: ^2.2.3 + version: 2.2.3 + '@types/i18n': + specifier: ^0.13.10 + version: 0.13.10 + '@types/node': + specifier: '*' + version: 20.10.5 + '@types/react': + specifier: ^18.0.23 + version: 18.2.45 + '@types/react-dom': + specifier: ^18.0.7 + version: 18.2.18 + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + nodemon: + specifier: ^3.0.2 + version: 3.0.2 + prisma: + specifier: ^5.8.1 + version: 5.8.1 + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@20.10.5)(typescript@5.3.3) + typescript: + specifier: ^5.3.3 + version: 5.3.3 packages: - /@babel/code-frame@7.23.5: + '@babel/code-frame@7.23.5': resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 - dev: false - /@babel/helper-module-imports@7.22.15: + '@babel/helper-module-imports@7.22.15': resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: false - /@babel/helper-string-parser@7.23.4: + '@babel/helper-string-parser@7.23.4': resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} engines: {node: '>=6.9.0'} - dev: false - /@babel/helper-validator-identifier@7.22.20: + '@babel/helper-validator-identifier@7.22.20': resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} - dev: false - /@babel/highlight@7.23.4: + '@babel/highlight@7.23.4': resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: false - /@babel/runtime@7.23.6: + '@babel/runtime@7.23.6': resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - dev: false - /@babel/types@7.23.6: + '@babel/types@7.23.6': resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - dev: false - /@cspotcode/source-map-support@0.8.1: + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - dev: true - /@discordjs/builders@1.7.0: + '@discordjs/builders@1.7.0': resolution: {integrity: sha512-GDtbKMkg433cOZur8Dv6c25EHxduNIBsxeHrsRoIM8+AwmEZ8r0tEpckx/sHwTLwQPOF3e2JWloZh9ofCaMfAw==} engines: {node: '>=16.11.0'} - dependencies: - '@discordjs/formatters': 0.3.3 - '@discordjs/util': 1.0.2 - '@sapphire/shapeshift': 3.9.5 - discord-api-types: 0.37.61 - fast-deep-equal: 3.1.3 - ts-mixer: 6.0.3 - tslib: 2.6.2 - dev: false - /@discordjs/collection@1.5.3: + '@discordjs/collection@1.5.3': resolution: {integrity: sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==} engines: {node: '>=16.11.0'} - dev: false - /@discordjs/collection@2.0.0: + '@discordjs/collection@2.0.0': resolution: {integrity: sha512-YTWIXLrf5FsrLMycpMM9Q6vnZoR/lN2AWX23/Cuo8uOOtS8eHB2dyQaaGnaF8aZPYnttf2bkLMcXn/j6JUOi3w==} engines: {node: '>=18'} - dev: false - /@discordjs/formatters@0.3.3: + '@discordjs/formatters@0.3.3': resolution: {integrity: sha512-wTcI1Q5cps1eSGhl6+6AzzZkBBlVrBdc9IUhJbijRgVjCNIIIZPgqnUj3ntFODsHrdbGU8BEG9XmDQmgEEYn3w==} engines: {node: '>=16.11.0'} - dependencies: - discord-api-types: 0.37.61 - dev: false - /@discordjs/rest@2.2.0: + '@discordjs/rest@2.2.0': resolution: {integrity: sha512-nXm9wT8oqrYFRMEqTXQx9DUTeEtXUDMmnUKIhZn6O2EeDY9VCdwj23XCPq7fkqMPKdF7ldAfeVKyxxFdbZl59A==} engines: {node: '>=16.11.0'} - dependencies: - '@discordjs/collection': 2.0.0 - '@discordjs/util': 1.0.2 - '@sapphire/async-queue': 1.5.1 - '@sapphire/snowflake': 3.5.1 - '@vladfrangu/async_event_emitter': 2.2.4 - discord-api-types: 0.37.61 - magic-bytes.js: 1.7.0 - tslib: 2.6.2 - undici: 5.27.2 - dev: false - /@discordjs/util@1.0.2: + '@discordjs/util@1.0.2': resolution: {integrity: sha512-IRNbimrmfb75GMNEjyznqM1tkI7HrZOf14njX7tCAAUetyZM1Pr8hX/EK2lxBCOgWDRmigbp24fD1hdMfQK5lw==} engines: {node: '>=16.11.0'} - dev: false - /@discordjs/ws@1.0.2: + '@discordjs/ws@1.0.2': resolution: {integrity: sha512-+XI82Rm2hKnFwAySXEep4A7Kfoowt6weO6381jgW+wVdTpMS/56qCvoXyFRY0slcv7c/U8My2PwIB2/wEaAh7Q==} engines: {node: '>=16.11.0'} - dependencies: - '@discordjs/collection': 2.0.0 - '@discordjs/rest': 2.2.0 - '@discordjs/util': 1.0.2 - '@sapphire/async-queue': 1.5.1 - '@types/ws': 8.5.9 - '@vladfrangu/async_event_emitter': 2.2.4 - discord-api-types: 0.37.61 - tslib: 2.6.2 - ws: 8.14.2 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /@emotion/babel-plugin@11.11.0: + '@emotion/babel-plugin@11.11.0': resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==} - dependencies: - '@babel/helper-module-imports': 7.22.15 - '@babel/runtime': 7.23.6 - '@emotion/hash': 0.9.1 - '@emotion/memoize': 0.8.1 - '@emotion/serialize': 1.1.3 - babel-plugin-macros: 3.1.0 - convert-source-map: 1.9.0 - escape-string-regexp: 4.0.0 - find-root: 1.1.0 - source-map: 0.5.7 - stylis: 4.2.0 - dev: false - /@emotion/cache@11.11.0: + '@emotion/cache@11.11.0': resolution: {integrity: sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==} - dependencies: - '@emotion/memoize': 0.8.1 - '@emotion/sheet': 1.2.2 - '@emotion/utils': 1.2.1 - '@emotion/weak-memoize': 0.3.1 - stylis: 4.2.0 - dev: false - /@emotion/hash@0.9.1: + '@emotion/hash@0.9.1': resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} - dev: false - /@emotion/is-prop-valid@1.2.1: + '@emotion/is-prop-valid@1.2.1': resolution: {integrity: sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==} - dependencies: - '@emotion/memoize': 0.8.1 - dev: false - /@emotion/memoize@0.8.1: + '@emotion/memoize@0.8.1': resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} - dev: false - /@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0): + '@emotion/react@11.11.3': resolution: {integrity: sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA==} peerDependencies: '@types/react': '*' @@ -273,34 +188,14 @@ packages: peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@babel/runtime': 7.23.6 - '@emotion/babel-plugin': 11.11.0 - '@emotion/cache': 11.11.0 - '@emotion/serialize': 1.1.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) - '@emotion/utils': 1.2.1 - '@emotion/weak-memoize': 0.3.1 - '@types/react': 18.2.45 - hoist-non-react-statics: 3.3.2 - react: 18.2.0 - dev: false - /@emotion/serialize@1.1.3: + '@emotion/serialize@1.1.3': resolution: {integrity: sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==} - dependencies: - '@emotion/hash': 0.9.1 - '@emotion/memoize': 0.8.1 - '@emotion/unitless': 0.8.1 - '@emotion/utils': 1.2.1 - csstype: 3.1.3 - dev: false - /@emotion/sheet@1.2.2: + '@emotion/sheet@1.2.2': resolution: {integrity: sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==} - dev: false - /@emotion/styled@11.11.0(@emotion/react@11.11.3)(@types/react@18.2.45)(react@18.2.0): + '@emotion/styled@11.11.0': resolution: {integrity: sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==} peerDependencies: '@emotion/react': ^11.0.0-rc.0 @@ -309,259 +204,132 @@ packages: peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@babel/runtime': 7.23.6 - '@emotion/babel-plugin': 11.11.0 - '@emotion/is-prop-valid': 1.2.1 - '@emotion/react': 11.11.3(@types/react@18.2.45)(react@18.2.0) - '@emotion/serialize': 1.1.3 - '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) - '@emotion/utils': 1.2.1 - '@types/react': 18.2.45 - react: 18.2.0 - dev: false - /@emotion/unitless@0.8.1: + '@emotion/unitless@0.8.1': resolution: {integrity: sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==} - dev: false - /@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0): + '@emotion/use-insertion-effect-with-fallbacks@1.0.1': resolution: {integrity: sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==} peerDependencies: react: '>=16.8.0' - dependencies: - react: 18.2.0 - dev: false - /@emotion/utils@1.2.1: + '@emotion/utils@1.2.1': resolution: {integrity: sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==} - dev: false - /@emotion/weak-memoize@0.3.1: + '@emotion/weak-memoize@0.3.1': resolution: {integrity: sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==} - dev: false - /@fastify/ajv-compiler@3.5.0: + '@fastify/ajv-compiler@3.5.0': resolution: {integrity: sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==} - dependencies: - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - fast-uri: 2.3.0 - dev: false - /@fastify/busboy@2.1.0: + '@fastify/busboy@2.1.0': resolution: {integrity: sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==} engines: {node: '>=14'} - dev: false - /@fastify/deepmerge@1.3.0: + '@fastify/deepmerge@1.3.0': resolution: {integrity: sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A==} - dev: false - /@fastify/error@3.4.1: + '@fastify/error@3.4.1': resolution: {integrity: sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==} - dev: false - /@fastify/fast-json-stringify-compiler@4.3.0: + '@fastify/fast-json-stringify-compiler@4.3.0': resolution: {integrity: sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==} - dependencies: - fast-json-stringify: 5.9.1 - dev: false - /@floating-ui/core@1.5.2: + '@floating-ui/core@1.5.2': resolution: {integrity: sha512-Ii3MrfY/GAIN3OhXNzpCKaLxHQfJF9qvwq/kEJYdqDxeIHa01K8sldugal6TmeeXl+WMvhv9cnVzUTaFFJF09A==} - dependencies: - '@floating-ui/utils': 0.1.6 - dev: false - /@floating-ui/dom@1.5.3: + '@floating-ui/dom@1.5.3': resolution: {integrity: sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==} - dependencies: - '@floating-ui/core': 1.5.2 - '@floating-ui/utils': 0.1.6 - dev: false - /@floating-ui/react-dom@2.0.4(react-dom@18.2.0)(react@18.2.0): + '@floating-ui/react-dom@2.0.4': resolution: {integrity: sha512-CF8k2rgKeh/49UrnIBs4BdxPUV6vize/Db1d/YbCLyp9GiVZ0BEwf5AiDSxJRCr6yOkGqTFHtmrULxkEfYZ7dQ==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' - dependencies: - '@floating-ui/dom': 1.5.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - /@floating-ui/utils@0.1.6: + '@floating-ui/utils@0.1.6': resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==} - dev: false - /@fontsource/roboto@5.0.8: + '@fontsource/roboto@5.0.8': resolution: {integrity: sha512-XxPltXs5R31D6UZeLIV1td3wTXU3jzd3f2DLsXI8tytMGBkIsGcc9sIyiupRtA8y73HAhuSCeweOoBqf6DbWCA==} - dev: false - /@jridgewell/resolve-uri@3.1.1: + '@jridgewell/resolve-uri@3.1.1': resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} - dev: true - /@jridgewell/sourcemap-codec@1.4.15: + '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true - /@jridgewell/trace-mapping@0.3.9: + '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - /@libsql/client@0.3.6: + '@libsql/client@0.3.6': resolution: {integrity: sha512-3Mc4ZDI7X5ZLkMxX5XijiBeqhvyrny356lcj/KVVIeMXt9j6g4l+CRIsUvgcsyCAOUHqWqh0+TjI91bCKmdW+w==} - dependencies: - '@libsql/hrana-client': 0.5.5 - js-base64: 3.7.5 - libsql: 0.1.34 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: false - /@libsql/darwin-arm64@0.1.34: + '@libsql/darwin-arm64@0.1.34': resolution: {integrity: sha512-Wv8jvkj/fUAO8DF3A4HaddCMldUUpKcg/WW1sY95FNsSHOxktyxqU80jAp/tCuZ85GQIJozvgSr51/ARIC0gsw==} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: false - optional: true - /@libsql/darwin-x64@0.1.34: + '@libsql/darwin-x64@0.1.34': resolution: {integrity: sha512-2NQXD9nUzC08hg7FdcZLq5uTEwGz1KbD7YvUzQb/psO1lO/E/p83wl1es1082+Pp0z5pSPDWQeRTuccD41L+3w==} cpu: [x64] os: [darwin] - requiresBuild: true - dev: false - optional: true - /@libsql/hrana-client@0.5.5: + '@libsql/hrana-client@0.5.5': resolution: {integrity: sha512-i+hDBpiV719poqEiHupUUZYKJ9YSbCRFe5Q2PQ0v3mHIftePH6gayLjp2u6TXbqbO/Dv6y8yyvYlBXf/kFfRZA==} - dependencies: - '@libsql/isomorphic-fetch': 0.1.10 - '@libsql/isomorphic-ws': 0.1.5 - js-base64: 3.7.5 - node-fetch: 3.3.2 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: false - /@libsql/isomorphic-fetch@0.1.10: + '@libsql/isomorphic-fetch@0.1.10': resolution: {integrity: sha512-dH0lMk50gKSvEKD78xWMu60SY1sjp1sY//iFLO0XMmBwfVfG136P9KOk06R4maBdlb8KMXOzJ1D28FR5ZKnHTA==} - dependencies: - '@types/node-fetch': 2.6.10 - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - dev: false - /@libsql/isomorphic-ws@0.1.5: + '@libsql/isomorphic-ws@0.1.5': resolution: {integrity: sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg==} - dependencies: - '@types/ws': 8.5.9 - ws: 8.14.2 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /@libsql/linux-arm64-gnu@0.1.34: + '@libsql/linux-arm64-gnu@0.1.34': resolution: {integrity: sha512-r3dY1FDYZ7eX5HX7HyAoYSqK5FPugj5NSB5Bt/nz+ygBWdXASgSKxkE/RqjJIM59vXwv300iJX9qhR5fXv8sTw==} cpu: [arm64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@libsql/linux-arm64-musl@0.1.34: + '@libsql/linux-arm64-musl@0.1.34': resolution: {integrity: sha512-9AE/eNb9eQRcNsLxqtpLJxVEoIMmItrdwqJDImPJtOp10rhp4U0x/9RGKerl9Mg3ObVj676pyhAR2KzyudrOfQ==} cpu: [arm64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@libsql/linux-x64-gnu@0.1.34: + '@libsql/linux-x64-gnu@0.1.34': resolution: {integrity: sha512-o8toY1Txstjt13fBhZbFe8sNAW6OaS6qVcp1Bd6bHkCLSBLZ6pjJmwzQN8rFv9QFBPAnaKP3lI4vaOXXw7huTA==} cpu: [x64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@libsql/linux-x64-musl@0.1.34: + '@libsql/linux-x64-musl@0.1.34': resolution: {integrity: sha512-EldEmcAxxNPSCjJ73oFxg81PDDIpDbPqK/QOrhmmGYLvYwrnQtVRUIbARf80JQvcy6bCxOO/Q9dh6wGhnyHyYA==} cpu: [x64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@libsql/win32-x64-msvc@0.1.34: + '@libsql/win32-x64-msvc@0.1.34': resolution: {integrity: sha512-jnv0qfVMnrVv00r+wUOe6DHrHuao9y1w1lN543cV2J1JdQNJT/eSZzhyZFSlS3T2ZUvXfZfZ5GeL8U18IAID6w==} cpu: [x64] os: [win32] - requiresBuild: true - dev: false - optional: true - /@messageformat/core@3.3.0: + '@messageformat/core@3.3.0': resolution: {integrity: sha512-YcXd3remTDdeMxAlbvW6oV9d/01/DZ8DHUFwSttO3LMzIZj3iO0NRw+u1xlsNNORFI+u0EQzD52ZX3+Udi0T3g==} - dependencies: - '@messageformat/date-skeleton': 1.0.1 - '@messageformat/number-skeleton': 1.2.0 - '@messageformat/parser': 5.1.0 - '@messageformat/runtime': 3.0.1 - make-plural: 7.3.0 - safe-identifier: 0.4.2 - dev: false - /@messageformat/date-skeleton@1.0.1: + '@messageformat/date-skeleton@1.0.1': resolution: {integrity: sha512-jPXy8fg+WMPIgmGjxSlnGJn68h/2InfT0TNSkVx0IGXgp4ynnvYkbZ51dGWmGySEK+pBiYUttbQdu5XEqX5CRg==} - dev: false - /@messageformat/number-skeleton@1.2.0: + '@messageformat/number-skeleton@1.2.0': resolution: {integrity: sha512-xsgwcL7J7WhlHJ3RNbaVgssaIwcEyFkBqxHdcdaiJzwTZAWEOD8BuUFxnxV9k5S0qHN3v/KzUpq0IUpjH1seRg==} - dev: false - /@messageformat/parser@5.1.0: + '@messageformat/parser@5.1.0': resolution: {integrity: sha512-jKlkls3Gewgw6qMjKZ9SFfHUpdzEVdovKFtW1qRhJ3WI4FW5R/NnGDqr8SDGz+krWDO3ki94boMmQvGke1HwUQ==} - dependencies: - moo: 0.5.2 - dev: false - /@messageformat/runtime@3.0.1: + '@messageformat/runtime@3.0.1': resolution: {integrity: sha512-6RU5ol2lDtO8bD9Yxe6CZkl0DArdv0qkuoZC+ZwowU+cdRlVE1157wjCmlA5Rsf1Xc/brACnsZa5PZpEDfTFFg==} - dependencies: - make-plural: 7.3.0 - dev: false - /@mole-inc/bin-wrapper@8.0.1: + '@mole-inc/bin-wrapper@8.0.1': resolution: {integrity: sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - bin-check: 4.1.0 - bin-version-check: 5.1.0 - content-disposition: 0.5.4 - ext-name: 5.0.0 - file-type: 17.1.6 - filenamify: 5.1.1 - got: 11.8.6 - os-filter-obj: 2.0.0 - dev: true - /@mui/base@5.0.0-beta.29(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + '@mui/base@5.0.0-beta.29': resolution: {integrity: sha512-OXfUssYrB6ch/xpBVHMKAjThPlI9VyGGKdvQLMXef2j39wXfcxPlUVQlwia/lmE3rxWIGvbwkZsDtNYzLMsDUg==} engines: {node: '>=12.0.0'} peerDependencies: @@ -571,24 +339,11 @@ packages: peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@babel/runtime': 7.23.6 - '@floating-ui/react-dom': 2.0.4(react-dom@18.2.0)(react@18.2.0) - '@mui/types': 7.2.11(@types/react@18.2.45) - '@mui/utils': 5.15.2(@types/react@18.2.45)(react@18.2.0) - '@popperjs/core': 2.11.8 - '@types/react': 18.2.45 - clsx: 2.0.0 - prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - /@mui/core-downloads-tracker@5.15.2: + '@mui/core-downloads-tracker@5.15.2': resolution: {integrity: sha512-0vk4ckS2w1F5PmkSXSd7F/QuRlNcPqWTJ8CPl+HQRLTIhJVS/VKEI+3dQufOdKfn2wS+ecnvlvXerbugs+xZ8Q==} - dev: false - /@mui/icons-material@5.15.2(@mui/material@5.15.2)(@types/react@18.2.45)(react@18.2.0): + '@mui/icons-material@5.15.2': resolution: {integrity: sha512-Vs0Z6cd6ieTavMjqPvIJJfwsKaCLdRSErk5LjKdZlBqk7r2SR6roDyhVTQuZOeCzjEFj0qZ4iVPp2DJZRwuYbw==} engines: {node: '>=12.0.0'} peerDependencies: @@ -598,14 +353,8 @@ packages: peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@babel/runtime': 7.23.6 - '@mui/material': 5.15.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.45 - react: 18.2.0 - dev: false - /@mui/material-nextjs@5.15.0(@emotion/cache@11.11.0)(@mui/material@5.15.2)(@types/react@18.2.45)(next@14.0.4)(react@18.2.0): + '@mui/material-nextjs@5.15.0': resolution: {integrity: sha512-UC3lnoRqJXoWUBeekqjxC4CpxMElz4D4bBCegOhrm80qGV1cP5TBJGjalqoSUq6HSl+COVv6u//AjjIMKCj/qA==} engines: {node: '>=12.0.0'} peerDependencies: @@ -622,15 +371,8 @@ packages: optional: true '@types/react': optional: true - dependencies: - '@emotion/cache': 11.11.0 - '@mui/material': 5.15.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.45 - next: 14.0.4(react-dom@18.2.0)(react@18.2.0) - react: 18.2.0 - dev: false - /@mui/material@5.15.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): + '@mui/material@5.15.2': resolution: {integrity: sha512-JnoIrpNmEHG5uC1IyEdgsnDiaiuCZnUIh7f9oeAr87AvBmNiEJPbo7XrD7kBTFWwp+b97rQ12QdSs9CLhT2n/A==} engines: {node: '>=12.0.0'} peerDependencies: @@ -646,27 +388,8 @@ packages: optional: true '@types/react': optional: true - dependencies: - '@babel/runtime': 7.23.6 - '@emotion/react': 11.11.3(@types/react@18.2.45)(react@18.2.0) - '@emotion/styled': 11.11.0(@emotion/react@11.11.3)(@types/react@18.2.45)(react@18.2.0) - '@mui/base': 5.0.0-beta.29(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@mui/core-downloads-tracker': 5.15.2 - '@mui/system': 5.15.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react@18.2.0) - '@mui/types': 7.2.11(@types/react@18.2.45) - '@mui/utils': 5.15.2(@types/react@18.2.45)(react@18.2.0) - '@types/react': 18.2.45 - '@types/react-transition-group': 4.4.10 - clsx: 2.0.0 - csstype: 3.1.3 - prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-is: 18.2.0 - react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) - dev: false - /@mui/private-theming@5.15.2(@types/react@18.2.45)(react@18.2.0): + '@mui/private-theming@5.15.2': resolution: {integrity: sha512-KlXx5TH1Mw9omSY+Q6rz5TA/P71meSYaAOeopiW8s6o433+fnOxS17rZbmd1RnDZGCo+j24TfCavQuCMBAZnQA==} engines: {node: '>=12.0.0'} peerDependencies: @@ -675,15 +398,8 @@ packages: peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@babel/runtime': 7.23.6 - '@mui/utils': 5.15.2(@types/react@18.2.45)(react@18.2.0) - '@types/react': 18.2.45 - prop-types: 15.8.1 - react: 18.2.0 - dev: false - /@mui/styled-engine@5.15.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0): + '@mui/styled-engine@5.15.2': resolution: {integrity: sha512-fYEN3IZzbebeHwAmQHhxwruiOIi8W74709qXg/7tgtHV4byQSmPgnnKsZkg0hFlzjEbcJIRZyZI0qEecgpR2cg==} engines: {node: '>=12.0.0'} peerDependencies: @@ -695,17 +411,8 @@ packages: optional: true '@emotion/styled': optional: true - dependencies: - '@babel/runtime': 7.23.6 - '@emotion/cache': 11.11.0 - '@emotion/react': 11.11.3(@types/react@18.2.45)(react@18.2.0) - '@emotion/styled': 11.11.0(@emotion/react@11.11.3)(@types/react@18.2.45)(react@18.2.0) - csstype: 3.1.3 - prop-types: 15.8.1 - react: 18.2.0 - dev: false - /@mui/system@5.15.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(@types/react@18.2.45)(react@18.2.0): + '@mui/system@5.15.2': resolution: {integrity: sha512-I7CzLiHDtU/BTobJgSk+wPGGWG95K8lYfdFEnq//wOgSrLDAdOVvl2gleDxJWO+yAbGz4RKEOnR9KuD+xQZH4A==} engines: {node: '>=12.0.0'} peerDependencies: @@ -720,33 +427,16 @@ packages: optional: true '@types/react': optional: true - dependencies: - '@babel/runtime': 7.23.6 - '@emotion/react': 11.11.3(@types/react@18.2.45)(react@18.2.0) - '@emotion/styled': 11.11.0(@emotion/react@11.11.3)(@types/react@18.2.45)(react@18.2.0) - '@mui/private-theming': 5.15.2(@types/react@18.2.45)(react@18.2.0) - '@mui/styled-engine': 5.15.2(@emotion/react@11.11.3)(@emotion/styled@11.11.0)(react@18.2.0) - '@mui/types': 7.2.11(@types/react@18.2.45) - '@mui/utils': 5.15.2(@types/react@18.2.45)(react@18.2.0) - '@types/react': 18.2.45 - clsx: 2.0.0 - csstype: 3.1.3 - prop-types: 15.8.1 - react: 18.2.0 - dev: false - /@mui/types@7.2.11(@types/react@18.2.45): + '@mui/types@7.2.11': resolution: {integrity: sha512-KWe/QTEsFFlFSH+qRYf3zoFEj3z67s+qAuSnMMg+gFwbxG7P96Hm6g300inQL1Wy///gSRb8juX7Wafvp93m3w==} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@types/react': 18.2.45 - dev: false - /@mui/utils@5.15.2(@types/react@18.2.45)(react@18.2.0): + '@mui/utils@5.15.2': resolution: {integrity: sha512-6dGM9/guFKBlFRHA7/mbM+E7wE7CYDy9Ny4JLtD3J+NTyhi8nd8YxlzgAgTaTVqY0BpdQ2zdfB/q6+p2EdGM0w==} engines: {node: '>=12.0.0'} peerDependencies: @@ -755,213 +445,131 @@ packages: peerDependenciesMeta: '@types/react': optional: true - dependencies: - '@babel/runtime': 7.23.6 - '@types/prop-types': 15.7.11 - '@types/react': 18.2.45 - prop-types: 15.8.1 - react: 18.2.0 - react-is: 18.2.0 - dev: false - /@neon-rs/load@0.0.4: + '@neon-rs/load@0.0.4': resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==} - dev: false - /@next/env@14.0.4: + '@next/env@14.0.4': resolution: {integrity: sha512-irQnbMLbUNQpP1wcE5NstJtbuA/69kRfzBrpAD7Gsn8zm/CY6YQYc3HQBz8QPxwISG26tIm5afvvVbu508oBeQ==} - dev: false - /@next/swc-darwin-arm64@14.0.4: + '@next/swc-darwin-arm64@14.0.4': resolution: {integrity: sha512-mF05E/5uPthWzyYDyptcwHptucf/jj09i2SXBPwNzbgBNc+XnwzrL0U6BmPjQeOL+FiB+iG1gwBeq7mlDjSRPg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: false - optional: true - /@next/swc-darwin-x64@14.0.4: + '@next/swc-darwin-x64@14.0.4': resolution: {integrity: sha512-IZQ3C7Bx0k2rYtrZZxKKiusMTM9WWcK5ajyhOZkYYTCc8xytmwSzR1skU7qLgVT/EY9xtXDG0WhY6fyujnI3rw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-arm64-gnu@14.0.4: + '@next/swc-linux-arm64-gnu@14.0.4': resolution: {integrity: sha512-VwwZKrBQo/MGb1VOrxJ6LrKvbpo7UbROuyMRvQKTFKhNaXjUmKTu7wxVkIuCARAfiI8JpaWAnKR+D6tzpCcM4w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-arm64-musl@14.0.4: + '@next/swc-linux-arm64-musl@14.0.4': resolution: {integrity: sha512-8QftwPEW37XxXoAwsn+nXlodKWHfpMaSvt81W43Wh8dv0gkheD+30ezWMcFGHLI71KiWmHK5PSQbTQGUiidvLQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-x64-gnu@14.0.4: + '@next/swc-linux-x64-gnu@14.0.4': resolution: {integrity: sha512-/s/Pme3VKfZAfISlYVq2hzFS8AcAIOTnoKupc/j4WlvF6GQ0VouS2Q2KEgPuO1eMBwakWPB1aYFIA4VNVh667A==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-linux-x64-musl@14.0.4: + '@next/swc-linux-x64-musl@14.0.4': resolution: {integrity: sha512-m8z/6Fyal4L9Bnlxde5g2Mfa1Z7dasMQyhEhskDATpqr+Y0mjOBZcXQ7G5U+vgL22cI4T7MfvgtrM2jdopqWaw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - requiresBuild: true - dev: false - optional: true - /@next/swc-win32-arm64-msvc@14.0.4: + '@next/swc-win32-arm64-msvc@14.0.4': resolution: {integrity: sha512-7Wv4PRiWIAWbm5XrGz3D8HUkCVDMMz9igffZG4NB1p4u1KoItwx9qjATHz88kwCEal/HXmbShucaslXCQXUM5w==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - requiresBuild: true - dev: false - optional: true - /@next/swc-win32-ia32-msvc@14.0.4: + '@next/swc-win32-ia32-msvc@14.0.4': resolution: {integrity: sha512-zLeNEAPULsl0phfGb4kdzF/cAVIfaC7hY+kt0/d+y9mzcZHsMS3hAS829WbJ31DkSlVKQeHEjZHIdhN+Pg7Gyg==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - requiresBuild: true - dev: false - optional: true - /@next/swc-win32-x64-msvc@14.0.4: + '@next/swc-win32-x64-msvc@14.0.4': resolution: {integrity: sha512-yEh2+R8qDlDCjxVpzOTEpBLQTEFAcP2A8fUFLaWNap9GitYKkKv1//y2S6XY6zsR4rCOPRpU7plYDR+az2n30A==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - requiresBuild: true - dev: false - optional: true - /@nodelib/fs.scandir@2.1.5: + '@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: + '@nodelib/fs.stat@2.0.5': resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - dev: true - /@nodelib/fs.walk@1.2.8: + '@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.16.0 - dev: true - /@popperjs/core@2.11.8: + '@popperjs/core@2.11.8': resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - dev: false - /@prisma/adapter-libsql@5.7.1(@libsql/client@0.3.6): + '@prisma/adapter-libsql@5.7.1': resolution: {integrity: sha512-sl5xQovDzk+ouTl4yGwaaH4AV4i8GFdtQdQV63OjqllOvBwqdD48DDLDj+VVyyk/HH2w55FACf8VLhQgz14Qwg==} peerDependencies: '@libsql/client': ^0.3.5 - dependencies: - '@libsql/client': 0.3.6 - '@prisma/driver-adapter-utils': 5.7.1 - async-mutex: 0.4.0 - transitivePeerDependencies: - - supports-color - dev: false - /@prisma/client@5.8.1(prisma@5.8.1): + '@prisma/client@5.8.1': resolution: {integrity: sha512-xQtMPfbIwLlbm0VVIVQY2yqQVOxPwRQhvIp7Z3m2900g1bu/zRHKhYZJQWELqmjl6d8YwBy0K2NvMqh47v1ubw==} engines: {node: '>=16.13'} - requiresBuild: true peerDependencies: prisma: '*' peerDependenciesMeta: prisma: optional: true - dependencies: - prisma: 5.8.1 - dev: false - /@prisma/debug@5.8.1: + '@prisma/debug@5.8.1': resolution: {integrity: sha512-tjuw7eA0Us3T42jx9AmAgL58rzwzpFGYc3R7Y4Ip75EBYrKMBA1YihuWMcBC92ILmjlQ/u3p8VxcIE0hr+fZfg==} - /@prisma/driver-adapter-utils@5.7.1: + '@prisma/driver-adapter-utils@5.7.1': resolution: {integrity: sha512-q4cWte5QYCH4RCeo/UBKVG4HvqjG7YoSrNmn2fzWU6da5cCqw9h8MIGO+Jkpb6S5ySSTW32t63khujYvytXsYg==} - dependencies: - debug: 4.3.4(supports-color@5.5.0) - transitivePeerDependencies: - - supports-color - dev: false - /@prisma/engines-version@5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2: + '@prisma/engines-version@5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2': resolution: {integrity: sha512-f5C3JM3l9yhGr3cr4FMqWloFaSCpNpMi58Om22rjD2DOz3owci2mFdFXMgnAGazFPKrCbbEhcxdsRfspEYRoFQ==} - /@prisma/engines@5.8.1: + '@prisma/engines@5.8.1': resolution: {integrity: sha512-TJgYLRrZr56uhqcXO4GmP5be+zjCIHtLDK20Cnfg+o9d905hsN065QOL+3Z0zQAy6YD31Ol4u2kzSfRmbJv/uA==} - requiresBuild: true - dependencies: - '@prisma/debug': 5.8.1 - '@prisma/engines-version': 5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2 - '@prisma/fetch-engine': 5.8.1 - '@prisma/get-platform': 5.8.1 - /@prisma/fetch-engine@5.8.1: + '@prisma/fetch-engine@5.8.1': resolution: {integrity: sha512-+bgjjoSFa6uYEbAPlklfoVSStOEfcpheOjoBoNsNNSQdSzcwE2nM4Q0prun0+P8/0sCHo18JZ9xqa8gObvgOUw==} - dependencies: - '@prisma/debug': 5.8.1 - '@prisma/engines-version': 5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2 - '@prisma/get-platform': 5.8.1 - /@prisma/get-platform@5.8.1: + '@prisma/get-platform@5.8.1': resolution: {integrity: sha512-wnA+6HTFcY+tkykMokix9GiAkaauPC5W/gg0O5JB0J8tCTNWrqpnQ7AsaGRfkYUbeOIioh6woDjQrGTTRf1Zag==} - dependencies: - '@prisma/debug': 5.8.1 - /@sapphire/async-queue@1.5.1: + '@sapphire/async-queue@1.5.1': resolution: {integrity: sha512-1RdpsmDQR/aWfp8oJzPtn4dNQrbpqSL5PIA0uAB/XwerPXUf994Ug1au1e7uGcD7ei8/F63UDjr5GWps1g/HxQ==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - dev: false - /@sapphire/shapeshift@3.9.5: + '@sapphire/shapeshift@3.9.5': resolution: {integrity: sha512-AGdHe+51gF7D3W8hBfuSFLBocURDCXVQczScTHXDS3RpNjNgrktIx/amlz5y8nHhm8SAdFt/X8EF8ZSfjJ0tnA==} engines: {node: '>=v18'} - dependencies: - fast-deep-equal: 3.1.3 - lodash: 4.17.21 - dev: false - /@sapphire/snowflake@3.5.1: + '@sapphire/snowflake@3.5.1': resolution: {integrity: sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - dev: false - /@sindresorhus/is@4.6.0: + '@sindresorhus/is@4.6.0': resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} - dev: true - /@swc/cli@0.1.63(@swc/core@1.3.101): + '@swc/cli@0.1.63': resolution: {integrity: sha512-EM9oxxHzmmsprYRbGqsS2M4M/Gr5Gkcl0ROYYIdlUyTkhOiX822EQiRCpPCwdutdnzH2GyaTN7wc6i0Y+CKd3A==} engines: {node: '>= 12.13'} hasBin: true @@ -971,604 +579,351 @@ packages: peerDependenciesMeta: chokidar: optional: true - dependencies: - '@mole-inc/bin-wrapper': 8.0.1 - '@swc/core': 1.3.101 - commander: 7.2.0 - fast-glob: 3.3.2 - semver: 7.5.4 - slash: 3.0.0 - source-map: 0.7.4 - dev: true - /@swc/core-darwin-arm64@1.3.101: + '@swc/core-darwin-arm64@1.3.101': resolution: {integrity: sha512-mNFK+uHNPRXSnfTOG34zJOeMl2waM4hF4a2NY7dkMXrPqw9CoJn4MwTXJcyMiSz1/BnNjjTCHF3Yhj0jPxmkzQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@swc/core-darwin-x64@1.3.101: + '@swc/core-darwin-x64@1.3.101': resolution: {integrity: sha512-B085j8XOx73Fg15KsHvzYWG262bRweGr3JooO1aW5ec5pYbz5Ew9VS5JKYS03w2UBSxf2maWdbPz2UFAxg0whw==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@swc/core-linux-arm-gnueabihf@1.3.101: + '@swc/core-linux-arm-gnueabihf@1.3.101': resolution: {integrity: sha512-9xLKRb6zSzRGPqdz52Hy5GuB1lSjmLqa0lST6MTFads3apmx4Vgs8Y5NuGhx/h2I8QM4jXdLbpqQlifpzTlSSw==} engines: {node: '>=10'} cpu: [arm] os: [linux] - requiresBuild: true - dev: true - optional: true - /@swc/core-linux-arm64-gnu@1.3.101: + '@swc/core-linux-arm64-gnu@1.3.101': resolution: {integrity: sha512-oE+r1lo7g/vs96Weh2R5l971dt+ZLuhaUX+n3BfDdPxNHfObXgKMjO7E+QS5RbGjv/AwiPCxQmbdCp/xN5ICJA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@swc/core-linux-arm64-musl@1.3.101: + '@swc/core-linux-arm64-musl@1.3.101': resolution: {integrity: sha512-OGjYG3H4BMOTnJWJyBIovCez6KiHF30zMIu4+lGJTCrxRI2fAjGLml3PEXj8tC3FMcud7U2WUn6TdG0/te2k6g==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@swc/core-linux-x64-gnu@1.3.101: + '@swc/core-linux-x64-gnu@1.3.101': resolution: {integrity: sha512-/kBMcoF12PRO/lwa8Z7w4YyiKDcXQEiLvM+S3G9EvkoKYGgkkz4Q6PSNhF5rwg/E3+Hq5/9D2R+6nrkF287ihg==} engines: {node: '>=10'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@swc/core-linux-x64-musl@1.3.101: + '@swc/core-linux-x64-musl@1.3.101': resolution: {integrity: sha512-kDN8lm4Eew0u1p+h1l3JzoeGgZPQ05qDE0czngnjmfpsH2sOZxVj1hdiCwS5lArpy7ktaLu5JdRnx70MkUzhXw==} engines: {node: '>=10'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@swc/core-win32-arm64-msvc@1.3.101: + '@swc/core-win32-arm64-msvc@1.3.101': resolution: {integrity: sha512-9Wn8TTLWwJKw63K/S+jjrZb9yoJfJwCE2RV5vPCCWmlMf3U1AXj5XuWOLUX+Rp2sGKau7wZKsvywhheWm+qndQ==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@swc/core-win32-ia32-msvc@1.3.101: + '@swc/core-win32-ia32-msvc@1.3.101': resolution: {integrity: sha512-onO5KvICRVlu2xmr4//V2je9O2XgS1SGKpbX206KmmjcJhXN5EYLSxW9qgg+kgV5mip+sKTHTAu7IkzkAtElYA==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - requiresBuild: true - dev: true - optional: true - /@swc/core-win32-x64-msvc@1.3.101: + '@swc/core-win32-x64-msvc@1.3.101': resolution: {integrity: sha512-T3GeJtNQV00YmiVw/88/nxJ/H43CJvFnpvBHCVn17xbahiVUOPOduh3rc9LgAkKiNt/aV8vU3OJR+6PhfMR7UQ==} engines: {node: '>=10'} cpu: [x64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@swc/core@1.3.101: + '@swc/core@1.3.101': resolution: {integrity: sha512-w5aQ9qYsd/IYmXADAnkXPGDMTqkQalIi+kfFf/MHRKTpaOL7DHjMXwPp/n8hJ0qNjRvchzmPtOqtPBiER50d8A==} engines: {node: '>=10'} - requiresBuild: true peerDependencies: '@swc/helpers': ^0.5.0 peerDependenciesMeta: '@swc/helpers': optional: true - dependencies: - '@swc/counter': 0.1.2 - '@swc/types': 0.1.5 - optionalDependencies: - '@swc/core-darwin-arm64': 1.3.101 - '@swc/core-darwin-x64': 1.3.101 - '@swc/core-linux-arm-gnueabihf': 1.3.101 - '@swc/core-linux-arm64-gnu': 1.3.101 - '@swc/core-linux-arm64-musl': 1.3.101 - '@swc/core-linux-x64-gnu': 1.3.101 - '@swc/core-linux-x64-musl': 1.3.101 - '@swc/core-win32-arm64-msvc': 1.3.101 - '@swc/core-win32-ia32-msvc': 1.3.101 - '@swc/core-win32-x64-msvc': 1.3.101 - dev: true - /@swc/counter@0.1.2: + '@swc/counter@0.1.2': resolution: {integrity: sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==} - dev: true - /@swc/helpers@0.5.2: + '@swc/helpers@0.5.2': resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} - dependencies: - tslib: 2.6.2 - dev: false - /@swc/types@0.1.5: + '@swc/types@0.1.5': resolution: {integrity: sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==} - dev: true - /@szmarczak/http-timer@4.0.6: + '@szmarczak/http-timer@4.0.6': resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} - dependencies: - defer-to-connect: 2.0.1 - dev: true - /@thunder04/supermap@3.0.3: + '@thunder04/supermap@3.0.3': resolution: {integrity: sha512-D6z4QHrGhVdF8eGJEzF3h9yG/Pix7WCuTD/KWlumhHcUB9K09n7Ji1oD2kRAvBxISgAutLUhOi9l/FtrMxIopA==} - dev: false - /@tokenizer/token@0.3.0: + '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} - dev: true - /@tsconfig/node10@1.0.9: + '@tsconfig/node10@1.0.9': resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: true - /@tsconfig/node12@1.0.11: + '@tsconfig/node12@1.0.11': resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true - /@tsconfig/node14@1.0.3: + '@tsconfig/node14@1.0.3': resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true - /@tsconfig/node16@1.0.4: + '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - dev: true - /@types/cacheable-request@6.0.3: + '@types/cacheable-request@6.0.3': resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} - dependencies: - '@types/http-cache-semantics': 4.0.4 - '@types/keyv': 3.1.4 - '@types/node': 20.10.5 - '@types/responselike': 1.0.3 - dev: true - /@types/centra@2.2.3: + '@types/centra@2.2.3': resolution: {integrity: sha512-7ylrBi66/xZuQ4nuNuXnk5RUBQcLUgMdAqls44buCssA2goua9YuqbY8cCpMTWX+U+Y5e9JDwWAaiBEN4ehMOw==} - dependencies: - '@types/node': 20.10.5 - dev: true - /@types/http-cache-semantics@4.0.4: + '@types/http-cache-semantics@4.0.4': resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} - dev: true - /@types/i18n@0.13.10: + '@types/i18n@0.13.10': resolution: {integrity: sha512-V5uwFXEzC1BRvDSQkd5zWB7ktZa1yfLKFimlluTFrgBGeFJQNNaLk3J67Sje+c0+m2C7r1BU47cItOk/WRfJcQ==} - dev: true - /@types/keyv@3.1.4: + '@types/keyv@3.1.4': resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - dependencies: - '@types/node': 20.10.5 - dev: true - /@types/node-fetch@2.6.10: + '@types/node-fetch@2.6.10': resolution: {integrity: sha512-PPpPK6F9ALFTn59Ka3BaL+qGuipRfxNE8qVgkp0bVixeiR2c2/L+IVOiBdu9JhhT22sWnQEp6YyHGI2b2+CMcA==} - dependencies: - '@types/node': 20.10.5 - form-data: 4.0.0 - dev: false - /@types/node@20.10.5: + '@types/node@20.10.5': resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==} - dependencies: - undici-types: 5.26.5 - /@types/parse-json@4.0.2: + '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - dev: false - /@types/prop-types@15.7.11: + '@types/prop-types@15.7.11': resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} - /@types/react-dom@18.2.18: + '@types/react-dom@18.2.18': resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} - dependencies: - '@types/react': 18.2.45 - dev: true - /@types/react-transition-group@4.4.10: + '@types/react-transition-group@4.4.10': resolution: {integrity: sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==} - dependencies: - '@types/react': 18.2.45 - dev: false - /@types/react@18.2.45: + '@types/react@18.2.45': resolution: {integrity: sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==} - dependencies: - '@types/prop-types': 15.7.11 - '@types/scheduler': 0.16.8 - csstype: 3.1.3 - /@types/responselike@1.0.3: + '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} - dependencies: - '@types/node': 20.10.5 - dev: true - /@types/scheduler@0.16.8: + '@types/scheduler@0.16.8': resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} - /@types/ws@8.5.9: + '@types/ws@8.5.9': resolution: {integrity: sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg==} - dependencies: - '@types/node': 20.10.5 - dev: false - /@vladfrangu/async_event_emitter@2.2.4: + '@vladfrangu/async_event_emitter@2.2.4': resolution: {integrity: sha512-ButUPz9E9cXMLgvAW8aLAKKJJsPu1dY1/l/E8xzLFuysowXygs6GBcyunK9rnGC4zTsnIc2mQo71rGw9U+Ykug==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - dev: false - /@zeldafan0225/ai_horde@5.0.10: + '@zeldafan0225/ai_horde@5.0.10': resolution: {integrity: sha512-H8tFXFWA22T+WmWcYZHyf62i9l+6WjjILbkzdAzHJsjPkxQjLHnTpXkOkuE5UXjw1qYLwegw4UKeeE2XbvthCw==} engines: {node: '>=18.0.0'} - dependencies: - '@thunder04/supermap': 3.0.3 - dev: false - /abbrev@1.1.1: + abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - dev: true - /abort-controller@3.0.0: + abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} - dependencies: - event-target-shim: 5.0.1 - dev: false - /abstract-logging@2.0.1: + abstract-logging@2.0.1: resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} - dev: false - /acorn-walk@8.3.1: + acorn-walk@8.3.1: resolution: {integrity: sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==} engines: {node: '>=0.4.0'} - dev: true - /acorn@8.11.2: + acorn@8.11.2: resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} engines: {node: '>=0.4.0'} hasBin: true - dev: true - /ajv-formats@2.1.1(ajv@8.12.0): + ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: ajv: ^8.0.0 peerDependenciesMeta: ajv: optional: true - dependencies: - ajv: 8.12.0 - dev: false - /ajv@8.12.0: + ajv@8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: false - /ansi-styles@3.2.1: + ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - dev: false - /anymatch@3.1.3: + anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: true - /arch@2.2.0: + arch@2.2.0: resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} - dev: true - /archy@1.0.0: + archy@1.0.0: resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} - dev: false - /arg@4.1.3: + arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true - /async-mutex@0.4.0: + async-mutex@0.4.0: resolution: {integrity: sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==} - dependencies: - tslib: 2.6.2 - dev: false - /asynckit@0.4.0: + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: false - /atomic-sleep@1.0.0: + atomic-sleep@1.0.0: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} - dev: false - /avvio@8.2.1: + avvio@8.2.1: resolution: {integrity: sha512-TAlMYvOuwGyLK3PfBb5WKBXZmXz2fVCgv23d6zZFdle/q3gPjmxBaeuC0pY0Dzs5PWMSgfqqEZkrye19GlDTgw==} - dependencies: - archy: 1.0.0 - debug: 4.3.4(supports-color@5.5.0) - fastq: 1.16.0 - transitivePeerDependencies: - - supports-color - dev: false - /babel-plugin-macros@3.1.0: + babel-plugin-macros@3.1.0: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} - dependencies: - '@babel/runtime': 7.23.6 - cosmiconfig: 7.1.0 - resolve: 1.22.8 - dev: false - /balanced-match@1.0.2: + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true - /base64-js@1.5.1: + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: false - /bin-check@4.1.0: + bin-check@4.1.0: resolution: {integrity: sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==} engines: {node: '>=4'} - dependencies: - execa: 0.7.0 - executable: 4.1.1 - dev: true - /bin-version-check@5.1.0: + bin-version-check@5.1.0: resolution: {integrity: sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g==} engines: {node: '>=12'} - dependencies: - bin-version: 6.0.0 - semver: 7.5.4 - semver-truncate: 3.0.0 - dev: true - /bin-version@6.0.0: + bin-version@6.0.0: resolution: {integrity: sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw==} engines: {node: '>=12'} - dependencies: - execa: 5.1.1 - find-versions: 5.1.0 - dev: true - /binary-extensions@2.2.0: + binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - dev: true - /boolean@3.2.0: + boolean@3.2.0: resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} - dev: false - /brace-expansion@1.1.11: + 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: + braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - dev: true - /buffer@6.0.3: + buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: false - /busboy@1.6.0: + busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} - dependencies: - streamsearch: 1.1.0 - dev: false - /cacheable-lookup@5.0.4: + cacheable-lookup@5.0.4: resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} engines: {node: '>=10.6.0'} - dev: true - /cacheable-request@7.0.4: + cacheable-request@7.0.4: resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} engines: {node: '>=8'} - dependencies: - clone-response: 1.0.3 - get-stream: 5.2.0 - http-cache-semantics: 4.1.1 - keyv: 4.5.4 - lowercase-keys: 2.0.0 - normalize-url: 6.1.0 - responselike: 2.0.1 - dev: true - /callsites@3.1.0: + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - dev: false - /caniuse-lite@1.0.30001571: + caniuse-lite@1.0.30001571: resolution: {integrity: sha512-tYq/6MoXhdezDLFZuCO/TKboTzuQ/xR5cFdgXPfDtM7/kchBO3b4VWghE/OAi/DV7tTdhmLjZiZBZi1fA/GheQ==} - dev: false - /chalk@2.4.2: + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - dev: false - /chokidar@3.5.3: + chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 - dev: true - /client-only@0.0.1: + client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - dev: false - /clone-response@1.0.3: + clone-response@1.0.3: resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} - dependencies: - mimic-response: 1.0.1 - dev: true - /clsx@2.0.0: + clsx@2.0.0: resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} engines: {node: '>=6'} - dev: false - /color-convert@1.9.3: + color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - dev: false - /color-name@1.1.3: + color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: false - /combined-stream@1.0.8: + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} - dependencies: - delayed-stream: 1.0.0 - dev: false - /commander@7.2.0: + commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} - dev: true - /concat-map@0.0.1: + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true - /content-disposition@0.5.4: + content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} - dependencies: - safe-buffer: 5.2.1 - dev: true - /convert-source-map@1.9.0: + convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: false - /cookie@0.5.0: + cookie@0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} - dev: false - /cosmiconfig@7.1.0: + cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.0 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.2 - dev: false - /create-require@1.1.1: + create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true - /cross-env@7.0.3: + cross-env@7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} hasBin: true - dependencies: - cross-spawn: 7.0.3 - dev: true - /cross-spawn@5.1.0: + cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} - dependencies: - lru-cache: 4.1.5 - shebang-command: 1.2.0 - which: 1.3.1 - dev: true - /cross-spawn@7.0.3: + 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 - /csstype@3.1.3: + csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - /data-uri-to-buffer@4.0.1: + data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} - dev: false - /debug@4.3.4(supports-color@5.5.0): + debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: @@ -1576,692 +931,396 @@ packages: peerDependenciesMeta: supports-color: optional: true - dependencies: - ms: 2.1.2 - supports-color: 5.5.0 - /decompress-response@6.0.0: + decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} - dependencies: - mimic-response: 3.1.0 - dev: true - /defer-to-connect@2.0.1: + defer-to-connect@2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} - dev: true - /delayed-stream@1.0.0: + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - dev: false - /detect-libc@2.0.2: + detect-libc@2.0.2: resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} engines: {node: '>=8'} - dev: false - /diff@4.0.2: + diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} - dev: true - /discord-api-types@0.37.61: + discord-api-types@0.37.61: resolution: {integrity: sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw==} - dev: false - /discord.js@14.15.0-dev.1703981435-136c66c21: + discord.js@14.15.0-dev.1703981435-136c66c21: resolution: {integrity: sha512-Nw+OENi8b1tTofyQ+VSLEBMEEiPhe/roTbYDVJLprCsVyF1PTxc2L7bi2SfGKG4kE7GX+UQRjdxx/4t7avSaKQ==} engines: {node: '>=16.11.0'} - dependencies: - '@discordjs/builders': 1.7.0 - '@discordjs/collection': 1.5.3 - '@discordjs/formatters': 0.3.3 - '@discordjs/rest': 2.2.0 - '@discordjs/util': 1.0.2 - '@discordjs/ws': 1.0.2 - '@sapphire/snowflake': 3.5.1 - '@types/ws': 8.5.9 - discord-api-types: 0.37.61 - fast-deep-equal: 3.1.3 - lodash.snakecase: 4.1.1 - tslib: 2.6.2 - undici: 5.27.2 - ws: 8.14.2 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /dom-helpers@5.2.1: + dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} - dependencies: - '@babel/runtime': 7.23.6 - csstype: 3.1.3 - dev: false - /dotenv@16.3.1: + dotenv@16.3.1: resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} engines: {node: '>=12'} - dev: false - /end-of-stream@1.4.4: + end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - dependencies: - once: 1.4.0 - dev: true - /error-ex@1.3.2: + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - dependencies: - is-arrayish: 0.2.1 - dev: false - /escape-string-regexp@1.0.5: + escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - dev: false - /escape-string-regexp@4.0.0: + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - dev: false - /escape-string-regexp@5.0.0: + escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - dev: true - /event-target-shim@5.0.1: + event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} - dev: false - /events@3.3.0: + events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - dev: false - /execa@0.7.0: + execa@0.7.0: resolution: {integrity: sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==} engines: {node: '>=4'} - dependencies: - cross-spawn: 5.1.0 - get-stream: 3.0.0 - is-stream: 1.1.0 - npm-run-path: 2.0.2 - p-finally: 1.0.0 - signal-exit: 3.0.7 - strip-eof: 1.0.0 - dev: true - /execa@5.1.1: + execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - dev: true - /executable@4.1.1: + executable@4.1.1: resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} engines: {node: '>=4'} - dependencies: - pify: 2.3.0 - dev: true - /ext-list@2.2.2: + ext-list@2.2.2: resolution: {integrity: sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==} engines: {node: '>=0.10.0'} - dependencies: - mime-db: 1.52.0 - dev: true - /ext-name@5.0.0: + ext-name@5.0.0: resolution: {integrity: sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==} engines: {node: '>=4'} - dependencies: - ext-list: 2.2.2 - sort-keys-length: 1.0.1 - dev: true - /fast-content-type-parse@1.1.0: + fast-content-type-parse@1.1.0: resolution: {integrity: sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==} - dev: false - /fast-decode-uri-component@1.0.1: + fast-decode-uri-component@1.0.1: resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} - dev: false - /fast-deep-equal@3.1.3: + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: false - /fast-glob@3.3.2: + fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} - dependencies: - '@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 - /fast-json-stringify@5.9.1: + fast-json-stringify@5.9.1: resolution: {integrity: sha512-NMrf+uU9UJnTzfxaumMDXK1NWqtPCfGoM9DYIE+ESlaTQqjlANFBy0VAbsm6FB88Mx0nceyi18zTo5kIEUlzxg==} - dependencies: - '@fastify/deepmerge': 1.3.0 - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - fast-deep-equal: 3.1.3 - fast-uri: 2.3.0 - json-schema-ref-resolver: 1.0.1 - rfdc: 1.3.0 - dev: false - /fast-printf@1.6.9: + fast-printf@1.6.9: resolution: {integrity: sha512-FChq8hbz65WMj4rstcQsFB0O7Cy++nmbNfLYnD9cYv2cRn8EG6k/MGn9kO/tjO66t09DLDugj3yL+V2o6Qftrg==} engines: {node: '>=10.0'} - dependencies: - boolean: 3.2.0 - dev: false - /fast-querystring@1.1.2: + fast-querystring@1.1.2: resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} - dependencies: - fast-decode-uri-component: 1.0.1 - dev: false - /fast-redact@3.3.0: + fast-redact@3.3.0: resolution: {integrity: sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==} engines: {node: '>=6'} - dev: false - /fast-uri@2.3.0: + fast-uri@2.3.0: resolution: {integrity: sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==} - dev: false - /fastify@4.25.1: + fastify@4.25.1: resolution: {integrity: sha512-D8d0rv61TwqoAS7lom2tvIlgVMlx88lLsiwXyWNjA7CU/LC/mx/Gp2WAlC0S/ABq19U+y/aRvYFG5xLUu2aMrg==} - dependencies: - '@fastify/ajv-compiler': 3.5.0 - '@fastify/error': 3.4.1 - '@fastify/fast-json-stringify-compiler': 4.3.0 - abstract-logging: 2.0.1 - avvio: 8.2.1 - fast-content-type-parse: 1.1.0 - fast-json-stringify: 5.9.1 - find-my-way: 7.7.0 - light-my-request: 5.11.0 - pino: 8.17.1 - process-warning: 3.0.0 - proxy-addr: 2.0.7 - rfdc: 1.3.0 - secure-json-parse: 2.7.0 - semver: 7.5.4 - toad-cache: 3.4.1 - transitivePeerDependencies: - - supports-color - dev: false - /fastq@1.16.0: + fastq@1.16.0: resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} - dependencies: - reusify: 1.0.4 - /fetch-blob@3.2.0: + fetch-blob@3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 3.2.1 - dev: false - /file-type@17.1.6: + file-type@17.1.6: resolution: {integrity: sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - readable-web-to-node-stream: 3.0.2 - strtok3: 7.0.0 - token-types: 5.0.1 - dev: true - /filename-reserved-regex@3.0.0: + filename-reserved-regex@3.0.0: resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - /filenamify@5.1.1: + filenamify@5.1.1: resolution: {integrity: sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==} engines: {node: '>=12.20'} - dependencies: - filename-reserved-regex: 3.0.0 - strip-outer: 2.0.0 - trim-repeated: 2.0.0 - dev: true - /fill-range@7.0.1: + 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-my-way@7.7.0: + find-my-way@7.7.0: resolution: {integrity: sha512-+SrHpvQ52Q6W9f3wJoJBbAQULJuNEEQwBvlvYwACDhBTLOTMiQ0HYWh4+vC3OivGP2ENcTI1oKlFA2OepJNjhQ==} engines: {node: '>=14'} - dependencies: - fast-deep-equal: 3.1.3 - fast-querystring: 1.1.2 - safe-regex2: 2.0.0 - dev: false - /find-root@1.1.0: + find-root@1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - dev: false - /find-versions@5.1.0: + find-versions@5.1.0: resolution: {integrity: sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg==} engines: {node: '>=12'} - dependencies: - semver-regex: 4.0.5 - dev: true - /form-data@4.0.0: + form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: false - /formdata-polyfill@4.0.10: + formdata-polyfill@4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} - dependencies: - fetch-blob: 3.2.0 - dev: false - /forwarded@0.2.0: + forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} - dev: false - /fsevents@2.3.3: + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - requiresBuild: true - dev: true - optional: true - /function-bind@1.1.2: + function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: false - /get-stream@3.0.0: + get-stream@3.0.0: resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} engines: {node: '>=4'} - dev: true - /get-stream@5.2.0: + get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} - dependencies: - pump: 3.0.0 - dev: true - /get-stream@6.0.1: + get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - dev: true - /glob-parent@5.1.2: + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: true - /glob-to-regexp@0.4.1: + glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: false - /got@11.8.6: + got@11.8.6: resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} engines: {node: '>=10.19.0'} - dependencies: - '@sindresorhus/is': 4.6.0 - '@szmarczak/http-timer': 4.0.6 - '@types/cacheable-request': 6.0.3 - '@types/responselike': 1.0.3 - cacheable-lookup: 5.0.4 - cacheable-request: 7.0.4 - decompress-response: 6.0.0 - http2-wrapper: 1.0.3 - lowercase-keys: 2.0.0 - p-cancelable: 2.1.1 - responselike: 2.0.1 - dev: true - /graceful-fs@4.2.11: + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: false - /has-flag@3.0.0: + has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} - /hasown@2.0.0: + hasown@2.0.0: resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} engines: {node: '>= 0.4'} - dependencies: - function-bind: 1.1.2 - dev: false - /hoist-non-react-statics@3.3.2: + hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - dependencies: - react-is: 16.13.1 - dev: false - /http-cache-semantics@4.1.1: + http-cache-semantics@4.1.1: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - dev: true - /http2-wrapper@1.0.3: + http2-wrapper@1.0.3: resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} engines: {node: '>=10.19.0'} - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - dev: true - /human-signals@2.1.0: + human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - dev: true - /i18n@0.15.1: + i18n@0.15.1: resolution: {integrity: sha512-yue187t8MqUPMHdKjiZGrX+L+xcUsDClGO0Cz4loaKUOK9WrGw5pgan4bv130utOwX7fHE9w2iUeHFalVQWkXA==} engines: {node: '>=10'} - dependencies: - '@messageformat/core': 3.3.0 - debug: 4.3.4(supports-color@5.5.0) - fast-printf: 1.6.9 - make-plural: 7.3.0 - math-interval-parser: 2.0.1 - mustache: 4.2.0 - transitivePeerDependencies: - - supports-color - dev: false - /ieee754@1.2.1: + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - /ignore-by-default@1.0.1: + ignore-by-default@1.0.1: resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} - dev: true - /import-fresh@3.3.0: + 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: false - /inherits@2.0.4: + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true - /ipaddr.js@1.9.1: + ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} - dev: false - /is-arrayish@0.2.1: + is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: false - /is-binary-path@2.1.0: + is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - dependencies: - binary-extensions: 2.2.0 - dev: true - /is-core-module@2.13.1: + is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - dependencies: - hasown: 2.0.0 - dev: false - /is-extglob@2.1.1: + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - dev: true - /is-glob@4.0.3: + 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: + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - dev: true - /is-plain-obj@1.1.0: + is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} - dev: true - /is-stream@1.1.0: + is-stream@1.1.0: resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} engines: {node: '>=0.10.0'} - dev: true - /is-stream@2.0.1: + is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - dev: true - /isexe@2.0.0: + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true - /js-base64@3.7.5: + js-base64@3.7.5: resolution: {integrity: sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==} - dev: false - /js-tokens@4.0.0: + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: false - /json-buffer@3.0.1: + json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true - /json-parse-even-better-errors@2.3.1: + json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: false - /json-schema-ref-resolver@1.0.1: + json-schema-ref-resolver@1.0.1: resolution: {integrity: sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==} - dependencies: - fast-deep-equal: 3.1.3 - dev: false - /json-schema-traverse@1.0.0: + json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: false - /keyv@4.5.4: + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - dependencies: - json-buffer: 3.0.1 - dev: true - /libsql@0.1.34: + libsql@0.1.34: resolution: {integrity: sha512-LGofp7z7gi1Td6vu2GxaA4WyvSPEkuFn0f/ePSti1TsAlBU0LWxdk+bj9D8nqswzxiqe5wpAyTLhVzTIYSyXEA==} cpu: [x64, arm64] os: [darwin, linux, win32] - dependencies: - '@neon-rs/load': 0.0.4 - detect-libc: 2.0.2 - optionalDependencies: - '@libsql/darwin-arm64': 0.1.34 - '@libsql/darwin-x64': 0.1.34 - '@libsql/linux-arm64-gnu': 0.1.34 - '@libsql/linux-arm64-musl': 0.1.34 - '@libsql/linux-x64-gnu': 0.1.34 - '@libsql/linux-x64-musl': 0.1.34 - '@libsql/win32-x64-msvc': 0.1.34 - dev: false - /light-my-request@5.11.0: + light-my-request@5.11.0: resolution: {integrity: sha512-qkFCeloXCOMpmEdZ/MV91P8AT4fjwFXWaAFz3lUeStM8RcoM1ks4J/F8r1b3r6y/H4u3ACEJ1T+Gv5bopj7oDA==} - dependencies: - cookie: 0.5.0 - process-warning: 2.3.2 - set-cookie-parser: 2.6.0 - dev: false - /lines-and-columns@1.2.4: + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: false - /lodash.snakecase@4.1.1: + lodash.snakecase@4.1.1: resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} - dev: false - /lodash@4.17.21: + lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: false - /loose-envify@1.4.0: + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - dependencies: - js-tokens: 4.0.0 - dev: false - /lowercase-keys@2.0.0: + lowercase-keys@2.0.0: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} - dev: true - /lru-cache@4.1.5: + lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} - dependencies: - pseudomap: 1.0.2 - yallist: 2.1.2 - dev: true - /lru-cache@6.0.0: + lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - /magic-bytes.js@1.7.0: + magic-bytes.js@1.7.0: resolution: {integrity: sha512-YzVU2+/hrjwx8xcgAw+ffNq3jkactpj+f1iSL4LonrFKhvnwDzHSqtFdk/MMRP53y9ScouJ7cKEnqYsJwsHoYA==} - dev: false - /make-error@1.3.6: + make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true - /make-plural@7.3.0: + make-plural@7.3.0: resolution: {integrity: sha512-/K3BC0KIsO+WK2i94LkMPv3wslMrazrQhfi5We9fMbLlLjzoOSJWr7TAdupLlDWaJcWxwoNosBkhFDejiu5VDw==} - dev: false - /math-interval-parser@2.0.1: + math-interval-parser@2.0.1: resolution: {integrity: sha512-VmlAmb0UJwlvMyx8iPhXUDnVW1F9IrGEd9CIOmv+XL8AErCUUuozoDMrgImvnYt2A+53qVX/tPW6YJurMKYsvA==} engines: {node: '>=0.10.0'} - dev: false - /merge-stream@2.0.0: + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true - /merge2@1.4.1: + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - dev: true - /micromatch@4.0.5: + 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 - /mime-db@1.52.0: + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} - /mime-types@2.1.35: + mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.52.0 - dev: false - /mimic-fn@2.1.0: + mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - dev: true - /mimic-response@1.0.1: + mimic-response@1.0.1: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} engines: {node: '>=4'} - dev: true - /mimic-response@3.1.0: + mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} - dev: true - /minimatch@3.1.2: + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - dev: true - /moo@0.5.2: + moo@0.5.2: resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==} - dev: false - /ms@2.1.2: + ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - /mustache@4.2.0: + mustache@4.2.0: resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} hasBin: true - dev: false - /nanoid@3.3.7: + nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - dev: false - /next@14.0.4(react-dom@18.2.0)(react@18.2.0): + next@14.0.4: resolution: {integrity: sha512-qbwypnM7327SadwFtxXnQdGiKpkuhaRLE2uq62/nRul9cj9KhQ5LhHmlziTNqUidZotw/Q1I9OjirBROdUJNgA==} engines: {node: '>=18.17.0'} hasBin: true @@ -2275,38 +1334,12 @@ packages: optional: true sass: optional: true - dependencies: - '@next/env': 14.0.4 - '@swc/helpers': 0.5.2 - busboy: 1.6.0 - caniuse-lite: 1.0.30001571 - graceful-fs: 4.2.11 - postcss: 8.4.31 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(react@18.2.0) - watchpack: 2.4.0 - optionalDependencies: - '@next/swc-darwin-arm64': 14.0.4 - '@next/swc-darwin-x64': 14.0.4 - '@next/swc-linux-arm64-gnu': 14.0.4 - '@next/swc-linux-arm64-musl': 14.0.4 - '@next/swc-linux-x64-gnu': 14.0.4 - '@next/swc-linux-x64-musl': 14.0.4 - '@next/swc-win32-arm64-msvc': 14.0.4 - '@next/swc-win32-ia32-msvc': 14.0.4 - '@next/swc-win32-x64-msvc': 14.0.4 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - dev: false - /node-domexception@1.0.0: + node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} - dev: false - /node-fetch@2.7.0: + node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} peerDependencies: @@ -2314,564 +1347,349 @@ packages: peerDependenciesMeta: encoding: optional: true - dependencies: - whatwg-url: 5.0.0 - dev: false - /node-fetch@3.3.2: + node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - data-uri-to-buffer: 4.0.1 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 - dev: false - /nodemon@3.0.2: + nodemon@3.0.2: resolution: {integrity: sha512-9qIN2LNTrEzpOPBaWHTm4Asy1LxXLSickZStAQ4IZe7zsoIpD/A7LWxhZV3t4Zu352uBcqVnRsDXSMR2Sc3lTA==} engines: {node: '>=10'} hasBin: true - dependencies: - chokidar: 3.5.3 - debug: 4.3.4(supports-color@5.5.0) - ignore-by-default: 1.0.1 - minimatch: 3.1.2 - pstree.remy: 1.1.8 - semver: 7.5.4 - simple-update-notifier: 2.0.0 - supports-color: 5.5.0 - touch: 3.1.0 - undefsafe: 2.0.5 - dev: true - /nopt@1.0.10: + nopt@1.0.10: resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==} hasBin: true - dependencies: - abbrev: 1.1.1 - dev: true - /normalize-path@3.0.0: + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - dev: true - /normalize-url@6.1.0: + normalize-url@6.1.0: resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} engines: {node: '>=10'} - dev: true - /npm-run-path@2.0.2: + npm-run-path@2.0.2: resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} engines: {node: '>=4'} - dependencies: - path-key: 2.0.1 - dev: true - /npm-run-path@4.0.1: + npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} - dependencies: - path-key: 3.1.1 - dev: true - /object-assign@4.1.1: + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - dev: false - /on-exit-leak-free@2.1.2: + on-exit-leak-free@2.1.2: resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} engines: {node: '>=14.0.0'} - dev: false - /once@1.4.0: + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: true - /onetime@5.1.2: + onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} - dependencies: - mimic-fn: 2.1.0 - dev: true - /os-filter-obj@2.0.0: + os-filter-obj@2.0.0: resolution: {integrity: sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg==} engines: {node: '>=4'} - dependencies: - arch: 2.2.0 - dev: true - /p-cancelable@2.1.1: + p-cancelable@2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} - dev: true - /p-finally@1.0.0: + p-finally@1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} - dev: true - /parent-module@1.0.1: + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 - dev: false - /parse-json@5.2.0: + parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} - dependencies: - '@babel/code-frame': 7.23.5 - error-ex: 1.3.2 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - dev: false - /path-key@2.0.1: + path-key@2.0.1: resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} engines: {node: '>=4'} - dev: true - /path-key@3.1.1: + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - dev: true - /path-parse@1.0.7: + path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: false - /path-type@4.0.0: + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - dev: false - /peek-readable@5.0.0: + peek-readable@5.0.0: resolution: {integrity: sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==} engines: {node: '>=14.16'} - dev: true - /picocolors@1.0.0: + picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: false - /picomatch@2.3.1: + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - dev: true - /pify@2.3.0: + pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} - dev: true - /pino-abstract-transport@1.1.0: + pino-abstract-transport@1.1.0: resolution: {integrity: sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==} - dependencies: - readable-stream: 4.5.1 - split2: 4.2.0 - dev: false - /pino-std-serializers@6.2.2: + pino-std-serializers@6.2.2: resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} - dev: false - /pino@8.17.1: + pino@8.17.1: resolution: {integrity: sha512-YoN7/NJgnsJ+fkADZqjhRt96iepWBndQHeClmSBH0sQWCb8zGD74t00SK4eOtKFi/f8TUmQnfmgglEhd2kI1RQ==} hasBin: true - dependencies: - atomic-sleep: 1.0.0 - fast-redact: 3.3.0 - on-exit-leak-free: 2.1.2 - pino-abstract-transport: 1.1.0 - pino-std-serializers: 6.2.2 - process-warning: 2.3.2 - quick-format-unescaped: 4.0.4 - real-require: 0.2.0 - safe-stable-stringify: 2.4.3 - sonic-boom: 3.7.0 - thread-stream: 2.4.1 - dev: false - /postcss@8.4.31: + postcss@8.4.31: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: false - /prisma@5.8.1: + prisma@5.8.1: resolution: {integrity: sha512-N6CpjzECnUHZ5beeYpDzkt2rYpEdAeqXX2dweu6BoQaeYkNZrC/WJHM+5MO/uidFHTak8QhkPKBWck1o/4MD4A==} engines: {node: '>=16.13'} hasBin: true - requiresBuild: true - dependencies: - '@prisma/engines': 5.8.1 - /process-warning@2.3.2: + process-warning@2.3.2: resolution: {integrity: sha512-n9wh8tvBe5sFmsqlg+XQhaQLumwpqoAUruLwjCopgTmUBjJ/fjtBsJzKleCaIGBOMXYEhp1YfKl4d7rJ5ZKJGA==} - dev: false - /process-warning@3.0.0: + process-warning@3.0.0: resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} - dev: false - /process@0.11.10: + process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} - dev: false - /prop-types@15.8.1: + prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - dev: false - /proxy-addr@2.0.7: + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - dev: false - /pseudomap@1.0.2: + pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - dev: true - /pstree.remy@1.1.8: + pstree.remy@1.1.8: resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} - dev: true - /pump@3.0.0: + pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - dev: true - /punycode@2.3.1: + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - dev: false - /queue-microtask@1.2.3: + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true - /quick-format-unescaped@4.0.4: + quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} - dev: false - /quick-lru@5.1.1: + quick-lru@5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} - dev: true - /react-dom@18.2.0(react@18.2.0): + react-dom@18.2.0: resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} peerDependencies: react: ^18.2.0 - dependencies: - loose-envify: 1.4.0 - react: 18.2.0 - scheduler: 0.23.0 - dev: false - /react-is@16.13.1: + react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: false - /react-is@18.2.0: + react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - dev: false - /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): + react-transition-group@4.4.5: resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} peerDependencies: react: '>=16.6.0' react-dom: '>=16.6.0' - dependencies: - '@babel/runtime': 7.23.6 - dom-helpers: 5.2.1 - loose-envify: 1.4.0 - prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: false - /react@18.2.0: + react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} - dependencies: - loose-envify: 1.4.0 - dev: false - /readable-stream@3.6.2: + readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - dev: true - /readable-stream@4.5.1: + readable-stream@4.5.1: resolution: {integrity: sha512-uQjbf34vmf/asGnOHQEw07Q4llgMACQZTWWa4MmICS0IKJoHbLwKCy71H3eR99Dw5iYejc6W+pqZZEeqRtUFAw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - abort-controller: 3.0.0 - buffer: 6.0.3 - events: 3.3.0 - process: 0.11.10 - string_decoder: 1.3.0 - dev: false - /readable-web-to-node-stream@3.0.2: + readable-web-to-node-stream@3.0.2: resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} engines: {node: '>=8'} - dependencies: - readable-stream: 3.6.2 - dev: true - /readdirp@3.6.0: + readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.3.1 - dev: true - /real-require@0.2.0: + real-require@0.2.0: resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} engines: {node: '>= 12.13.0'} - dev: false - /regenerator-runtime@0.14.1: + regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: false - /require-from-string@2.0.2: + require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - dev: false - /resolve-alpn@1.2.1: + resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - dev: true - /resolve-from@4.0.0: + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - dev: false - /resolve@1.22.8: + resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true - dependencies: - is-core-module: 2.13.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: false - /responselike@2.0.1: + responselike@2.0.1: resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} - dependencies: - lowercase-keys: 2.0.0 - dev: true - /ret@0.2.2: + ret@0.2.2: resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==} engines: {node: '>=4'} - dev: false - /reusify@1.0.4: + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - /rfdc@1.3.0: + rfdc@1.3.0: resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} - dev: false - /run-parallel@1.2.0: + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - dependencies: - queue-microtask: 1.2.3 - dev: true - /safe-buffer@5.2.1: + safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - /safe-identifier@0.4.2: + safe-identifier@0.4.2: resolution: {integrity: sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==} - dev: false - /safe-regex2@2.0.0: + safe-regex2@2.0.0: resolution: {integrity: sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==} - dependencies: - ret: 0.2.2 - dev: false - /safe-stable-stringify@2.4.3: + safe-stable-stringify@2.4.3: resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} engines: {node: '>=10'} - dev: false - /scheduler@0.23.0: + scheduler@0.23.0: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} - dependencies: - loose-envify: 1.4.0 - dev: false - /secure-json-parse@2.7.0: + secure-json-parse@2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} - dev: false - /semver-regex@4.0.5: + semver-regex@4.0.5: resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} engines: {node: '>=12'} - dev: true - /semver-truncate@3.0.0: + semver-truncate@3.0.0: resolution: {integrity: sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg==} engines: {node: '>=12'} - dependencies: - semver: 7.5.4 - dev: true - /semver@7.5.4: + 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 - /set-cookie-parser@2.6.0: + set-cookie-parser@2.6.0: resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} - dev: false - /shebang-command@1.2.0: + shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} - dependencies: - shebang-regex: 1.0.0 - dev: true - /shebang-command@2.0.0: + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} - dependencies: - shebang-regex: 3.0.0 - dev: true - /shebang-regex@1.0.0: + shebang-regex@1.0.0: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} engines: {node: '>=0.10.0'} - dev: true - /shebang-regex@3.0.0: + shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - dev: true - /signal-exit@3.0.7: + signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true - /simple-update-notifier@2.0.0: + simple-update-notifier@2.0.0: resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} engines: {node: '>=10'} - dependencies: - semver: 7.5.4 - dev: true - /slash@3.0.0: + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - dev: true - /sonic-boom@3.7.0: + sonic-boom@3.7.0: resolution: {integrity: sha512-IudtNvSqA/ObjN97tfgNmOKyDOs4dNcg4cUUsHDebqsgb8wGBBwb31LIgShNO8fye0dFI52X1+tFoKKI6Rq1Gg==} - dependencies: - atomic-sleep: 1.0.0 - dev: false - /sort-keys-length@1.0.1: + sort-keys-length@1.0.1: resolution: {integrity: sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==} engines: {node: '>=0.10.0'} - dependencies: - sort-keys: 1.1.2 - dev: true - /sort-keys@1.1.2: + sort-keys@1.1.2: resolution: {integrity: sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==} engines: {node: '>=0.10.0'} - dependencies: - is-plain-obj: 1.1.0 - dev: true - /source-map-js@1.0.2: + source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - dev: false - /source-map@0.5.7: + source-map@0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} - dev: false - /source-map@0.7.4: + source-map@0.7.4: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} - dev: true - /split2@4.2.0: + split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} - dev: false - /streamsearch@1.1.0: + streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} - dev: false - /string_decoder@1.3.0: + string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - dependencies: - safe-buffer: 5.2.1 - /strip-eof@1.0.0: + strip-eof@1.0.0: resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} engines: {node: '>=0.10.0'} - dev: true - /strip-final-newline@2.0.0: + strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - dev: true - /strip-outer@2.0.0: + strip-outer@2.0.0: resolution: {integrity: sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true - /strtok3@7.0.0: + strtok3@7.0.0: resolution: {integrity: sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==} engines: {node: '>=14.16'} - dependencies: - '@tokenizer/token': 0.3.0 - peek-readable: 5.0.0 - dev: true - /styled-jsx@5.1.1(react@18.2.0): + styled-jsx@5.1.1: resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -2883,80 +1701,52 @@ packages: optional: true babel-plugin-macros: optional: true - dependencies: - client-only: 0.0.1 - react: 18.2.0 - dev: false - /stylis@4.2.0: + stylis@4.2.0: resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} - dev: false - /supports-color@5.5.0: + supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 - /supports-preserve-symlinks-flag@1.0.0: + supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - dev: false - /thread-stream@2.4.1: + thread-stream@2.4.1: resolution: {integrity: sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==} - dependencies: - real-require: 0.2.0 - dev: false - /to-fast-properties@2.0.0: + to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} - dev: false - /to-regex-range@5.0.1: + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - dev: true - /toad-cache@3.4.1: + toad-cache@3.4.1: resolution: {integrity: sha512-T0m3MxP3wcqW0LaV3dF1mHBU294sgYSm4FOpa5eEJaYO7PqJZBOjZEQI1y4YaKNnih1FXCEYTWDS9osCoTUefg==} engines: {node: '>=12'} - dev: false - /token-types@5.0.1: + token-types@5.0.1: resolution: {integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==} engines: {node: '>=14.16'} - dependencies: - '@tokenizer/token': 0.3.0 - ieee754: 1.2.1 - dev: true - /touch@3.1.0: + touch@3.1.0: resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==} hasBin: true - dependencies: - nopt: 1.0.10 - dev: true - /tr46@0.0.3: + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: false - /trim-repeated@2.0.0: + trim-repeated@2.0.0: resolution: {integrity: sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg==} engines: {node: '>=12'} - dependencies: - escape-string-regexp: 5.0.0 - dev: true - /ts-mixer@6.0.3: + ts-mixer@6.0.3: resolution: {integrity: sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==} - dev: false - /ts-node@10.9.2(@swc/core@1.3.101)(@types/node@20.10.5)(typescript@5.3.3): + ts-node@10.9.2: resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -2969,107 +1759,61 @@ packages: optional: true '@swc/wasm': optional: true - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@swc/core': 1.3.101 - '@tsconfig/node10': 1.0.9 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 20.10.5 - acorn: 8.11.2 - acorn-walk: 8.3.1 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.3.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - dev: true - /tslib@2.6.2: + tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: false - /typescript@5.3.3: + typescript@5.3.3: resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} engines: {node: '>=14.17'} hasBin: true - dev: true - /undefsafe@2.0.5: + undefsafe@2.0.5: resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} - dev: true - /undici-types@5.26.5: + undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - /undici@5.27.2: + undici@5.27.2: resolution: {integrity: sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==} engines: {node: '>=14.0'} - dependencies: - '@fastify/busboy': 2.1.0 - dev: false - /uri-js@4.4.1: + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - dependencies: - punycode: 2.3.1 - dev: false - /util-deprecate@1.0.2: + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true - /v8-compile-cache-lib@3.0.1: + v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true - /watchpack@2.4.0: + watchpack@2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} engines: {node: '>=10.13.0'} - dependencies: - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - dev: false - /web-streams-polyfill@3.2.1: + web-streams-polyfill@3.2.1: resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} engines: {node: '>= 8'} - dev: false - /webidl-conversions@3.0.1: + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: false - /whatwg-url@5.0.0: + whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - dev: false - /which@1.3.1: + which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - /which@2.0.2: + 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: + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true - /ws@8.14.2: + ws@8.14.2: resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} engines: {node: '>=10.0.0'} peerDependencies: @@ -3080,21 +1824,1715 @@ packages: optional: true utf-8-validate: optional: true - dev: false - /yallist@2.1.2: + yallist@2.1.2: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} - dev: true - /yallist@4.0.0: + yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - /yaml@1.10.2: + yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - dev: false - /yn@3.1.1: + yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} - dev: true + +snapshots: + + '@babel/code-frame@7.23.5': + dependencies: + '@babel/highlight': 7.23.4 + chalk: 2.4.2 + + '@babel/helper-module-imports@7.22.15': + dependencies: + '@babel/types': 7.23.6 + + '@babel/helper-string-parser@7.23.4': {} + + '@babel/helper-validator-identifier@7.22.20': {} + + '@babel/highlight@7.23.4': + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + + '@babel/runtime@7.23.6': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/types@7.23.6': + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@discordjs/builders@1.7.0': + dependencies: + '@discordjs/formatters': 0.3.3 + '@discordjs/util': 1.0.2 + '@sapphire/shapeshift': 3.9.5 + discord-api-types: 0.37.61 + fast-deep-equal: 3.1.3 + ts-mixer: 6.0.3 + tslib: 2.6.2 + + '@discordjs/collection@1.5.3': {} + + '@discordjs/collection@2.0.0': {} + + '@discordjs/formatters@0.3.3': + dependencies: + discord-api-types: 0.37.61 + + '@discordjs/rest@2.2.0': + dependencies: + '@discordjs/collection': 2.0.0 + '@discordjs/util': 1.0.2 + '@sapphire/async-queue': 1.5.1 + '@sapphire/snowflake': 3.5.1 + '@vladfrangu/async_event_emitter': 2.2.4 + discord-api-types: 0.37.61 + magic-bytes.js: 1.7.0 + tslib: 2.6.2 + undici: 5.27.2 + + '@discordjs/util@1.0.2': {} + + '@discordjs/ws@1.0.2': + dependencies: + '@discordjs/collection': 2.0.0 + '@discordjs/rest': 2.2.0 + '@discordjs/util': 1.0.2 + '@sapphire/async-queue': 1.5.1 + '@types/ws': 8.5.9 + '@vladfrangu/async_event_emitter': 2.2.4 + discord-api-types: 0.37.61 + tslib: 2.6.2 + ws: 8.14.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@emotion/babel-plugin@11.11.0': + dependencies: + '@babel/helper-module-imports': 7.22.15 + '@babel/runtime': 7.23.6 + '@emotion/hash': 0.9.1 + '@emotion/memoize': 0.8.1 + '@emotion/serialize': 1.1.3 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + + '@emotion/cache@11.11.0': + dependencies: + '@emotion/memoize': 0.8.1 + '@emotion/sheet': 1.2.2 + '@emotion/utils': 1.2.1 + '@emotion/weak-memoize': 0.3.1 + stylis: 4.2.0 + + '@emotion/hash@0.9.1': {} + + '@emotion/is-prop-valid@1.2.1': + dependencies: + '@emotion/memoize': 0.8.1 + + '@emotion/memoize@0.8.1': {} + + '@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.6 + '@emotion/babel-plugin': 11.11.0 + '@emotion/cache': 11.11.0 + '@emotion/serialize': 1.1.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) + '@emotion/utils': 1.2.1 + '@emotion/weak-memoize': 0.3.1 + hoist-non-react-statics: 3.3.2 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.45 + + '@emotion/serialize@1.1.3': + dependencies: + '@emotion/hash': 0.9.1 + '@emotion/memoize': 0.8.1 + '@emotion/unitless': 0.8.1 + '@emotion/utils': 1.2.1 + csstype: 3.1.3 + + '@emotion/sheet@1.2.2': {} + + '@emotion/styled@11.11.0(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.6 + '@emotion/babel-plugin': 11.11.0 + '@emotion/is-prop-valid': 1.2.1 + '@emotion/react': 11.11.3(@types/react@18.2.45)(react@18.2.0) + '@emotion/serialize': 1.1.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0) + '@emotion/utils': 1.2.1 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.45 + + '@emotion/unitless@0.8.1': {} + + '@emotion/use-insertion-effect-with-fallbacks@1.0.1(react@18.2.0)': + dependencies: + react: 18.2.0 + + '@emotion/utils@1.2.1': {} + + '@emotion/weak-memoize@0.3.1': {} + + '@fastify/ajv-compiler@3.5.0': + dependencies: + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + fast-uri: 2.3.0 + + '@fastify/busboy@2.1.0': {} + + '@fastify/deepmerge@1.3.0': {} + + '@fastify/error@3.4.1': {} + + '@fastify/fast-json-stringify-compiler@4.3.0': + dependencies: + fast-json-stringify: 5.9.1 + + '@floating-ui/core@1.5.2': + dependencies: + '@floating-ui/utils': 0.1.6 + + '@floating-ui/dom@1.5.3': + dependencies: + '@floating-ui/core': 1.5.2 + '@floating-ui/utils': 0.1.6 + + '@floating-ui/react-dom@2.0.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@floating-ui/dom': 1.5.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@floating-ui/utils@0.1.6': {} + + '@fontsource/roboto@5.0.8': {} + + '@jridgewell/resolve-uri@3.1.1': {} + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@libsql/client@0.3.6': + dependencies: + '@libsql/hrana-client': 0.5.5 + js-base64: 3.7.5 + libsql: 0.1.34 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@libsql/darwin-arm64@0.1.34': + optional: true + + '@libsql/darwin-x64@0.1.34': + optional: true + + '@libsql/hrana-client@0.5.5': + dependencies: + '@libsql/isomorphic-fetch': 0.1.10 + '@libsql/isomorphic-ws': 0.1.5 + js-base64: 3.7.5 + node-fetch: 3.3.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@libsql/isomorphic-fetch@0.1.10': + dependencies: + '@types/node-fetch': 2.6.10 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + '@libsql/isomorphic-ws@0.1.5': + dependencies: + '@types/ws': 8.5.9 + ws: 8.14.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@libsql/linux-arm64-gnu@0.1.34': + optional: true + + '@libsql/linux-arm64-musl@0.1.34': + optional: true + + '@libsql/linux-x64-gnu@0.1.34': + optional: true + + '@libsql/linux-x64-musl@0.1.34': + optional: true + + '@libsql/win32-x64-msvc@0.1.34': + optional: true + + '@messageformat/core@3.3.0': + dependencies: + '@messageformat/date-skeleton': 1.0.1 + '@messageformat/number-skeleton': 1.2.0 + '@messageformat/parser': 5.1.0 + '@messageformat/runtime': 3.0.1 + make-plural: 7.3.0 + safe-identifier: 0.4.2 + + '@messageformat/date-skeleton@1.0.1': {} + + '@messageformat/number-skeleton@1.2.0': {} + + '@messageformat/parser@5.1.0': + dependencies: + moo: 0.5.2 + + '@messageformat/runtime@3.0.1': + dependencies: + make-plural: 7.3.0 + + '@mole-inc/bin-wrapper@8.0.1': + dependencies: + bin-check: 4.1.0 + bin-version-check: 5.1.0 + content-disposition: 0.5.4 + ext-name: 5.0.0 + file-type: 17.1.6 + filenamify: 5.1.1 + got: 11.8.6 + os-filter-obj: 2.0.0 + + '@mui/base@5.0.0-beta.29(@types/react@18.2.45)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.6 + '@floating-ui/react-dom': 2.0.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@mui/types': 7.2.11(@types/react@18.2.45) + '@mui/utils': 5.15.2(@types/react@18.2.45)(react@18.2.0) + '@popperjs/core': 2.11.8 + clsx: 2.0.0 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + optionalDependencies: + '@types/react': 18.2.45 + + '@mui/core-downloads-tracker@5.15.2': {} + + '@mui/icons-material@5.15.2(@mui/material@5.15.2(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@emotion/styled@11.11.0(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react@18.2.45)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.6 + '@mui/material': 5.15.2(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@emotion/styled@11.11.0(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.45 + + '@mui/material-nextjs@5.15.0(@emotion/cache@11.11.0)(@mui/material@5.15.2(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@emotion/styled@11.11.0(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(@types/react@18.2.45)(next@14.0.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0))(react@18.2.0)': + dependencies: + '@mui/material': 5.15.2(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@emotion/styled@11.11.0(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + next: 14.0.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + optionalDependencies: + '@emotion/cache': 11.11.0 + '@types/react': 18.2.45 + + '@mui/material@5.15.2(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@emotion/styled@11.11.0(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.6 + '@mui/base': 5.0.0-beta.29(@types/react@18.2.45)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@mui/core-downloads-tracker': 5.15.2 + '@mui/system': 5.15.2(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@emotion/styled@11.11.0(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react@18.2.0) + '@mui/types': 7.2.11(@types/react@18.2.45) + '@mui/utils': 5.15.2(@types/react@18.2.45)(react@18.2.0) + '@types/react-transition-group': 4.4.10 + clsx: 2.0.0 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-is: 18.2.0 + react-transition-group: 4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + optionalDependencies: + '@emotion/react': 11.11.3(@types/react@18.2.45)(react@18.2.0) + '@emotion/styled': 11.11.0(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react@18.2.0) + '@types/react': 18.2.45 + + '@mui/private-theming@5.15.2(@types/react@18.2.45)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.6 + '@mui/utils': 5.15.2(@types/react@18.2.45)(react@18.2.0) + prop-types: 15.8.1 + react: 18.2.0 + optionalDependencies: + '@types/react': 18.2.45 + + '@mui/styled-engine@5.15.2(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@emotion/styled@11.11.0(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.6 + '@emotion/cache': 11.11.0 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 18.2.0 + optionalDependencies: + '@emotion/react': 11.11.3(@types/react@18.2.45)(react@18.2.0) + '@emotion/styled': 11.11.0(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react@18.2.0) + + '@mui/system@5.15.2(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@emotion/styled@11.11.0(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.6 + '@mui/private-theming': 5.15.2(@types/react@18.2.45)(react@18.2.0) + '@mui/styled-engine': 5.15.2(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@emotion/styled@11.11.0(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react@18.2.0))(react@18.2.0) + '@mui/types': 7.2.11(@types/react@18.2.45) + '@mui/utils': 5.15.2(@types/react@18.2.45)(react@18.2.0) + clsx: 2.0.0 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 18.2.0 + optionalDependencies: + '@emotion/react': 11.11.3(@types/react@18.2.45)(react@18.2.0) + '@emotion/styled': 11.11.0(@emotion/react@11.11.3(@types/react@18.2.45)(react@18.2.0))(@types/react@18.2.45)(react@18.2.0) + '@types/react': 18.2.45 + + '@mui/types@7.2.11(@types/react@18.2.45)': + optionalDependencies: + '@types/react': 18.2.45 + + '@mui/utils@5.15.2(@types/react@18.2.45)(react@18.2.0)': + dependencies: + '@babel/runtime': 7.23.6 + '@types/prop-types': 15.7.11 + prop-types: 15.8.1 + react: 18.2.0 + react-is: 18.2.0 + optionalDependencies: + '@types/react': 18.2.45 + + '@neon-rs/load@0.0.4': {} + + '@next/env@14.0.4': {} + + '@next/swc-darwin-arm64@14.0.4': + optional: true + + '@next/swc-darwin-x64@14.0.4': + optional: true + + '@next/swc-linux-arm64-gnu@14.0.4': + optional: true + + '@next/swc-linux-arm64-musl@14.0.4': + optional: true + + '@next/swc-linux-x64-gnu@14.0.4': + optional: true + + '@next/swc-linux-x64-musl@14.0.4': + optional: true + + '@next/swc-win32-arm64-msvc@14.0.4': + optional: true + + '@next/swc-win32-ia32-msvc@14.0.4': + optional: true + + '@next/swc-win32-x64-msvc@14.0.4': + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.16.0 + + '@popperjs/core@2.11.8': {} + + '@prisma/adapter-libsql@5.7.1(@libsql/client@0.3.6)': + dependencies: + '@libsql/client': 0.3.6 + '@prisma/driver-adapter-utils': 5.7.1 + async-mutex: 0.4.0 + transitivePeerDependencies: + - supports-color + + '@prisma/client@5.8.1(prisma@5.8.1)': + optionalDependencies: + prisma: 5.8.1 + + '@prisma/debug@5.8.1': {} + + '@prisma/driver-adapter-utils@5.7.1': + dependencies: + debug: 4.3.4(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + + '@prisma/engines-version@5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2': {} + + '@prisma/engines@5.8.1': + dependencies: + '@prisma/debug': 5.8.1 + '@prisma/engines-version': 5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2 + '@prisma/fetch-engine': 5.8.1 + '@prisma/get-platform': 5.8.1 + + '@prisma/fetch-engine@5.8.1': + dependencies: + '@prisma/debug': 5.8.1 + '@prisma/engines-version': 5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2 + '@prisma/get-platform': 5.8.1 + + '@prisma/get-platform@5.8.1': + dependencies: + '@prisma/debug': 5.8.1 + + '@sapphire/async-queue@1.5.1': {} + + '@sapphire/shapeshift@3.9.5': + dependencies: + fast-deep-equal: 3.1.3 + lodash: 4.17.21 + + '@sapphire/snowflake@3.5.1': {} + + '@sindresorhus/is@4.6.0': {} + + '@swc/cli@0.1.63(@swc/core@1.3.101(@swc/helpers@0.5.2))(chokidar@3.5.3)': + dependencies: + '@mole-inc/bin-wrapper': 8.0.1 + '@swc/core': 1.3.101(@swc/helpers@0.5.2) + commander: 7.2.0 + fast-glob: 3.3.2 + semver: 7.5.4 + slash: 3.0.0 + source-map: 0.7.4 + optionalDependencies: + chokidar: 3.5.3 + + '@swc/core-darwin-arm64@1.3.101': + optional: true + + '@swc/core-darwin-x64@1.3.101': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.3.101': + optional: true + + '@swc/core-linux-arm64-gnu@1.3.101': + optional: true + + '@swc/core-linux-arm64-musl@1.3.101': + optional: true + + '@swc/core-linux-x64-gnu@1.3.101': + optional: true + + '@swc/core-linux-x64-musl@1.3.101': + optional: true + + '@swc/core-win32-arm64-msvc@1.3.101': + optional: true + + '@swc/core-win32-ia32-msvc@1.3.101': + optional: true + + '@swc/core-win32-x64-msvc@1.3.101': + optional: true + + '@swc/core@1.3.101(@swc/helpers@0.5.2)': + dependencies: + '@swc/counter': 0.1.2 + '@swc/types': 0.1.5 + optionalDependencies: + '@swc/core-darwin-arm64': 1.3.101 + '@swc/core-darwin-x64': 1.3.101 + '@swc/core-linux-arm-gnueabihf': 1.3.101 + '@swc/core-linux-arm64-gnu': 1.3.101 + '@swc/core-linux-arm64-musl': 1.3.101 + '@swc/core-linux-x64-gnu': 1.3.101 + '@swc/core-linux-x64-musl': 1.3.101 + '@swc/core-win32-arm64-msvc': 1.3.101 + '@swc/core-win32-ia32-msvc': 1.3.101 + '@swc/core-win32-x64-msvc': 1.3.101 + '@swc/helpers': 0.5.2 + + '@swc/counter@0.1.2': {} + + '@swc/helpers@0.5.2': + dependencies: + tslib: 2.6.2 + + '@swc/types@0.1.5': {} + + '@szmarczak/http-timer@4.0.6': + dependencies: + defer-to-connect: 2.0.1 + + '@thunder04/supermap@3.0.3': {} + + '@tokenizer/token@0.3.0': {} + + '@tsconfig/node10@1.0.9': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@types/cacheable-request@6.0.3': + dependencies: + '@types/http-cache-semantics': 4.0.4 + '@types/keyv': 3.1.4 + '@types/node': 20.10.5 + '@types/responselike': 1.0.3 + + '@types/centra@2.2.3': + dependencies: + '@types/node': 20.10.5 + + '@types/http-cache-semantics@4.0.4': {} + + '@types/i18n@0.13.10': {} + + '@types/keyv@3.1.4': + dependencies: + '@types/node': 20.10.5 + + '@types/node-fetch@2.6.10': + dependencies: + '@types/node': 20.10.5 + form-data: 4.0.0 + + '@types/node@20.10.5': + dependencies: + undici-types: 5.26.5 + + '@types/parse-json@4.0.2': {} + + '@types/prop-types@15.7.11': {} + + '@types/react-dom@18.2.18': + dependencies: + '@types/react': 18.2.45 + + '@types/react-transition-group@4.4.10': + dependencies: + '@types/react': 18.2.45 + + '@types/react@18.2.45': + dependencies: + '@types/prop-types': 15.7.11 + '@types/scheduler': 0.16.8 + csstype: 3.1.3 + + '@types/responselike@1.0.3': + dependencies: + '@types/node': 20.10.5 + + '@types/scheduler@0.16.8': {} + + '@types/ws@8.5.9': + dependencies: + '@types/node': 20.10.5 + + '@vladfrangu/async_event_emitter@2.2.4': {} + + '@zeldafan0225/ai_horde@5.0.10': + dependencies: + '@thunder04/supermap': 3.0.3 + + abbrev@1.1.1: {} + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + abstract-logging@2.0.1: {} + + acorn-walk@8.3.1: {} + + acorn@8.11.2: {} + + ajv-formats@2.1.1(ajv@8.12.0): + optionalDependencies: + ajv: 8.12.0 + + ajv@8.12.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arch@2.2.0: {} + + archy@1.0.0: {} + + arg@4.1.3: {} + + async-mutex@0.4.0: + dependencies: + tslib: 2.6.2 + + asynckit@0.4.0: {} + + atomic-sleep@1.0.0: {} + + avvio@8.2.1: + dependencies: + archy: 1.0.0 + debug: 4.3.4(supports-color@5.5.0) + fastq: 1.16.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-macros@3.1.0: + dependencies: + '@babel/runtime': 7.23.6 + cosmiconfig: 7.1.0 + resolve: 1.22.8 + + balanced-match@1.0.2: {} + + base64-js@1.5.1: {} + + bin-check@4.1.0: + dependencies: + execa: 0.7.0 + executable: 4.1.1 + + bin-version-check@5.1.0: + dependencies: + bin-version: 6.0.0 + semver: 7.5.4 + semver-truncate: 3.0.0 + + bin-version@6.0.0: + dependencies: + execa: 5.1.1 + find-versions: 5.1.0 + + binary-extensions@2.2.0: {} + + boolean@3.2.0: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + braces@3.0.2: + dependencies: + fill-range: 7.0.1 + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + busboy@1.6.0: + dependencies: + streamsearch: 1.1.0 + + cacheable-lookup@5.0.4: {} + + cacheable-request@7.0.4: + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + lowercase-keys: 2.0.0 + normalize-url: 6.1.0 + responselike: 2.0.1 + + callsites@3.1.0: {} + + caniuse-lite@1.0.30001571: {} + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chokidar@3.5.3: + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + client-only@0.0.1: {} + + clone-response@1.0.3: + dependencies: + mimic-response: 1.0.1 + + clsx@2.0.0: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-name@1.1.3: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@7.2.0: {} + + concat-map@0.0.1: {} + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + convert-source-map@1.9.0: {} + + cookie@0.5.0: {} + + cosmiconfig@7.1.0: + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + + create-require@1.1.1: {} + + cross-env@7.0.3: + dependencies: + cross-spawn: 7.0.3 + + cross-spawn@5.1.0: + dependencies: + lru-cache: 4.1.5 + shebang-command: 1.2.0 + which: 1.3.1 + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + csstype@3.1.3: {} + + data-uri-to-buffer@4.0.1: {} + + debug@4.3.4(supports-color@5.5.0): + dependencies: + ms: 2.1.2 + optionalDependencies: + supports-color: 5.5.0 + + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + + defer-to-connect@2.0.1: {} + + delayed-stream@1.0.0: {} + + detect-libc@2.0.2: {} + + diff@4.0.2: {} + + discord-api-types@0.37.61: {} + + discord.js@14.15.0-dev.1703981435-136c66c21: + dependencies: + '@discordjs/builders': 1.7.0 + '@discordjs/collection': 1.5.3 + '@discordjs/formatters': 0.3.3 + '@discordjs/rest': 2.2.0 + '@discordjs/util': 1.0.2 + '@discordjs/ws': 1.0.2 + '@sapphire/snowflake': 3.5.1 + '@types/ws': 8.5.9 + discord-api-types: 0.37.61 + fast-deep-equal: 3.1.3 + lodash.snakecase: 4.1.1 + tslib: 2.6.2 + undici: 5.27.2 + ws: 8.14.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + dom-helpers@5.2.1: + dependencies: + '@babel/runtime': 7.23.6 + csstype: 3.1.3 + + dotenv@16.3.1: {} + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + event-target-shim@5.0.1: {} + + events@3.3.0: {} + + execa@0.7.0: + dependencies: + cross-spawn: 5.1.0 + get-stream: 3.0.0 + is-stream: 1.1.0 + npm-run-path: 2.0.2 + p-finally: 1.0.0 + signal-exit: 3.0.7 + strip-eof: 1.0.0 + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + executable@4.1.1: + dependencies: + pify: 2.3.0 + + ext-list@2.2.2: + dependencies: + mime-db: 1.52.0 + + ext-name@5.0.0: + dependencies: + ext-list: 2.2.2 + sort-keys-length: 1.0.1 + + fast-content-type-parse@1.1.0: {} + + fast-decode-uri-component@1.0.1: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.2: + dependencies: + '@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 + + fast-json-stringify@5.9.1: + dependencies: + '@fastify/deepmerge': 1.3.0 + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + fast-deep-equal: 3.1.3 + fast-uri: 2.3.0 + json-schema-ref-resolver: 1.0.1 + rfdc: 1.3.0 + + fast-printf@1.6.9: + dependencies: + boolean: 3.2.0 + + fast-querystring@1.1.2: + dependencies: + fast-decode-uri-component: 1.0.1 + + fast-redact@3.3.0: {} + + fast-uri@2.3.0: {} + + fastify@4.25.1: + dependencies: + '@fastify/ajv-compiler': 3.5.0 + '@fastify/error': 3.4.1 + '@fastify/fast-json-stringify-compiler': 4.3.0 + abstract-logging: 2.0.1 + avvio: 8.2.1 + fast-content-type-parse: 1.1.0 + fast-json-stringify: 5.9.1 + find-my-way: 7.7.0 + light-my-request: 5.11.0 + pino: 8.17.1 + process-warning: 3.0.0 + proxy-addr: 2.0.7 + rfdc: 1.3.0 + secure-json-parse: 2.7.0 + semver: 7.5.4 + toad-cache: 3.4.1 + transitivePeerDependencies: + - supports-color + + fastq@1.16.0: + dependencies: + reusify: 1.0.4 + + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.2.1 + + file-type@17.1.6: + dependencies: + readable-web-to-node-stream: 3.0.2 + strtok3: 7.0.0 + token-types: 5.0.1 + + filename-reserved-regex@3.0.0: {} + + filenamify@5.1.1: + dependencies: + filename-reserved-regex: 3.0.0 + strip-outer: 2.0.0 + trim-repeated: 2.0.0 + + fill-range@7.0.1: + dependencies: + to-regex-range: 5.0.1 + + find-my-way@7.7.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-querystring: 1.1.2 + safe-regex2: 2.0.0 + + find-root@1.1.0: {} + + find-versions@5.1.0: + dependencies: + semver-regex: 4.0.5 + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 + + forwarded@0.2.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-stream@3.0.0: {} + + get-stream@5.2.0: + dependencies: + pump: 3.0.0 + + get-stream@6.0.1: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-to-regexp@0.4.1: {} + + got@11.8.6: + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 4.0.6 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 5.0.4 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + http2-wrapper: 1.0.3 + lowercase-keys: 2.0.0 + p-cancelable: 2.1.1 + responselike: 2.0.1 + + graceful-fs@4.2.11: {} + + has-flag@3.0.0: {} + + hasown@2.0.0: + dependencies: + function-bind: 1.1.2 + + hoist-non-react-statics@3.3.2: + dependencies: + react-is: 16.13.1 + + http-cache-semantics@4.1.1: {} + + http2-wrapper@1.0.3: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + human-signals@2.1.0: {} + + i18n@0.15.1: + dependencies: + '@messageformat/core': 3.3.0 + debug: 4.3.4(supports-color@5.5.0) + fast-printf: 1.6.9 + make-plural: 7.3.0 + math-interval-parser: 2.0.1 + mustache: 4.2.0 + transitivePeerDependencies: + - supports-color + + ieee754@1.2.1: {} + + ignore-by-default@1.0.1: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + inherits@2.0.4: {} + + ipaddr.js@1.9.1: {} + + is-arrayish@0.2.1: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.2.0 + + is-core-module@2.13.1: + dependencies: + hasown: 2.0.0 + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-plain-obj@1.1.0: {} + + is-stream@1.1.0: {} + + is-stream@2.0.1: {} + + isexe@2.0.0: {} + + js-base64@3.7.5: {} + + js-tokens@4.0.0: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-ref-resolver@1.0.1: + dependencies: + fast-deep-equal: 3.1.3 + + json-schema-traverse@1.0.0: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + libsql@0.1.34: + dependencies: + '@neon-rs/load': 0.0.4 + detect-libc: 2.0.2 + optionalDependencies: + '@libsql/darwin-arm64': 0.1.34 + '@libsql/darwin-x64': 0.1.34 + '@libsql/linux-arm64-gnu': 0.1.34 + '@libsql/linux-arm64-musl': 0.1.34 + '@libsql/linux-x64-gnu': 0.1.34 + '@libsql/linux-x64-musl': 0.1.34 + '@libsql/win32-x64-msvc': 0.1.34 + + light-my-request@5.11.0: + dependencies: + cookie: 0.5.0 + process-warning: 2.3.2 + set-cookie-parser: 2.6.0 + + lines-and-columns@1.2.4: {} + + lodash.snakecase@4.1.1: {} + + lodash@4.17.21: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lowercase-keys@2.0.0: {} + + lru-cache@4.1.5: + dependencies: + pseudomap: 1.0.2 + yallist: 2.1.2 + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + magic-bytes.js@1.7.0: {} + + make-error@1.3.6: {} + + make-plural@7.3.0: {} + + math-interval-parser@2.0.1: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.5: + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mimic-fn@2.1.0: {} + + mimic-response@1.0.1: {} + + mimic-response@3.1.0: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + moo@0.5.2: {} + + ms@2.1.2: {} + + mustache@4.2.0: {} + + nanoid@3.3.7: {} + + next@14.0.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + '@next/env': 14.0.4 + '@swc/helpers': 0.5.2 + busboy: 1.6.0 + caniuse-lite: 1.0.30001571 + graceful-fs: 4.2.11 + postcss: 8.4.31 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + styled-jsx: 5.1.1(react@18.2.0) + watchpack: 2.4.0 + optionalDependencies: + '@next/swc-darwin-arm64': 14.0.4 + '@next/swc-darwin-x64': 14.0.4 + '@next/swc-linux-arm64-gnu': 14.0.4 + '@next/swc-linux-arm64-musl': 14.0.4 + '@next/swc-linux-x64-gnu': 14.0.4 + '@next/swc-linux-x64-musl': 14.0.4 + '@next/swc-win32-arm64-msvc': 14.0.4 + '@next/swc-win32-ia32-msvc': 14.0.4 + '@next/swc-win32-x64-msvc': 14.0.4 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + + node-domexception@1.0.0: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + + nodemon@3.0.2: + dependencies: + chokidar: 3.5.3 + debug: 4.3.4(supports-color@5.5.0) + ignore-by-default: 1.0.1 + minimatch: 3.1.2 + pstree.remy: 1.1.8 + semver: 7.5.4 + simple-update-notifier: 2.0.0 + supports-color: 5.5.0 + touch: 3.1.0 + undefsafe: 2.0.5 + + nopt@1.0.10: + dependencies: + abbrev: 1.1.1 + + normalize-path@3.0.0: {} + + normalize-url@6.1.0: {} + + npm-run-path@2.0.2: + dependencies: + path-key: 2.0.1 + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + object-assign@4.1.1: {} + + on-exit-leak-free@2.1.2: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + os-filter-obj@2.0.0: + dependencies: + arch: 2.2.0 + + p-cancelable@2.1.1: {} + + p-finally@1.0.0: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.23.5 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + path-key@2.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-type@4.0.0: {} + + peek-readable@5.0.0: {} + + picocolors@1.0.0: {} + + picomatch@2.3.1: {} + + pify@2.3.0: {} + + pino-abstract-transport@1.1.0: + dependencies: + readable-stream: 4.5.1 + split2: 4.2.0 + + pino-std-serializers@6.2.2: {} + + pino@8.17.1: + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.3.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 1.1.0 + pino-std-serializers: 6.2.2 + process-warning: 2.3.2 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.4.3 + sonic-boom: 3.7.0 + thread-stream: 2.4.1 + + postcss@8.4.31: + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + + prisma@5.8.1: + dependencies: + '@prisma/engines': 5.8.1 + + process-warning@2.3.2: {} + + process-warning@3.0.0: {} + + process@0.11.10: {} + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + pseudomap@1.0.2: {} + + pstree.remy@1.1.8: {} + + pump@3.0.0: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + quick-format-unescaped@4.0.4: {} + + quick-lru@5.1.1: {} + + react-dom@18.2.0(react@18.2.0): + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + + react-is@16.13.1: {} + + react-is@18.2.0: {} + + react-transition-group@4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + '@babel/runtime': 7.23.6 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + react@18.2.0: + dependencies: + loose-envify: 1.4.0 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readable-stream@4.5.1: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + + readable-web-to-node-stream@3.0.2: + dependencies: + readable-stream: 3.6.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + real-require@0.2.0: {} + + regenerator-runtime@0.14.1: {} + + require-from-string@2.0.2: {} + + resolve-alpn@1.2.1: {} + + resolve-from@4.0.0: {} + + resolve@1.22.8: + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + responselike@2.0.1: + dependencies: + lowercase-keys: 2.0.0 + + ret@0.2.2: {} + + reusify@1.0.4: {} + + rfdc@1.3.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-buffer@5.2.1: {} + + safe-identifier@0.4.2: {} + + safe-regex2@2.0.0: + dependencies: + ret: 0.2.2 + + safe-stable-stringify@2.4.3: {} + + scheduler@0.23.0: + dependencies: + loose-envify: 1.4.0 + + secure-json-parse@2.7.0: {} + + semver-regex@4.0.5: {} + + semver-truncate@3.0.0: + dependencies: + semver: 7.5.4 + + semver@7.5.4: + dependencies: + lru-cache: 6.0.0 + + set-cookie-parser@2.6.0: {} + + shebang-command@1.2.0: + dependencies: + shebang-regex: 1.0.0 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@1.0.0: {} + + shebang-regex@3.0.0: {} + + signal-exit@3.0.7: {} + + simple-update-notifier@2.0.0: + dependencies: + semver: 7.5.4 + + slash@3.0.0: {} + + sonic-boom@3.7.0: + dependencies: + atomic-sleep: 1.0.0 + + sort-keys-length@1.0.1: + dependencies: + sort-keys: 1.1.2 + + sort-keys@1.1.2: + dependencies: + is-plain-obj: 1.1.0 + + source-map-js@1.0.2: {} + + source-map@0.5.7: {} + + source-map@0.7.4: {} + + split2@4.2.0: {} + + streamsearch@1.1.0: {} + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-eof@1.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-outer@2.0.0: {} + + strtok3@7.0.0: + dependencies: + '@tokenizer/token': 0.3.0 + peek-readable: 5.0.0 + + styled-jsx@5.1.1(react@18.2.0): + dependencies: + client-only: 0.0.1 + react: 18.2.0 + + stylis@4.2.0: {} + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + thread-stream@2.4.1: + dependencies: + real-require: 0.2.0 + + to-fast-properties@2.0.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toad-cache@3.4.1: {} + + token-types@5.0.1: + dependencies: + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + + touch@3.1.0: + dependencies: + nopt: 1.0.10 + + tr46@0.0.3: {} + + trim-repeated@2.0.0: + dependencies: + escape-string-regexp: 5.0.0 + + ts-mixer@6.0.3: {} + + ts-node@10.9.2(@swc/core@1.3.101(@swc/helpers@0.5.2))(@types/node@20.10.5)(typescript@5.3.3): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.10.5 + acorn: 8.11.2 + acorn-walk: 8.3.1 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.3.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.3.101(@swc/helpers@0.5.2) + + tslib@2.6.2: {} + + typescript@5.3.3: {} + + undefsafe@2.0.5: {} + + undici-types@5.26.5: {} + + undici@5.27.2: + dependencies: + '@fastify/busboy': 2.1.0 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + v8-compile-cache-lib@3.0.1: {} + + watchpack@2.4.0: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + + web-streams-polyfill@3.2.1: {} + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which@1.3.1: + dependencies: + isexe: 2.0.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wrappy@1.0.2: {} + + ws@8.14.2: {} + + yallist@2.1.2: {} + + yallist@4.0.0: {} + + yaml@1.10.2: {} + + yn@3.1.1: {} diff --git a/prisma/local.db b/prisma/local.db new file mode 100644 index 0000000..06f36ba Binary files /dev/null and b/prisma/local.db differ diff --git a/src/bot/commands/ai.ts b/src/bot/commands/ai.ts index 7a98eb6..5c3286f 100644 --- a/src/bot/commands/ai.ts +++ b/src/bot/commands/ai.ts @@ -21,6 +21,7 @@ import Give from "./ai/give"; import { bt } from "../../main"; import Config from "./ai/config"; + const commandData = new SlashCommandBuilder() .setName("ia") .setDescription("Commandes IA") @@ -740,7 +741,7 @@ export class IaCommand extends CommandsBase { super(client, commandData); } - async run(interaction: CommandInteraction) { + async run(interaction: CommandInteraction) { let options = interaction.options; if (options instanceof CommandInteractionOptionResolver) { let subcommand = options.getSubcommandGroup() ?? options.getSubcommand(); @@ -768,6 +769,7 @@ export class IaCommand extends CommandsBase { break; case "give": await Give(this, interaction); + break; case "interogate": await Interogate(this, interaction); break; diff --git a/src/bot/commands/ai/advanced/imagine.ts b/src/bot/commands/ai/advanced/imagine.ts index 9d82f54..a85a904 100644 --- a/src/bot/commands/ai/advanced/imagine.ts +++ b/src/bot/commands/ai/advanced/imagine.ts @@ -79,7 +79,7 @@ export default async function AdvancedImagine( options.getString("sampler_name") || ModelGenerationInputStableSamplers.k_dpm_adaptive; let n = - (options.getNumber("n") || 4) > 10 ? 10 : options.getNumber("n") || 4; + (options.getNumber("n") || 10) > 10 ? 10 : options.getNumber("n") || 10; let loras = options.getString("loras") || null; if (image) { let textChannel = @@ -217,7 +217,7 @@ export default async function AdvancedImagine( processed += bt.__( { - phrase: "(Position in the queue: %s -", + phrase: "(Position in the queue: %s )", locale: interaction.locale, }, String(stat.queue_position), diff --git a/src/bot/commands/ai/imagine.ts b/src/bot/commands/ai/imagine.ts deleted file mode 100644 index f8d85cb..0000000 --- a/src/bot/commands/ai/imagine.ts +++ /dev/null @@ -1,456 +0,0 @@ -import type CommandsBase from '../baseCommands' -import { - type APIActionRowComponent, - type APIButtonComponent, - type AttachmentPayload, - ButtonBuilder, - ButtonStyle, - Colors, - type CommandInteraction, - CommandInteractionOptionResolver, - EmbedBuilder, - type MessageEditOptions, - MessageFlags, - TextChannel, - codeBlock -} from 'discord.js' -import { - type ImageGenerationInput, - ModelGenerationInputPostProcessingTypes, - ModelGenerationInputStableSamplers -} from '@zeldafan0225/ai_horde' -import { bt } from '../../../main' -import { getUser } from '../../functions/database' -export default async function Imagine( - command: CommandsBase, - interaction: CommandInteraction -) { - const userDatabase = await getUser(interaction.user.id, command.client.database) - let defaultToken = '0000000000' - if (userDatabase && userDatabase.horde_token) { - defaultToken = command.client.decryptString(userDatabase.horde_token) - } - const timeout = command.client.timeouts.get(interaction.commandName) - if (!timeout) { - interaction.reply({ - content: bt.__({ - phrase: 'An error occured, please try again later', - locale: interaction.locale - }), - flags: MessageFlags.Ephemeral - }) - return - } - if (timeout.has(interaction.user.id)) { - interaction.reply({ - content: bt.__({ - phrase: - 'You must wait the current generation before using this command again', - locale: interaction.locale - }), - flags: MessageFlags.Ephemeral - }) - return - } - const ai = command.client.aiHorde - const config = userDatabase.horde_config ? userDatabase.horde_config : null - - // get the option value - const msgToSend = await interaction.reply({ - "content": bt.__({ - phrase: 'Generation started..', - locale: interaction.locale - }), - }); - const modelMoreDemanded = await ai.getModels() - const options = interaction.options - if (options instanceof CommandInteractionOptionResolver) { - const image = options.getString('prompt') || '' - // the model the more demanded is the one with the most count of Workers - const model = - options.getString('model') || config?.model || - modelMoreDemanded.sort((a, b) => { - return b.count - a.count - })[0].name - const negative_prompt = - options.getString('negative_prompt') || - '' - // first let's check if userDatabase is null, if it is, we set the default value to false - const nsfw = options.getBoolean('nsfw') || config?.nsfw || false - let lorasListFromDatabase = Array(5).fill(null).map((_, index) => { - return config?.loras[index]?.loras_id || null - }) - // we now need to check for each Loras if it's set or not, if it's not, we set it to null and if it is, we set it to the value - const loras = options.getString('loras') || - lorasListFromDatabase[0] || null - const loras2 = options.getString('loras_2') || - lorasListFromDatabase[1] || - null - const loras3 = options.getString('loras_3') || - lorasListFromDatabase[2] || - null - const loras4 = options.getString('loras_4') || - lorasListFromDatabase[3] || - null - const loras5 = options.getString('loras_5') || - lorasListFromDatabase[4] || - null - const preprompt = options.getBoolean('preprompt') || config?.preprompt_loras || false - if (image) { - const textChannel = - interaction.channel instanceof TextChannel ? interaction.channel : null - let nsfwchannel = true - if (textChannel) { - nsfwchannel = textChannel.nsfw - } - command.client.timeouts - .get(interaction.commandName) - ?.set(interaction.user.id, true) - - const predefinedPrompt = config?.definedPrompt || '{p}###{ng}' - const prompt: ImageGenerationInput = { - prompt: predefinedPrompt.replace('{p}', image).replace('{ng}', negative_prompt), - params: { - sampler_name: config?.sampler as ImageGenerationInput['params']['sampler_name'] || ModelGenerationInputStableSamplers.k_euler, - cfg_scale: config?.cfg_scale || 7, - height: config?.height || 512, - width: config?.width || 512, - post_processing: [ - config?.upscaller as ImageGenerationInput['params']['post_processing'][0] || ModelGenerationInputPostProcessingTypes.RealESRGAN_x4plus - ], - clip_skip: config?.clip_skip || 3, - facefixer_strength: 1, - steps: config?.steps || 25, - n: config?.gen_numbers || 4 - }, - censor_nsfw: nsfwchannel ? (!nsfw) : true, - models: [model], - nsfw: nsfwchannel ? (!!nsfw) : false, - shared: true - } - - const lorasList = [loras, loras2, loras3, loras4, loras5].filter((loras) => { - return loras !== null - }) - if (lorasList.length > 0) { - // if preprompt is selected, we get a random model, and a random image from this model to use as prompt - if (preprompt) { - try { - const lorasDatas = await command.client.getLorasModel(lorasList[0]) - const randomModelVersion = - lorasDatas.modelVersions[ - Math.floor(Math.random() * lorasDatas.modelVersions.length) - ] - const randomMetaImage = - randomModelVersion.images[ - Math.floor(Math.random() * randomModelVersion.images.length) - ].meta - prompt.params.steps = randomMetaImage.steps - prompt.params.cfg_scale = randomMetaImage.cfgScale - prompt.prompt = - randomMetaImage.prompt + - image.substring(0, 1024) + - '### ' + - randomMetaImage.negativePrompt - } catch (e) { - console.log('Loras was not found') - } - } - - prompt.params.loras = lorasList.map((loras, index) => { - return { - name: loras, - model: index, - clip: index + 1, - inject_trigger: 'any' - } - }) - } - if (model.toLowerCase().includes('sdxl')) { - prompt.params.hires_fix = false - } else { - prompt.params.hires_fix = true - } - ai.postAsyncImageGenerate(prompt, { - token: defaultToken - }) - .then(async (result) => { - const id = result.id - let finished = 0 - const collector = await msgToSend.createMessageComponentCollector({ - filter: (componentInteraction) => { - return ( - componentInteraction.customId === 'cancel' && - componentInteraction.user.id === interaction.user.id - ) - }, - max: 1 - }) - const interval: NodeJS.Timeout = setInterval(() => { - if (id) { - ai.getImageGenerationCheck(id, { - force: true - }).then((stat) => { - if (stat.is_possible) { - if (stat.done) { - clearInterval(interval) - collector.stop('done') - command.client.timeouts - .get(interaction.commandName) - ?.delete(interaction.user.id) - ai.getImageGenerationStatus(id).then((status) => { - console.log({ - generations: status.generations.map((generation) => { - return { - url: generation.img, - workerName: generation.worker_name, - workerId: generation.worker_id, - model: generation.model - } - }), - prompt: JSON.stringify(prompt), - guildName: interaction.guild?.name || 'DM' - }) - const generations = status.generations - if (generations && generations.length > 0) { - msgToSend.edit({ - content: '', - files: generations.map((generation, i) => { - return { - attachment: generation.img, - name: 'image' + i + '.webp' - } - }), - components: [] - }) - } - }) - } else { - const components: Array> = - [ - { - type: 1, - components: [ - new ButtonBuilder() - .setCustomId('cancel') - .setLabel( - bt.__({ - phrase: 'Cancel', - locale: interaction.locale - }) - ) - .setStyle(ButtonStyle.Danger) - .setEmoji('🚫') - .setDisabled(false) - .toJSON() - ] - } - ] - // attachment - const wait_time = stat.wait_time || 1 - const files: AttachmentPayload[] = [] - let processed = - bt.__({ - phrase: 'Generation started..', - locale: interaction.locale - }) + '\n' - if (stat.queue_position && stat.queue_position > 0) { - processed += - bt.__( - { - phrase: '(Position in the queue: %s -', - locale: interaction.locale - }, - String(stat.queue_position) - ) + '\n' - } - if (stat.waiting && stat.waiting > 0) { - processed += - bt.__( - { - phrase: 'Waiting : %s', - locale: interaction.locale - }, - String(stat.waiting) - ) + '\n' - } - if (stat.finished && stat.finished > 0) { - processed += - bt.__( - { - phrase: 'Finished : %s', - locale: interaction.locale - }, - String(stat.finished) - ) + '\n' - } - if (stat.processing && stat.processing > 0) { - processed += - bt.__( - { - phrase: 'Processing : %s', - locale: interaction.locale - }, - String(stat.processing) - ) + '\n' - processed += bt.__( - { - phrase: '(Estimated waiting time: )', - locale: interaction.locale - }, - String( - parseInt( - ((Date.now() + wait_time * 1000) / 1000).toString() - ) - ) - ) + '\n' - } - if (stat.kudos && stat.kudos > 0) { - processed += bt.__( - { - phrase: 'Kudos used: %s', - locale: interaction.locale - }, - String(stat.kudos) - ) - } - const message: MessageEditOptions = { - content: processed, - components - } - if (stat.finished && stat.finished > finished) { - finished = stat.finished - ai.getImageGenerationStatus(id).then((status) => { - if ( - status.generations && - status.generations.length > 0 - ) { - status.generations.forEach((generation, i) => { - files.push({ - attachment: generation.img, - name: 'image' + i + '.webp' - }) - }) - } - if (files.length > 0) { - message.files = files - } - msgToSend.edit(message).catch((e) => { - clearInterval(interval) - collector.stop('cancel') - command.client.timeouts - .get(interaction.commandName) - ?.delete(interaction.user.id) - command.client.aiHorde.deleteImageGenerationRequest( - id - ) - }) - }) - } else { - msgToSend.edit(message).catch((e) => { - clearInterval(interval) - collector.stop('cancel') - command.client.timeouts - .get(interaction.commandName) - ?.delete(interaction.user.id) - command.client.aiHorde.deleteImageGenerationRequest(id) - }) - } - } - } else { - clearInterval(interval) - command.client.timeouts - .get(interaction.commandName) - ?.delete(interaction.user.id) - interaction - .editReply({ - content: bt.__({ - phrase: 'Request impossible, model not available', - locale: interaction.locale - }), - components: [] - }) - .catch((e) => { - clearInterval(interval) - collector.stop('cancel') - command.client.timeouts - .get(interaction.commandName) - ?.delete(interaction.user.id) - command.client.aiHorde.deleteImageGenerationRequest(id) - }) - } - }) - } - }, 5000) - - collector.on('collect', (componentInteraction) => { - collector.stop('cancel') - clearInterval(interval) - command.client.timeouts - .get(interaction.commandName) - ?.delete(interaction.user.id) - componentInteraction.update({ - content: bt.__({ - phrase: 'Request canceled', - locale: interaction.locale - }), - components: [] - }) - command.client.aiHorde.deleteImageGenerationRequest(id) - }) - }) - .catch((err) => { - if (command.client.application.id === '1100859965616427068') { - command.client.users.fetch('243117191774470146').then((user) => { - user.send({ - embeds: [ - new EmbedBuilder() - .setTimestamp(new Date()) - .setDescription(codeBlock('json', JSON.stringify(err))) - .setTitle("Erreur lors de la génération d'une image") - .setColor(Colors.Red) - .addFields([ - { - name: 'Utilisateur', - value: `${interaction.user.tag} (${interaction.user.id})` - }, - { - name: 'Commande', - value: `${interaction.commandName}` - }, - { - name: 'Options', - value: codeBlock('json', JSON.stringify(options)) - } - ]) - .toJSON() - ] - }) - }) - } - command.client.timeouts - .get(interaction.commandName) - ?.delete(interaction.user.id) - if (interaction.deferred) { - msgToSend.edit({ - content: bt.__({ - phrase: - 'An error occured, content too long or too complex, or request too unethical to be processed.', - locale: interaction.locale - }), - components: [] - }) - } else { - msgToSend.edit({ - content: bt.__({ - phrase: - 'An error occured, content too long or too complex, or request too unethical to be processed.', - locale: interaction.locale - }), - components: [] - }) - } - }) - } - } -} diff --git a/src/bot/commands/aiinfo.ts b/src/bot/commands/aiinfo.ts new file mode 100644 index 0000000..444f0bc --- /dev/null +++ b/src/bot/commands/aiinfo.ts @@ -0,0 +1,62 @@ +import { CommandInteraction, SlashCommandBuilder, EmbedBuilder } from "discord.js"; +import https from "https"; // Module natif de Node.js +import CommandsBase from "./baseCommands"; +import Bot from "../index"; + +const commandData = new SlashCommandBuilder() + .setName("aiinfo") + .setDescription("AI performance information"); + +export class AIInfoCommand extends CommandsBase { + constructor(client: Bot) { + super(client, commandData.toJSON()); + } + + async run(interaction: CommandInteraction): Promise { + await interaction.deferReply(); // Indique que le bot traite la commande + + // Fonction pour effectuer la requête HTTPS + const fetchAPI = (url: string): Promise => + new Promise((resolve, reject) => { + https.get(url, (res) => { + let data = ""; + + res.on("data", (chunk) => { + data += chunk; + }); + + res.on("end", () => { + try { + resolve(JSON.parse(data)); + } catch (error) { + reject(new Error("Failed to parse JSON")); + } + }); + }).on("error", (err) => { + reject(err); + }); + }); + + try { + const data = await fetchAPI("https://stablehorde.net/api/v2/status/performance"); + + const embed = new EmbedBuilder() + .setTitle("AI Performance Information") + .setColor(0x00ff00) // Couleur verte + .addFields( + { name: "Queued Requests", value: data.queued_requests.toString(), inline: true }, + { name: "Number of active Image workers", value: data.worker_count.toString(), inline: true }, + { name: "Number of active Text Workers", value: data.text_worker_count.toString(), inline: true } + ) + .setFooter({ text: "Data provided by Stable Horde API" }) + .setTimestamp(); + + await interaction.editReply({ embeds: [embed] }); + } catch (error) { + console.error("Error fetching AI info:", error); + await interaction.editReply({ + content: "Unable to fetch AI information. Please try again later.", + }); + } + } +} \ No newline at end of file diff --git a/src/bot/commands/animate.ts b/src/bot/commands/animate.ts new file mode 100644 index 0000000..84ff857 --- /dev/null +++ b/src/bot/commands/animate.ts @@ -0,0 +1,231 @@ +// ----------------------------------------------------------------------------- +// animate.ts — /ia animate (v2.6) +// ----------------------------------------------------------------------------- +// • Diaporama GIF/MP4 + musique YouTube (optionnelle, sans coupure audio) +// • Barre de progression 0-100 %, ETA, charge CPU +// • yt-dlp : SABR, fallback android_music +// • Audio étendu par silence (apad) et vidéo coupée à la fin du diaporama (-shortest) +// • Dépendances : ffmpeg, yt-dlp ≥ 2024-xx-xx, sharp, Node ≥ 18 +// ----------------------------------------------------------------------------- + +import { + AttachmentBuilder, + CommandInteraction, + CommandInteractionOptionResolver, + SlashCommandBuilder, +} from "discord.js"; +import fs from "fs"; +import os from "os"; +import path from "path"; +import { promisify } from "util"; +import { spawn, exec } from "child_process"; +import sharp from "sharp"; + +import CommandsBase from "./baseCommands"; +import Bot from "../index"; + +const execAsync = promisify(exec); +const MAX_IMAGES = 12; // image1 … image12 +const BAR_LEN = 22; + +/* -------------------------------------------------------------------------- */ +/* Slash-command — toutes les options obligatoires AVANT les facultatives */ +/* -------------------------------------------------------------------------- */ +const commandData = new SlashCommandBuilder() + .setName("animate") + .setDescription("Crée un diaporama GIF/MP4 (+ musique YouTube facultative)") + // deux images minimales, required = true + .addAttachmentOption((o) => + o.setName("image1").setDescription("Image #1").setRequired(true), + ) + .addAttachmentOption((o) => + o.setName("image2").setDescription("Image #2").setRequired(true), + ); + +// images 3-12 facultatives +for (let i = 3; i <= MAX_IMAGES; i++) { + commandData.addAttachmentOption((o) => + o.setName(`image${i}`).setDescription(`Image #${i}`).setRequired(false), + ); +} + +// autres options facultatives +commandData + .addIntegerOption((o) => + o.setName("duration").setDescription("Durée par image (1-4 s)").setMinValue(1).setMaxValue(4), + ) + .addStringOption((o) => + o + .setName("format") + .setDescription("Format de sortie") + .addChoices({ name: "GIF", value: "gif" }, { name: "MP4", value: "mp4" }), + ) + .addStringOption((o) => + o.setName("youtube").setDescription("URL YouTube pour la musique (MP4)"), + ) + .addIntegerOption((o) => + o.setName("audio_offset").setDescription("Début musique (s)").setMinValue(0), + ); + +/* -------------------------------------------------------------------------- */ +/* Helpers */ +/* -------------------------------------------------------------------------- */ +const bar = (p: number) => + "▮".repeat(Math.round((p / 100) * BAR_LEN)) + + "▯".repeat(BAR_LEN - Math.round((p / 100) * BAR_LEN)); +const cpu = () => os.loadavg()[0].toFixed(2); + +const spawnP = (cmd: string, args: string[], onErr?: (s: string) => void) => + new Promise((ok, fail) => { + const p = spawn(cmd, args); + p.stderr.on("data", (d) => onErr?.(d.toString())); + p.on("error", fail); + p.on("close", (c) => (c === 0 ? ok() : fail(new Error(`${cmd} exited ${c}`)))); + }); + +async function ytDlpTry(url: string, out: string, extractor: string, prog: (p: number) => void) { + let last = 2; // progression 2-10 % + const args = [ + "--quiet", + "--no-playlist", + "--extractor-args", + extractor, + "-f", + "bestaudio", + "-o", + out, + "-x", + "--audio-format", + "m4a", + url, + ]; + await spawnP("yt-dlp", args, (l) => { + const m = /([0-9.]+)%/.exec(l); + if (m) { + const pct = 2 + Math.min(8, (parseFloat(m[1]) * 8) / 100); // 2→10% + if (pct > last) { + last = pct; + prog(pct); + } + } + }); +} + +/* -------------------------------------------------------------------------- */ +/* Command class */ +/* -------------------------------------------------------------------------- */ +export class animateCommand extends CommandsBase { + constructor(client: Bot) { + super(client, commandData.toJSON()); + } + + async run(interaction: CommandInteraction) { + const o = interaction.options as CommandInteractionOptionResolver; + const dur = o.getInteger("duration") ?? 2; + const fmt = (o.getString("format") ?? "gif") as "gif" | "mp4"; + const yt = o.getString("youtube"); + const offset = o.getInteger("audio_offset") ?? 0; + + if (yt && fmt === "gif") + return interaction.reply("🎵 La musique n’est disponible qu’en MP4."); + + const imgs = Array.from({ length: MAX_IMAGES }) + .map((_, i) => o.getAttachment(`image${i + 1}`)) + .filter(Boolean); + if (imgs.length < 2) + return interaction.reply("📷 Il faut au moins 2 images."); + + await interaction.deferReply(); + const upd = (p: number, stage: string) => + interaction.editReply(`Progress ${p}%\n\`${bar(p)}\`\n${stage}\nCPU : ${cpu()}`); + + const tmp = fs.mkdtempSync(path.join(os.tmpdir(), "ia-anim-")); + let audioPath = ""; + + try { + /* 1) Téléchargement musique : 2-10 % */ + if (yt) { + audioPath = path.join(tmp, "audio.m4a"); + upd(1, "Audio : démarrage…"); + try { + await ytDlpTry(yt, audioPath, "youtube:sabr=yes,player_client=web", (p) => upd(p, "Audio : SABR")); + } catch { + await ytDlpTry(yt, audioPath, "youtube:player_client=android_music", (p) => upd(p, "Audio : fallback")); + } + } + + /* 2) Normalisation images : 10-30 % */ + let i = 0; + for (const img of imgs) { + const r = await fetch((img as any).url); + const b = Buffer.from(await r.arrayBuffer()); + await sharp(b).png().toFile(path.join(tmp, `f_${i.toString().padStart(3, "0")}.png`)); + i++; + upd(10 + Math.round((i / imgs.length) * 20), `Images ${i}/${imgs.length}`); + } + + /* 3) concat list */ + const frames = fs.readdirSync(tmp).filter((f) => f.startsWith("f_")); + const concatLines = frames.flatMap((f) => [`file '${path.join(tmp, f)}'`, `duration ${dur}`]); + concatLines.push(`file '${path.join(tmp, frames.at(-1)!) }'`); + const concatPath = path.join(tmp, "frames.txt"); + fs.writeFileSync(concatPath, concatLines.join("\n")); + + /* 4) Encodage vidéo : 30-90 % */ + const raw = path.join(tmp, `video.${fmt}`); + const ff = [ + "-y", "-hide_banner", "-loglevel", "error", + "-f", "concat", "-safe", "0", "-i", concatPath, + "-vsync", "vfr", "-progress", "pipe:1", + ]; + if (fmt === "gif") + ff.push("-pix_fmt", "rgb24", raw); + else + ff.push("-r", `${Math.round(30 / dur)}`, "-c:v", "libx264", "-pix_fmt", "yuv420p", "-movflags", "+faststart", raw); + + await new Promise((ok, fail) => { + const p = spawn("ffmpeg", ff); + p.stdout.on("data", (d) => { + const m = /out_time_ms=(\\d+)/.exec(d.toString()); + if (m) { + const pct = 30 + Math.min(60, Math.round((parseInt(m[1]) / (imgs.length * dur * 1e3)) * 60)); + upd(pct, "Vidéo"); + } + }); + p.on("error", fail); + p.on("close", (c) => (c ? fail(new Error("ffmpeg fail")) : ok())); + }); + + /* 5) Fusion audio + vidéo : 90-100 % */ + let fin = raw; + if (fmt === "mp4" && audioPath) { + upd(95, "Fusion audio/vidéo…"); + const out = path.join(tmp, "output.mp4"); + const merge = [ + "-y", "-hide_banner", "-loglevel", "error", + "-i", raw, + ...(offset > 0 ? ["-ss", `${offset}`] : []), + "-i", audioPath, + "-c:v", "copy", + "-af", "apad", // ajoute silence si musique plus courte + "-c:a", "aac", + "-shortest", // coupe la vidéo à la fin du diaporama + out, + ]; + await execAsync(`ffmpeg ${merge.map((s) => (s.includes(" ") ? `"${s}"` : s)).join(" ")}`); + fin = out; + } + + /* 6) Envoi */ + upd(100, "Terminé"); + await interaction.editReply({ + content: "✅ Fini !", + files: [new AttachmentBuilder(fs.readFileSync(fin), { name: path.basename(fin) })], + }); + } catch (e: any) { + await interaction.editReply(`❌ Erreur : ${e.message}`); + } finally { + fs.rmSync(tmp, { recursive: true, force: true }); + } + } +} diff --git a/src/bot/commands/avatar.ts b/src/bot/commands/avatar.ts new file mode 100644 index 0000000..d059916 --- /dev/null +++ b/src/bot/commands/avatar.ts @@ -0,0 +1,33 @@ +import { CommandInteraction, SlashCommandBuilder } from "discord.js"; +import CommandsBase from "./baseCommands"; +import Bot from "../index"; +import { bt } from "../../main"; + +// Commande pour afficher l'avatar de l'utilisateur +const commandData = new SlashCommandBuilder() + .setName("avatar") + .setDescription("Show your avatar"); + +export class AvatarCommand extends CommandsBase { + constructor(client: Bot) { + super(client, commandData.toJSON()); + } + + async run(interaction: CommandInteraction) { + // Si l'utilisateur n'est pas blacklisté, continuer avec la commande + const i = await interaction.deferReply(); + + // Affiche l'avatar de l'utilisateur qui a exécuté la commande + i.edit({ + content: bt.__({ + phrase: "Your avatar :", + locale: interaction.locale, + }), + embeds: [{ + image: { + url: interaction.user.displayAvatarURL(), + }, + }], + }); + } +} diff --git a/src/bot/commands/botstats.ts b/src/bot/commands/botstats.ts new file mode 100644 index 0000000..0b88036 --- /dev/null +++ b/src/bot/commands/botstats.ts @@ -0,0 +1,47 @@ +import { + CommandInteraction, + SlashCommandBuilder, + EmbedBuilder, +} from "discord.js"; +import os from "os"; +import process from "process"; +import CommandsBase from "./baseCommands"; +import Bot from "../index"; + +const commandData = new SlashCommandBuilder() + .setName("botstats") + .setDescription("Show bot system and performance stats."); + +export class BotStatsCommand extends CommandsBase { + constructor(client: Bot) { + super(client, commandData.toJSON()); + } + + async run(interaction: CommandInteraction) { + await interaction.deferReply(); + + const memoryUsage = process.memoryUsage(); + const uptime = process.uptime(); + + const embed = new EmbedBuilder() + .setTitle("📈 Bot Stats") + .setColor("Green") + .addFields([ + { name: "🧠 RAM", value: `${(memoryUsage.rss / 1024 / 1024).toFixed(2)} MB`, inline: true }, + { name: "🕒 Uptime", value: formatUptime(uptime), inline: true }, + { name: "💻 Platform", value: `${os.type()} ${os.release()} (${os.arch()})`, inline: false }, + { name: "🧰 Node.js", value: process.version, inline: true }, + { name: "📦 Discord.js", value: `v${require("discord.js").version}`, inline: true }, + ]) + .setTimestamp(); + + return interaction.editReply({ embeds: [embed] }); + } +} + +function formatUptime(seconds: number): string { + const d = Math.floor(seconds / 86400); + const h = Math.floor((seconds % 86400) / 3600); + const m = Math.floor((seconds % 3600) / 60); + return `${d}d ${h}h ${m}m`; +} diff --git a/src/bot/commands/help.ts b/src/bot/commands/help.ts new file mode 100644 index 0000000..be124e4 --- /dev/null +++ b/src/bot/commands/help.ts @@ -0,0 +1,61 @@ +import { CommandInteraction, SlashCommandBuilder } from "discord.js"; +import CommandsBase from "./baseCommands"; +import Bot from "../index"; + +const commandData = new SlashCommandBuilder() + .setName("help") + .setDescription("List all available commands and their descriptions"); + +export class HelpCommand extends CommandsBase { + constructor(client: Bot) { + super(client, commandData.toJSON()); + } + + async run(interaction: CommandInteraction) { + + // Liste des commandes et descriptions + const commandsList = [ + { + name: "/luck", + description: "Check your luck with a random percentage.", + }, + { + name: "/help", + description: "List all available commands and their descriptions.", + }, + { + name: "/worker", + description: "Show AI Horde Worker Information", + }, + { + name: "/ping", + description: "Shows the bot's ping on the discord api", + }, + { + name: "/vote", + description: "vote", + }, + { + name: "/avatar", + description: "Show your avatar", + }, + { + name: "/ai help", + description: "Show IA help", + }, + // Ajoutez d'autres commandes ici + ]; + + // Création du message avec les commandes disponibles + const commandDescriptions = commandsList + .map( + (cmd) => `**${cmd.name}**: ${cmd.description}` + ) + .join("\n"); + + // Répondre à l'interaction avec la liste des commandes + await interaction.reply({ + content: `Here are all the available commands:\n\n${commandDescriptions}`, + }); + } +} diff --git a/src/bot/commands/luck.ts b/src/bot/commands/luck.ts new file mode 100644 index 0000000..f60620d --- /dev/null +++ b/src/bot/commands/luck.ts @@ -0,0 +1,35 @@ +import { + ApplicationCommandOptionChoiceData, + AutocompleteInteraction, + CommandInteraction, + CommandInteractionOptionResolver, + MessageFlags, + SlashCommandBuilder, +} from "discord.js"; +import CommandsBase from "./baseCommands"; +import Bot from "../index"; +import { bt } from "../../main"; + +const commandData = new SlashCommandBuilder() + .setName("luck") + .setDescription("your luck"); + +export class luckCommand extends CommandsBase { + constructor(client: Bot) { + super(client, commandData.toJSON()); + } + + async run(interaction: CommandInteraction) { + + // Si l'utilisateur n'est pas blacklisté, continuer avec la commande + let i = await interaction.deferReply(); + const randomPercentage = Math.floor(Math.random() * 101); + + i.edit({ + content: bt.__({ + phrase: "Your luck is %s%", + locale: interaction.locale, + }, randomPercentage.toString()), + }); + } +} diff --git a/src/bot/commands/ping.ts b/src/bot/commands/ping.ts new file mode 100644 index 0000000..1460748 --- /dev/null +++ b/src/bot/commands/ping.ts @@ -0,0 +1,27 @@ +import { CommandInteraction, SlashCommandBuilder } from "discord.js"; +import CommandsBase from "./baseCommands"; +import Bot from "../index"; + +// Définition des données de la commande +const commandData = new SlashCommandBuilder() + .setName("ping") + .setDescription("Shows the bot's ping on the discord api"); + +export class PingCommand extends CommandsBase { + constructor(client: Bot) { + super(client, commandData.toJSON()); // Appel du constructeur parent + } + + // Méthode qui sera exécutée lorsque la commande sera lancée + async run(interaction: CommandInteraction) { + + let i = await interaction.deferReply(); // Délai pour attendre la réponse + + // Mesure du temps de réponse du bot + const ping = this.client.ws.ping; + + i.edit({ + content: `The bot's ping to the Discord API is ${ping} ms`, + }); + } +} diff --git a/src/bot/commands/serverinfo.ts b/src/bot/commands/serverinfo.ts new file mode 100644 index 0000000..c72b981 --- /dev/null +++ b/src/bot/commands/serverinfo.ts @@ -0,0 +1,30 @@ +import { CommandInteraction, SlashCommandBuilder } from "discord.js"; +import CommandsBase from "./baseCommands"; +import Bot from "../index"; + +const commandData = new SlashCommandBuilder() + .setName("serverinfo") + .setDescription("Displays information about the server"); + +export class ServerInfoCommand extends CommandsBase { + constructor(client: Bot) { + super(client, commandData.toJSON()); + } + + async run(interaction: CommandInteraction) { + + const guild = interaction.guild; + const memberCount = guild?.memberCount; + const createdAt = guild?.createdAt.toDateString(); + const owner = await guild?.fetchOwner(); + + await interaction.reply({ + content: `Server Info: + - Name: ${guild?.name} + - ID: ${guild?.id} + - Created on: ${createdAt} + - Owner: ${owner?.user.tag} + - Members: ${memberCount}`, + }); + } +} diff --git a/src/bot/commands/shard.ts b/src/bot/commands/shard.ts new file mode 100644 index 0000000..3c5b8e3 --- /dev/null +++ b/src/bot/commands/shard.ts @@ -0,0 +1,84 @@ +import { + CommandInteraction, + EmbedBuilder, + SlashCommandBuilder, +} from "discord.js"; +import CommandsBase from "./baseCommands"; +import Bot from "../index"; +import { bt } from "../../main"; + +// Définir la commande +const commandData = new SlashCommandBuilder() + .setName("shardinfsrv") + .setDescription("Get detailed shard information"); + +// Classe pour la commande +export class ShardInfoCommand extends CommandsBase { + constructor(client: Bot) { + super(client, commandData.toJSON()); + } + + async run(interaction: CommandInteraction) { + let i = await interaction.deferReply(); + + // Vérifier si le bot utilise le sharding + if (interaction.client.shard) { + const shardId = interaction.client.shard.ids[0]; // Utiliser ids[0] pour obtenir l'ID du shard actuel + + // Récupérer des informations sur tous les shards + const shardInfo = await interaction.client.shard!.broadcastEval(client => { + return { + id: client.shard.ids[0], + guilds: client.guilds.cache.size, + members: client.guilds.cache.reduce((acc, guild) => acc + guild.memberCount, 0), + uptime: client.uptime || 0, + }; + }); + + const shardCount = shardInfo.length; // Nombre total de shards + const currentShard = shardInfo.find(info => info.id === shardId); // Trouver les informations pour le shard actuel + + if (!currentShard) { + await i.edit("Error retrieving shard information."); + return; + } + + // Calculer l'uptime au format lisible (en secondes) + const uptimeInSeconds = Math.floor(currentShard.uptime / 1000); + const uptime = `${Math.floor(uptimeInSeconds / 3600)}h ${Math.floor((uptimeInSeconds % 3600) / 60)}m ${uptimeInSeconds % 60}s`; + + // Création de l'embed avec toutes les informations + const embed = new EmbedBuilder() + .setTitle("Shard Information") + .setColor("Blue") + .setDescription(`Your is shard **${shardId}**`) + .addFields([ + { + name: "Servers on this Shard", + value: `${currentShard.guilds} servers`, + inline: true, + }, + { + name: "Users on this Shard", + value: `${currentShard.members} users`, + inline: true, + }, + { + name: "Total Shards", + value: `${shardCount} shards online`, + inline: true, + }, + { + name: "Shard Uptime", + value: `${uptime}`, + inline: true, + }, + ]); + + // Répondre avec l'embed + await i.edit({ embeds: [embed] }); + } else { + await i.edit("The bot is not using sharding."); + } + } +} diff --git a/src/bot/commands/shardstats.ts b/src/bot/commands/shardstats.ts new file mode 100644 index 0000000..2a3aa37 --- /dev/null +++ b/src/bot/commands/shardstats.ts @@ -0,0 +1,54 @@ +import { + CommandInteraction, + SlashCommandBuilder, + EmbedBuilder, +} from "discord.js"; +import CommandsBase from "./baseCommands"; +import Bot from "../index"; + +const commandData = new SlashCommandBuilder() + .setName("shardstats") + .setDescription("Displays statistics for all bot shards."); + +export class ShardStatsCommand extends CommandsBase { + constructor(client: Bot) { + super(client, commandData.toJSON()); + } + + async run(interaction: CommandInteraction) { + await interaction.deferReply(); + + const shardData = await interaction.client.shard?.broadcastEval(client => ({ + shardId: client.shard?.ids[0] ?? 0, + guildCount: client.guilds.cache.size, + memberCount: client.guilds.cache.reduce((acc, g) => acc + g.memberCount, 0), + ping: client.ws.ping + })); + + if (!shardData) { + return interaction.editReply({ content: "⚠️ Failed to fetch shard stats." }); + } + + const totalServers = shardData.reduce((acc, s) => acc + s.guildCount, 0); + const totalMembers = shardData.reduce((acc, s) => acc + s.memberCount, 0); + + const embed = new EmbedBuilder() + .setTitle("📊 Shard Statistics") + .setColor("Blue") + .addFields( + ...shardData.map((s) => ({ + name: `Shard ${s.shardId}`, + value: `🧩 Servers: **${s.guildCount}**\n👥 Members: **${s.memberCount}**\n📡 Ping: **${s.ping}ms**`, + inline: true, + })), + { + name: "🌍 Total", + value: `**Servers:** ${totalServers}\n**Members:** ${totalMembers}`, + inline: false, + } + ) + .setTimestamp(); + + return interaction.editReply({ embeds: [embed] }); + } +} diff --git a/src/bot/commands/uptime.ts b/src/bot/commands/uptime.ts new file mode 100644 index 0000000..54ce79f --- /dev/null +++ b/src/bot/commands/uptime.ts @@ -0,0 +1,30 @@ +import { + CommandInteraction, + SlashCommandBuilder, +} from "discord.js"; +import CommandsBase from "./baseCommands"; +import Bot from "../index"; + +const commandData = new SlashCommandBuilder() + .setName("uptime") + .setDescription("Show how long the bot has been online."); + +export class UptimeCommand extends CommandsBase { + constructor(client: Bot) { + super(client, commandData.toJSON()); + } + + async run(interaction: CommandInteraction) { + const uptime = process.uptime(); + const formatted = formatUptime(uptime); + await interaction.reply(`🕒 The bot has been online for **${formatted}**.`); + } +} + +function formatUptime(seconds: number): string { + const d = Math.floor(seconds / 86400); + const h = Math.floor((seconds % 86400) / 3600); + const m = Math.floor((seconds % 3600) / 60); + const s = Math.floor(seconds % 60); + return `${d}d ${h}h ${m}m ${s}s`; +} diff --git a/src/bot/commands/vote.ts b/src/bot/commands/vote.ts new file mode 100644 index 0000000..930ca4d --- /dev/null +++ b/src/bot/commands/vote.ts @@ -0,0 +1,32 @@ +import { + ApplicationCommandOptionChoiceData, + AutocompleteInteraction, + CommandInteraction, + CommandInteractionOptionResolver, + MessageFlags, + SlashCommandBuilder, +} from "discord.js"; +import CommandsBase from "./baseCommands"; +import Bot from "../index"; +import { bt } from "../../main"; + +const commandData = new SlashCommandBuilder() + .setName("vote") + .setDescription("vote") + +export class GayCommand extends CommandsBase { + constructor(client: Bot) { + super(client, commandData.toJSON()); + } + + async run(interaction: CommandInteraction){ + let i = await interaction.deferReply(); + const randomPercentage = Math.floor(Math.random() * 101); + i.edit({ + content: bt.__({ + phrase: "https://top.gg/fr/bot/1190014646351036577", + locale: interaction.locale, + }, randomPercentage.toString()), + }); + } +} \ No newline at end of file diff --git a/src/bot/commands/worker.ts b/src/bot/commands/worker.ts new file mode 100644 index 0000000..14d22c8 --- /dev/null +++ b/src/bot/commands/worker.ts @@ -0,0 +1,141 @@ +import { + SlashCommandBuilder, + CommandInteraction, + CommandInteractionOptionResolver, + AutocompleteInteraction, + EmbedBuilder, + Colors, +} from "discord.js"; +import CommandsBase from "./baseCommands"; +import Bot from "../index"; + +// Définition du nouveau slash command avec un champ de recherche optionnel +const commandData = new SlashCommandBuilder() + .setName("worker") + .setDescription("Show AI Horde Worker Information") + .addStringOption((option) => + option + .setName("query") + .setDescription("Name or ID of the worker to search for") + .setRequired(true) // Rendre l'option 'query' obligatoire + .setAutocomplete(true) // Activer l'autocomplétion + ); + +export class workerCommand extends CommandsBase { + constructor(client: Bot) { + super(client, commandData.toJSON()); + } + + // Exécution de la commande lorsqu'elle est appelée par l'utilisateur + async run(interaction: CommandInteraction) { + let i = await interaction.deferReply(); // Réponse différée pour éviter un délai de traitement long + + try { + // Récupération des données depuis l'API + const response = await fetch("https://stablehorde.net/api/v2/workers"); + if (!response.ok) throw new Error("Error retrieving API data."); + + const workers: { + name: string; + id: string; + requests_fulfilled: number; + kudos_rewards: number; + performance: string; + uptime: number; + maintenance_mode: boolean; + nsfw: boolean; + trusted: boolean; + models: string[] | null; + team: { name: string | null }; + }[] = await response.json(); + + // Récupérer l'option 'query' de l'utilisateur (si elle existe) + const query = (interaction.options as CommandInteractionOptionResolver).getString("query"); + + if (query) { + // Si une recherche spécifique est effectuée + const worker = workers.find( + (w) => + w.name?.toLowerCase() === query?.toLowerCase() || + w.id?.toLowerCase() === query?.toLowerCase() + ); + + if (worker) { + // Si un worker correspondant est trouvé, afficher ses détails + const embed = new EmbedBuilder() + .setTitle(`Worker Details : ${worker.name}`) + .setColor(Colors.Blue) + .setDescription( + `**Name :** ${worker.name}\n` + + `**ID :** ${worker.id}\n` + + `**Team :** ${worker.team?.name ?? "null"}\n` + + `**Performance :** ${worker.performance}\n` + + `**NSFW :** ${worker.nsfw ? "Yes" : "No"}\n` + + `**Maintenance :** ${worker.maintenance_mode ? "On" : "Off"}\n` + + `**Trusted :** ${worker.trusted ? "Yes" : "No"}\n` + + `**Models :** ${worker.models ? worker.models.join(", ") : "Aucun"}\n` + + `**Requests Completed :** ${worker.requests_fulfilled}\n` + + `**Kudos :** ${worker.kudos_rewards}\n` + + `**Uptime :** ${Math.floor(worker.uptime / 3600)}h ${Math.floor( + (worker.uptime % 3600) / 60 + )}m` + ); + + await i.edit({ embeds: [embed] }); + } else { + // Si aucun worker n'est trouvé, afficher un message d'erreur + await i.edit({ content: "No workers found for this search." }); + } + } else { + // Si aucune recherche spécifique n'est effectuée, afficher une liste des 10 premiers workers + const workerList = workers + .slice(0, 10) // Limiter la liste des workers à 10 pour éviter un message trop long + .map((w) => + `**${w.name}** (ID: \`${w.id}\`, Models : ${w.models ? w.models.join(", ") : "Aucun"})` + ) + .join("\n"); + + const embed = new EmbedBuilder() + .setTitle("Liste des Workers") + .setColor(Colors.Green) + .setDescription(workerList || "No workers available."); + + await i.edit({ embeds: [embed] }); + } + } catch (error) { + console.error(error); + await i.edit({ + content: "An error occurred while retrieving worker data.", + }); + } + } + + // Fonction d'autocomplétion pour les suggestions de recherche + async autocomplete(interaction: AutocompleteInteraction) { + try { + // Récupérer les données des workers + const response = await fetch("https://stablehorde.net/api/v2/workers"); + if (!response.ok) throw new Error("Error retrieving API data."); + + const workers: { name: string; id: string }[] = await response.json(); + + // Filtrer les suggestions en fonction de l'entrée de l'utilisateur + const focusedValue = interaction.options.getFocused(); + const suggestions = workers + .filter((worker) => + worker.name.toLowerCase().includes(focusedValue.toLowerCase()) || + worker.id.toLowerCase().includes(focusedValue.toLowerCase()) + ) + .slice(0, 25) // Limite de 25 suggestions pour Discord + .map((worker) => ({ + name: worker.name, + value: worker.id, + })); + + await interaction.respond(suggestions); + } catch (error) { + console.error("Error during autocomplete : ", error); + await interaction.respond([]); // Répondre avec aucune suggestion en cas d'erreur + } + } +} diff --git a/src/bot/index.ts b/src/bot/index.ts index 00e87bb..f8f68a5 100644 --- a/src/bot/index.ts +++ b/src/bot/index.ts @@ -22,7 +22,7 @@ export default class Bot extends Client { cache: { generations_check: 1000 * 30, }, - client_agent: "Ketsuna;Discordbot;1.0.1;", + client_agent: "Morgane AI ;Discordbot;1.0.1;", default_token: "0000000000", }); commands: Map = new Map(); @@ -46,10 +46,10 @@ export default class Bot extends Client { { name: isDev ? "in development" - : process.env.DISCORD_STATUS_NAME || "Ketsuna is the Best Bot", + : process.env.DISCORD_STATUS_NAME || "Morgane AI is the Best Bot", type: ActivityType.Playing, state: - process.env.DISCORD_STATUS_STATE || "Ketsuna is the Best Bot", + process.env.DISCORD_STATUS_STATE || "Morgane AI is the Best Bot", }, ], }, @@ -66,25 +66,25 @@ export default class Bot extends Client { this.on(Events.ClientReady, () => { console.log("Bot is ready!"); this.loadCommands(); - if (this.application.id === "1100859965616427068") { + if (this.application.id === "1190014646351036577") { this.on(Events.EntitlementCreate, async (entitlement) => { let user = await entitlement.fetchUser() // send message on support server - this.channels.fetch("1174557566773252146").then((channel) => { + this.channels.fetch("1312408529507713066").then((channel) => { if(!channel.isTextBased()) return; channel.send({ - content: `<@${entitlement.userId}> (${user.tag}) has purchased Ketsuna Premium!`, + content: `<@${entitlement.userId}> (${user.tag}) has purchased Morgane AI Premium!`, }); }); // send dm to user user.send({ - content: `If you are not yet in the support server, please join it here: https://discord.gg/wqvBzHe8YQ \n\n This way we can give you your Rewards for suscribing to Ketsuna Premium!`, + content: `If you are not yet in the support server, please join it here: https://discord.gg/Usc9ZY6W \n\n This way we can give you your Rewards for suscribing to Morgane AI Premium!`, embeds: [ { title: "Join the Support Server", - url: "https://discord.gg/wqvBzHe8YQ", - description: `Thank you for purchasing Ketsuna Premium! You need to be Logged in to the bot to use it.\nPlease use { + console.log(`[Bot] Logged in as ${client.user?.tag}.`); +}); + +client.on("messageCreate", async (message) => { + if (message.author.bot) return; + + // Commande !shardinfsrv + if (message.content === "!shardinfsrv") { + if (message.client.shard) { + const shardId = message.client.shard.ids[0]; + + const embed = new EmbedBuilder() + .setTitle("Shard Information") + .setColor("Blue") + .setDescription(`This command was executed on shard **${shardId}**.`); + + await message.reply({ embeds: [embed] }); + } else { + await message.reply("The bot is not using sharding."); + } + } + + // Commande !shardstats + if (message.content === "!shardstats") { + if (message.client.shard) { + try { + // Récupérer les statistiques des shards + const results = await message.client.shard.broadcastEval(client => { + return { + shardId: client.shard?.ids[0] || 0, + guildCount: client.guilds.cache.size, + memberCount: client.guilds.cache.reduce((acc, guild) => acc + (guild.memberCount || 0), 0), + }; + }); + + // Construction de l'embed avec les informations + const embed = new EmbedBuilder() + .setTitle("Shard Statistics") + .setColor("Green"); + + results.forEach((shard: any) => { + embed.addFields([ + { name: `Shard ${shard.shardId}`, value: `Servers: ${shard.guildCount}\nMembers: ${shard.memberCount}`, inline: false }, + ]); + }); + + // Réponse avec l'embed + await message.reply({ embeds: [embed] }); + } catch (err) { + console.error("Error fetching shard stats:", err); + await message.reply("An error occurred while fetching shard stats."); + } + } else { + await message.reply("The bot is not using sharding."); + } + } +}); + +client.login(process.env.DISCORD_TOKEN).catch(console.error); diff --git a/src/shard.ts b/src/shard.ts new file mode 100644 index 0000000..8707a8e --- /dev/null +++ b/src/shard.ts @@ -0,0 +1,232 @@ +import { ShardingManager, Client, GatewayIntentBits, EmbedBuilder } from "discord.js"; +import dotenv from "dotenv"; +import fs from "fs"; +import path from "path"; + +dotenv.config(); + +// Vérification des variables d'environnement +const TOKEN = process.env.DISCORD_TOKEN; +const SERVERS_PER_SHARD = parseInt(process.env.SERVERS_PER_SHARD || "50", 10); +const OWNER_ID = process.env.OWNER_ID; + +if (!TOKEN) { + console.error("The bot's token is not defined. Please check your .env file."); + process.exit(1); +} + +if (!SERVERS_PER_SHARD) { + console.error("The variable SERVERS_PER_SHARD is not correctly defined. Please check your .env file."); + process.exit(1); +} + +if (!OWNER_ID) { + console.error("The OWNER_ID variable is not defined. Please check your .env file."); + process.exit(1); +} + +// Initialisation du client Discord +const client = new Client({ + intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent], +}); + +client.once("ready", () => { + console.log(`[Bot] Logged in as ${client.user?.tag}.`); + + // Calculer dynamiquement le nombre de guildes + const GUILD_COUNT = client.guilds.cache.size; + + if (GUILD_COUNT === 0) { + console.log("[ShardManager] The bot is not in any guilds. Exiting..."); + process.exit(1); // Si le bot n'est dans aucune guilde, sortir + } + + // Calculer dynamiquement le nombre de shards nécessaires + const shardCount = Math.max(1, Math.ceil(GUILD_COUNT / SERVERS_PER_SHARD)); + console.log(`[ShardManager] Calculated number of shards: ${shardCount} shard(s) needed.`); + + // Chemin pour stocker la whitelist + const whitelistFilePath = path.resolve(__dirname, "../whitelist.json"); + + // Fonction utilitaire pour gérer la whitelist + function readWhitelist(): Set { + if (!fs.existsSync(whitelistFilePath)) return new Set(); + const data = JSON.parse(fs.readFileSync(whitelistFilePath, "utf-8")); + return new Set(data); + } + + function writeWhitelist(whitelistSet: Set) { + fs.writeFileSync(whitelistFilePath, JSON.stringify(Array.from(whitelistSet)), "utf-8"); + } + + // Charger la whitelist existante + const whitelist: Set = readWhitelist(); + + // Variables pour suivre les états des shards + const shardStatuses: string[] = new Array(shardCount).fill("Unknown"); + + // Initialisation du ShardingManager + const manager = new ShardingManager("./dist/main.js", { + token: TOKEN, + totalShards: shardCount, + respawn: true, + }); + + // Suivi des événements des shards + manager.on("shardCreate", (shard) => { + console.log(`[ShardManager] Shard ${shard.id} has been created.`); + shardStatuses[shard.id] = "Launching"; + + shard.once("ready", () => { + shardStatuses[shard.id] = "Online"; + }); + + shard.once("disconnect", () => { + shardStatuses[shard.id] = "Disconnected"; + }); + + shard.once("death", () => { + shardStatuses[shard.id] = "Dead"; + }); + }); + + // Lancer les shards + manager + .spawn({ delay: 5500, timeout: 30000 }) + .then(() => console.log("[ShardManager] All shards have been launched.")) + .catch((err) => console.error("[ShardManager] Error while launching shards:", err)); + + // Commande pour lister les shards + client.on("messageCreate", async (message) => { + if (message.author.bot) return; + + // Commande `!shhelp` + if (message.content === "!shhelp") { + const embed = new EmbedBuilder() + .setTitle("Available Commands") + .setColor("Green") + .setDescription( + "Here are the commands you can use:\n\n" + + "**!addwhitelist **: Adds a user to the whitelist (Owner only).\n" + + "**!removewhitelist **: Removes a user from the whitelist (Owner only).\n" + + "**!listwhitelist**: Lists all users in the whitelist (Owner only).\n" + + "**!restartshard **: Restarts a specific shard (whitelisted users only).\n" + + "**!shardstart**: Starts a new shard (whitelisted users only).\n" + + "**!shard**: Displays information about all shards.\n" + + "**!srvshard**: Lists servers managed by each shard (Owner only)." + ) + .setFooter({ text: "Use each command with the correct format." }); + + message.reply({ embeds: [embed] }); + } + + // Commande `!addwhitelist` + if (message.content.startsWith("!addwhitelist")) { + const args = message.content.split(" "); + if (args.length !== 2 || !args[1].match(/\d{18}/)) { + return message.reply("Usage: `!addwhitelist `."); + } + + const userId = args[1]; + if (message.author.id !== OWNER_ID) { + return message.reply("You do not have permission."); + } + + whitelist.add(userId); + writeWhitelist(whitelist); // Ne pas oublier d'écrire la whitelist après modification + return message.reply(`${userId} has been added to the whitelist.`); + } + + // Commande `!removewhitelist` + if (message.content.startsWith("!removewhitelist")) { + const args = message.content.split(" "); + if (args.length !== 2 || !args[1].match(/^\d{18}$/)) { + return message.reply("Usage: `!removewhitelist `."); + } + + const userId = args[1]; + if (message.author.id !== OWNER_ID) { + return message.reply("You do not have permission."); + } + + whitelist.delete(userId); + writeWhitelist(whitelist); + return message.reply(`${userId} has been removed from the whitelist.`); + } + + // Commande `!listwhitelist` + if (message.content === "!listwhitelist") { + if (message.author.id !== OWNER_ID) { + return message.reply("You do not have permission."); + } + + if (whitelist.size === 0) { + return message.reply("The whitelist is empty."); + } + + const whitelistList = Array.from(whitelist).join("\n"); + return message.reply(`Users in the whitelist:\n${whitelistList}`); + } + + // Commande `!restartshard` + if (message.content.startsWith("!restartshard")) { + const args = message.content.split(" "); + if (args.length !== 2 || isNaN(parseInt(args[1], 10))) { + return message.reply("Usage: `!restartshard `."); + } + + const shardId = parseInt(args[1], 10); + if (!whitelist.has(message.author.id)) { + return message.reply("You do not have permission."); + } + + const shard = manager.shards.get(shardId); + if (!shard) { + return message.reply(`Shard ${shardId} does not exist.`); + } + + shard.respawn(); + return message.reply(`Shard ${shardId} has been restarted.`); + } + + // Commande `!shardstart` + if (message.content === "!shardstart") { + let totalShards = manager.totalShards; + + if (typeof totalShards !== "number") { + totalShards = Number(totalShards); + if (isNaN(totalShards)) { + return message.reply("Failed to determine the current total shards."); + } + } + + const nextShardId = totalShards; // Le nouvel ID est après le dernier shard existant + manager.totalShards = totalShards + 1; // Augmenter le nombre total de shards + + try { + const newShard = manager.createShard(nextShardId); + newShard.spawn(); // Lancer le nouveau shard + return message.reply(`A new shard (ID: ${nextShardId}) has been started.`); + } catch (error) { + console.error("Error starting a new shard:", error); + return message.reply( + "Failed to start a new shard. Please check the logs for more details." + ); + } + } + + // Commande `!shard` + if (message.content === "!shard") { + const status = shardStatuses + .map((state, index) => `Shard ${index}: ${state}`) + .join("\n"); + + message.reply(`Shard statuses:\n${status}`); + } + }); +}); + +// Connexion du bot +client.login(TOKEN).catch((err) => { + console.error("[Bot] Login failed:", err); +}); diff --git a/src/utils/blacklist.ts b/src/utils/blacklist.ts new file mode 100644 index 0000000..6386096 --- /dev/null +++ b/src/utils/blacklist.ts @@ -0,0 +1,25 @@ +import fs from 'fs'; + +// Fonction pour vérifier si un utilisateur est blacklisté +export function isBlacklisted(userId: string): boolean { + const blacklist = loadBlacklist(); // Charger la blacklist à chaque vérification + return blacklist.includes(userId); +} + +// Fonction pour charger la liste noire à partir du fichier JSON +export function loadBlacklist(): string[] { + try { + const data = fs.readFileSync("../blacklist.json", "utf8"); + const json = JSON.parse(data); + return json.blacklist || []; + } catch (err) { + console.error("Erreur de chargement de la blacklist : ", err); + return []; + } +} + +// Fonction pour sauvegarder la liste noire dans le fichier JSON +export function saveBlacklist(blacklist: string[]): void { + const jsonData = JSON.stringify({ blacklist }, null, 2); + fs.writeFileSync("../blacklist.json", jsonData, "utf8"); +} \ No newline at end of file diff --git a/whitelist.json b/whitelist.json new file mode 100644 index 0000000..8539c60 --- /dev/null +++ b/whitelist.json @@ -0,0 +1 @@ +["1185603511577235572"] \ No newline at end of file