diff --git a/.env b/.env index d81a6c5..4c4b1cf 100644 --- a/.env +++ b/.env @@ -25,6 +25,8 @@ BOT_SOUNDCLOUD_TOKEN=undefined BOT_YANDEXMUSIC_TOKEN=undefined BOT_YANDEXMUSIC_UID=undefined +BOT_VKONTAKTE_TOKEN=undefined + BOT_GENIUS_TOKEN=undefined MONGO_URI=undefined diff --git a/icons/audioplayer/services/vk.png b/icons/audioplayer/services/vk.png new file mode 100644 index 0000000..0015b37 Binary files /dev/null and b/icons/audioplayer/services/vk.png differ diff --git a/package.json b/package.json index 9e46319..7017122 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aicbot", - "version": "3.7.0", + "version": "3.8.0", "description": "Discord Bot for playing music", "main": "build/main.js", "scripts": { @@ -21,7 +21,7 @@ "node": ">=20" }, "dependencies": { - "@discordjs/rest": "2.3.0", + "@discordjs/rest": "2.4.0", "@discordjs/voice": "0.17.0", "@distube/direct-link": "1.0.1", "@distube/file": "1.0.1", @@ -32,41 +32,42 @@ "@distube/ytdl-core": "4.14.4", "@distube/ytsr": "2.0.4", "cross-env": "7.0.3", - "discord.js": "14.15.3", + "discord.js": "14.16.2", "distube": "5.0.2", "distube-apple-music": "0.1.0", + "distube-vk-music-plugin": "2.0.3", "distube-yandex-music-plugin": "1.0.5", "dotenv": "16.4.5", "genius-lyrics": "4.4.7", - "i18next": "23.12.2", + "i18next": "23.15.1", "i18next-fs-backend": "2.3.2", - "mongoose": "8.5.2", + "mongoose": "8.6.3", "node-cron": "3.0.3", "node-os-utils": "1.3.7", "opusscript": "0.1.1", "prism-media": "1.3.5", - "puppeteer": "22.13.1", + "puppeteer": "23.3.1", "puppeteer-extra": "3.3.6", "puppeteer-extra-plugin-stealth": "2.11.2", - "sodium-native": "4.1.1", + "sodium-native": "4.2.0", "soundcloud.ts": "0.5.5", "uuid": "10.0.0", "zod": "3.23.8" }, "devDependencies": { - "@types/node": "^22.2.0", - "@types/node-cron": "^3.0.11", - "@types/node-os-utils": "^1.3.4", - "@types/uuid": "^10.0.0", - "@typescript-eslint/eslint-plugin": "^8.0.1", - "@typescript-eslint/parser": "^8.0.1", - "@eslint/js": "^9.9.0", - "typescript-eslint": "^8.2.0", - "eslint": "^9.9.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-prettier": "^5.2.1", - "globals": "^15.9.0", - "prettier": "^3.3.3", - "typescript": "^5.5.4" + "@eslint/js": "9.10.0", + "@types/node": "22.5.5", + "@types/node-cron": "3.0.11", + "@types/node-os-utils": "1.3.4", + "@types/uuid": "10.0.0", + "@typescript-eslint/eslint-plugin": "8.6.0", + "@typescript-eslint/parser": "8.6.0", + "eslint": "9.10.0", + "eslint-config-prettier": "9.1.0", + "eslint-plugin-prettier": "5.2.1", + "globals": "15.9.0", + "prettier": "3.3.3", + "typescript": "5.6.2", + "typescript-eslint": "8.6.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ab9474b..d5e94cf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,29 +9,29 @@ importers: .: dependencies: '@discordjs/rest': - specifier: 2.3.0 - version: 2.3.0 + specifier: 2.4.0 + version: 2.4.0 '@discordjs/voice': specifier: 0.17.0 version: 0.17.0(opusscript@0.1.1) '@distube/direct-link': specifier: 1.0.1 - version: 1.0.1(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3)) + version: 1.0.1(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2)) '@distube/file': specifier: 1.0.1 - version: 1.0.1(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3)) + version: 1.0.1(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2)) '@distube/soundcloud': specifier: 2.0.3 - version: 2.0.3(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3)) + version: 2.0.3(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2)) '@distube/spotify': specifier: 2.0.2 - version: 2.0.2(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3)) + version: 2.0.2(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2)) '@distube/youtube': specifier: 1.0.4 - version: 1.0.4(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3)) + version: 1.0.4(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2)) '@distube/yt-dlp': specifier: 2.0.1 - version: 2.0.1(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3)) + version: 2.0.1(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2)) '@distube/ytdl-core': specifier: 4.14.4 version: 4.14.4 @@ -42,17 +42,20 @@ importers: specifier: 7.0.3 version: 7.0.3 discord.js: - specifier: 14.15.3 - version: 14.15.3 + specifier: 14.16.2 + version: 14.16.2 distube: specifier: 5.0.2 - version: 5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3) + version: 5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2) distube-apple-music: specifier: 0.1.0 - version: 0.1.0(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3)) + version: 0.1.0(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2)) + distube-vk-music-plugin: + specifier: 2.0.3 + version: 2.0.3(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2)) distube-yandex-music-plugin: specifier: 1.0.5 - version: 1.0.5(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3)) + version: 1.0.5(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2)) dotenv: specifier: 16.4.5 version: 16.4.5 @@ -60,14 +63,14 @@ importers: specifier: 4.4.7 version: 4.4.7 i18next: - specifier: 23.12.2 - version: 23.12.2 + specifier: 23.15.1 + version: 23.15.1 i18next-fs-backend: specifier: 2.3.2 version: 2.3.2 mongoose: - specifier: 8.5.2 - version: 8.5.2(socks@2.8.3) + specifier: 8.6.3 + version: 8.6.3(socks@2.8.3) node-cron: specifier: 3.0.3 version: 3.0.3 @@ -81,17 +84,17 @@ importers: specifier: 1.3.5 version: 1.3.5(opusscript@0.1.1) puppeteer: - specifier: 22.13.1 - version: 22.13.1(typescript@5.5.4) + specifier: 23.3.1 + version: 23.3.1(typescript@5.6.2) puppeteer-extra: specifier: 3.3.6 - version: 3.3.6(@types/puppeteer@7.0.4(typescript@5.5.4))(puppeteer-core@22.13.1)(puppeteer@22.13.1(typescript@5.5.4)) + version: 3.3.6(@types/puppeteer@7.0.4(typescript@5.6.2))(puppeteer-core@23.3.1)(puppeteer@23.3.1(typescript@5.6.2)) puppeteer-extra-plugin-stealth: specifier: 2.11.2 - version: 2.11.2(puppeteer-extra@3.3.6(@types/puppeteer@7.0.4(typescript@5.5.4))(puppeteer-core@22.13.1)(puppeteer@22.13.1(typescript@5.5.4))) + version: 2.11.2(puppeteer-extra@3.3.6(@types/puppeteer@7.0.4(typescript@5.6.2))(puppeteer-core@23.3.1)(puppeteer@23.3.1(typescript@5.6.2))) sodium-native: - specifier: 4.1.1 - version: 4.1.1 + specifier: 4.2.0 + version: 4.2.0 soundcloud.ts: specifier: 0.5.5 version: 0.5.5 @@ -103,47 +106,47 @@ importers: version: 3.23.8 devDependencies: '@eslint/js': - specifier: ^9.9.0 - version: 9.9.0 + specifier: 9.10.0 + version: 9.10.0 '@types/node': - specifier: ^22.2.0 - version: 22.2.0 + specifier: 22.5.5 + version: 22.5.5 '@types/node-cron': - specifier: ^3.0.11 + specifier: 3.0.11 version: 3.0.11 '@types/node-os-utils': - specifier: ^1.3.4 + specifier: 1.3.4 version: 1.3.4 '@types/uuid': - specifier: ^10.0.0 + specifier: 10.0.0 version: 10.0.0 '@typescript-eslint/eslint-plugin': - specifier: ^8.0.1 - version: 8.0.1(@typescript-eslint/parser@8.0.1(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4) + specifier: 8.6.0 + version: 8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.10.0)(typescript@5.6.2))(eslint@9.10.0)(typescript@5.6.2) '@typescript-eslint/parser': - specifier: ^8.0.1 - version: 8.0.1(eslint@9.9.0)(typescript@5.5.4) + specifier: 8.6.0 + version: 8.6.0(eslint@9.10.0)(typescript@5.6.2) eslint: - specifier: ^9.9.0 - version: 9.9.0 + specifier: 9.10.0 + version: 9.10.0 eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.0(eslint@9.9.0) + specifier: 9.1.0 + version: 9.1.0(eslint@9.10.0) eslint-plugin-prettier: - specifier: ^5.2.1 - version: 5.2.1(eslint-config-prettier@9.1.0(eslint@9.9.0))(eslint@9.9.0)(prettier@3.3.3) + specifier: 5.2.1 + version: 5.2.1(eslint-config-prettier@9.1.0(eslint@9.10.0))(eslint@9.10.0)(prettier@3.3.3) globals: - specifier: ^15.9.0 + specifier: 15.9.0 version: 15.9.0 prettier: - specifier: ^3.3.3 + specifier: 3.3.3 version: 3.3.3 typescript: - specifier: ^5.5.4 - version: 5.5.4 + specifier: 5.6.2 + version: 5.6.2 typescript-eslint: - specifier: ^8.2.0 - version: 8.2.0(eslint@9.9.0)(typescript@5.5.4) + specifier: 8.6.0 + version: 8.6.0(eslint@9.10.0)(typescript@5.6.2) packages: @@ -159,33 +162,33 @@ packages: resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.25.0': - resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==} + '@babel/runtime@7.25.6': + resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} engines: {node: '>=6.9.0'} - '@discordjs/builders@1.8.2': - resolution: {integrity: sha512-6wvG3QaCjtMu0xnle4SoOIeFB4y6fKMN6WZfy3BMKJdQQtPLik8KGzDwBVL/+wTtcE/ZlFjgEk74GublyEVZ7g==} - engines: {node: '>=16.11.0'} + '@discordjs/builders@1.9.0': + resolution: {integrity: sha512-0zx8DePNVvQibh5ly5kCEei5wtPBIUbSoE9n+91Rlladz4tgtFbJ36PZMxxZrTEOQ7AHMZ/b0crT/0fCy6FTKg==} + engines: {node: '>=18'} '@discordjs/collection@1.5.3': resolution: {integrity: sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==} engines: {node: '>=16.11.0'} - '@discordjs/collection@2.1.0': - resolution: {integrity: sha512-mLcTACtXUuVgutoznkh6hS3UFqYirDYAg5Dc1m8xn6OvPjetnUlf/xjtqnnc47OwWdaoCQnHmHh9KofhD6uRqw==} + '@discordjs/collection@2.1.1': + resolution: {integrity: sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==} engines: {node: '>=18'} - '@discordjs/formatters@0.4.0': - resolution: {integrity: sha512-fJ06TLC1NiruF35470q3Nr1bi95BdvKFAF+T5bNfZJ4bNdqZ3VZ+Ttg6SThqTxm6qumSG3choxLBHMC69WXNXQ==} - engines: {node: '>=16.11.0'} + '@discordjs/formatters@0.5.0': + resolution: {integrity: sha512-98b3i+Y19RFq1Xke4NkVY46x8KjJQjldHUuEbCqMvp1F5Iq9HgnGpu91jOi/Ufazhty32eRsKnnzS8n4c+L93g==} + engines: {node: '>=18'} - '@discordjs/rest@2.3.0': - resolution: {integrity: sha512-C1kAJK8aSYRv3ZwMG8cvrrW4GN0g5eMdP8AuN8ODH5DyOCbHgJspze1my3xHOAgwLJdKUbWNVyAeJ9cEdduqIg==} - engines: {node: '>=16.11.0'} + '@discordjs/rest@2.4.0': + resolution: {integrity: sha512-Xb2irDqNcq+O8F0/k/NaDp7+t091p+acb51iA4bCKfIn+WFWd6HrNvcsSbMMxIR9NjcMZS6NReTKygqiQN+ntw==} + engines: {node: '>=18'} - '@discordjs/util@1.1.0': - resolution: {integrity: sha512-IndcI5hzlNZ7GS96RV3Xw1R2kaDuXEp7tRIy/KlhidpN/BQ1qh1NZt3377dMLTa44xDUNKT7hnXkA/oUAzD/lg==} - engines: {node: '>=16.11.0'} + '@discordjs/util@1.1.1': + resolution: {integrity: sha512-eddz6UnOBEB1oITPinyrB2Pttej49M9FZQY8NxgEvc3tq6ZICZ19m70RsmzRdDHk80O9NoYN/25AqJl8vPVf/g==} + engines: {node: '>=18'} '@discordjs/voice@0.17.0': resolution: {integrity: sha512-hArn9FF5ZYi1IkxdJEVnJi+OxlwLV0NJYWpKXsmNOojtGtAZHxmsELA+MZlu2KW1F/K1/nt7lFOfcMXNYweq9w==} @@ -243,26 +246,30 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.11.0': - resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} + '@eslint-community/regexpp@4.11.1': + resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.17.1': - resolution: {integrity: sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==} + '@eslint/config-array@0.18.0': + resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.1.0': resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.9.0': - resolution: {integrity: sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug==} + '@eslint/js@9.10.0': + resolution: {integrity: sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.4': resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/plugin-kit@0.1.0': + resolution: {integrity: sha512-autAXT203ixhqei9xt+qkYOvY8l6LAFIdT2UXc/RPNeUVfqRF1BV94GTJyVPFKT8nFM6MyVJhjLj9E8JWvf5zQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@fastify/busboy@2.1.1': resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} @@ -275,8 +282,8 @@ packages: resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} engines: {node: '>=18.18'} - '@mongodb-js/saslprep@1.1.8': - resolution: {integrity: sha512-qKwC/M/nNNaKUBMQ0nuzm47b7ZYWQHN3pcXq4IIcoSBc2hOIrflAxJduIvvqmhoz3gR2TacTAs8vlsCVPkiEdQ==} + '@mongodb-js/saslprep@1.1.9': + resolution: {integrity: sha512-tVkljjeEaAhCqTzajSdgbQ6gE6f3oneVwa3iXR6csiEwXXOFsiC6Uh9iAjAhXPtqa/XMDHWjjeNH/77m/Yq2dw==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -294,8 +301,8 @@ packages: resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@puppeteer/browsers@2.2.4': - resolution: {integrity: sha512-BdG2qiI1dn89OTUUsx2GZSpUzW+DRffR1wlMJyKxVHYrhnKoELSDxDd+2XImUkuWPEKk76H5FcM/gPFrEK1Tfw==} + '@puppeteer/browsers@2.4.0': + resolution: {integrity: sha512-x8J1csfIygOwf6D6qUAZ0ASk3z63zPb7wkNeHRerCMh82qWKUrOgkuP005AJC8lDL6/evtXETGEJVcwykKT4/g==} engines: {node: '>=18'} hasBin: true @@ -303,8 +310,8 @@ packages: resolution: {integrity: sha512-x7zadcfJGxFka1Q3f8gCts1F0xMwCKbZweM85xECGI0hBTeIZJGGCrHgLggihBoprlQ/hBmDR5LKfIPqnmHM3w==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} - '@sapphire/shapeshift@3.9.7': - resolution: {integrity: sha512-4It2mxPSr4OGn4HSQWGmhFMsNFGfFVhWeRPCRwbH972Ek2pzfGRZtb0pJ4Ze6oIzcyh2jw7nUDa6qGlWofgd9g==} + '@sapphire/shapeshift@4.0.0': + resolution: {integrity: sha512-d9dUmWVA7MMiKobL3VpLF8P2aeanRTu6ypG2OIaEv/ZHH/SUQ2iHOVyi5wAPjQ+HmnMuL0whK9ez8I/raWbtIg==} engines: {node: '>=v16'} '@sapphire/snowflake@3.5.3': @@ -326,8 +333,8 @@ packages: '@types/node-os-utils@1.3.4': resolution: {integrity: sha512-BCUYrbdoO4FUbx6MB9atLNFnkxdliFaxdiTJMIPPiecXIApc5zf4NIqV5G1jWv/ReZvtYyHLs40RkBjHX+vykA==} - '@types/node@22.2.0': - resolution: {integrity: sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ==} + '@types/node@22.5.5': + resolution: {integrity: sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==} '@types/puppeteer@7.0.4': resolution: {integrity: sha512-ja78vquZc8y+GM2al07GZqWDKQskQXygCDiu0e3uO0DMRKqE0MjrFBFmTulfPYzLB6WnL7Kl2tFPy0WXSpPomg==} @@ -348,8 +355,8 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.0.1': - resolution: {integrity: sha512-5g3Y7GDFsJAnY4Yhvk8sZtFfV6YNF2caLzjrRPUBzewjPCaj0yokePB4LJSobyCzGMzjZZYFbwuzbfDHlimXbQ==} + '@typescript-eslint/eslint-plugin@8.6.0': + resolution: {integrity: sha512-UOaz/wFowmoh2G6Mr9gw60B1mm0MzUtm6Ic8G2yM1Le6gyj5Loi/N+O5mocugRGY+8OeeKmkMmbxNqUCq3B4Sg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -359,56 +366,22 @@ packages: typescript: optional: true - '@typescript-eslint/eslint-plugin@8.2.0': - resolution: {integrity: sha512-02tJIs655em7fvt9gps/+4k4OsKULYGtLBPJfOsmOq1+3cdClYiF0+d6mHu6qDnTcg88wJBkcPLpQhq7FyDz0A==} + '@typescript-eslint/parser@8.6.0': + resolution: {integrity: sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/parser@8.0.1': - resolution: {integrity: sha512-5IgYJ9EO/12pOUwiBKFkpU7rS3IU21mtXzB81TNwq2xEybcmAZrE9qwDtsb5uQd9aVO9o0fdabFyAmKveXyujg==} + '@typescript-eslint/scope-manager@8.6.0': + resolution: {integrity: sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/parser@8.2.0': - resolution: {integrity: sha512-j3Di+o0lHgPrb7FxL3fdEy6LJ/j2NE8u+AP/5cQ9SKb+JLH6V6UHDqJ+e0hXBkHP1wn1YDFjYCS9LBQsZDlDEg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/scope-manager@8.0.1': - resolution: {integrity: sha512-NpixInP5dm7uukMiRyiHjRKkom5RIFA4dfiHvalanD2cF0CLUuQqxfg8PtEUo9yqJI2bBhF+pcSafqnG3UBnRQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/scope-manager@8.2.0': - resolution: {integrity: sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/type-utils@8.0.1': - resolution: {integrity: sha512-+/UT25MWvXeDX9YaHv1IS6KI1fiuTto43WprE7pgSMswHbn1Jm9GEM4Txp+X74ifOWV8emu2AWcbLhpJAvD5Ng==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - '@typescript-eslint/type-utils@8.2.0': - resolution: {integrity: sha512-g1CfXGFMQdT5S+0PSO0fvGXUaiSkl73U1n9LTK5aRAFnPlJ8dLKkXr4AaLFvPedW8lVDoMgLLE3JN98ZZfsj0w==} + '@typescript-eslint/type-utils@8.6.0': + resolution: {integrity: sha512-dtePl4gsuenXVwC7dVNlb4mGDcKjDT/Ropsk4za/ouMBPplCLyznIaR+W65mvCvsyS97dymoBRrioEXI7k0XIg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -416,25 +389,12 @@ packages: typescript: optional: true - '@typescript-eslint/types@8.0.1': - resolution: {integrity: sha512-PpqTVT3yCA/bIgJ12czBuE3iBlM3g4inRSC5J0QOdQFAn07TYrYEQBBKgXH1lQpglup+Zy6c1fxuwTk4MTNKIw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/types@8.2.0': - resolution: {integrity: sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ==} + '@typescript-eslint/types@8.6.0': + resolution: {integrity: sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.0.1': - resolution: {integrity: sha512-8V9hriRvZQXPWU3bbiUV4Epo7EvgM6RTs+sUmxp5G//dBGy402S7Fx0W0QkB2fb4obCF8SInoUzvTYtc3bkb5w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/typescript-estree@8.2.0': - resolution: {integrity: sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA==} + '@typescript-eslint/typescript-estree@8.6.0': + resolution: {integrity: sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -442,28 +402,18 @@ packages: typescript: optional: true - '@typescript-eslint/utils@8.0.1': - resolution: {integrity: sha512-CBFR0G0sCt0+fzfnKaciu9IBsKvEKYwN9UZ+eeogK1fYHg4Qxk1yf/wLQkLXlq8wbU2dFlgAesxt8Gi76E8RTA==} + '@typescript-eslint/utils@8.6.0': + resolution: {integrity: sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - '@typescript-eslint/utils@8.2.0': - resolution: {integrity: sha512-O46eaYKDlV3TvAVDNcoDzd5N550ckSe8G4phko++OCSC1dYIb9LTc3HDGYdWqWIAT5qDUKphO6sd9RrpIJJPfg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - - '@typescript-eslint/visitor-keys@8.0.1': - resolution: {integrity: sha512-W5E+o0UfUcK5EgchLZsyVWqARmsM7v54/qEq6PY3YI5arkgmCzHiuk0zKSJJbm71V0xdRna4BGomkCTXz2/LkQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/visitor-keys@8.2.0': - resolution: {integrity: sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==} + '@typescript-eslint/visitor-keys@8.6.0': + resolution: {integrity: sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@vladfrangu/async_event_emitter@2.4.5': - resolution: {integrity: sha512-J7T3gUr3Wz0l7Ni1f9upgBZ7+J22/Q1B7dl0X6fG+fTsD+H+31DIosMHj4Um1dWQwqbcQ3oQf+YS2foYkDc9cQ==} + '@vladfrangu/async_event_emitter@2.4.6': + resolution: {integrity: sha512-RaI5qZo6D2CVS6sTHFKg1v5Ohq/+Bo2LZ5gzUEwZ/WkHhwtGTCB/sVLw8ijOkAUxasZ+WshN/Rzj4ywsABJ5ZA==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} acorn-jsx@5.3.2: @@ -502,10 +452,6 @@ packages: resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} engines: {node: '>=0.10.0'} - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - ast-types@0.13.4: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} @@ -513,8 +459,8 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - axios@1.7.3: - resolution: {integrity: sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==} + axios@1.7.7: + resolution: {integrity: sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==} b4a@1.6.6: resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==} @@ -525,17 +471,17 @@ packages: bare-events@2.4.2: resolution: {integrity: sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==} - bare-fs@2.3.1: - resolution: {integrity: sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==} + bare-fs@2.3.5: + resolution: {integrity: sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==} - bare-os@2.4.0: - resolution: {integrity: sha512-v8DTT08AS/G0F9xrhyLtepoo9EJBJ85FRSMbu1pQUlAf6A8T0tEEQGMVObWeqpjhSPXsE0VGlluFBJu2fdoTNg==} + bare-os@2.4.4: + resolution: {integrity: sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==} bare-path@2.1.3: resolution: {integrity: sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==} - bare-stream@2.1.3: - resolution: {integrity: sha512-tiDAH9H/kP+tvNO5sczyn9ZAA7utrSMobyDchsnyyXBuUe2FSQWbxhtuHB8jwpHYYevVo2UJpcmvvjrbHboUUQ==} + bare-stream@2.3.0: + resolution: {integrity: sha512-pVRWciewGUeCyKEuRxwv06M079r+fRjAQjBEK2P6OYGrO43O+Z0LrPZZEjlc4mB6C2RpZ9AxJ1s7NLEtOHO6eA==} base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -583,8 +529,8 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chromium-bidi@0.6.1: - resolution: {integrity: sha512-kSxJRj0VgtUKz6nmzc2JPfyfJGzwzt65u7PqhPHtgGQUZLF5oG+ST6l6e5ONfStUMAlhSutFCjaGKllXZa16jA==} + chromium-bidi@0.6.5: + resolution: {integrity: sha512-RuLrmzYrxSb0s9SgpB+QN5jJucPduZQ/9SIe76MDxYJuecPW5mxMdacJ1f4EtgiV+R0p3sCkznTMvH0MPGFqjA==} peerDependencies: devtools-protocol: '*' @@ -659,8 +605,8 @@ packages: resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} - debug@4.3.6: - resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -687,25 +633,29 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - devtools-protocol@0.0.1299070: - resolution: {integrity: sha512-+qtL3eX50qsJ7c+qVyagqi7AWMoQCBGNfoyJZMwm/NSXVqLYbuitrWEEIzxfUmTNy7//Xe8yhMmQ+elj3uAqSg==} - - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + devtools-protocol@0.0.1330662: + resolution: {integrity: sha512-pzh6YQ8zZfz3iKlCvgzVCu22NdpZ8hNmwU6WnQjNVquh0A9iVosPtNLWDwaWVGyrntQlltPFztTMK5Cg6lfCuw==} discord-api-types@0.37.83: resolution: {integrity: sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA==} - discord.js@14.15.3: - resolution: {integrity: sha512-/UJDQO10VuU6wQPglA4kz2bw2ngeeSbogiIPx/TsnctfzV/tNf+q+i1HlgtX1OGpeOBpJH9erZQNO5oRM2uAtQ==} - engines: {node: '>=16.11.0'} + discord-api-types@0.37.97: + resolution: {integrity: sha512-No1BXPcVkyVD4ZVmbNgDKaBoqgeQ+FJpzZ8wqHkfmBnTZig1FcH3iPPersiK1TUIAzgClh2IvOuVUYfcWLQAOA==} + + discord.js@14.16.2: + resolution: {integrity: sha512-VGNi9WE2dZIxYM8/r/iatQQ+3LT8STW4hhczJOwm+DBeHq66vsKDCk8trChNCB01sMO9crslYuEMeZl2d7r3xw==} + engines: {node: '>=18'} distube-apple-music@0.1.0: resolution: {integrity: sha512-f+YMXZ5+9RX7HTvtp0V51A987RwiniiCyDzwy0ZFVFgWQq0EPqziYEmZ5D1RSZ6c5s6+YCc9vIC8KPulezdhIw==} peerDependencies: distube: '5' + distube-vk-music-plugin@2.0.3: + resolution: {integrity: sha512-F9O7jw09bBjd40hT7Nh+DGQ+ghZVoLv1GdN0pe4r9pp/KSXdzzMEwNaxvkyInZTK+1otiMhr55m09FSbgfigRw==} + peerDependencies: + distube: '5' + distube-yandex-music-plugin@1.0.5: resolution: {integrity: sha512-sHsnUxdFFVzqTNPhmC9w6nYsseVS2Tsuwgy5IedPCj4bJLTc3iOWUbNBAYNgQnsxPPExH7S/kFWjxXQ/0NAoKg==} peerDependencies: @@ -760,8 +710,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} escape-string-regexp@1.0.5: @@ -809,8 +759,8 @@ packages: resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.9.0: - resolution: {integrity: sha512-JfiKJrbx0506OEerjK2Y1QlldtBxkAlLxT5OEcRF8uaQ86noDe2k31Vw9rnSWv+MXZHj7OOUV/dA0AhdLFcyvA==} + eslint@9.10.0: + resolution: {integrity: sha512-Y4D0IgtBZfOcOUAIQTSXBKoNGfY0REGqHJG6+Q81vNippW5YlKjHFj4soMxamKK1NXHUWuBZTLdU3Km+L/pcHw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -900,8 +850,8 @@ packages: flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - follow-redirects@1.15.6: - resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -990,10 +940,6 @@ packages: resolution: {integrity: sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==} engines: {node: '>=18'} - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} @@ -1054,14 +1000,14 @@ packages: i18next-fs-backend@2.3.2: resolution: {integrity: sha512-LIwUlkqDZnUI8lnUxBnEj8K/FrHQTT/Sc+1rvDm9E8YvvY5YxzoEAASNx+W5M9DfD5s77lI5vSAFWeTp26B/3Q==} - i18next@23.12.2: - resolution: {integrity: sha512-XIeh5V+bi8SJSWGL3jqbTEBW5oD6rbP5L+E7dVQh1MNTxxYef0x15rhJVcRb7oiuq4jLtgy2SD8eFlf6P2cmqg==} + i18next@23.15.1: + resolution: {integrity: sha512-wB4abZ3uK7EWodYisHl/asf8UYEhrI/vj/8aoSsrj/ZDxj4/UXPOa1KvFt1Fq5hkUHquNqwFlDprmjZ8iySgYA==} ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} import-fresh@3.3.0: @@ -1221,8 +1167,8 @@ packages: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} - micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} mime-db@1.52.0: @@ -1259,8 +1205,8 @@ packages: mongodb-connection-string-url@3.0.1: resolution: {integrity: sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==} - mongodb@6.7.0: - resolution: {integrity: sha512-TMKyHdtMcO0fYBNORiYdmM25ijsHs+Njs963r4Tro4OQZzqYigAzYQouwWRg4OIaiLRUEGUh/1UAcH5lxdSLIA==} + mongodb@6.8.0: + resolution: {integrity: sha512-HGQ9NWDle5WvwMnrvUxsFYPd3JEbqD3RgABHBQRuoCEND0qzhsd0iH5ypHsf1eJ+sXmvmyKpP+FLOKY8Il7jMw==} engines: {node: '>=16.20.1'} peerDependencies: '@aws-sdk/credential-providers': ^3.188.0 @@ -1286,8 +1232,8 @@ packages: socks: optional: true - mongoose@8.5.2: - resolution: {integrity: sha512-GZB4rHMdYfGatV+23IpCrqFbyCOjCNOHXgWbirr92KRwTEncBrtW3kgU9vmpKjsGf7nMmnAy06SwWUv1vhDkSg==} + mongoose@8.6.3: + resolution: {integrity: sha512-++yRmm7hjMbqVA/8WeiygTnEfrFbiy+OBjQi49GFJIvCQuSYE56myyQWo4j5hbpcHjhHQU8NukMNGTwAWFWjIw==} engines: {node: '>=16.20.1'} mpath@0.9.0: @@ -1298,9 +1244,6 @@ packages: resolution: {integrity: sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==} engines: {node: '>=14.0.0'} - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1323,8 +1266,8 @@ packages: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-gyp-build@4.8.1: - resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} + node-gyp-build@4.8.2: + resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==} hasBin: true node-html-parser@6.1.13: @@ -1386,15 +1329,11 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -1444,15 +1383,15 @@ packages: psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - puppeteer-core@22.13.1: - resolution: {integrity: sha512-NmhnASYp51QPRCAf9n0OPxuPMmzkKd8+2sB9Q+BjwwCG25gz6iuNc3LQDWa+cH2tyivmJppLhNNFt6Q3HmoOpw==} + puppeteer-core@23.3.1: + resolution: {integrity: sha512-m5gTpITEqqpSgAvPUI/Ch9igh5sNJV+BVVbqQMzqirRDVHDCkLGHaydEQZx2NZvSXdwCFrIV///cpSlX/uD0Sg==} engines: {node: '>=18'} puppeteer-extra-plugin-stealth@2.11.2: @@ -1518,8 +1457,8 @@ packages: puppeteer-core: optional: true - puppeteer@22.13.1: - resolution: {integrity: sha512-PwXLDQK5u83Fm5A7TGMq+9BR7iHDJ8a3h21PSsh/E6VfhxiKYkU7+tvGZNSCap6k3pCNDd9oNteVBEctcBalmQ==} + puppeteer@23.3.1: + resolution: {integrity: sha512-BxkuJyCv46ZKW8KEHiVMHgHEC89jKK9FffReWjbw1IfBUmNx+6JIZyqOtaJeSwyolTdVqqb5fiPiXflKeH3dKQ==} engines: {node: '>=18'} hasBin: true @@ -1600,10 +1539,6 @@ packages: sift@17.1.3: resolution: {integrity: sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==} - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - smart-buffer@4.2.0: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} @@ -1616,8 +1551,8 @@ packages: resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - sodium-native@4.1.1: - resolution: {integrity: sha512-LXkAfRd4FHtkQS4X6g+nRcVaN7mWVNepV06phIsC6+IZFvGh1voW5TNQiQp2twVaMf05gZqQjuS+uWLM6gHhNQ==} + sodium-native@4.2.0: + resolution: {integrity: sha512-rdJRAf/RE/IRFUUoUsz10slNAQDTGz5ChpIeR1Ti0BtGYstl6Uok4hHALPBdnFcLml6qXJ2pDd0/De09mPa6mg==} soundcloud.ts@0.5.5: resolution: {integrity: sha512-bygjhC1w/w26Nk0Y+4D4cWSEJ1TdxLaE6+w4pCazFzPF+J4mzuB62ggWmFa7BiwnirzNf9lgPbjzrQYGege4Ew==} @@ -1643,8 +1578,8 @@ packages: sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - streamx@2.18.0: - resolution: {integrity: sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==} + streamx@2.20.1: + resolution: {integrity: sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==} string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -1684,8 +1619,8 @@ packages: tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - text-decoder@1.1.1: - resolution: {integrity: sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==} + text-decoder@1.2.0: + resolution: {integrity: sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==} text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -1717,18 +1652,18 @@ packages: ts-mixer@6.0.4: resolution: {integrity: sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==} - tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - - tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typescript-eslint@8.2.0: - resolution: {integrity: sha512-DmnqaPcML0xYwUzgNbM1XaKXpEb7BShYf2P1tkUmmcl8hyeG7Pj08Er7R9bNy6AufabywzJcOybQAtnD/c9DGw==} + typed-query-selector@2.12.0: + resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} + + typescript-eslint@8.6.0: + resolution: {integrity: sha512-eEhhlxCEpCd4helh3AO1hk0UP2MvbRi9CtIAJTVPQjuSXOOO2jsEacNi4UdcJzZJbeuVg1gMhtZ8UYb+NFYPrA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -1736,27 +1671,23 @@ packages: typescript: optional: true - typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + typescript@5.6.2: + resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} engines: {node: '>=14.17'} hasBin: true unbzip2-stream@1.4.3: resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} - undici-types@6.13.0: - resolution: {integrity: sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==} + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} undici@5.28.4: resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} engines: {node: '>=14.0'} - undici@6.13.0: - resolution: {integrity: sha512-Q2rtqmZWrbP8nePMq7mOJIN98M0fYvSgV89vwl/BQRT4mDOeY2GXZngfGpcBBhtky3woM7G24wZV3Q304Bv6cw==} - engines: {node: '>=18.0'} - - undici@6.19.7: - resolution: {integrity: sha512-HR3W/bMGPSr90i8AAp2C4DM3wChFdJPLrWYpIS++LxS8K+W535qftjt+4MyjNYHeWabMj1nvtmLIi7l++iq91A==} + undici@6.19.8: + resolution: {integrity: sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==} engines: {node: '>=18.17'} unfetch@5.0.0: @@ -1790,6 +1721,9 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true + vk-music-api-wrapper@1.0.5: + resolution: {integrity: sha512-rltV6I4xErc4zQQBvMc8QocuDHIX/K9u3hBeqA7AntP7SRwtMoGu0n3K+KD+8H4JbwQ1ymN2CPEaCqLmEwSwHA==} + web-streams-polyfill@3.3.3: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} @@ -1868,7 +1802,7 @@ snapshots: '@babel/code-frame@7.24.7': dependencies: '@babel/highlight': 7.24.7 - picocolors: 1.0.1 + picocolors: 1.1.0 '@babel/helper-validator-identifier@7.24.7': {} @@ -1877,50 +1811,50 @@ snapshots: '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.1 + picocolors: 1.1.0 - '@babel/runtime@7.25.0': + '@babel/runtime@7.25.6': dependencies: regenerator-runtime: 0.14.1 - '@discordjs/builders@1.8.2': + '@discordjs/builders@1.9.0': dependencies: - '@discordjs/formatters': 0.4.0 - '@discordjs/util': 1.1.0 - '@sapphire/shapeshift': 3.9.7 - discord-api-types: 0.37.83 + '@discordjs/formatters': 0.5.0 + '@discordjs/util': 1.1.1 + '@sapphire/shapeshift': 4.0.0 + discord-api-types: 0.37.97 fast-deep-equal: 3.1.3 ts-mixer: 6.0.4 - tslib: 2.6.2 + tslib: 2.7.0 '@discordjs/collection@1.5.3': {} - '@discordjs/collection@2.1.0': {} + '@discordjs/collection@2.1.1': {} - '@discordjs/formatters@0.4.0': + '@discordjs/formatters@0.5.0': dependencies: - discord-api-types: 0.37.83 + discord-api-types: 0.37.97 - '@discordjs/rest@2.3.0': + '@discordjs/rest@2.4.0': dependencies: - '@discordjs/collection': 2.1.0 - '@discordjs/util': 1.1.0 + '@discordjs/collection': 2.1.1 + '@discordjs/util': 1.1.1 '@sapphire/async-queue': 1.5.3 '@sapphire/snowflake': 3.5.3 - '@vladfrangu/async_event_emitter': 2.4.5 - discord-api-types: 0.37.83 + '@vladfrangu/async_event_emitter': 2.4.6 + discord-api-types: 0.37.97 magic-bytes.js: 1.10.0 - tslib: 2.6.3 - undici: 6.13.0 + tslib: 2.7.0 + undici: 6.19.8 - '@discordjs/util@1.1.0': {} + '@discordjs/util@1.1.1': {} '@discordjs/voice@0.17.0(opusscript@0.1.1)': dependencies: '@types/ws': 8.5.12 discord-api-types: 0.37.83 prism-media: 1.3.5(opusscript@0.1.1) - tslib: 2.6.3 + tslib: 2.7.0 ws: 8.18.0 transitivePeerDependencies: - '@discordjs/opus' @@ -1932,57 +1866,57 @@ snapshots: '@discordjs/ws@1.1.1': dependencies: - '@discordjs/collection': 2.1.0 - '@discordjs/rest': 2.3.0 - '@discordjs/util': 1.1.0 + '@discordjs/collection': 2.1.1 + '@discordjs/rest': 2.4.0 + '@discordjs/util': 1.1.1 '@sapphire/async-queue': 1.5.3 '@types/ws': 8.5.12 - '@vladfrangu/async_event_emitter': 2.4.5 + '@vladfrangu/async_event_emitter': 2.4.6 discord-api-types: 0.37.83 - tslib: 2.6.2 + tslib: 2.7.0 ws: 8.18.0 transitivePeerDependencies: - bufferutil - utf-8-validate - '@distube/direct-link@1.0.1(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3))': + '@distube/direct-link@1.0.1(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2))': dependencies: - distube: 5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3) - undici: 6.19.7 + distube: 5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2) + undici: 6.19.8 - '@distube/file@1.0.1(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3))': + '@distube/file@1.0.1(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2))': dependencies: - distube: 5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3) + distube: 5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2) - '@distube/soundcloud@2.0.3(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3))': + '@distube/soundcloud@2.0.3(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2))': dependencies: - distube: 5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3) + distube: 5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2) soundcloud.ts: 0.5.5 - '@distube/spotify@2.0.2(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3))': + '@distube/spotify@2.0.2(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2))': dependencies: - distube: 5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3) + distube: 5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2) spotify-uri: 4.1.0 spotify-url-info: 3.2.16 spotify-web-api-node: 5.0.2 - undici: 6.19.7 + undici: 6.19.8 transitivePeerDependencies: - supports-color - '@distube/youtube@1.0.4(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3))': + '@distube/youtube@1.0.4(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2))': dependencies: '@distube/ytdl-core': 4.14.4 '@distube/ytpl': 1.2.1 '@distube/ytsr': 2.0.4 - distube: 5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3) + distube: 5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2) transitivePeerDependencies: - supports-color - '@distube/yt-dlp@2.0.1(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3))': + '@distube/yt-dlp@2.0.1(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2))': dependencies: dargs: 7.0.0 - distube: 5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3) - undici: 6.19.7 + distube: 5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2) + undici: 6.19.8 '@distube/ytdl-core@4.14.4': dependencies: @@ -2001,19 +1935,19 @@ snapshots: '@distube/ytsr@2.0.4': dependencies: - undici: 6.19.7 + undici: 6.19.8 - '@eslint-community/eslint-utils@4.4.0(eslint@9.9.0)': + '@eslint-community/eslint-utils@4.4.0(eslint@9.10.0)': dependencies: - eslint: 9.9.0 + eslint: 9.10.0 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.11.0': {} + '@eslint-community/regexpp@4.11.1': {} - '@eslint/config-array@0.17.1': + '@eslint/config-array@0.18.0': dependencies: '@eslint/object-schema': 2.1.4 - debug: 4.3.6 + debug: 4.3.7 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -2021,10 +1955,10 @@ snapshots: '@eslint/eslintrc@3.1.0': dependencies: ajv: 6.12.6 - debug: 4.3.6 + debug: 4.3.7 espree: 10.1.0 globals: 14.0.0 - ignore: 5.3.1 + ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -2032,17 +1966,21 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.9.0': {} + '@eslint/js@9.10.0': {} '@eslint/object-schema@2.1.4': {} + '@eslint/plugin-kit@0.1.0': + dependencies: + levn: 0.4.1 + '@fastify/busboy@2.1.1': {} '@humanwhocodes/module-importer@1.0.1': {} '@humanwhocodes/retry@0.3.0': {} - '@mongodb-js/saslprep@1.1.8': + '@mongodb-js/saslprep@1.1.9': dependencies: sparse-bitfield: 3.0.3 @@ -2060,9 +1998,9 @@ snapshots: '@pkgr/core@0.1.1': {} - '@puppeteer/browsers@2.2.4': + '@puppeteer/browsers@2.4.0': dependencies: - debug: 4.3.6 + debug: 4.3.7 extract-zip: 2.0.1 progress: 2.0.3 proxy-agent: 6.4.0 @@ -2075,7 +2013,7 @@ snapshots: '@sapphire/async-queue@1.5.3': {} - '@sapphire/shapeshift@3.9.7': + '@sapphire/shapeshift@4.0.0': dependencies: fast-deep-equal: 3.1.3 lodash: 4.17.21 @@ -2094,13 +2032,13 @@ snapshots: '@types/node-os-utils@1.3.4': {} - '@types/node@22.2.0': + '@types/node@22.5.5': dependencies: - undici-types: 6.13.0 + undici-types: 6.19.8 - '@types/puppeteer@7.0.4(typescript@5.5.4)': + '@types/puppeteer@7.0.4(typescript@5.6.2)': dependencies: - puppeteer: 22.13.1(typescript@5.5.4) + puppeteer: 23.3.1(typescript@5.6.2) transitivePeerDependencies: - bufferutil - supports-color @@ -2118,176 +2056,95 @@ snapshots: '@types/ws@8.5.12': dependencies: - '@types/node': 22.2.0 + '@types/node': 22.5.5 '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.2.0 + '@types/node': 22.5.5 optional: true - '@typescript-eslint/eslint-plugin@8.0.1(@typescript-eslint/parser@8.0.1(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4)': + '@typescript-eslint/eslint-plugin@8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.10.0)(typescript@5.6.2))(eslint@9.10.0)(typescript@5.6.2)': dependencies: - '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 8.0.1(eslint@9.9.0)(typescript@5.5.4) - '@typescript-eslint/scope-manager': 8.0.1 - '@typescript-eslint/type-utils': 8.0.1(eslint@9.9.0)(typescript@5.5.4) - '@typescript-eslint/utils': 8.0.1(eslint@9.9.0)(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 8.0.1 - eslint: 9.9.0 + '@eslint-community/regexpp': 4.11.1 + '@typescript-eslint/parser': 8.6.0(eslint@9.10.0)(typescript@5.6.2) + '@typescript-eslint/scope-manager': 8.6.0 + '@typescript-eslint/type-utils': 8.6.0(eslint@9.10.0)(typescript@5.6.2) + '@typescript-eslint/utils': 8.6.0(eslint@9.10.0)(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 8.6.0 + eslint: 9.10.0 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.5.4) + ts-api-utils: 1.3.0(typescript@5.6.2) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.2.0(@typescript-eslint/parser@8.2.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4)': + '@typescript-eslint/parser@8.6.0(eslint@9.10.0)(typescript@5.6.2)': dependencies: - '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 8.2.0(eslint@9.9.0)(typescript@5.5.4) - '@typescript-eslint/scope-manager': 8.2.0 - '@typescript-eslint/type-utils': 8.2.0(eslint@9.9.0)(typescript@5.5.4) - '@typescript-eslint/utils': 8.2.0(eslint@9.9.0)(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 8.2.0 - eslint: 9.9.0 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.5.4) + '@typescript-eslint/scope-manager': 8.6.0 + '@typescript-eslint/types': 8.6.0 + '@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 8.6.0 + debug: 4.3.7 + eslint: 9.10.0 optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.0.1(eslint@9.9.0)(typescript@5.5.4)': + '@typescript-eslint/scope-manager@8.6.0': dependencies: - '@typescript-eslint/scope-manager': 8.0.1 - '@typescript-eslint/types': 8.0.1 - '@typescript-eslint/typescript-estree': 8.0.1(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 8.0.1 - debug: 4.3.6 - eslint: 9.9.0 - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color + '@typescript-eslint/types': 8.6.0 + '@typescript-eslint/visitor-keys': 8.6.0 - '@typescript-eslint/parser@8.2.0(eslint@9.9.0)(typescript@5.5.4)': + '@typescript-eslint/type-utils@8.6.0(eslint@9.10.0)(typescript@5.6.2)': dependencies: - '@typescript-eslint/scope-manager': 8.2.0 - '@typescript-eslint/types': 8.2.0 - '@typescript-eslint/typescript-estree': 8.2.0(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 8.2.0 - debug: 4.3.6 - eslint: 9.9.0 + '@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2) + '@typescript-eslint/utils': 8.6.0(eslint@9.10.0)(typescript@5.6.2) + debug: 4.3.7 + ts-api-utils: 1.3.0(typescript@5.6.2) optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.0.1': - dependencies: - '@typescript-eslint/types': 8.0.1 - '@typescript-eslint/visitor-keys': 8.0.1 - - '@typescript-eslint/scope-manager@8.2.0': - dependencies: - '@typescript-eslint/types': 8.2.0 - '@typescript-eslint/visitor-keys': 8.2.0 - - '@typescript-eslint/type-utils@8.0.1(eslint@9.9.0)(typescript@5.5.4)': - dependencies: - '@typescript-eslint/typescript-estree': 8.0.1(typescript@5.5.4) - '@typescript-eslint/utils': 8.0.1(eslint@9.9.0)(typescript@5.5.4) - debug: 4.3.6 - ts-api-utils: 1.3.0(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - eslint - supports-color - '@typescript-eslint/type-utils@8.2.0(eslint@9.9.0)(typescript@5.5.4)': - dependencies: - '@typescript-eslint/typescript-estree': 8.2.0(typescript@5.5.4) - '@typescript-eslint/utils': 8.2.0(eslint@9.9.0)(typescript@5.5.4) - debug: 4.3.6 - ts-api-utils: 1.3.0(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - eslint - - supports-color - - '@typescript-eslint/types@8.0.1': {} - - '@typescript-eslint/types@8.2.0': {} + '@typescript-eslint/types@8.6.0': {} - '@typescript-eslint/typescript-estree@8.0.1(typescript@5.5.4)': + '@typescript-eslint/typescript-estree@8.6.0(typescript@5.6.2)': dependencies: - '@typescript-eslint/types': 8.0.1 - '@typescript-eslint/visitor-keys': 8.0.1 - debug: 4.3.6 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@8.2.0(typescript@5.5.4)': - dependencies: - '@typescript-eslint/types': 8.2.0 - '@typescript-eslint/visitor-keys': 8.2.0 - debug: 4.3.6 - globby: 11.1.0 + '@typescript-eslint/types': 8.6.0 + '@typescript-eslint/visitor-keys': 8.6.0 + debug: 4.3.7 + fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.4) + ts-api-utils: 1.3.0(typescript@5.6.2) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.0.1(eslint@9.9.0)(typescript@5.5.4)': + '@typescript-eslint/utils@8.6.0(eslint@9.10.0)(typescript@5.6.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) - '@typescript-eslint/scope-manager': 8.0.1 - '@typescript-eslint/types': 8.0.1 - '@typescript-eslint/typescript-estree': 8.0.1(typescript@5.5.4) - eslint: 9.9.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.10.0) + '@typescript-eslint/scope-manager': 8.6.0 + '@typescript-eslint/types': 8.6.0 + '@typescript-eslint/typescript-estree': 8.6.0(typescript@5.6.2) + eslint: 9.10.0 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@8.2.0(eslint@9.9.0)(typescript@5.5.4)': + '@typescript-eslint/visitor-keys@8.6.0': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) - '@typescript-eslint/scope-manager': 8.2.0 - '@typescript-eslint/types': 8.2.0 - '@typescript-eslint/typescript-estree': 8.2.0(typescript@5.5.4) - eslint: 9.9.0 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/visitor-keys@8.0.1': - dependencies: - '@typescript-eslint/types': 8.0.1 - eslint-visitor-keys: 3.4.3 - - '@typescript-eslint/visitor-keys@8.2.0': - dependencies: - '@typescript-eslint/types': 8.2.0 + '@typescript-eslint/types': 8.6.0 eslint-visitor-keys: 3.4.3 - '@vladfrangu/async_event_emitter@2.4.5': {} + '@vladfrangu/async_event_emitter@2.4.6': {} acorn-jsx@5.3.2(acorn@8.12.1): dependencies: @@ -2297,7 +2154,7 @@ snapshots: agent-base@7.1.1: dependencies: - debug: 4.3.6 + debug: 4.3.7 transitivePeerDependencies: - supports-color @@ -2322,17 +2179,15 @@ snapshots: arr-union@3.1.0: {} - array-union@2.1.0: {} - ast-types@0.13.4: dependencies: - tslib: 2.6.3 + tslib: 2.7.0 asynckit@0.4.0: {} - axios@1.7.3: + axios@1.7.7: dependencies: - follow-redirects: 1.15.6 + follow-redirects: 1.15.9 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -2345,24 +2200,25 @@ snapshots: bare-events@2.4.2: optional: true - bare-fs@2.3.1: + bare-fs@2.3.5: dependencies: bare-events: 2.4.2 bare-path: 2.1.3 - bare-stream: 2.1.3 + bare-stream: 2.3.0 optional: true - bare-os@2.4.0: + bare-os@2.4.4: optional: true bare-path@2.1.3: dependencies: - bare-os: 2.4.0 + bare-os: 2.4.4 optional: true - bare-stream@2.1.3: + bare-stream@2.3.0: dependencies: - streamx: 2.18.0 + b4a: 1.6.6 + streamx: 2.20.1 optional: true base64-js@1.5.1: {} @@ -2414,9 +2270,9 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chromium-bidi@0.6.1(devtools-protocol@0.0.1299070): + chromium-bidi@0.6.5(devtools-protocol@0.0.1330662): dependencies: - devtools-protocol: 0.0.1299070 + devtools-protocol: 0.0.1330662 mitt: 3.0.1 urlpattern-polyfill: 10.0.0 zod: 3.23.8 @@ -2457,14 +2313,14 @@ snapshots: cookiejar@2.1.4: {} - cosmiconfig@9.0.0(typescript@5.5.4): + cosmiconfig@9.0.0(typescript@5.6.2): dependencies: env-paths: 2.2.1 import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 cross-env@7.0.3: dependencies: @@ -2492,9 +2348,9 @@ snapshots: data-uri-to-buffer@6.0.2: {} - debug@4.3.6: + debug@4.3.7: dependencies: - ms: 2.1.2 + ms: 2.1.3 deep-is@0.1.4: {} @@ -2514,51 +2370,54 @@ snapshots: delayed-stream@1.0.0: {} - devtools-protocol@0.0.1299070: {} - - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 + devtools-protocol@0.0.1330662: {} discord-api-types@0.37.83: {} - discord.js@14.15.3: + discord-api-types@0.37.97: {} + + discord.js@14.16.2: dependencies: - '@discordjs/builders': 1.8.2 + '@discordjs/builders': 1.9.0 '@discordjs/collection': 1.5.3 - '@discordjs/formatters': 0.4.0 - '@discordjs/rest': 2.3.0 - '@discordjs/util': 1.1.0 + '@discordjs/formatters': 0.5.0 + '@discordjs/rest': 2.4.0 + '@discordjs/util': 1.1.1 '@discordjs/ws': 1.1.1 '@sapphire/snowflake': 3.5.3 - discord-api-types: 0.37.83 + discord-api-types: 0.37.97 fast-deep-equal: 3.1.3 lodash.snakecase: 4.1.1 - tslib: 2.6.2 - undici: 6.13.0 + tslib: 2.7.0 + undici: 6.19.8 transitivePeerDependencies: - bufferutil - utf-8-validate - distube-apple-music@0.1.0(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3)): + distube-apple-music@0.1.0(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2)): dependencies: - distube: 5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3) + distube: 5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2) isomorphic-unfetch: 4.0.2 node-html-parser: 6.1.13 - distube-yandex-music-plugin@1.0.5(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3)): + distube-vk-music-plugin@2.0.3(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2)): + dependencies: + distube: 5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2) + vk-music-api-wrapper: 1.0.5 + + distube-yandex-music-plugin@1.0.5(distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2)): dependencies: - distube: 5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3) + distube: 5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2) ym-api-meowed: 1.3.4 transitivePeerDependencies: - debug - distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.15.3): + distube@5.0.2(@discordjs/voice@0.17.0(opusscript@0.1.1))(discord.js@14.16.2): dependencies: '@discordjs/voice': 0.17.0(opusscript@0.1.1) - discord.js: 14.15.3 + discord.js: 14.16.2 tiny-typed-emitter: 2.1.0 - undici: 6.19.7 + undici: 6.19.8 dom-serializer@2.0.0: dependencies: @@ -2600,7 +2459,7 @@ snapshots: es-errors@1.3.0: {} - escalade@3.1.2: {} + escalade@3.2.0: {} escape-string-regexp@1.0.5: {} @@ -2614,18 +2473,18 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@9.1.0(eslint@9.9.0): + eslint-config-prettier@9.1.0(eslint@9.10.0): dependencies: - eslint: 9.9.0 + eslint: 9.10.0 - eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.9.0))(eslint@9.9.0)(prettier@3.3.3): + eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.10.0))(eslint@9.10.0)(prettier@3.3.3): dependencies: - eslint: 9.9.0 + eslint: 9.10.0 prettier: 3.3.3 prettier-linter-helpers: 1.0.0 synckit: 0.9.1 optionalDependencies: - eslint-config-prettier: 9.1.0(eslint@9.9.0) + eslint-config-prettier: 9.1.0(eslint@9.10.0) eslint-scope@8.0.2: dependencies: @@ -2636,20 +2495,21 @@ snapshots: eslint-visitor-keys@4.0.0: {} - eslint@9.9.0: + eslint@9.10.0: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0) - '@eslint-community/regexpp': 4.11.0 - '@eslint/config-array': 0.17.1 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.10.0) + '@eslint-community/regexpp': 4.11.1 + '@eslint/config-array': 0.18.0 '@eslint/eslintrc': 3.1.0 - '@eslint/js': 9.9.0 + '@eslint/js': 9.10.0 + '@eslint/plugin-kit': 0.1.0 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.3.0 '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.6 + debug: 4.3.7 escape-string-regexp: 4.0.0 eslint-scope: 8.0.2 eslint-visitor-keys: 4.0.0 @@ -2660,12 +2520,11 @@ snapshots: file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - ignore: 5.3.1 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 @@ -2697,7 +2556,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.3.6 + debug: 4.3.7 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -2717,7 +2576,7 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.7 + micromatch: 4.0.8 fast-json-stable-stringify@2.1.0: {} @@ -2758,7 +2617,7 @@ snapshots: flatted@3.3.1: {} - follow-redirects@1.15.6: {} + follow-redirects@1.15.9: {} for-in@0.1.8: {} @@ -2805,7 +2664,7 @@ snapshots: genius-lyrics@4.4.7: dependencies: node-html-parser: 6.1.13 - undici: 6.19.7 + undici: 6.19.8 get-caller-file@2.0.5: {} @@ -2819,13 +2678,13 @@ snapshots: get-stream@5.2.0: dependencies: - pump: 3.0.0 + pump: 3.0.2 get-uri@6.0.3: dependencies: basic-ftp: 5.0.5 data-uri-to-buffer: 6.0.2 - debug: 4.3.6 + debug: 4.3.7 fs-extra: 11.2.0 transitivePeerDependencies: - supports-color @@ -2851,15 +2710,6 @@ snapshots: globals@15.9.0: {} - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.1 - merge2: 1.4.1 - slash: 3.0.0 - gopd@1.0.1: dependencies: get-intrinsic: 1.2.4 @@ -2900,26 +2750,26 @@ snapshots: http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.1 - debug: 4.3.6 + debug: 4.3.7 transitivePeerDependencies: - supports-color https-proxy-agent@7.0.5: dependencies: agent-base: 7.1.1 - debug: 4.3.6 + debug: 4.3.7 transitivePeerDependencies: - supports-color i18next-fs-backend@2.3.2: {} - i18next@23.12.2: + i18next@23.15.1: dependencies: - '@babel/runtime': 7.25.0 + '@babel/runtime': 7.25.6 ieee754@1.2.1: {} - ignore@5.3.1: {} + ignore@5.3.2: {} import-fresh@3.3.0: dependencies: @@ -3049,7 +2899,7 @@ snapshots: methods@1.1.2: {} - micromatch@4.0.7: + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 @@ -3084,19 +2934,19 @@ snapshots: '@types/whatwg-url': 11.0.5 whatwg-url: 13.0.0 - mongodb@6.7.0(socks@2.8.3): + mongodb@6.8.0(socks@2.8.3): dependencies: - '@mongodb-js/saslprep': 1.1.8 + '@mongodb-js/saslprep': 1.1.9 bson: 6.8.0 mongodb-connection-string-url: 3.0.1 optionalDependencies: socks: 2.8.3 - mongoose@8.5.2(socks@2.8.3): + mongoose@8.6.3(socks@2.8.3): dependencies: bson: 6.8.0 kareem: 2.6.3 - mongodb: 6.7.0(socks@2.8.3) + mongodb: 6.8.0(socks@2.8.3) mpath: 0.9.0 mquery: 5.0.0 ms: 2.1.3 @@ -3115,12 +2965,10 @@ snapshots: mquery@5.0.0: dependencies: - debug: 4.3.6 + debug: 4.3.7 transitivePeerDependencies: - supports-color - ms@2.1.2: {} - ms@2.1.3: {} natural-compare@1.4.0: {} @@ -3139,7 +2987,7 @@ snapshots: fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - node-gyp-build@4.8.1: {} + node-gyp-build@4.8.2: {} node-html-parser@6.1.13: dependencies: @@ -3181,7 +3029,7 @@ snapshots: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.1 - debug: 4.3.6 + debug: 4.3.7 get-uri: 6.0.3 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.5 @@ -3212,11 +3060,9 @@ snapshots: path-key@3.1.1: {} - path-type@4.0.0: {} - pend@1.2.0: {} - picocolors@1.0.1: {} + picocolors@1.1.0: {} picomatch@2.3.1: {} @@ -3237,7 +3083,7 @@ snapshots: proxy-agent@6.4.0: dependencies: agent-base: 7.1.1 - debug: 4.3.6 + debug: 4.3.7 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.5 lru-cache: 7.18.3 @@ -3251,85 +3097,88 @@ snapshots: psl@1.9.0: {} - pump@3.0.0: + pump@3.0.2: dependencies: end-of-stream: 1.4.4 once: 1.4.0 punycode@2.3.1: {} - puppeteer-core@22.13.1: + puppeteer-core@23.3.1: dependencies: - '@puppeteer/browsers': 2.2.4 - chromium-bidi: 0.6.1(devtools-protocol@0.0.1299070) - debug: 4.3.6 - devtools-protocol: 0.0.1299070 + '@puppeteer/browsers': 2.4.0 + chromium-bidi: 0.6.5(devtools-protocol@0.0.1330662) + debug: 4.3.7 + devtools-protocol: 0.0.1330662 + typed-query-selector: 2.12.0 ws: 8.18.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - puppeteer-extra-plugin-stealth@2.11.2(puppeteer-extra@3.3.6(@types/puppeteer@7.0.4(typescript@5.5.4))(puppeteer-core@22.13.1)(puppeteer@22.13.1(typescript@5.5.4))): + puppeteer-extra-plugin-stealth@2.11.2(puppeteer-extra@3.3.6(@types/puppeteer@7.0.4(typescript@5.6.2))(puppeteer-core@23.3.1)(puppeteer@23.3.1(typescript@5.6.2))): dependencies: - debug: 4.3.6 - puppeteer-extra-plugin: 3.2.3(puppeteer-extra@3.3.6(@types/puppeteer@7.0.4(typescript@5.5.4))(puppeteer-core@22.13.1)(puppeteer@22.13.1(typescript@5.5.4))) - puppeteer-extra-plugin-user-preferences: 2.4.1(puppeteer-extra@3.3.6(@types/puppeteer@7.0.4(typescript@5.5.4))(puppeteer-core@22.13.1)(puppeteer@22.13.1(typescript@5.5.4))) + debug: 4.3.7 + puppeteer-extra-plugin: 3.2.3(puppeteer-extra@3.3.6(@types/puppeteer@7.0.4(typescript@5.6.2))(puppeteer-core@23.3.1)(puppeteer@23.3.1(typescript@5.6.2))) + puppeteer-extra-plugin-user-preferences: 2.4.1(puppeteer-extra@3.3.6(@types/puppeteer@7.0.4(typescript@5.6.2))(puppeteer-core@23.3.1)(puppeteer@23.3.1(typescript@5.6.2))) optionalDependencies: - puppeteer-extra: 3.3.6(@types/puppeteer@7.0.4(typescript@5.5.4))(puppeteer-core@22.13.1)(puppeteer@22.13.1(typescript@5.5.4)) + puppeteer-extra: 3.3.6(@types/puppeteer@7.0.4(typescript@5.6.2))(puppeteer-core@23.3.1)(puppeteer@23.3.1(typescript@5.6.2)) transitivePeerDependencies: - supports-color - puppeteer-extra-plugin-user-data-dir@2.4.1(puppeteer-extra@3.3.6(@types/puppeteer@7.0.4(typescript@5.5.4))(puppeteer-core@22.13.1)(puppeteer@22.13.1(typescript@5.5.4))): + puppeteer-extra-plugin-user-data-dir@2.4.1(puppeteer-extra@3.3.6(@types/puppeteer@7.0.4(typescript@5.6.2))(puppeteer-core@23.3.1)(puppeteer@23.3.1(typescript@5.6.2))): dependencies: - debug: 4.3.6 + debug: 4.3.7 fs-extra: 10.1.0 - puppeteer-extra-plugin: 3.2.3(puppeteer-extra@3.3.6(@types/puppeteer@7.0.4(typescript@5.5.4))(puppeteer-core@22.13.1)(puppeteer@22.13.1(typescript@5.5.4))) + puppeteer-extra-plugin: 3.2.3(puppeteer-extra@3.3.6(@types/puppeteer@7.0.4(typescript@5.6.2))(puppeteer-core@23.3.1)(puppeteer@23.3.1(typescript@5.6.2))) rimraf: 3.0.2 optionalDependencies: - puppeteer-extra: 3.3.6(@types/puppeteer@7.0.4(typescript@5.5.4))(puppeteer-core@22.13.1)(puppeteer@22.13.1(typescript@5.5.4)) + puppeteer-extra: 3.3.6(@types/puppeteer@7.0.4(typescript@5.6.2))(puppeteer-core@23.3.1)(puppeteer@23.3.1(typescript@5.6.2)) transitivePeerDependencies: - supports-color - puppeteer-extra-plugin-user-preferences@2.4.1(puppeteer-extra@3.3.6(@types/puppeteer@7.0.4(typescript@5.5.4))(puppeteer-core@22.13.1)(puppeteer@22.13.1(typescript@5.5.4))): + puppeteer-extra-plugin-user-preferences@2.4.1(puppeteer-extra@3.3.6(@types/puppeteer@7.0.4(typescript@5.6.2))(puppeteer-core@23.3.1)(puppeteer@23.3.1(typescript@5.6.2))): dependencies: - debug: 4.3.6 + debug: 4.3.7 deepmerge: 4.3.1 - puppeteer-extra-plugin: 3.2.3(puppeteer-extra@3.3.6(@types/puppeteer@7.0.4(typescript@5.5.4))(puppeteer-core@22.13.1)(puppeteer@22.13.1(typescript@5.5.4))) - puppeteer-extra-plugin-user-data-dir: 2.4.1(puppeteer-extra@3.3.6(@types/puppeteer@7.0.4(typescript@5.5.4))(puppeteer-core@22.13.1)(puppeteer@22.13.1(typescript@5.5.4))) + puppeteer-extra-plugin: 3.2.3(puppeteer-extra@3.3.6(@types/puppeteer@7.0.4(typescript@5.6.2))(puppeteer-core@23.3.1)(puppeteer@23.3.1(typescript@5.6.2))) + puppeteer-extra-plugin-user-data-dir: 2.4.1(puppeteer-extra@3.3.6(@types/puppeteer@7.0.4(typescript@5.6.2))(puppeteer-core@23.3.1)(puppeteer@23.3.1(typescript@5.6.2))) optionalDependencies: - puppeteer-extra: 3.3.6(@types/puppeteer@7.0.4(typescript@5.5.4))(puppeteer-core@22.13.1)(puppeteer@22.13.1(typescript@5.5.4)) + puppeteer-extra: 3.3.6(@types/puppeteer@7.0.4(typescript@5.6.2))(puppeteer-core@23.3.1)(puppeteer@23.3.1(typescript@5.6.2)) transitivePeerDependencies: - supports-color - puppeteer-extra-plugin@3.2.3(puppeteer-extra@3.3.6(@types/puppeteer@7.0.4(typescript@5.5.4))(puppeteer-core@22.13.1)(puppeteer@22.13.1(typescript@5.5.4))): + puppeteer-extra-plugin@3.2.3(puppeteer-extra@3.3.6(@types/puppeteer@7.0.4(typescript@5.6.2))(puppeteer-core@23.3.1)(puppeteer@23.3.1(typescript@5.6.2))): dependencies: '@types/debug': 4.1.12 - debug: 4.3.6 + debug: 4.3.7 merge-deep: 3.0.3 optionalDependencies: - puppeteer-extra: 3.3.6(@types/puppeteer@7.0.4(typescript@5.5.4))(puppeteer-core@22.13.1)(puppeteer@22.13.1(typescript@5.5.4)) + puppeteer-extra: 3.3.6(@types/puppeteer@7.0.4(typescript@5.6.2))(puppeteer-core@23.3.1)(puppeteer@23.3.1(typescript@5.6.2)) transitivePeerDependencies: - supports-color - puppeteer-extra@3.3.6(@types/puppeteer@7.0.4(typescript@5.5.4))(puppeteer-core@22.13.1)(puppeteer@22.13.1(typescript@5.5.4)): + puppeteer-extra@3.3.6(@types/puppeteer@7.0.4(typescript@5.6.2))(puppeteer-core@23.3.1)(puppeteer@23.3.1(typescript@5.6.2)): dependencies: '@types/debug': 4.1.12 - debug: 4.3.6 + debug: 4.3.7 deepmerge: 4.3.1 optionalDependencies: - '@types/puppeteer': 7.0.4(typescript@5.5.4) - puppeteer: 22.13.1(typescript@5.5.4) - puppeteer-core: 22.13.1 + '@types/puppeteer': 7.0.4(typescript@5.6.2) + puppeteer: 23.3.1(typescript@5.6.2) + puppeteer-core: 23.3.1 transitivePeerDependencies: - supports-color - puppeteer@22.13.1(typescript@5.5.4): + puppeteer@23.3.1(typescript@5.6.2): dependencies: - '@puppeteer/browsers': 2.2.4 - cosmiconfig: 9.0.0(typescript@5.5.4) - devtools-protocol: 0.0.1299070 - puppeteer-core: 22.13.1 + '@puppeteer/browsers': 2.4.0 + chromium-bidi: 0.6.5(devtools-protocol@0.0.1330662) + cosmiconfig: 9.0.0(typescript@5.6.2) + devtools-protocol: 0.0.1330662 + puppeteer-core: 23.3.1 + typed-query-selector: 2.12.0 transitivePeerDependencies: - bufferutil - supports-color @@ -3407,14 +3256,12 @@ snapshots: sift@17.1.3: {} - slash@3.0.0: {} - smart-buffer@4.2.0: {} socks-proxy-agent@8.0.4: dependencies: agent-base: 7.1.1 - debug: 4.3.6 + debug: 4.3.7 socks: 2.8.3 transitivePeerDependencies: - supports-color @@ -3424,13 +3271,13 @@ snapshots: ip-address: 9.0.5 smart-buffer: 4.2.0 - sodium-native@4.1.1: + sodium-native@4.2.0: dependencies: - node-gyp-build: 4.8.1 + node-gyp-build: 4.8.2 soundcloud.ts@0.5.5: dependencies: - undici: 6.19.7 + undici: 6.19.8 source-map@0.6.1: optional: true @@ -3454,11 +3301,11 @@ snapshots: sprintf-js@1.1.3: {} - streamx@2.18.0: + streamx@2.20.1: dependencies: fast-fifo: 1.3.2 queue-tick: 1.0.1 - text-decoder: 1.1.1 + text-decoder: 1.2.0 optionalDependencies: bare-events: 2.4.2 @@ -3482,7 +3329,7 @@ snapshots: dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 - debug: 4.3.6 + debug: 4.3.7 fast-safe-stringify: 2.1.1 form-data: 3.0.1 formidable: 1.2.6 @@ -3505,23 +3352,23 @@ snapshots: synckit@0.9.1: dependencies: '@pkgr/core': 0.1.1 - tslib: 2.6.3 + tslib: 2.7.0 tar-fs@3.0.6: dependencies: - pump: 3.0.0 + pump: 3.0.2 tar-stream: 3.1.7 optionalDependencies: - bare-fs: 2.3.1 + bare-fs: 2.3.5 bare-path: 2.1.3 tar-stream@3.1.7: dependencies: b4a: 1.6.6 fast-fifo: 1.3.2 - streamx: 2.18.0 + streamx: 2.20.1 - text-decoder@1.1.1: + text-decoder@1.2.0: dependencies: b4a: 1.6.6 @@ -3546,47 +3393,45 @@ snapshots: dependencies: punycode: 2.3.1 - ts-api-utils@1.3.0(typescript@5.5.4): + ts-api-utils@1.3.0(typescript@5.6.2): dependencies: - typescript: 5.5.4 + typescript: 5.6.2 ts-mixer@6.0.4: {} - tslib@2.6.2: {} - - tslib@2.6.3: {} + tslib@2.7.0: {} type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.2.0(eslint@9.9.0)(typescript@5.5.4): + typed-query-selector@2.12.0: {} + + typescript-eslint@8.6.0(eslint@9.10.0)(typescript@5.6.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.2.0(@typescript-eslint/parser@8.2.0(eslint@9.9.0)(typescript@5.5.4))(eslint@9.9.0)(typescript@5.5.4) - '@typescript-eslint/parser': 8.2.0(eslint@9.9.0)(typescript@5.5.4) - '@typescript-eslint/utils': 8.2.0(eslint@9.9.0)(typescript@5.5.4) + '@typescript-eslint/eslint-plugin': 8.6.0(@typescript-eslint/parser@8.6.0(eslint@9.10.0)(typescript@5.6.2))(eslint@9.10.0)(typescript@5.6.2) + '@typescript-eslint/parser': 8.6.0(eslint@9.10.0)(typescript@5.6.2) + '@typescript-eslint/utils': 8.6.0(eslint@9.10.0)(typescript@5.6.2) optionalDependencies: - typescript: 5.5.4 + typescript: 5.6.2 transitivePeerDependencies: - eslint - supports-color - typescript@5.5.4: {} + typescript@5.6.2: {} unbzip2-stream@1.4.3: dependencies: buffer: 5.7.1 through: 2.3.8 - undici-types@6.13.0: {} + undici-types@6.19.8: {} undici@5.28.4: dependencies: '@fastify/busboy': 2.1.1 - undici@6.13.0: {} - - undici@6.19.7: {} + undici@6.19.8: {} unfetch@5.0.0: {} @@ -3611,6 +3456,8 @@ snapshots: uuid@8.3.2: {} + vk-music-api-wrapper@1.0.5: {} + web-streams-polyfill@3.3.3: {} webidl-conversions@7.0.0: {} @@ -3650,7 +3497,7 @@ snapshots: yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -3664,7 +3511,7 @@ snapshots: ym-api-meowed@1.3.4: dependencies: - axios: 1.7.3 + axios: 1.7.7 xml2js: 0.6.2 transitivePeerDependencies: - debug diff --git a/src/CookiesAutomation.ts b/src/CookiesAutomation.ts index c4b3614..d146e1a 100644 --- a/src/CookiesAutomation.ts +++ b/src/CookiesAutomation.ts @@ -31,7 +31,7 @@ export async function getYoutubeCookie() { await page.click( '#topbar > div.top-buttons.style-scope.ytd-consent-bump-v2-lightbox > div:nth-child(2) > ytd-button-renderer > yt-button-shape > a' ); - } catch (e) { + } catch { // Press "Sign In" on navbar await page.click('#buttons > ytd-button-renderer > yt-button-shape > a'); } @@ -52,7 +52,7 @@ export async function getYoutubeCookie() { '#yDmH0d > c-wiz:nth-child(9) > div > div > div > div.L5MEH.Bokche.ypEC4c > div.lq3Znf > div:nth-child(1) > button > span'; await page.waitForSelector(NotNowSelector, { timeout: 1e4 }); await page.click(NotNowSelector); - } catch (e) { + } catch { await page.goto('https://www.youtube.com', { waitUntil: 'networkidle2' }); } diff --git a/src/EnvironmentVariables.ts b/src/EnvironmentVariables.ts index 4196cbe..7854913 100644 --- a/src/EnvironmentVariables.ts +++ b/src/EnvironmentVariables.ts @@ -79,6 +79,8 @@ const envVariables = z.object({ BOT_YANDEXMUSIC_TOKEN: z.string().optional(), BOT_YANDEXMUSIC_UID: z.coerce.number().optional(), + BOT_VKONTAKTE_TOKEN: z.string().optional(), + BOT_GENIUS_TOKEN: z.string().optional() }); diff --git a/src/audioplayer/AudioPlayerIcons.ts b/src/audioplayer/AudioPlayerIcons.ts index 3642db4..76ce211 100644 --- a/src/audioplayer/AudioPlayerIcons.ts +++ b/src/audioplayer/AudioPlayerIcons.ts @@ -21,5 +21,6 @@ export enum AudioSourceIcons { applemusic = '<:applemusic:1257591803260174467>', yandexmusic = '<:yandexmusic:1257591977105555506>', spotify = '<:spotify:1257591960726933576>', - soundcloud = '<:soundcloud:1257591943010193500>' + soundcloud = '<:soundcloud:1257591943010193500>', + vkontakte = '<:vk:1285731440163819611>' } diff --git a/src/audioplayer/AudioPlayersManager.ts b/src/audioplayer/AudioPlayersManager.ts index b5bb938..debdac2 100644 --- a/src/audioplayer/AudioPlayersManager.ts +++ b/src/audioplayer/AudioPlayersManager.ts @@ -220,7 +220,7 @@ export class AudioPlayersManager { this.distube.seek(guild, time); await player.setState('playing'); return true; - } catch (e) { + } catch { return false; } } @@ -298,84 +298,82 @@ export class AudioPlayersManager { }); } - this.distube - .on(DistubeEvents.INIT_QUEUE, async (queue) => { - await this.playersManager.add(queue.id, queue.textChannel as TextChannel, queue); + this.distube.on(DistubeEvents.INIT_QUEUE, async (queue) => { + await this.playersManager.add(queue.id, queue.textChannel as TextChannel, queue); - const player = this.playersManager.get(queue.id); - if (player) { - const leaveOnEmpty = await getGuildOptionLeaveOnEmpty(queue.id); - await player.setLeaveOnEmpty(leaveOnEmpty); - await player.init(); - } - }) - .on(DistubeEvents.PLAY_SONG, async (queue) => { - const player = this.playersManager.get(queue.id); - if (player) { - await player.setState('playing'); - } - }) - .on(DistubeEvents.DISCONNECT, async (queue) => { - await this.playersManager.remove(queue.id); - }) - .on(DistubeEvents.ADD_SONG, async (queue, song) => { - if (queue.textChannel) { - await queue.textChannel.send({ embeds: [generateAddedSongMessage(song)] }); - } - - if (ENV.BOT_MAX_SONGS_HISTORY_SIZE > 0) { - await addSongToGuildSongsHistory(queue.id, song); - } + const player = this.playersManager.get(queue.id); + if (!player) return; - const player = this.playersManager.get(queue.id); - if (player) { - await player.update(); - } - }) - .on(DistubeEvents.ADD_LIST, async (queue, playlist) => { - if (ENV.BOT_MAX_SONGS_HISTORY_SIZE > 0) { - await addSongToGuildSongsHistory(queue.id, playlist); - } - - if (!queue.textChannel) return; - - await queue.textChannel.send({ embeds: [generateAddedPlaylistMessage(playlist)] }); - if (queue.songs.length >= ENV.BOT_MAX_SONGS_IN_QUEUE) { - await queue.textChannel.send({ - embeds: [ - generateWarningEmbed( - i18next.t('audioplayer:event_add_list_limit', { - queueLimit: ENV.BOT_MAX_SONGS_IN_QUEUE - }) as string - ) - ] - }); - queue.songs.length = ENV.BOT_MAX_SONGS_IN_QUEUE; - } + await player.init(); + await player.setLeaveOnEmpty(await getGuildOptionLeaveOnEmpty(queue.id)); + }); + this.distube.on(DistubeEvents.PLAY_SONG, async (queue) => { + const player = this.playersManager.get(queue.id); + if (player) { + await player.setState('playing'); + } + }); + this.distube.on(DistubeEvents.DISCONNECT, async (queue) => { + await this.playersManager.remove(queue.id); + }); + this.distube.on(DistubeEvents.ADD_SONG, async (queue, song) => { + if (queue.textChannel) { + await queue.textChannel.send({ embeds: [generateAddedSongMessage(song)] }); + } - const player = this.playersManager.get(queue.id); - if (player) { - await player.update(); - } - }) - .on(DistubeEvents.FINISH_SONG, async (queue) => { - if (!this.playersManager.has(queue.id)) return; - if (queue._next || queue._prev || queue.stopped || queue.songs.length > 1) return; - await this.playersManager.get(queue.id)?.setState('waiting'); - }) - .on(DistubeEvents.ERROR, async (error, queue, song) => { - let errorName = `ERROR`; - const errorMessage = `${error.name} + \n\n + ${error.message}`; - - if (song) { - errorName = song.name!; - } - - if (queue.songs.length === 0) await this.stop(queue.id); - - await queue.textChannel?.send({ - embeds: [generateErrorEmbed(errorMessage, errorName)] + if (ENV.BOT_MAX_SONGS_HISTORY_SIZE > 0) { + await addSongToGuildSongsHistory(queue.id, song); + } + + const player = this.playersManager.get(queue.id); + if (player) { + await player.update(); + } + }); + this.distube.on(DistubeEvents.ADD_LIST, async (queue, playlist) => { + if (ENV.BOT_MAX_SONGS_HISTORY_SIZE > 0) { + await addSongToGuildSongsHistory(queue.id, playlist); + } + + if (!queue.textChannel) return; + + await queue.textChannel.send({ embeds: [generateAddedPlaylistMessage(playlist)] }); + if (queue.songs.length >= ENV.BOT_MAX_SONGS_IN_QUEUE) { + await queue.textChannel.send({ + embeds: [ + generateWarningEmbed( + i18next.t('audioplayer:event_add_list_limit', { + queueLimit: ENV.BOT_MAX_SONGS_IN_QUEUE + }) as string + ) + ] }); + queue.songs.length = ENV.BOT_MAX_SONGS_IN_QUEUE; + } + + const player = this.playersManager.get(queue.id); + if (player) { + await player.update(); + } + }); + this.distube.on(DistubeEvents.FINISH_SONG, async (queue) => { + if (!this.playersManager.has(queue.id)) return; + if (queue._next || queue._prev || queue.stopped || queue.songs.length > 1) return; + await this.playersManager.get(queue.id)?.setState('waiting'); + }); + this.distube.on(DistubeEvents.ERROR, async (error, queue, song) => { + let errorName = `ERROR`; + const errorMessage = `${error.name} + \n\n + ${error.message}`; + + if (song) { + errorName = song.name!; + } + + if (queue.songs.length === 0) await this.stop(queue.id); + + await queue.textChannel?.send({ + embeds: [generateErrorEmbed(errorMessage, errorName)] }); + }); } } diff --git a/src/audioplayer/LoadPlugins.ts b/src/audioplayer/LoadPlugins.ts index 311f817..13a28df 100644 --- a/src/audioplayer/LoadPlugins.ts +++ b/src/audioplayer/LoadPlugins.ts @@ -13,6 +13,7 @@ import { getYoutubeCookie } from '../CookiesAutomation.js'; import Cron from 'node-cron'; import fs from 'fs'; +import { VKMusicPlugin } from 'distube-vk-music-plugin'; const loggerPrefixAudioplayerPluginsLoader = 'Audioplayer Plugin Loader'; @@ -23,6 +24,19 @@ const YtPlugin = new YouTubePlugin({}); export async function LoadPlugins(): Promise> { const plugins: Array = []; + if (ENV.BOT_VKONTAKTE_TOKEN) { + plugins.push( + new VKMusicPlugin({ + token: ENV.BOT_VKONTAKTE_TOKEN + }) + ); + } else { + loggerWarn( + 'VKontakte Music plugin is disabled, because BOT_VKONTAKTE_TOKEN are wrong or not provided', + loggerPrefixAudioplayerPluginsLoader + ); + } + await loadPluginsPartYoutube(plugins); if (!ENV.BOT_SPOTIFY_CLIENT_ID || !ENV.BOT_SPOTIFY_CLIENT_SECRET) { @@ -111,7 +125,7 @@ async function loadPluginsPartYoutube(plugins: Array) { try { YtPlugin.cookies = JSON.parse(fs.readFileSync('yt-cookies.json', { encoding: 'utf8', flag: 'r' })); loggerSend("'yt-cookies.json' is loaded", loggerPrefixAudioplayerPluginsLoader); - } catch (e) { + } catch { loggerError("'yt-cookies.json' error when parsing", loggerPrefixAudioplayerPluginsLoader); if (ENV.BOT_GOOGLE_EMAIL && ENV.BOT_GOOGLE_PASSWORD) { YtPlugin.cookies = await getYoutubeCookie(); diff --git a/src/audioplayer/Lyrics.ts b/src/audioplayer/Lyrics.ts index 3af5864..a6e5512 100644 --- a/src/audioplayer/Lyrics.ts +++ b/src/audioplayer/Lyrics.ts @@ -38,7 +38,7 @@ export async function generateLyricsEmbed(songQuery: string) { .setDescription(lyricsText) .setColor(Colors.Yellow) .setFooter({ text: i18next.t('commands:lyrics_embed_text_not_correct') }); - } catch (e) { + } catch { return generateErrorEmbed(i18next.t('commands:lyrics_embed_lyrics_not_found')); } } diff --git a/src/audioplayer/PlayerInstance.ts b/src/audioplayer/PlayerInstance.ts index 9c9a9e7..482968f 100644 --- a/src/audioplayer/PlayerInstance.ts +++ b/src/audioplayer/PlayerInstance.ts @@ -6,7 +6,7 @@ import { AudioPlayerState } from './AudioPlayerIcons.js'; import { checkBotInVoice } from '../utilities/checkBotInVoice.js'; import i18next from 'i18next'; import { ENV } from '../EnvironmentVariables.js'; -import { loggerError } from '../utilities/logger.js'; +import { loggerError, loggerSend } from '../utilities/logger.js'; import { generateSimpleEmbed } from '../utilities/generateSimpleEmbed.js'; export class PlayerInstance { @@ -218,12 +218,12 @@ export class PlayerInstance { setTimeout(async () => { try { await this.messageWithPlayer?.delete(); - } catch (e) { + } catch { //if (ENV.BOT_VERBOSE_LOGGING) loggerError(e); } }, 5000); } - } catch (e) { + } catch { //if (ENV.BOT_VERBOSE_LOGGING) loggerError(e); } } @@ -248,6 +248,7 @@ export class PlayerInstance { } async setLeaveOnEmpty(mode: boolean) { + loggerSend('setLeaveOnEmpty'); this.leaveOnEmpty = mode; this.embedBuilder.setLeaveOnEmpty(mode); diff --git a/src/audioplayer/plugins/soundcloud.ts b/src/audioplayer/plugins/soundcloud.ts index 930f2a9..92c6e9b 100644 --- a/src/audioplayer/plugins/soundcloud.ts +++ b/src/audioplayer/plugins/soundcloud.ts @@ -72,7 +72,7 @@ export class SoundCloudPlugin extends ExtractorPlugin { if (!data?.collection?.length) { throw new DisTubeError('SOUNDCLOUD_PLUGIN_NO_RESULT', `Cannot find any "${query}" ${type} on SoundCloud!`); } - return data.collection.map((t: any) => new SoundCloudSong(this, t, options)); + return data.collection.map((t: SoundcloudTrackV2) => new SoundCloudSong(this, t, options)); } case SearchType.Playlist: { const data = await this.soundcloud.playlists.searchV2({ q: query, limit }); @@ -80,7 +80,8 @@ export class SoundCloudPlugin extends ExtractorPlugin { return ( await Promise.all( playlists.map( - async (p: any) => new SoundCloudPlaylist(this, await this.soundcloud.playlists.fetch(p), options) + async (p: SoundcloudPlaylistV2) => + new SoundCloudPlaylist(this, await this.soundcloud.playlists.fetch(p), options) ) ) ).filter(isTruthy); @@ -120,7 +121,7 @@ export class SoundCloudPlugin extends ExtractorPlugin { throw new DisTubeError('SOUNDCLOUD_PLUGIN_INVALID_SONG', 'Cannot get related songs from invalid song.'); } const related = await this.soundcloud.tracks.relatedV2(song.url, 10); - return related.filter((t: { title: any }) => t.title).map((t: any) => new SoundCloudSong(this, t)); + return related.filter((t: SoundcloudTrackV2) => t.title).map((t: SoundcloudTrackV2) => new SoundCloudSong(this, t)); } async getStreamURL(song: SoundCloudSong) { @@ -177,7 +178,7 @@ class SoundCloudPlaylist extends Playlist { name: info.title, url: info.permalink_url, thumbnail: info.artwork_url ?? undefined, - songs: info.tracks.map((s: any) => new SoundCloudSong(plugin, s, options)) + songs: info.tracks.map((s: SoundcloudTrackV2) => new SoundCloudSong(plugin, s, options)) }, options ); diff --git a/src/audioplayer/tests/AudioServices.test.ts b/src/audioplayer/tests/AudioServices.test.ts index 5943267..6859c07 100644 --- a/src/audioplayer/tests/AudioServices.test.ts +++ b/src/audioplayer/tests/AudioServices.test.ts @@ -83,16 +83,32 @@ describe('Audio Services', () => { }); it('Playlist', async () => { - const song = await distube.handler.resolve('https://music.yandex.ru/users/alexander.tsimbalistiy/playlists/1000'); + const playlist = await distube.handler.resolve( + 'https://music.yandex.ru/users/alexander.tsimbalistiy/playlists/1000' + ); - assert.ok(song); + assert.ok(playlist); }); it('Album', async () => { - const song = await distube.handler.resolve('https://music.yandex.ru/album/5307396'); + const album = await distube.handler.resolve('https://music.yandex.ru/album/5307396'); + + assert.ok(album); + }); + }); + + describe(`VKontakte`, () => { + it('Song', async () => { + const song = await distube.handler.resolve('https://vk.com/audio-2001624323_122624323'); assert.ok(song); }); + + it('Playlist', async () => { + const playlist = await distube.handler.resolve('https://vk.com/music/playlist/-192000782_406'); + + assert.ok(playlist); + }); }); describe('Apple Music', () => { diff --git a/src/audioplayer/util/downloadSong.ts b/src/audioplayer/util/downloadSong.ts index 9c9d783..00ef146 100644 --- a/src/audioplayer/util/downloadSong.ts +++ b/src/audioplayer/util/downloadSong.ts @@ -77,7 +77,7 @@ async function convertWebmToMp3(webmStream: ReadableStream) { const file = fs.createWriteStream(file_name); const duplex = prism.FFmpeg.from(webmStream); - // @ts-expect-error Duplex can be provided to pipeline function + // Duplex can be provided to pipeline function await pipeline(duplex, file); return createReadStream(file_name); } diff --git a/src/audioplayer/util/generateAddedPlaylistMessage.ts b/src/audioplayer/util/generateAddedPlaylistMessage.ts index e7cf060..c9bcc96 100644 --- a/src/audioplayer/util/generateAddedPlaylistMessage.ts +++ b/src/audioplayer/util/generateAddedPlaylistMessage.ts @@ -7,7 +7,7 @@ export function generateAddedPlaylistMessage(playlist: Playlist) { const serviceIcon = getIconFromSource(playlist.source); return new EmbedBuilder() - .setTitle(`${serviceIcon} ${playlist.name}` ?? i18next.t('audioplayer:player_embed_unknown')) + .setTitle(playlist.name ? `${serviceIcon} ${playlist.name}` : i18next.t('audioplayer:player_embed_unknown')) .setURL(playlist.url ?? null) .setAuthor({ name: `${i18next.t('audioplayer:event_add_list')}` }) .setThumbnail(playlist.thumbnail ?? null) diff --git a/src/audioplayer/util/generateAddedSongMessage.ts b/src/audioplayer/util/generateAddedSongMessage.ts index ff9d23e..51ba5e3 100644 --- a/src/audioplayer/util/generateAddedSongMessage.ts +++ b/src/audioplayer/util/generateAddedSongMessage.ts @@ -7,7 +7,7 @@ export function generateAddedSongMessage(song: Song) { const serviceIcon = getIconFromSource(song.source); return new EmbedBuilder() - .setTitle(`${serviceIcon} ${song.name}` ?? i18next.t('audioplayer:player_embed_unknown')) + .setTitle(song.name ? `${serviceIcon} ${song.name}` : i18next.t('audioplayer:player_embed_unknown')) .setURL(song.url ?? null) .setAuthor({ name: `${i18next.t('audioplayer:event_add_song')}` }) .setThumbnail(song.thumbnail ?? null) diff --git a/src/audioplayer/util/getIconFromSource.ts b/src/audioplayer/util/getIconFromSource.ts index 6cbaa2c..d7bdf47 100644 --- a/src/audioplayer/util/getIconFromSource.ts +++ b/src/audioplayer/util/getIconFromSource.ts @@ -1,4 +1,5 @@ import { AudioSourceIcons } from '../AudioPlayerIcons.js'; +import { VK_MUSIC_PLUGIN_SOURCE } from 'distube-vk-music-plugin'; export function getIconFromSource(source: string): AudioSourceIcons { switch (source) { @@ -14,6 +15,8 @@ export function getIconFromSource(source: string): AudioSourceIcons { return AudioSourceIcons.soundcloud; case 'yandexmusic': return AudioSourceIcons.yandexmusic; + case VK_MUSIC_PLUGIN_SOURCE: + return AudioSourceIcons.vkontakte; default: return AudioSourceIcons.other; } diff --git a/src/commands/audio/download.command.ts b/src/commands/audio/download.command.ts index 0be21e4..447e0c0 100644 --- a/src/commands/audio/download.command.ts +++ b/src/commands/audio/download.command.ts @@ -1,5 +1,5 @@ import { CommandArgument, ICommand } from '../../CommandTypes.js'; -import { PermissionsBitField, SlashCommandBuilder } from 'discord.js'; +import { PermissionsBitField, SlashCommandBuilder, TextChannel } from 'discord.js'; import { GroupAudio } from './AudioTypes.js'; import { services } from './play.command.js'; import { @@ -20,7 +20,7 @@ export default function (): ICommand { execute: async (message, args) => { const songQuery = args.join(' '); - const reply = await message.channel.send({ + const reply = await (message.channel as TextChannel).send({ content: i18next.t('commands:download_please_wait') as string }); diff --git a/src/commands/audio/history.command.ts b/src/commands/audio/history.command.ts index e1ae96d..da85d97 100644 --- a/src/commands/audio/history.command.ts +++ b/src/commands/audio/history.command.ts @@ -37,7 +37,8 @@ async function replyWithSongHistory(guild: Guild, ctx: ReplyContext, user: User) if (history.songsHistory.length === 0) { await ctx.reply({ - embeds: [new EmbedBuilder().setTitle(i18next.t('commands:history_embed_no_songs'))] + embeds: [new EmbedBuilder().setTitle(i18next.t('commands:history_embed_no_songs'))], + ephemeral: true }); } diff --git a/src/commands/audio/jump.command.ts b/src/commands/audio/jump.command.ts index f489f80..b6a6b91 100644 --- a/src/commands/audio/jump.command.ts +++ b/src/commands/audio/jump.command.ts @@ -23,7 +23,7 @@ export default function (): ICommand { if (pos < 1) { return; } - } catch (e) { + } catch { await message.reply({ embeds: [generateErrorEmbed(i18next.t('commands:jump_is_not_number'))] }); diff --git a/src/commands/audio/rewind.command.ts b/src/commands/audio/rewind.command.ts index d69e19c..679309e 100644 --- a/src/commands/audio/rewind.command.ts +++ b/src/commands/audio/rewind.command.ts @@ -85,7 +85,7 @@ function hmsToSeconds(str: string): number | undefined { s += m * parseInt(p.pop() as string, 10); m *= 60; } - } catch (e) { + } catch { return undefined; } diff --git a/src/utilities/checkMemberInVoiceWithBot.ts b/src/utilities/checkMemberInVoiceWithBot.ts index ff3fa11..f67cacc 100644 --- a/src/utilities/checkMemberInVoiceWithBot.ts +++ b/src/utilities/checkMemberInVoiceWithBot.ts @@ -31,7 +31,7 @@ export async function checkMemberInVoiceWithBot( } }); } - } catch (e) { + } catch { return response; } diff --git a/wiki/API-Configure.md b/wiki/API-Configure.md index 59d0700..ea14e91 100644 --- a/wiki/API-Configure.md +++ b/wiki/API-Configure.md @@ -92,6 +92,12 @@ Spotify Module can work without provided data, but for more stability better pro 5. Go to the Payload tab 6. You should see your client id in the Query String Parameters section, and your oauth token (access_token) in the Request Payload section +# VKontakte (optional) + +1. Token is required, to get it, follow the [link](https://oauth.vk.com/authorize?client_id=2685278&scope=65536&response_type=token&revoke=1) +2. Click "Allow" +3. Copy everything between access_token= and &expires_in + # Genius (optional) > [!WARNING] @@ -100,3 +106,5 @@ Spotify Module can work without provided data, but for more stability better pro 1. Go to [Genius](https://genius.com/login) and login. 2. Go to [Genius Developer Dashboard](https://genius.com/api-clients/new) and create a new app 3. Generate and copy client access token + + diff --git a/wiki/Setup.md b/wiki/Setup.md index 54a4c20..af1ae94 100644 --- a/wiki/Setup.md +++ b/wiki/Setup.md @@ -13,6 +13,7 @@ Also you need retrieve token, client id and enable intents on Discord Developer - (Optional) To get Yandex Music token, follow the [Yandex Music](https://github.com/AlexInCube/AlCoTest/wiki/API-Configure#yandex-music-optional) section. - (Optional) To get SoundCloud token, follow the [Soundcloud](https://github.com/AlexInCube/AlCoTest/wiki/API-Configure#soundcloud-optional) section. - (Optional) To get Genius token, follow the [Genius](https://github.com/AlexInCube/AlCoTest/wiki/API-Configure#genius-optional) section. +- (Optional) To get VKontakte token, follow the [VKontakte](https://github.com/AlexInCube/AlCoTest/wiki/API-Configure#vkontakte-optional) section. | Name | Example | Description | Required | |------------------------------|-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------|----------| @@ -33,6 +34,7 @@ Also you need retrieve token, client id and enable intents on Discord Developer | `BOT_SPOTIFY_CLIENT_ID` | | Used when the Spotify module get the credentials automatically | ❌ | | `BOT_YANDEXMUSIC_TOKEN` | | Provide to enable Yandex Music module | ❌ | | `BOT_YANDEXMUSIC_UID` | | Provide to enable Yandex Music module | ❌ | +| `BOT_VKONTAKTE_TOKEN` | | Provide to fetch songs from VKontakte | ❌ | | `BOT_SOUNDCLOUD_CLIENT_ID` | | Provide to fetch more data with SoundCloud Go+ account | ❌ | | `BOT_SOUNDCLOUD_TOKEN` | | Provide to fetch more data with SoundCloud Go+ account | ❌ | | `BOT_GENIUS_TOKEN` | | Provide to fetch songs lyrics from Genius | ❌ |