From 1d865a49b87a670682849896c38889615afc2c49 Mon Sep 17 00:00:00 2001 From: Mars Niermann Date: Thu, 26 Dec 2024 01:17:42 +0100 Subject: [PATCH] Switch default engine to deezer --- .envrc | 8 +- .gitignore | 10 +- .vscode/settings.json | 3 + deno.json | 8 + deno.lock | 1263 +++++++++++++++++++++++++++++++++++++++++ devbox.json | 15 - devbox.lock | 39 -- devenv.lock | 116 ++++ devenv.nix | 51 ++ devenv.yaml | 14 + package.json | 3 +- settings.json | 2 +- src/index.js | 533 +++++++++++++++++ src/index.ts | 71 ++- 14 files changed, 2051 insertions(+), 85 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 deno.json create mode 100644 deno.lock delete mode 100644 devbox.json delete mode 100644 devbox.lock create mode 100644 devenv.lock create mode 100644 devenv.nix create mode 100644 devenv.yaml create mode 100644 src/index.js diff --git a/.envrc b/.envrc index 84fc8e5..5bf8fc1 100644 --- a/.envrc +++ b/.envrc @@ -1,7 +1,3 @@ -# Automatically sets up your devbox environment whenever you cd into this -# directory via our direnv integration: +source_url "https://raw.githubusercontent.com/cachix/devenv/95f329d49a8a5289d31e0982652f7058a189bfca/direnvrc" "sha256-d+8cBpDfDBj41inrADaJt+bDWhOktwslgoP5YiGJ1v0=" -eval "$(devbox generate direnv --print-envrc)" - -# check out https://www.jetpack.io/devbox/docs/ide_configuration/direnv/ -# for more details +use devenv \ No newline at end of file diff --git a/.gitignore b/.gitignore index b742063..8bdc973 100644 --- a/.gitignore +++ b/.gitignore @@ -130,4 +130,12 @@ dist .pnp.* lavalink/ Lavalink.jar -settings.json \ No newline at end of file +settings.json# Devenv +.devenv* +devenv.local.nix + +# direnv +.direnv + +# pre-commit +.pre-commit-config.yaml diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..b943dbc --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "deno.enable": true +} \ No newline at end of file diff --git a/deno.json b/deno.json new file mode 100644 index 0000000..9cb4e93 --- /dev/null +++ b/deno.json @@ -0,0 +1,8 @@ +{ + "tasks": { + "dev": "deno run --watch main.ts" + }, + "imports": { + "@std/assert": "jsr:@std/assert@1" + } +} \ No newline at end of file diff --git a/deno.lock b/deno.lock new file mode 100644 index 0000000..db96872 --- /dev/null +++ b/deno.lock @@ -0,0 +1,1263 @@ +{ + "version": "4", + "specifiers": { + "jsr:@std/assert@1": "1.0.10", + "jsr:@std/internal@^1.0.5": "1.0.5", + "npm:@biomejs/biome@1.6.0": "1.6.0", + "npm:@tsconfig/node18@^18.2.2": "18.2.4", + "npm:@types/node@^18.7.18": "18.19.68", + "npm:@typescript-eslint/parser@^5.62.0": "5.62.0_eslint@8.57.1_typescript@4.9.5", + "npm:discord.js@^14.14.1": "14.16.3", + "npm:dotenv@^16.4.5": "16.4.7", + "npm:eslint@^8.57.0": "8.57.1", + "npm:kazagumo-deezer@^2.0.2": "2.0.2", + "npm:kazagumo-spotify@^2.0.1": "2.1.1", + "npm:kazagumo@^3.0.1": "3.2.2", + "npm:prettier-eslint@^16.3.0": "16.3.0_eslint@8.57.1_typescript@5.7.2", + "npm:prettier@^3.2.5": "3.4.2", + "npm:pretty-ms@9": "9.2.0", + "npm:shoukaku@^4.0.1": "4.1.1", + "npm:tsx@^4.7.1": "4.19.2", + "npm:typescript@^4.9.5": "4.9.5" + }, + "jsr": { + "@std/assert@1.0.10": { + "integrity": "59b5cbac5bd55459a19045d95cc7c2ff787b4f8527c0dd195078ff6f9481fbb3", + "dependencies": [ + "jsr:@std/internal" + ] + }, + "@std/internal@1.0.5": { + "integrity": "54a546004f769c1ac9e025abd15a76b6671ddc9687e2313b67376125650dc7ba" + } + }, + "npm": { + "@biomejs/biome@1.6.0": { + "integrity": "sha512-hvP8K1+CV8qc9eNdXtPwzScVxFSHB448CPKSqX6+8IW8G7bbhBVKGC80BowExJN5+vu+kzsj4xkWa780MAOlJw==", + "dependencies": [ + "@biomejs/cli-darwin-arm64", + "@biomejs/cli-darwin-x64", + "@biomejs/cli-linux-arm64", + "@biomejs/cli-linux-arm64-musl", + "@biomejs/cli-linux-x64", + "@biomejs/cli-linux-x64-musl", + "@biomejs/cli-win32-arm64", + "@biomejs/cli-win32-x64" + ] + }, + "@biomejs/cli-darwin-arm64@1.6.0": { + "integrity": "sha512-K1Fjqye5pt+Ua+seC7V/2bFjfnqOaEOcQbBQSiiefB/VPNOb6lA5NFIfJ1PskTA3JrMXE1k7iqKQn56qrKFS6A==" + }, + "@biomejs/cli-darwin-x64@1.6.0": { + "integrity": "sha512-CjEALu6vN9RbcfhaBDoj481mesUIsUjxgQn+/kiMCea+Paypqslhez1I7OwRBJnkzz+Pa+PXdABd7S30eyy6+Q==" + }, + "@biomejs/cli-linux-arm64-musl@1.6.0": { + "integrity": "sha512-prww6AUuJ+IO/GziN3WjtGM/DNOVuPFxqWrK97wKTZygEDdA+o1qHUN2HeCkSyk084xnzbMSbls5xscAKAn43A==" + }, + "@biomejs/cli-linux-arm64@1.6.0": { + "integrity": "sha512-32LVrC7dAgQT39YZ0ieO/VzzpAflozs9mW5K0oKNef7S4ocCdk89E98eXApxOdei0JTf3vfseDCl1AUIp6MwJw==" + }, + "@biomejs/cli-linux-x64-musl@1.6.0": { + "integrity": "sha512-NwitWeUKCy8G/rr+rgHPYirnrsOjJEJBWODdaRzweeFNcJjvO6de6AmNdSJzsewzLEaxjOWyoXU03MdzbGz/6Q==" + }, + "@biomejs/cli-linux-x64@1.6.0": { + "integrity": "sha512-b6mWu9Cu4w5B3K46wq9SlxKEZEEL6II/6HFNAuZ4YL8mOeQ0FTMU+wNMJFKkmkSE2zvim3xwW3PknmbLKbe3Mg==" + }, + "@biomejs/cli-win32-arm64@1.6.0": { + "integrity": "sha512-DlNOL6mG+76iZS1gL/UiuMme7jnt+auzo2+u0aUq6UXYsb75juchwlnVLy2UV5CQjVBRB8+RM+KVoXRZ8NlBjQ==" + }, + "@biomejs/cli-win32-x64@1.6.0": { + "integrity": "sha512-sXBcXIOGuG8/XcHqmnkhLIs0oy6Dp+TkH4Alr4WH/P8mNsp5GcStI/ZwbEiEoxA0P3Fi+oUppQ6srxaY2rSCHg==" + }, + "@discordjs/builders@1.9.0": { + "integrity": "sha512-0zx8DePNVvQibh5ly5kCEei5wtPBIUbSoE9n+91Rlladz4tgtFbJ36PZMxxZrTEOQ7AHMZ/b0crT/0fCy6FTKg==", + "dependencies": [ + "@discordjs/formatters", + "@discordjs/util", + "@sapphire/shapeshift", + "discord-api-types@0.37.97", + "fast-deep-equal", + "ts-mixer", + "tslib@2.8.1" + ] + }, + "@discordjs/collection@1.5.3": { + "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==" + }, + "@discordjs/collection@2.1.1": { + "integrity": "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==" + }, + "@discordjs/formatters@0.5.0": { + "integrity": "sha512-98b3i+Y19RFq1Xke4NkVY46x8KjJQjldHUuEbCqMvp1F5Iq9HgnGpu91jOi/Ufazhty32eRsKnnzS8n4c+L93g==", + "dependencies": [ + "discord-api-types@0.37.97" + ] + }, + "@discordjs/rest@2.4.0": { + "integrity": "sha512-Xb2irDqNcq+O8F0/k/NaDp7+t091p+acb51iA4bCKfIn+WFWd6HrNvcsSbMMxIR9NjcMZS6NReTKygqiQN+ntw==", + "dependencies": [ + "@discordjs/collection@2.1.1", + "@discordjs/util", + "@sapphire/async-queue", + "@sapphire/snowflake", + "@vladfrangu/async_event_emitter", + "discord-api-types@0.37.97", + "magic-bytes.js", + "tslib@2.8.1", + "undici" + ] + }, + "@discordjs/util@1.1.1": { + "integrity": "sha512-eddz6UnOBEB1oITPinyrB2Pttej49M9FZQY8NxgEvc3tq6ZICZ19m70RsmzRdDHk80O9NoYN/25AqJl8vPVf/g==" + }, + "@discordjs/ws@1.1.1": { + "integrity": "sha512-PZ+vLpxGCRtmr2RMkqh8Zp+BenUaJqlS6xhgWKEZcgC/vfHLEzpHtKkB0sl3nZWpwtcKk6YWy+pU3okL2I97FA==", + "dependencies": [ + "@discordjs/collection@2.1.1", + "@discordjs/rest", + "@discordjs/util", + "@sapphire/async-queue", + "@types/ws", + "@vladfrangu/async_event_emitter", + "discord-api-types@0.37.83", + "tslib@2.8.1", + "ws" + ] + }, + "@esbuild/aix-ppc64@0.23.1": { + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==" + }, + "@esbuild/android-arm64@0.23.1": { + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==" + }, + "@esbuild/android-arm@0.23.1": { + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==" + }, + "@esbuild/android-x64@0.23.1": { + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==" + }, + "@esbuild/darwin-arm64@0.23.1": { + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==" + }, + "@esbuild/darwin-x64@0.23.1": { + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==" + }, + "@esbuild/freebsd-arm64@0.23.1": { + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==" + }, + "@esbuild/freebsd-x64@0.23.1": { + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==" + }, + "@esbuild/linux-arm64@0.23.1": { + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==" + }, + "@esbuild/linux-arm@0.23.1": { + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==" + }, + "@esbuild/linux-ia32@0.23.1": { + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==" + }, + "@esbuild/linux-loong64@0.23.1": { + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==" + }, + "@esbuild/linux-mips64el@0.23.1": { + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==" + }, + "@esbuild/linux-ppc64@0.23.1": { + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==" + }, + "@esbuild/linux-riscv64@0.23.1": { + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==" + }, + "@esbuild/linux-s390x@0.23.1": { + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==" + }, + "@esbuild/linux-x64@0.23.1": { + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==" + }, + "@esbuild/netbsd-x64@0.23.1": { + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==" + }, + "@esbuild/openbsd-arm64@0.23.1": { + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==" + }, + "@esbuild/openbsd-x64@0.23.1": { + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==" + }, + "@esbuild/sunos-x64@0.23.1": { + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==" + }, + "@esbuild/win32-arm64@0.23.1": { + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==" + }, + "@esbuild/win32-ia32@0.23.1": { + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==" + }, + "@esbuild/win32-x64@0.23.1": { + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==" + }, + "@eslint-community/eslint-utils@4.4.1_eslint@8.57.1": { + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dependencies": [ + "eslint", + "eslint-visitor-keys" + ] + }, + "@eslint-community/regexpp@4.12.1": { + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==" + }, + "@eslint/eslintrc@2.1.4": { + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dependencies": [ + "ajv", + "debug", + "espree", + "globals", + "ignore", + "import-fresh", + "js-yaml", + "minimatch@3.1.2", + "strip-json-comments" + ] + }, + "@eslint/js@8.57.1": { + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==" + }, + "@humanwhocodes/config-array@0.13.0": { + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "dependencies": [ + "@humanwhocodes/object-schema", + "debug", + "minimatch@3.1.2" + ] + }, + "@humanwhocodes/module-importer@1.0.1": { + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" + }, + "@humanwhocodes/object-schema@2.0.3": { + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==" + }, + "@jest/schemas@29.6.3": { + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dependencies": [ + "@sinclair/typebox" + ] + }, + "@nodelib/fs.scandir@2.1.5": { + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": [ + "@nodelib/fs.stat", + "run-parallel" + ] + }, + "@nodelib/fs.stat@2.0.5": { + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk@1.2.8": { + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": [ + "@nodelib/fs.scandir", + "fastq" + ] + }, + "@sapphire/async-queue@1.5.5": { + "integrity": "sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg==" + }, + "@sapphire/shapeshift@4.0.0": { + "integrity": "sha512-d9dUmWVA7MMiKobL3VpLF8P2aeanRTu6ypG2OIaEv/ZHH/SUQ2iHOVyi5wAPjQ+HmnMuL0whK9ez8I/raWbtIg==", + "dependencies": [ + "fast-deep-equal", + "lodash" + ] + }, + "@sapphire/snowflake@3.5.3": { + "integrity": "sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ==" + }, + "@sinclair/typebox@0.27.8": { + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + }, + "@tsconfig/node18@18.2.4": { + "integrity": "sha512-5xxU8vVs9/FNcvm3gE07fPbn9tl6tqGGWA9tSlwsUEkBxtRnTsNmwrV8gasZ9F/EobaSv9+nu8AxUKccw77JpQ==" + }, + "@types/node@18.19.68": { + "integrity": "sha512-QGtpFH1vB99ZmTa63K4/FU8twThj4fuVSBkGddTp7uIL/cuoLWIUSL2RcOaigBhfR+hg5pgGkBnkoOxrTVBMKw==", + "dependencies": [ + "undici-types@5.26.5" + ] + }, + "@types/node@22.5.4": { + "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", + "dependencies": [ + "undici-types@6.19.8" + ] + }, + "@types/ws@8.5.13": { + "integrity": "sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==", + "dependencies": [ + "@types/node@22.5.4" + ] + }, + "@typescript-eslint/parser@5.62.0_eslint@8.57.1_typescript@4.9.5": { + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dependencies": [ + "@typescript-eslint/scope-manager@5.62.0", + "@typescript-eslint/types@5.62.0", + "@typescript-eslint/typescript-estree@5.62.0_typescript@4.9.5", + "debug", + "eslint" + ] + }, + "@typescript-eslint/parser@6.21.0_eslint@8.57.1_typescript@5.7.2": { + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "dependencies": [ + "@typescript-eslint/scope-manager@6.21.0", + "@typescript-eslint/types@6.21.0", + "@typescript-eslint/typescript-estree@6.21.0_typescript@5.7.2", + "@typescript-eslint/visitor-keys@6.21.0", + "debug", + "eslint" + ] + }, + "@typescript-eslint/scope-manager@5.62.0": { + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dependencies": [ + "@typescript-eslint/types@5.62.0", + "@typescript-eslint/visitor-keys@5.62.0" + ] + }, + "@typescript-eslint/scope-manager@6.21.0": { + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "dependencies": [ + "@typescript-eslint/types@6.21.0", + "@typescript-eslint/visitor-keys@6.21.0" + ] + }, + "@typescript-eslint/types@5.62.0": { + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==" + }, + "@typescript-eslint/types@6.21.0": { + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==" + }, + "@typescript-eslint/typescript-estree@5.62.0_typescript@4.9.5": { + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dependencies": [ + "@typescript-eslint/types@5.62.0", + "@typescript-eslint/visitor-keys@5.62.0", + "debug", + "globby", + "is-glob", + "semver", + "tsutils" + ] + }, + "@typescript-eslint/typescript-estree@6.21.0_typescript@5.7.2": { + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "dependencies": [ + "@typescript-eslint/types@6.21.0", + "@typescript-eslint/visitor-keys@6.21.0", + "debug", + "globby", + "is-glob", + "minimatch@9.0.3", + "semver", + "ts-api-utils" + ] + }, + "@typescript-eslint/visitor-keys@5.62.0": { + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dependencies": [ + "@typescript-eslint/types@5.62.0", + "eslint-visitor-keys" + ] + }, + "@typescript-eslint/visitor-keys@6.21.0": { + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "dependencies": [ + "@typescript-eslint/types@6.21.0", + "eslint-visitor-keys" + ] + }, + "@ungap/structured-clone@1.2.1": { + "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==" + }, + "@vladfrangu/async_event_emitter@2.4.6": { + "integrity": "sha512-RaI5qZo6D2CVS6sTHFKg1v5Ohq/+Bo2LZ5gzUEwZ/WkHhwtGTCB/sVLw8ijOkAUxasZ+WshN/Rzj4ywsABJ5ZA==" + }, + "acorn-jsx@5.3.2_acorn@8.14.0": { + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dependencies": [ + "acorn" + ] + }, + "acorn@8.14.0": { + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==" + }, + "ajv@6.12.6": { + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": [ + "fast-deep-equal", + "fast-json-stable-stringify", + "json-schema-traverse", + "uri-js" + ] + }, + "ansi-regex@2.1.1": { + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + }, + "ansi-regex@5.0.1": { + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles@2.2.1": { + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" + }, + "ansi-styles@4.3.0": { + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": [ + "color-convert" + ] + }, + "ansi-styles@5.2.0": { + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + }, + "argparse@2.0.1": { + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "array-union@2.1.0": { + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "asynckit@0.4.0": { + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "axios@1.7.9": { + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "dependencies": [ + "follow-redirects", + "form-data", + "proxy-from-env" + ] + }, + "balanced-match@1.0.2": { + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "brace-expansion@1.1.11": { + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": [ + "balanced-match", + "concat-map" + ] + }, + "brace-expansion@2.0.1": { + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": [ + "balanced-match" + ] + }, + "braces@3.0.3": { + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": [ + "fill-range" + ] + }, + "callsites@3.1.0": { + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "chalk@1.1.3": { + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dependencies": [ + "ansi-styles@2.2.1", + "escape-string-regexp@1.0.5", + "has-ansi", + "strip-ansi@3.0.1", + "supports-color@2.0.0" + ] + }, + "chalk@4.1.2": { + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": [ + "ansi-styles@4.3.0", + "supports-color@7.2.0" + ] + }, + "color-convert@2.0.1": { + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": [ + "color-name" + ] + }, + "color-name@1.1.4": { + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "combined-stream@1.0.8": { + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": [ + "delayed-stream" + ] + }, + "common-tags@1.8.2": { + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==" + }, + "concat-map@0.0.1": { + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "cross-spawn@7.0.6": { + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dependencies": [ + "path-key", + "shebang-command", + "which" + ] + }, + "debug@4.4.0": { + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dependencies": [ + "ms" + ] + }, + "deep-is@0.1.4": { + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "delayed-stream@1.0.0": { + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "dir-glob@3.0.1": { + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": [ + "path-type" + ] + }, + "discord-api-types@0.37.100": { + "integrity": "sha512-a8zvUI0GYYwDtScfRd/TtaNBDTXwP5DiDVX7K5OmE+DRT57gBqKnwtOC5Ol8z0mRW8KQfETIgiB8U0YZ9NXiCA==" + }, + "discord-api-types@0.37.83": { + "integrity": "sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA==" + }, + "discord-api-types@0.37.97": { + "integrity": "sha512-No1BXPcVkyVD4ZVmbNgDKaBoqgeQ+FJpzZ8wqHkfmBnTZig1FcH3iPPersiK1TUIAzgClh2IvOuVUYfcWLQAOA==" + }, + "discord.js@14.16.3": { + "integrity": "sha512-EPCWE9OkA9DnFFNrO7Kl1WHHDYFXu3CNVFJg63bfU7hVtjZGyhShwZtSBImINQRWxWP2tgo2XI+QhdXx28r0aA==", + "dependencies": [ + "@discordjs/builders", + "@discordjs/collection@1.5.3", + "@discordjs/formatters", + "@discordjs/rest", + "@discordjs/util", + "@discordjs/ws", + "@sapphire/snowflake", + "discord-api-types@0.37.100", + "fast-deep-equal", + "lodash.snakecase", + "tslib@2.8.1", + "undici" + ] + }, + "dlv@1.1.3": { + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "doctrine@3.0.0": { + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dependencies": [ + "esutils" + ] + }, + "dotenv@16.4.7": { + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==" + }, + "esbuild@0.23.1": { + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", + "dependencies": [ + "@esbuild/aix-ppc64", + "@esbuild/android-arm", + "@esbuild/android-arm64", + "@esbuild/android-x64", + "@esbuild/darwin-arm64", + "@esbuild/darwin-x64", + "@esbuild/freebsd-arm64", + "@esbuild/freebsd-x64", + "@esbuild/linux-arm", + "@esbuild/linux-arm64", + "@esbuild/linux-ia32", + "@esbuild/linux-loong64", + "@esbuild/linux-mips64el", + "@esbuild/linux-ppc64", + "@esbuild/linux-riscv64", + "@esbuild/linux-s390x", + "@esbuild/linux-x64", + "@esbuild/netbsd-x64", + "@esbuild/openbsd-arm64", + "@esbuild/openbsd-x64", + "@esbuild/sunos-x64", + "@esbuild/win32-arm64", + "@esbuild/win32-ia32", + "@esbuild/win32-x64" + ] + }, + "escape-string-regexp@1.0.5": { + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "escape-string-regexp@4.0.0": { + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, + "eslint-scope@7.2.2": { + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dependencies": [ + "esrecurse", + "estraverse" + ] + }, + "eslint-visitor-keys@3.4.3": { + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==" + }, + "eslint@8.57.1": { + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "dependencies": [ + "@eslint-community/eslint-utils", + "@eslint-community/regexpp", + "@eslint/eslintrc", + "@eslint/js", + "@humanwhocodes/config-array", + "@humanwhocodes/module-importer", + "@nodelib/fs.walk", + "@ungap/structured-clone", + "ajv", + "chalk@4.1.2", + "cross-spawn", + "debug", + "doctrine", + "escape-string-regexp@4.0.0", + "eslint-scope", + "eslint-visitor-keys", + "espree", + "esquery", + "esutils", + "fast-deep-equal", + "file-entry-cache", + "find-up", + "glob-parent@6.0.2", + "globals", + "graphemer", + "ignore", + "imurmurhash", + "is-glob", + "is-path-inside", + "js-yaml", + "json-stable-stringify-without-jsonify", + "levn", + "lodash.merge", + "minimatch@3.1.2", + "natural-compare", + "optionator", + "strip-ansi@6.0.1", + "text-table" + ] + }, + "espree@9.6.1_acorn@8.14.0": { + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dependencies": [ + "acorn", + "acorn-jsx", + "eslint-visitor-keys" + ] + }, + "esquery@1.6.0": { + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dependencies": [ + "estraverse" + ] + }, + "esrecurse@4.3.0": { + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": [ + "estraverse" + ] + }, + "estraverse@5.3.0": { + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + }, + "esutils@2.0.3": { + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "fast-deep-equal@3.1.3": { + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-glob@3.3.2": { + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": [ + "@nodelib/fs.stat", + "@nodelib/fs.walk", + "glob-parent@5.1.2", + "merge2", + "micromatch" + ] + }, + "fast-json-stable-stringify@2.1.0": { + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fast-levenshtein@2.0.6": { + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "fastq@1.18.0": { + "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", + "dependencies": [ + "reusify" + ] + }, + "file-entry-cache@6.0.1": { + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dependencies": [ + "flat-cache" + ] + }, + "fill-range@7.1.1": { + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": [ + "to-regex-range" + ] + }, + "find-up@5.0.0": { + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": [ + "locate-path", + "path-exists" + ] + }, + "flat-cache@3.2.0": { + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dependencies": [ + "flatted", + "keyv", + "rimraf" + ] + }, + "flatted@3.3.2": { + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==" + }, + "follow-redirects@1.15.9": { + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==" + }, + "form-data@4.0.1": { + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "dependencies": [ + "asynckit", + "combined-stream", + "mime-types" + ] + }, + "fs.realpath@1.0.0": { + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "fsevents@2.3.3": { + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==" + }, + "get-tsconfig@4.8.1": { + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", + "dependencies": [ + "resolve-pkg-maps" + ] + }, + "glob-parent@5.1.2": { + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": [ + "is-glob" + ] + }, + "glob-parent@6.0.2": { + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": [ + "is-glob" + ] + }, + "glob@7.2.3": { + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": [ + "fs.realpath", + "inflight", + "inherits", + "minimatch@3.1.2", + "once", + "path-is-absolute" + ] + }, + "globals@13.24.0": { + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dependencies": [ + "type-fest" + ] + }, + "globby@11.1.0": { + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": [ + "array-union", + "dir-glob", + "fast-glob", + "ignore", + "merge2", + "slash" + ] + }, + "graphemer@1.4.0": { + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + }, + "has-ansi@2.0.0": { + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dependencies": [ + "ansi-regex@2.1.1" + ] + }, + "has-flag@4.0.0": { + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "ignore@5.3.2": { + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==" + }, + "import-fresh@3.3.0": { + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": [ + "parent-module", + "resolve-from" + ] + }, + "imurmurhash@0.1.4": { + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + }, + "indent-string@4.0.0": { + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, + "inflight@1.0.6": { + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": [ + "once", + "wrappy" + ] + }, + "inherits@2.0.4": { + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "is-extglob@2.1.1": { + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-glob@4.0.3": { + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": [ + "is-extglob" + ] + }, + "is-number@7.0.0": { + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-path-inside@3.0.3": { + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + }, + "isexe@2.0.0": { + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "js-yaml@4.1.0": { + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": [ + "argparse" + ] + }, + "json-buffer@3.0.1": { + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "json-schema-traverse@0.4.1": { + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "json-stable-stringify-without-jsonify@1.0.1": { + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + }, + "kazagumo-deezer@2.0.2": { + "integrity": "sha512-C3zGaSVLebGmkmXfVxqSAXb7i5J0RUmrahU0QM7OSoYycwaHmneoi6WknjqSTg7TrwktMq5NeJeWSAKDVL+4tg==", + "dependencies": [ + "axios", + "kazagumo" + ] + }, + "kazagumo-spotify@2.1.1": { + "integrity": "sha512-DzdO9KhTjyk2Q5o5iPCE7SmP/2NB96K3xUhbtkBBuODLsrrXrC22AEaRFvCi5ZIC4+aHoqeAw4Vak83VjBScbg==", + "dependencies": [ + "undici" + ] + }, + "kazagumo@3.2.2": { + "integrity": "sha512-fhmLGEvGnxngb1Gs2PWd507GYC45dl6vuktabKYV+8YNt4scloiD9xVQWO6HjcYvE0dBmfhFOKptCX0XpoppNw==", + "dependencies": [ + "shoukaku" + ] + }, + "keyv@4.5.4": { + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dependencies": [ + "json-buffer" + ] + }, + "levn@0.4.1": { + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dependencies": [ + "prelude-ls", + "type-check" + ] + }, + "locate-path@6.0.0": { + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": [ + "p-locate" + ] + }, + "lodash.merge@4.6.2": { + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "lodash.snakecase@4.1.1": { + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" + }, + "lodash@4.17.21": { + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "loglevel-colored-level-prefix@1.0.0": { + "integrity": "sha512-u45Wcxxc+SdAlh4yeF/uKlC1SPUPCy0gullSNKXod5I4bmifzk+Q4lSLExNEVn19tGaJipbZ4V4jbFn79/6mVA==", + "dependencies": [ + "chalk@1.1.3", + "loglevel" + ] + }, + "loglevel@1.9.2": { + "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==" + }, + "magic-bytes.js@1.10.0": { + "integrity": "sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ==" + }, + "merge2@1.4.1": { + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "micromatch@4.0.8": { + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dependencies": [ + "braces", + "picomatch" + ] + }, + "mime-db@1.52.0": { + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types@2.1.35": { + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": [ + "mime-db" + ] + }, + "minimatch@3.1.2": { + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": [ + "brace-expansion@1.1.11" + ] + }, + "minimatch@9.0.3": { + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dependencies": [ + "brace-expansion@2.0.1" + ] + }, + "ms@2.1.3": { + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "natural-compare@1.4.0": { + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + }, + "once@1.4.0": { + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": [ + "wrappy" + ] + }, + "optionator@0.9.4": { + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dependencies": [ + "deep-is", + "fast-levenshtein", + "levn", + "prelude-ls", + "type-check", + "word-wrap" + ] + }, + "p-limit@3.1.0": { + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": [ + "yocto-queue" + ] + }, + "p-locate@5.0.0": { + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": [ + "p-limit" + ] + }, + "parent-module@1.0.1": { + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": [ + "callsites" + ] + }, + "parse-ms@4.0.0": { + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==" + }, + "path-exists@4.0.0": { + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-is-absolute@1.0.1": { + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + }, + "path-key@3.1.1": { + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-type@4.0.0": { + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "picomatch@2.3.1": { + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "prelude-ls@1.2.1": { + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + }, + "prettier-eslint@16.3.0_eslint@8.57.1_typescript@5.7.2": { + "integrity": "sha512-Lh102TIFCr11PJKUMQ2kwNmxGhTsv/KzUg9QYF2Gkw259g/kPgndZDWavk7/ycbRvj2oz4BPZ1gCU8bhfZH/Xg==", + "dependencies": [ + "@typescript-eslint/parser@6.21.0_eslint@8.57.1_typescript@5.7.2", + "common-tags", + "dlv", + "eslint", + "indent-string", + "lodash.merge", + "loglevel-colored-level-prefix", + "prettier", + "pretty-format", + "require-relative", + "typescript@5.7.2", + "vue-eslint-parser" + ] + }, + "prettier@3.4.2": { + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==" + }, + "pretty-format@29.7.0": { + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dependencies": [ + "@jest/schemas", + "ansi-styles@5.2.0", + "react-is" + ] + }, + "pretty-ms@9.2.0": { + "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==", + "dependencies": [ + "parse-ms" + ] + }, + "proxy-from-env@1.1.0": { + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "punycode@2.3.1": { + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" + }, + "queue-microtask@1.2.3": { + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "react-is@18.3.1": { + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "require-relative@0.8.7": { + "integrity": "sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg==" + }, + "resolve-from@4.0.0": { + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + }, + "resolve-pkg-maps@1.0.0": { + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==" + }, + "reusify@1.0.4": { + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rimraf@3.0.2": { + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": [ + "glob" + ] + }, + "run-parallel@1.2.0": { + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dependencies": [ + "queue-microtask" + ] + }, + "semver@7.6.3": { + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==" + }, + "shebang-command@2.0.0": { + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": [ + "shebang-regex" + ] + }, + "shebang-regex@3.0.0": { + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "shoukaku@4.1.1": { + "integrity": "sha512-E7xXqjQ38TJu9gps95zVe8LaWhBhUyZvGFbO0mNAkBywm/DieDP0HSs9fAT97lL7vVZldkay2tmFhllNLboUbg==", + "dependencies": [ + "ws" + ] + }, + "slash@3.0.0": { + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "strip-ansi@3.0.1": { + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dependencies": [ + "ansi-regex@2.1.1" + ] + }, + "strip-ansi@6.0.1": { + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": [ + "ansi-regex@5.0.1" + ] + }, + "strip-json-comments@3.1.1": { + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + }, + "supports-color@2.0.0": { + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==" + }, + "supports-color@7.2.0": { + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": [ + "has-flag" + ] + }, + "text-table@0.2.0": { + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "to-regex-range@5.0.1": { + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": [ + "is-number" + ] + }, + "ts-api-utils@1.4.3_typescript@5.7.2": { + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "dependencies": [ + "typescript@5.7.2" + ] + }, + "ts-mixer@6.0.4": { + "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==" + }, + "tslib@1.14.1": { + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "tslib@2.8.1": { + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "tsutils@3.21.0_typescript@4.9.5": { + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dependencies": [ + "tslib@1.14.1", + "typescript@4.9.5" + ] + }, + "tsx@4.19.2": { + "integrity": "sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==", + "dependencies": [ + "esbuild", + "fsevents", + "get-tsconfig" + ] + }, + "type-check@0.4.0": { + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dependencies": [ + "prelude-ls" + ] + }, + "type-fest@0.20.2": { + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + }, + "typescript@4.9.5": { + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" + }, + "typescript@5.7.2": { + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==" + }, + "undici-types@5.26.5": { + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "undici-types@6.19.8": { + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + }, + "undici@6.19.8": { + "integrity": "sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==" + }, + "uri-js@4.4.1": { + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": [ + "punycode" + ] + }, + "vue-eslint-parser@9.4.3_eslint@8.57.1": { + "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", + "dependencies": [ + "debug", + "eslint", + "eslint-scope", + "eslint-visitor-keys", + "espree", + "esquery", + "lodash", + "semver" + ] + }, + "which@2.0.2": { + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": [ + "isexe" + ] + }, + "word-wrap@1.2.5": { + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==" + }, + "wrappy@1.0.2": { + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "ws@8.18.0": { + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==" + }, + "yocto-queue@0.1.0": { + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + } + }, + "workspace": { + "dependencies": [ + "jsr:@std/assert@1" + ], + "packageJson": { + "dependencies": [ + "npm:@biomejs/biome@1.6.0", + "npm:@tsconfig/node18@^18.2.2", + "npm:@types/node@^18.7.18", + "npm:@typescript-eslint/parser@^5.62.0", + "npm:discord.js@^14.14.1", + "npm:dotenv@^16.4.5", + "npm:eslint@^8.57.0", + "npm:kazagumo-deezer@^2.0.2", + "npm:kazagumo-spotify@^2.0.1", + "npm:kazagumo@^3.0.1", + "npm:prettier-eslint@^16.3.0", + "npm:prettier@^3.2.5", + "npm:pretty-ms@9", + "npm:shoukaku@^4.0.1", + "npm:tsx@^4.7.1", + "npm:typescript@^4.9.5" + ] + } + } +} diff --git a/devbox.json b/devbox.json deleted file mode 100644 index ec867db..0000000 --- a/devbox.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "packages": [ - "nodejs@18", - "jdk@17.0.10" - ], - "shell": { - "init_hook": [ - "npm install", - "npm run build" - ], - "scripts": { - "run_test": "npm run start" - } - } -} diff --git a/devbox.lock b/devbox.lock deleted file mode 100644 index 16fe1b7..0000000 --- a/devbox.lock +++ /dev/null @@ -1,39 +0,0 @@ -{ - "lockfile_version": "1", - "packages": { - "jdk@17.0.10": { - "last_modified": "2024-02-24T23:06:34Z", - "resolved": "github:NixOS/nixpkgs/9a9dae8f6319600fa9aebde37f340975cab4b8c0#jdk17", - "source": "devbox-search", - "version": "17.0.10", - "systems": { - "aarch64-darwin": { - "store_path": "/nix/store/4p4k1w2q7fz1hwc55wjk44bza0vhh71h-zulu-ca-jdk-17.0.10" - }, - "x86_64-darwin": { - "store_path": "/nix/store/kfmkczf4h268yax8bg5nlyapbms6zcav-zulu-ca-jdk-17.0.10" - } - } - }, - "nodejs@18": { - "last_modified": "2024-02-24T23:06:34Z", - "resolved": "github:NixOS/nixpkgs/9a9dae8f6319600fa9aebde37f340975cab4b8c0#nodejs_18", - "source": "devbox-search", - "version": "18.19.1", - "systems": { - "aarch64-darwin": { - "store_path": "/nix/store/fxly5x870ssyw5rbvdi58jbhc4j03mzk-nodejs-18.19.1" - }, - "aarch64-linux": { - "store_path": "/nix/store/6iirvvbd99b7dfwk3z8phry2yliwvm99-nodejs-18.19.1" - }, - "x86_64-darwin": { - "store_path": "/nix/store/rzsav2ndbzah0vkmyqpnhcwxp4n0zdm6-nodejs-18.19.1" - }, - "x86_64-linux": { - "store_path": "/nix/store/c8phnfr1s43123qm3fmyiq5n1hs5csdv-nodejs-18.19.1" - } - } - } - } -} diff --git a/devenv.lock b/devenv.lock new file mode 100644 index 0000000..44bb73e --- /dev/null +++ b/devenv.lock @@ -0,0 +1,116 @@ +{ + "nodes": { + "devenv": { + "locked": { + "dir": "src/modules", + "lastModified": 1729087493, + "owner": "cachix", + "repo": "devenv", + "rev": "d612b77ff73912cd82e58256ab5e84d5904abef7", + "type": "github" + }, + "original": { + "dir": "src/modules", + "owner": "cachix", + "repo": "devenv", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1728888510, + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a3c0b3b21515f74fd2665903d4ce6bc4dc81c77c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1728909085, + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c0b1da36f7c34a7146501f684e9ebdf15d2bebf8", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": "flake-compat", + "gitignore": "gitignore", + "nixpkgs": [ + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable" + }, + "locked": { + "lastModified": 1729104314, + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "3c3e88f0f544d6bb54329832616af7eb971b6be6", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "root": { + "inputs": { + "devenv": "devenv", + "nixpkgs": "nixpkgs", + "pre-commit-hooks": "pre-commit-hooks" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/devenv.nix b/devenv.nix new file mode 100644 index 0000000..42dc5b8 --- /dev/null +++ b/devenv.nix @@ -0,0 +1,51 @@ +{ + pkgs, + lib, + config, + inputs, + ... +}: { + # https://devenv.sh/basics/ + env.GREET = "devenv"; + + # https://devenv.sh/packages/ + packages = [pkgs.git]; + + # https://devenv.sh/languages/ + # languages.rust.enable = true; + languages.deno = { + enable = true; + }; + # https://devenv.sh/processes/ + # processes.cargo-watch.exec = "cargo-watch"; + + # https://devenv.sh/services/ + # services.postgres.enable = true; + + # https://devenv.sh/scripts/ + scripts.hello.exec = '' + echo hello from $GREET + ''; + + enterShell = '' + hello + git --version + ''; + + # https://devenv.sh/tasks/ + # tasks = { + # "myproj:setup".exec = "mytool build"; + # "devenv:enterShell".after = [ "myproj:setup" ]; + # }; + + # https://devenv.sh/tests/ + enterTest = '' + echo "Running tests" + git --version | grep --color=auto "${pkgs.git.version}" + ''; + + # https://devenv.sh/pre-commit-hooks/ + # pre-commit.hooks.shellcheck.enable = true; + + # See full reference at https://devenv.sh/reference/options/ +} diff --git a/devenv.yaml b/devenv.yaml new file mode 100644 index 0000000..ab1c1d7 --- /dev/null +++ b/devenv.yaml @@ -0,0 +1,14 @@ +# yaml-language-server: $schema=https://devenv.sh/devenv.schema.json +inputs: + nixpkgs: + url: github:NixOS/nixpkgs/nixos-unstable +# If you're using non-OSS software, you can set allowUnfree to true. +# allowUnfree: true + +# If you're willing to use a package that's vulnerable +# permittedInsecurePackages: +# - "openssl-1.1.1w" + +# If you have more than one devenv you can merge them +#imports: +# - ./backend diff --git a/package.json b/package.json index b49d7eb..83b5e62 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "scripts": { "build": "tsc", "start": "node dist/index.js", - "watch": "tsc watch", + "watch": "tsc watch src/index.ts", "dev": "nodemon src/index.ts" }, "devDependencies": { @@ -26,6 +26,7 @@ "discord.js": "^14.14.1", "dotenv": "^16.4.5", "kazagumo": "^3.0.1", + "kazagumo-deezer": "^2.0.2", "kazagumo-spotify": "^2.0.1", "pretty-ms": "^9.0.0", "shoukaku": "^4.0.1" diff --git a/settings.json b/settings.json index b8613d2..e98b3dd 100644 --- a/settings.json +++ b/settings.json @@ -1 +1 @@ -{"requestChannels":{"777923126981558282":{"channelId":"1219720332101943296","messageId":"1219745004659015813"}}} \ No newline at end of file +{"requestChannels":{"777923126981558282":{"channelId":"1219764003421556816","messageId":"1296249229009752138"}}} \ No newline at end of file diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..87ebc23 --- /dev/null +++ b/src/index.js @@ -0,0 +1,533 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +exports.__esModule = true; +var discord_js_1 = require("discord.js"); +var shoukaku_1 = require("shoukaku"); +var kazagumo_1 = require("kazagumo"); +var kazagumo_spotify_1 = require("kazagumo-spotify"); +var pretty_ms_1 = require("pretty-ms"); +var Guilds = discord_js_1.GatewayIntentBits.Guilds, GuildVoiceStates = discord_js_1.GatewayIntentBits.GuildVoiceStates, GuildMessages = discord_js_1.GatewayIntentBits.GuildMessages, MessageContent = discord_js_1.GatewayIntentBits.MessageContent; +var dotenv = require("dotenv"); +var fs_1 = require("fs"); +dotenv.config(); +if (!process.env.SPOTIFY_ID || !process.env.SPOTIFY_SECRET) { + throw "Spotify Credentials missing"; +} +var settings; +try { + settings = JSON.parse((0, fs_1.readFileSync)("./settings.json", "utf8")); // Load data +} +catch (e) { + settings = { requestChannels: {} }; // Init if no data found +} +var Nodes = [ + { + name: "lavalink", + url: "localhost:2333", + auth: "youshallnotpass", + secure: false + }, +]; +var client = new discord_js_1.Client({ + intents: [Guilds, GuildVoiceStates, GuildMessages, MessageContent] +}); +var kazagumo = new kazagumo_1.Kazagumo({ + defaultSearchEngine: "youtube", + send: function (guildId, payload) { + var guild = client.guilds.cache.get(guildId); + if (guild) + guild.shard.send(payload); + }, + plugins: [ + new kazagumo_spotify_1["default"]({ + clientId: process.env.SPOTIFY_ID, + clientSecret: process.env.SPOTIFY_SECRET, + playlistPageLimit: 1, + albumPageLimit: 1, + searchLimit: 10, + searchMarket: "US" + }), + ] +}, new shoukaku_1.Connectors.DiscordJS(client), Nodes); +client.on("ready", function () { + // console.log(client) + console.log("".concat(client.user.tag, "\u00B7Ready!")); +}); +kazagumo.shoukaku.on("ready", function (name) { + return console.log("Lavalink ".concat(name, ": Ready!")); +}); +kazagumo.shoukaku.on("error", function (name, error) { + return console.error("Lavalink ".concat(name, ": Error Caught,"), error); +}); +kazagumo.shoukaku.on("close", function (name, code, reason) { + return console.warn("Lavalink ".concat(name, ": Closed, Code ").concat(code, ", Reason ").concat(reason || "No reason")); +}); +kazagumo.shoukaku.on("debug", function (name, info) { + return console.debug("Lavalink ".concat(name, ": Debug,"), info); +}); +kazagumo.shoukaku.on("disconnect", function (name, count) { + // if (moved) return; + // players.map((player:any) => player.connection.disconnect()); + console.warn("Lavalink ".concat(name, ": Disconnected")); +}); +kazagumo.on("playerStart", function (player, track) { + if (!player.textId) + return; + var channel = client.channels.cache.get(player.textId); + if (!channel) + return; + if (channel.type === discord_js_1.ChannelType.GuildText) { + channel + .send({ + content: "Now playing **".concat(track.title, "** by **").concat(track.author, "**") + }) + .then(function (x) { + //TODO: Use embed message instead + player.data.set("message", x); + setTimeout(function () { return x["delete"](); }, 3000); + }); + } +}); +kazagumo.on("playerEnd", function (player) { + var _a; + //TODO: Use embed message instead + var embed = new discord_js_1.EmbedBuilder() + .setAuthor({ + name: "Moe", + iconURL: "https://cdn.m3.fyi/MoeLogo.gif" + }) + .setTitle("Nothing is being played right now") + .setDescription("Enter message to search") + .addFields({ + name: "Author", + value: "None", + inline: true + }, { + name: "Duration", + value: "NaN:NaN", + inline: true + }) + .setColor("#ff0047"); + (_a = player.data.get("message")) === null || _a === void 0 ? void 0 : _a.edit({ embed: [embed] }); +}); +kazagumo.on("playerEmpty", function (player) { + if (!player.textId) + return; + var channel = client.channels.cache.get(player.textId); + if (!channel) + return; + if (channel.type === discord_js_1.ChannelType.GuildText) { + //TODO: Use embed message instead + channel + .send({ content: "Destroyed player due to inactivity." }) + .then(function (x) { + player.data.set("message", x); + setTimeout(function () { return x["delete"](); }, 3000); + }); + } + player.destroy(); +}); +client.on("messageCreate", function (msg) { return __awaiter(void 0, void 0, void 0, function () { + var cmd, _a, play, stop_1, skip, loop, shuffle, seek, previous, row, row2, embed, response, answer_1, controls, answer_2, channelId, messageId, channel_1, query, channel_2, answer_3, player, result, answer_4, _i, _b, track, play, stop_2, skip, loop, shuffle, seek, previous, row, row2, track_author, track_duration, track_thumbnail, embed, response; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + // console.log(msg.content); + if (msg.author.bot) + return [2 /*return*/]; + if (!msg.guild) + return [2 /*return*/]; + if (!msg.member) + return [2 /*return*/]; + if (msg.channel.type !== discord_js_1.ChannelType.GuildText) + return [2 /*return*/]; + if (!msg.content.startsWith(".")) return [3 /*break*/, 9]; + cmd = msg.content.split(".")[1]; + _a = cmd; + switch (_a) { + case "init": return [3 /*break*/, 1]; + } + return [3 /*break*/, 7]; + case 1: + if (!(msg.guildId && msg.channelId)) return [3 /*break*/, 6]; + if (!!settings.requestChannels[msg.guildId]) return [3 /*break*/, 4]; + return [4 /*yield*/, msg["delete"]()]; + case 2: + _c.sent(); + play = new discord_js_1.ButtonBuilder() + .setCustomId("play") + .setLabel("Play/Pause") + .setStyle(discord_js_1.ButtonStyle.Secondary) + .setEmoji("889943073793122355"); + stop_1 = new discord_js_1.ButtonBuilder() + .setCustomId("stop") + .setLabel("Stop Playing") + .setStyle(discord_js_1.ButtonStyle.Secondary) + .setEmoji("889943074258694184"); + skip = new discord_js_1.ButtonBuilder() + .setCustomId("skip") + .setLabel("Skip Song") + .setStyle(discord_js_1.ButtonStyle.Secondary) + .setEmoji("889943074233516072"); + loop = new discord_js_1.ButtonBuilder() + .setCustomId("loop") + .setLabel("Loop Song") + .setStyle(discord_js_1.ButtonStyle.Secondary) + .setEmoji("889943073667289099"); + shuffle = new discord_js_1.ButtonBuilder() + .setCustomId("shuffle") + .setLabel("Shuffle Queue") + .setStyle(discord_js_1.ButtonStyle.Secondary) + .setEmoji("890325437962678352"); + seek = new discord_js_1.ButtonBuilder() + .setCustomId("seek") + .setLabel("Seek Forward") + .setStyle(discord_js_1.ButtonStyle.Secondary) + .setEmoji("890325511878889504"); + previous = new discord_js_1.ButtonBuilder() + .setCustomId("previous") + .setLabel("Previous Song") + .setStyle(discord_js_1.ButtonStyle.Secondary) + .setEmoji("890325512071831562"); + row = new discord_js_1.ActionRowBuilder().addComponents(play, stop_1, skip, loop); + row2 = new discord_js_1.ActionRowBuilder().addComponents(shuffle, seek, previous); + embed = new discord_js_1.EmbedBuilder() + .setAuthor({ + name: "Moe", + iconURL: "https://cdn.m3.fyi/MoeLogo.gif" + }) + .setTitle("Nothing is being played right now") + .setDescription("Enter message to search") + .addFields({ + name: "Author", + value: "None", + inline: true + }, { + name: "Duration", + value: "NaN:NaN", + inline: true + }) + .setColor("#ff0047"); + return [4 /*yield*/, msg.channel.send({ + embeds: [embed], + components: [row, row2] + })]; + case 3: + response = _c.sent(); + settings.requestChannels[msg.guildId] = { + channelId: msg.channelId, + messageId: response.id + }; + console.log(settings.requestChannels[msg.guildId]); + (0, fs_1.writeFileSync)("./settings.json", JSON.stringify(settings)); // Save count to file + return [2 /*return*/]; + case 4: return [4 /*yield*/, msg.reply("Already initialized")]; + case 5: + answer_1 = _c.sent(); + console.log(answer_1); + setTimeout(function () { return msg["delete"](); }, 3000); + setTimeout(function () { return answer_1["delete"](); }, 3000); + _c.label = 6; + case 6: return [3 /*break*/, 8]; + case 7: return [3 /*break*/, 8]; + case 8: return [2 /*return*/]; + case 9: + if (!(msg.channel.name === "moe-song-requests")) return [3 /*break*/, 20]; + controls = void 0; + if (!!settings.requestChannels[msg.guild.id]) return [3 /*break*/, 11]; + return [4 /*yield*/, msg.reply("Use .init first")]; + case 10: + answer_2 = _c.sent(); + console.log(answer_2); + setTimeout(function () { return msg["delete"](); }, 3000); + setTimeout(function () { return answer_2["delete"](); }, 3000); + return [2 /*return*/]; + case 11: + channelId = settings.requestChannels[msg.guild.id].channelId; + messageId = settings.requestChannels[msg.guild.id].messageId; + channel_1 = msg.guild.channels.cache.get(channelId); + if (!(channel_1 && channel_1.type === discord_js_1.ChannelType.GuildText)) return [3 /*break*/, 13]; + return [4 /*yield*/, channel_1.messages.fetch(messageId)]; + case 12: + controls = _c.sent(); + _c.label = 13; + case 13: + query = msg.content; + channel_2 = msg.member.voice.channel; + if (!!channel_2) return [3 /*break*/, 15]; + return [4 /*yield*/, msg.reply("You need to be in a voice channel to use this command!")]; + case 14: + answer_3 = _c.sent(); + setTimeout(function () { return answer_3["delete"](); }, 3000); + return [2 /*return*/]; + case 15: return [4 /*yield*/, kazagumo.createPlayer({ + guildId: msg.guild.id, + textId: msg.channel.id, + voiceId: channel_2.id, + volume: 40 + })]; + case 16: + player = _c.sent(); + player.data.set("message", controls); + console.log("Player created"); + return [4 /*yield*/, kazagumo.search(query, { requester: msg.author })]; + case 17: + result = _c.sent(); + if (!!result.tracks.length) return [3 /*break*/, 19]; + return [4 /*yield*/, msg.reply("No results found!")]; + case 18: + answer_4 = _c.sent(); + setTimeout(function () { return answer_4["delete"](); }, 3000); + _c.label = 19; + case 19: + if (result.type === "PLAYLIST") + for (_i = 0, _b = result.tracks; _i < _b.length; _i++) { + track = _b[_i]; + player.queue.add(track); + } + else + player.queue.add(result.tracks[0]); + play = new discord_js_1.ButtonBuilder() + .setCustomId("play") + .setLabel("Play/Pause") + .setStyle(discord_js_1.ButtonStyle.Secondary) + .setEmoji("889943073793122355"); + stop_2 = new discord_js_1.ButtonBuilder() + .setCustomId("stop") + .setLabel("Stop Playing") + .setStyle(discord_js_1.ButtonStyle.Secondary) + .setEmoji("889943074258694184"); + skip = new discord_js_1.ButtonBuilder() + .setCustomId("skip") + .setLabel("Skip Song") + .setStyle(discord_js_1.ButtonStyle.Secondary) + .setEmoji("889943074233516072"); + loop = new discord_js_1.ButtonBuilder() + .setCustomId("loop") + .setLabel("Loop Song") + .setStyle(discord_js_1.ButtonStyle.Secondary) + .setEmoji("889943073667289099"); + shuffle = new discord_js_1.ButtonBuilder() + .setCustomId("shuffle") + .setLabel("Shuffle Queue") + .setStyle(discord_js_1.ButtonStyle.Secondary) + .setEmoji("890325437962678352"); + seek = new discord_js_1.ButtonBuilder() + .setCustomId("seek") + .setLabel("Seek Forward") + .setStyle(discord_js_1.ButtonStyle.Secondary) + .setEmoji("890325511878889504"); + previous = new discord_js_1.ButtonBuilder() + .setCustomId("previous") + .setLabel("Previous Song") + .setStyle(discord_js_1.ButtonStyle.Secondary) + .setEmoji("890325512071831562"); + row = new discord_js_1.ActionRowBuilder().addComponents(play, stop_2, skip, loop); + row2 = new discord_js_1.ActionRowBuilder().addComponents(shuffle, seek, previous); + track_author = void 0; + if (result.tracks[0].author) { + track_author = result.tracks[0].author; + } + else { + track_author = ""; + } + track_duration = void 0; + if (result.tracks[0].length) { + track_duration = (0, pretty_ms_1["default"])(result.tracks[0].length); + } + else { + track_duration = "NaN:NaN"; + } + track_thumbnail = void 0; + if (result.tracks[0].thumbnail) { + track_thumbnail = result.tracks[0].thumbnail.toString(); + } + else { + track_thumbnail = "NaN:NaN"; + } + embed = new discord_js_1.EmbedBuilder() + .setAuthor({ + name: "Now playing", + iconURL: "https://cdn.m3.fyi/MoeLogo.gif" + }) + .setTitle(result.type === "PLAYLIST" + ? "Playing ".concat(result.tracks.length, " from ").concat(result.playlistName) + : "Playing ".concat(result.tracks[0].title)) + .setDescription("[".concat(result.tracks[0].title, "](").concat(result.tracks[0].uri, ")")) + .addFields({ + name: "Author", + value: track_author, + inline: true + }, { + name: "Duration", + value: track_duration, + inline: true + }) + .setThumbnail(track_thumbnail) + .setColor("#ff0047"); + if (!player.playing && !player.paused) + player.play(); + if (controls) { + response = controls.edit({ + embeds: [embed], + components: [row, row2] + }); + } + setTimeout(function () { return msg["delete"](); }, 3000); + return [2 /*return*/]; + case 20: return [2 /*return*/]; + } + }); +}); }); +client.on("interactionCreate", function (interaction) { return __awaiter(void 0, void 0, void 0, function () { + var guild, member, voiceId, player, _a, track; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + console.log(interaction.id); + if (!interaction.isButton()) return [3 /*break*/, 20]; + guild = client.guilds.cache.get(interaction.guildId); + member = guild === null || guild === void 0 ? void 0 : guild.members.cache.get(interaction.member.user.id); + voiceId = member === null || member === void 0 ? void 0 : member.voice.channel.id; + return [4 /*yield*/, kazagumo.createPlayer({ + guildId: interaction.guild.id, + textId: interaction.channel.id, + voiceId: voiceId + })]; + case 1: + player = _b.sent(); + _a = interaction.customId; + switch (_a) { + case "play": return [3 /*break*/, 2]; + case "stop": return [3 /*break*/, 4]; + case "skip": return [3 /*break*/, 6]; + case "loop": return [3 /*break*/, 8]; + case "shuffle": return [3 /*break*/, 13]; + case "seek": return [3 /*break*/, 15]; + case "previous": return [3 /*break*/, 17]; + } + return [3 /*break*/, 19]; + case 2: + player.pause(!player.paused); + return [4 /*yield*/, interaction.reply({ + ephemeral: true, + content: "Toggled Pause" + })]; + case 3: + _b.sent(); + return [3 /*break*/, 20]; + case 4: + // player.disconnect(); + player.destroy(); + return [4 /*yield*/, interaction.reply({ + ephemeral: true, + content: "Stopped Playing" + })]; + case 5: + _b.sent(); + return [3 /*break*/, 20]; + case 6: + player.skip(); + return [4 /*yield*/, interaction.reply({ + ephemeral: true, + content: "Skipped Song" + })]; + case 7: + _b.sent(); + return [3 /*break*/, 20]; + case 8: + if (!(player.loop != "none")) return [3 /*break*/, 10]; + player.setLoop("none"); + return [4 /*yield*/, interaction.reply({ + ephemeral: true, + content: "Disabled Looping" + })]; + case 9: + _b.sent(); + return [3 /*break*/, 12]; + case 10: + player.setLoop("track"); + return [4 /*yield*/, interaction.reply({ + ephemeral: true, + content: "Started Looping" + })]; + case 11: + _b.sent(); + _b.label = 12; + case 12: return [3 /*break*/, 20]; + case 13: + player.queue.shuffle(); + return [4 /*yield*/, interaction.reply({ + ephemeral: true, + content: "Shuffled Queue" + })]; + case 14: + _b.sent(); + return [3 /*break*/, 20]; + case 15: + // let position = player.position / 1000; + // position = position | 0; + // console.log(position); + // player.seek(position + 5); + return [4 /*yield*/, interaction.reply({ + ephemeral: true, + content: "Does not work :pensive:" + })]; + case 16: + // let position = player.position / 1000; + // position = position | 0; + // console.log(position); + // player.seek(position + 5); + _b.sent(); + return [3 /*break*/, 20]; + case 17: + track = player.getPrevious(); + return [4 /*yield*/, interaction.reply({ + ephemeral: true, + content: "Queued previous song" + })]; + case 18: + _b.sent(); + player.play(track[0]); + return [3 /*break*/, 20]; + case 19: return [3 /*break*/, 20]; + case 20: return [2 /*return*/]; + } + }); +}); }); +client.login(process.env.TOKEN); diff --git a/src/index.ts b/src/index.ts index 3211f1b..a9f3c13 100644 --- a/src/index.ts +++ b/src/index.ts @@ -10,7 +10,7 @@ import { type Message, SlashCommandBuilder, Interaction, -} from "discord.js"; +} from "npm:discord.js"; import { Connectors, Track } from "shoukaku"; @@ -19,18 +19,19 @@ import { type KazagumoPlayer, type KazagumoTrack, type Payload, -} from "kazagumo"; +} from "npm:kazagumo"; -import KazagumoPlugin from "kazagumo-spotify"; -import prettyMilliseconds from "pretty-ms"; +import KazagumoPlugin from "npm:kazagumo-spotify"; +import prettyMilliseconds from "npm:pretty-ms"; const { Guilds, GuildVoiceStates, GuildMessages, MessageContent } = GatewayIntentBits; -import * as dotenv from "dotenv"; -import { readFileSync, writeFileSync } from "fs"; -import { channel } from "process"; +import * as dotenv from "npm:dotenv"; +import { readFileSync, writeFileSync } from "node:fs"; +import process from "node:process"; +import Deezer from "npm:kazagumo-deezer"; dotenv.config(); if (!process.env.SPOTIFY_ID || !process.env.SPOTIFY_SECRET) { @@ -66,13 +67,14 @@ const kazagumo = new Kazagumo( if (guild) guild.shard.send(payload); }, plugins: [ + new Deezer({playlistLimit:20}), new KazagumoPlugin({ clientId: process.env.SPOTIFY_ID, clientSecret: process.env.SPOTIFY_SECRET, playlistPageLimit: 1, // optional ( 100 tracks per page ) albumPageLimit: 1, // optional ( 50 tracks per page ) searchLimit: 10, // optional ( track search limit. Max 50 ) - searchMarket: "US", // optional || default: US ( Enter the country you live in. [ Can only be of 2 letters. For eg: US, IN, EN ] )// + searchMarket: "DE", // optional || default: US ( Enter the country you live in. [ Can only be of 2 letters. For eg: US, IN, EN ] )// }), ], }, @@ -135,7 +137,28 @@ kazagumo.on("playerStart", (player: KazagumoPlayer, track: KazagumoTrack) => { kazagumo.on("playerEnd", (player: KazagumoPlayer) => { //TODO: Use embed message instead - // player.data.get("message")?.edit({ content: "Finished playing" }); + const embed = new EmbedBuilder() + .setAuthor({ + name: "Moe", + iconURL: "https://cdn.m3.fyi/MoeLogo.gif", + }) + .setTitle("Nothing is being played right now") + .setDescription("Enter message to search") + .addFields( + { + name: "Author", + value: "None", + inline: true, + }, + { + name: "Duration", + value: "NaN:NaN", + inline: true, + } + ) + .setColor("#ff0047"); + + player.data.get("message")?.edit({ embed: [embed] }); }); kazagumo.on("playerEmpty", (player: KazagumoPlayer) => { @@ -155,7 +178,7 @@ kazagumo.on("playerEmpty", (player: KazagumoPlayer) => { }); client.on("messageCreate", async (msg: Message) => { - // console.log(msg.content); + console.log(msg.content); if (msg.author.bot) return; if (!msg.guild) return; if (!msg.member) return; @@ -222,11 +245,6 @@ client.on("messageCreate", async (msg: Message) => { previous ); - let track_author: string; - track_author = "None"; - let track_duration; - track_duration = "NaN:NaN"; - const embed = new EmbedBuilder() .setAuthor({ name: "Moe", @@ -237,12 +255,12 @@ client.on("messageCreate", async (msg: Message) => { .addFields( { name: "Author", - value: track_author, + value: "None", inline: true, }, { name: "Duration", - value: track_duration, + value: "NaN:NaN", inline: true, } ) @@ -313,11 +331,20 @@ client.on("messageCreate", async (msg: Message) => { voiceId: channel.id, volume: 40, }); - console.log("Player created"); - const result = await kazagumo.search(query, { requester: msg.author }); - if (!result.tracks.length) { - let answer = await msg.reply("No results found!"); - setTimeout(() => answer.delete(), 3000); + player.data.set("message", controls); + + console.log("Player created, Searching with deezer"); + let result = await kazagumo.search(query, { requester: msg.author, engine: "deezer"}) + console.log(result.tracks); + if (result.tracks.length === 0) { + console.log("Searching with youtube"); + result = await kazagumo.search(query, { requester: msg.author}) + if (result.tracks.length === 0) { + console.log("no yt result found") + let answer = await msg.reply("No results found!"); + setTimeout(() => answer.delete(), 3000); + return; + } } if (result.type === "PLAYLIST")