From fc691899f2968b3cb504e504b1adab88327c624d Mon Sep 17 00:00:00 2001 From: unknowableshade Date: Sun, 21 Nov 2021 23:46:38 +0300 Subject: [PATCH] Revert "Revert "Now commands is global"" This reverts commit c8659ac8843b40de3d395dab4c8fe231e94de942. --- 5a0b-bot.njsproj | 2 +- package-lock.json | 239 +++++++++------------------ package.json | 6 +- src/app.ts | 4 +- src/commands/music/clear.ts | 4 +- src/commands/music/connect.ts | 2 +- src/commands/music/insert.ts | 2 +- src/commands/music/jump.ts | 2 +- src/commands/music/loop.ts | 2 +- src/commands/music/next.ts | 2 +- src/commands/music/pause.ts | 2 +- src/commands/music/play.ts | 2 +- src/commands/music/queue.ts | 2 +- src/commands/music/remove.ts | 2 +- src/commands/music/seek.ts | 2 +- src/commands/music/stop.ts | 2 +- src/events/interactionCreate.ts | 2 +- src/events/messageCreate.ts | 18 +- src/events/ready.ts | 5 +- src/events/voiceStateUpdate.ts | 21 +-- src/types/Music.ts | 109 +++++++----- src/types/{Client.ts => MyClient.ts} | 29 +++- tsconfig.json | 3 +- 23 files changed, 210 insertions(+), 254 deletions(-) rename src/types/{Client.ts => MyClient.ts} (62%) diff --git a/5a0b-bot.njsproj b/5a0b-bot.njsproj index 536e4b6..1b02354 100644 --- a/5a0b-bot.njsproj +++ b/5a0b-bot.njsproj @@ -72,7 +72,7 @@ Code - + diff --git a/package-lock.json b/package-lock.json index 5e1da0c..66e8bb6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,9 +8,9 @@ "name": "5a0a-bot", "version": "0.0.0", "dependencies": { - "@discordjs/opus": "^0.6.0", - "@discordjs/voice": "0.6.0", - "@types/node": "^14.14.7", + "@discordjs/opus": "0.7.0", + "@discordjs/voice": "0.7.5", + "@types/node": "^16.11.9", "discord-ytdl-core": "5.0.4", "discord.js": "13.2.0", "libsodium-wrappers": "^0.7.9", @@ -19,39 +19,12 @@ "ytdl-core": "4.9.1" }, "devDependencies": { - "@discordjs/builders": "0.8.2", "@types/yt-search": "^2.3.2" }, "engines": { "node": "16.x.x" } }, - "node_modules/@discordjs/builders": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.8.2.tgz", - "integrity": "sha512-/YRd11SrcluqXkKppq/FAVzLIPRVlIVmc6X8ZklspzMIHDtJ+A4W37D43SHvLdH//+NnK+SHW/WeOF4Ts54PeQ==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^4.2.0", - "discord-api-types": "^0.24.0", - "ow": "^0.27.0", - "ts-mixer": "^6.0.0", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@discordjs/builders/node_modules/discord-api-types": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.24.0.tgz", - "integrity": "sha512-X0uA2a92cRjowUEXpLZIHWl4jiX1NsUpDhcEOpa1/hpO1vkaokgZ8kkPtPih9hHth5UVQ3mHBu/PpB4qjyfJ4A==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/@discordjs/collection": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.2.1.tgz", @@ -74,50 +47,52 @@ } }, "node_modules/@discordjs/node-pre-gyp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@discordjs/node-pre-gyp/-/node-pre-gyp-0.4.1.tgz", - "integrity": "sha512-PLYLPG3R+m9QlMROOjdy2htQq54g6f9vRb1xPfZ97CL53yj0uNTfpB/jtY/AXY6OKNtZtrre5SKjei8Hcc44HQ==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@discordjs/node-pre-gyp/-/node-pre-gyp-0.4.2.tgz", + "integrity": "sha512-V239Czn+DXFGLhhuccwEDBoTdgMGrRu30dOlzm1GzrSIjwFj01ZJerNX7x+CEX1NG1Q/1gGfOOkeZFNHjycrRA==", "dependencies": { "detect-libc": "^1.0.3", "https-proxy-agent": "^5.0.0", "make-dir": "^3.1.0", - "node-fetch": "^2.6.1", + "node-fetch": "^2.6.5", "nopt": "^5.0.0", - "npmlog": "^5.0.0", + "npmlog": "^5.0.1", "rimraf": "^3.0.2", "semver": "^7.3.5", - "tar": "^6.1.8" + "tar": "^6.1.11" }, "bin": { "node-pre-gyp": "bin/node-pre-gyp" } }, "node_modules/@discordjs/opus": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@discordjs/opus/-/opus-0.6.0.tgz", - "integrity": "sha512-Xuw8OP9BJgObEBs/SgxixnKj+y+w9st45uOAJ+cGegUGwxAIR4J7sQt3Y1J3G9SGGe82+MTxvy7sg1/QUkigcg==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@discordjs/opus/-/opus-0.7.0.tgz", + "integrity": "sha512-3Xxa3dh7taSDwBAR5fLALZ/KTxvbMmHCMxYLYve6NlPO7Ms1CLmKqp/R4ZoVzkRGQVUVWEhaB1s0v9jfa2tfDg==", "hasInstallScript": true, "dependencies": { - "@discordjs/node-pre-gyp": "^0.4.1", - "node-addon-api": "^4.0.0" + "@discordjs/node-pre-gyp": "^0.4.2", + "node-addon-api": "^4.2.0" }, "engines": { "node": ">=12.0.0" } }, "node_modules/@discordjs/voice": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@discordjs/voice/-/voice-0.6.0.tgz", - "integrity": "sha512-DF2fZAnB8gX3Qz5BEWPOUl565ptpda1uVmXJije4iK5aQrECfkqc6XcI+wzbGaNvzsH1Wb76NPzxngsEw8bblw==", + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@discordjs/voice/-/voice-0.7.5.tgz", + "integrity": "sha512-lUk+CmIXNKslT6DkC9IF9rpsqhzlTiedauUCPBzepjd4XWxwBZiyVIzR6QpbAirxkAwCoAbbje+3Ho71PGLEAw==", "dependencies": { - "@types/ws": "^7.4.4", - "discord-api-types": "^0.22.0", - "prism-media": "^1.3.1", - "tiny-typed-emitter": "^2.0.3", - "ws": "^7.4.4" + "@types/ws": "^8.2.0", + "discord-api-types": "^0.24.0", + "prism-media": "^1.3.2", + "tiny-typed-emitter": "^2.1.0", + "tslib": "^2.3.1", + "ws": "^8.2.3" }, "engines": { - "node": ">=16.0.0" + "node": ">=16.0.0", + "npm": ">=7.0.0" } }, "node_modules/@sapphire/async-queue": { @@ -141,14 +116,14 @@ } }, "node_modules/@types/node": { - "version": "14.17.29", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.29.tgz", - "integrity": "sha512-sd4CHI9eTJXTH2vF3RGtGkqvWRwhsSSUFsXD4oG38GZzSZ0tNPbWikd2AbOAcKxCXhOg57fL8FPxjpfSzb2pIQ==" + "version": "16.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.9.tgz", + "integrity": "sha512-MKmdASMf3LtPzwLyRrFjtFFZ48cMf8jmX5VRYrDQiJa8Ybu5VAmkqBWqKU8fdCwD8ysw4mQ9nrEHvzg6gunR7A==" }, "node_modules/@types/ws": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", - "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.0.tgz", + "integrity": "sha512-cyeefcUCgJlEk+hk2h3N+MqKKsPViQgF5boi9TTHSK+PoR9KWBb/C5ccPcDyAqgsbAYHTwulch725DV84+pSpg==", "dependencies": { "@types/node": "*" } @@ -488,9 +463,9 @@ } }, "node_modules/discord-api-types": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz", - "integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.24.0.tgz", + "integrity": "sha512-X0uA2a92cRjowUEXpLZIHWl4jiX1NsUpDhcEOpa1/hpO1vkaokgZ8kkPtPih9hHth5UVQ3mHBu/PpB4qjyfJ4A==", "engines": { "node": ">=12" } @@ -550,14 +525,6 @@ "node": ">=12" } }, - "node_modules/discord.js/node_modules/@types/ws": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.0.tgz", - "integrity": "sha512-cyeefcUCgJlEk+hk2h3N+MqKKsPViQgF5boi9TTHSK+PoR9KWBb/C5ccPcDyAqgsbAYHTwulch725DV84+pSpg==", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/discord.js/node_modules/discord-api-types": { "version": "0.23.1", "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.23.1.tgz", @@ -566,26 +533,6 @@ "node": ">=12" } }, - "node_modules/discord.js/node_modules/ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/dom-serializer": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", @@ -1269,9 +1216,9 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "node_modules/signal-exit": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", - "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==" + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" }, "node_modules/string_decoder": { "version": "1.3.0", @@ -1426,11 +1373,11 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/ws": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", "engines": { - "node": ">=8.3.0" + "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", @@ -1485,27 +1432,6 @@ } }, "dependencies": { - "@discordjs/builders": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.8.2.tgz", - "integrity": "sha512-/YRd11SrcluqXkKppq/FAVzLIPRVlIVmc6X8ZklspzMIHDtJ+A4W37D43SHvLdH//+NnK+SHW/WeOF4Ts54PeQ==", - "dev": true, - "requires": { - "@sindresorhus/is": "^4.2.0", - "discord-api-types": "^0.24.0", - "ow": "^0.27.0", - "ts-mixer": "^6.0.0", - "tslib": "^2.3.1" - }, - "dependencies": { - "discord-api-types": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.24.0.tgz", - "integrity": "sha512-X0uA2a92cRjowUEXpLZIHWl4jiX1NsUpDhcEOpa1/hpO1vkaokgZ8kkPtPih9hHth5UVQ3mHBu/PpB4qjyfJ4A==", - "dev": true - } - } - }, "@discordjs/collection": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.2.1.tgz", @@ -1522,40 +1448,41 @@ } }, "@discordjs/node-pre-gyp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@discordjs/node-pre-gyp/-/node-pre-gyp-0.4.1.tgz", - "integrity": "sha512-PLYLPG3R+m9QlMROOjdy2htQq54g6f9vRb1xPfZ97CL53yj0uNTfpB/jtY/AXY6OKNtZtrre5SKjei8Hcc44HQ==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@discordjs/node-pre-gyp/-/node-pre-gyp-0.4.2.tgz", + "integrity": "sha512-V239Czn+DXFGLhhuccwEDBoTdgMGrRu30dOlzm1GzrSIjwFj01ZJerNX7x+CEX1NG1Q/1gGfOOkeZFNHjycrRA==", "requires": { "detect-libc": "^1.0.3", "https-proxy-agent": "^5.0.0", "make-dir": "^3.1.0", - "node-fetch": "^2.6.1", + "node-fetch": "^2.6.5", "nopt": "^5.0.0", - "npmlog": "^5.0.0", + "npmlog": "^5.0.1", "rimraf": "^3.0.2", "semver": "^7.3.5", - "tar": "^6.1.8" + "tar": "^6.1.11" } }, "@discordjs/opus": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@discordjs/opus/-/opus-0.6.0.tgz", - "integrity": "sha512-Xuw8OP9BJgObEBs/SgxixnKj+y+w9st45uOAJ+cGegUGwxAIR4J7sQt3Y1J3G9SGGe82+MTxvy7sg1/QUkigcg==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@discordjs/opus/-/opus-0.7.0.tgz", + "integrity": "sha512-3Xxa3dh7taSDwBAR5fLALZ/KTxvbMmHCMxYLYve6NlPO7Ms1CLmKqp/R4ZoVzkRGQVUVWEhaB1s0v9jfa2tfDg==", "requires": { - "@discordjs/node-pre-gyp": "^0.4.1", - "node-addon-api": "^4.0.0" + "@discordjs/node-pre-gyp": "^0.4.2", + "node-addon-api": "^4.2.0" } }, "@discordjs/voice": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@discordjs/voice/-/voice-0.6.0.tgz", - "integrity": "sha512-DF2fZAnB8gX3Qz5BEWPOUl565ptpda1uVmXJije4iK5aQrECfkqc6XcI+wzbGaNvzsH1Wb76NPzxngsEw8bblw==", + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@discordjs/voice/-/voice-0.7.5.tgz", + "integrity": "sha512-lUk+CmIXNKslT6DkC9IF9rpsqhzlTiedauUCPBzepjd4XWxwBZiyVIzR6QpbAirxkAwCoAbbje+3Ho71PGLEAw==", "requires": { - "@types/ws": "^7.4.4", - "discord-api-types": "^0.22.0", - "prism-media": "^1.3.1", - "tiny-typed-emitter": "^2.0.3", - "ws": "^7.4.4" + "@types/ws": "^8.2.0", + "discord-api-types": "^0.24.0", + "prism-media": "^1.3.2", + "tiny-typed-emitter": "^2.1.0", + "tslib": "^2.3.1", + "ws": "^8.2.3" } }, "@sapphire/async-queue": { @@ -1569,14 +1496,14 @@ "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==" }, "@types/node": { - "version": "14.17.29", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.29.tgz", - "integrity": "sha512-sd4CHI9eTJXTH2vF3RGtGkqvWRwhsSSUFsXD4oG38GZzSZ0tNPbWikd2AbOAcKxCXhOg57fL8FPxjpfSzb2pIQ==" + "version": "16.11.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.9.tgz", + "integrity": "sha512-MKmdASMf3LtPzwLyRrFjtFFZ48cMf8jmX5VRYrDQiJa8Ybu5VAmkqBWqKU8fdCwD8ysw4mQ9nrEHvzg6gunR7A==" }, "@types/ws": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", - "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.0.tgz", + "integrity": "sha512-cyeefcUCgJlEk+hk2h3N+MqKKsPViQgF5boi9TTHSK+PoR9KWBb/C5ccPcDyAqgsbAYHTwulch725DV84+pSpg==", "requires": { "@types/node": "*" } @@ -1859,9 +1786,9 @@ "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, "discord-api-types": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz", - "integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==" + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.24.0.tgz", + "integrity": "sha512-X0uA2a92cRjowUEXpLZIHWl4jiX1NsUpDhcEOpa1/hpO1vkaokgZ8kkPtPih9hHth5UVQ3mHBu/PpB4qjyfJ4A==" }, "discord-ytdl-core": { "version": "5.0.4", @@ -1905,24 +1832,10 @@ } } }, - "@types/ws": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.0.tgz", - "integrity": "sha512-cyeefcUCgJlEk+hk2h3N+MqKKsPViQgF5boi9TTHSK+PoR9KWBb/C5ccPcDyAqgsbAYHTwulch725DV84+pSpg==", - "requires": { - "@types/node": "*" - } - }, "discord-api-types": { "version": "0.23.1", "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.23.1.tgz", "integrity": "sha512-igWmn+45mzXRWNEPU25I/pr8MwxHb767wAr51oy3VRLRcTlp5ADBbrBR0lq3SA1Rfw3MtM4TQu1xo3kxscfVdQ==" - }, - "ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", - "requires": {} } } }, @@ -2443,9 +2356,9 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, "signal-exit": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", - "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==" + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" }, "string_decoder": { "version": "1.3.0", @@ -2572,9 +2485,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", - "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", "requires": {} }, "yallist": { diff --git a/package.json b/package.json index 13e77f3..aa5dbeb 100644 --- a/package.json +++ b/package.json @@ -15,9 +15,9 @@ "start": "node dist/app.js" }, "dependencies": { - "@discordjs/opus": "^0.6.0", - "@discordjs/voice": "0.6.0", - "@types/node": "^14.14.7", + "@discordjs/opus": "0.7.0", + "@discordjs/voice": "0.7.5", + "@types/node": "^16.11.9", "discord-ytdl-core": "5.0.4", "discord.js": "13.2.0", "libsodium-wrappers": "^0.7.9", diff --git a/src/app.ts b/src/app.ts index cf2a2f7..4e83040 100644 --- a/src/app.ts +++ b/src/app.ts @@ -1,9 +1,9 @@ "use strict"; -import { MyClient } from "./types/Client"; +import { MyClient } from "./types/MyClient"; const token = process.env.DISCORD_TOKEN; -const client = new MyClient("./commands", "./events"); +const client = new MyClient("./commands", "./events", "214422162906415106"); client.login(token); \ No newline at end of file diff --git a/src/commands/music/clear.ts b/src/commands/music/clear.ts index 6a2b454..bcb6398 100644 --- a/src/commands/music/clear.ts +++ b/src/commands/music/clear.ts @@ -1,7 +1,7 @@ import { design } from "../../config"; -import { ColorResolvable, CommandInteraction, MessageEmbed } from "discord.js"; -import { MyClient } from "../../types/Client"; +import { ColorResolvable, CommandInteraction, Message, MessageEmbed } from "discord.js"; +import { MyClient } from "../../types/MyClient"; diff --git a/src/commands/music/connect.ts b/src/commands/music/connect.ts index f7004ae..adaf546 100644 --- a/src/commands/music/connect.ts +++ b/src/commands/music/connect.ts @@ -4,7 +4,7 @@ import { ColorResolvable, CommandInteraction, GuildMember, MessageEmbed, TextChannel } from "discord.js"; -import { MyClient } from "../../types/Client"; +import { MyClient } from "../../types/MyClient"; diff --git a/src/commands/music/insert.ts b/src/commands/music/insert.ts index f2563ce..62af8fb 100644 --- a/src/commands/music/insert.ts +++ b/src/commands/music/insert.ts @@ -1,7 +1,7 @@ import { design } from "../../config"; import { ColorResolvable, CommandInteraction, MessageEmbed } from "discord.js"; -import { MyClient } from "../../types/Client"; +import { MyClient } from "../../types/MyClient"; diff --git a/src/commands/music/jump.ts b/src/commands/music/jump.ts index e000243..228392e 100644 --- a/src/commands/music/jump.ts +++ b/src/commands/music/jump.ts @@ -1,7 +1,7 @@ import { design } from "../../config"; import { ColorResolvable, CommandInteraction, MessageEmbed } from "discord.js"; -import { MyClient } from "../../types/Client"; +import { MyClient } from "../../types/MyClient"; diff --git a/src/commands/music/loop.ts b/src/commands/music/loop.ts index 8cf65c3..9db64f7 100644 --- a/src/commands/music/loop.ts +++ b/src/commands/music/loop.ts @@ -1,7 +1,7 @@ import { design } from "../../config"; import { ColorResolvable, CommandInteraction, MessageEmbed } from "discord.js"; -import { MyClient } from "../../types/Client"; +import { MyClient } from "../../types/MyClient"; import { loopOption } from "../../types/Types"; diff --git a/src/commands/music/next.ts b/src/commands/music/next.ts index 07e549a..42d5f1b 100644 --- a/src/commands/music/next.ts +++ b/src/commands/music/next.ts @@ -1,7 +1,7 @@ import { design } from "../../config"; import { ColorResolvable, CommandInteraction, MessageEmbed } from "discord.js"; -import { MyClient } from "../../types/Client"; +import { MyClient } from "../../types/MyClient"; diff --git a/src/commands/music/pause.ts b/src/commands/music/pause.ts index 559c468..1ee4249 100644 --- a/src/commands/music/pause.ts +++ b/src/commands/music/pause.ts @@ -1,7 +1,7 @@ import { design } from "../../config"; import { ColorResolvable, CommandInteraction, MessageEmbed } from "discord.js"; -import { MyClient } from "../../types/Client"; +import { MyClient } from "../../types/MyClient"; diff --git a/src/commands/music/play.ts b/src/commands/music/play.ts index fbf13fc..4b1afa8 100644 --- a/src/commands/music/play.ts +++ b/src/commands/music/play.ts @@ -1,7 +1,7 @@ import { design } from "../../config"; import { ColorResolvable, CommandInteraction, MessageEmbed } from "discord.js"; -import { MyClient } from "../../types/Client"; +import { MyClient } from "../../types/MyClient"; import { run as connect } from "./connect"; diff --git a/src/commands/music/queue.ts b/src/commands/music/queue.ts index 1922a61..4952b82 100644 --- a/src/commands/music/queue.ts +++ b/src/commands/music/queue.ts @@ -6,7 +6,7 @@ import { MessageButton, MessageComponentInteraction, MessageEmbed } from "discord.js"; -import { MyClient } from "../../types/Client"; +import { MyClient } from "../../types/MyClient"; import { generateQueue } from "../../types/Misc"; diff --git a/src/commands/music/remove.ts b/src/commands/music/remove.ts index c60185d..f4afd75 100644 --- a/src/commands/music/remove.ts +++ b/src/commands/music/remove.ts @@ -1,7 +1,7 @@ import { design } from "../../config"; import { ColorResolvable, CommandInteraction, MessageEmbed } from "discord.js"; -import { MyClient } from "../../types/Client"; +import { MyClient } from "../../types/MyClient"; diff --git a/src/commands/music/seek.ts b/src/commands/music/seek.ts index 064fda5..c4db8b1 100644 --- a/src/commands/music/seek.ts +++ b/src/commands/music/seek.ts @@ -1,7 +1,7 @@ import { design } from "../../config"; import { ColorResolvable, CommandInteraction, MessageEmbed } from "discord.js"; -import { MyClient } from "../../types/Client"; +import { MyClient } from "../../types/MyClient"; diff --git a/src/commands/music/stop.ts b/src/commands/music/stop.ts index bbd8700..0157b22 100644 --- a/src/commands/music/stop.ts +++ b/src/commands/music/stop.ts @@ -1,7 +1,7 @@ import { design } from "../../config"; import { ColorResolvable, CommandInteraction, MessageEmbed } from "discord.js"; -import { MyClient } from "../../types/Client"; +import { MyClient } from "../../types/MyClient"; diff --git a/src/events/interactionCreate.ts b/src/events/interactionCreate.ts index 1966e8e..19e8f09 100644 --- a/src/events/interactionCreate.ts +++ b/src/events/interactionCreate.ts @@ -1,5 +1,5 @@ import { Interaction } from "discord.js"; -import { MyClient } from "../types/Client"; +import { MyClient } from "../types/MyClient"; export async function run(args: Interaction[], client: MyClient): Promise { const [interaction] = args; diff --git a/src/events/messageCreate.ts b/src/events/messageCreate.ts index 72007d7..3719f31 100644 --- a/src/events/messageCreate.ts +++ b/src/events/messageCreate.ts @@ -1,12 +1,20 @@ -import { Message } from "discord.js"; -import { MyClient } from "../types/Client"; +import { ClientApplication, Message, User } from "discord.js"; +import { MyClient } from "../types/MyClient"; export async function run(args: Message[], client: MyClient): Promise { const [message] = args; - if (message.guild) - await message.guild.commands.set(client.restCommands); + const application = client.application as ClientApplication; + + if (application && message.author.id === client.owner) { + switch (message.content) { + case `!${client.user?.username}-dev-set-global-commands`: { + application.commands.set(client.restCommands); + await message.reply("Setting up command interactions. (It can take up to 1 hour)"); + break; + } + } + } } - export const name = "messageCreate"; \ No newline at end of file diff --git a/src/events/ready.ts b/src/events/ready.ts index 8a584b9..2e9b054 100644 --- a/src/events/ready.ts +++ b/src/events/ready.ts @@ -1,9 +1,10 @@ -import { MyClient } from "../types/Client"; +import { MyClient } from "../types/MyClient"; export async function run(args: unknown[], client: MyClient): Promise { if (!client.user) return; - console.log(`Logged in as ${client.user.tag}!`); + + console.log(`${client.user.username} logged in as ${client.user.tag}!`); client.user.setActivity("on sound waves.", { type: "PLAYING" }); } diff --git a/src/events/voiceStateUpdate.ts b/src/events/voiceStateUpdate.ts index 674e5c8..b15934a 100644 --- a/src/events/voiceStateUpdate.ts +++ b/src/events/voiceStateUpdate.ts @@ -1,6 +1,6 @@ import { ColorResolvable, MessageEmbed, VoiceState } from "discord.js"; import { design } from "../config"; -import { MyClient } from "../types/Client"; +import { MyClient } from "../types/MyClient"; import { sleep } from "../types/Misc"; export async function run(args: VoiceState[], client: MyClient): Promise { @@ -11,20 +11,17 @@ export async function run(args: VoiceState[], client: MyClient): Promise { if (!player) return; - if (newState.id === client.user?.id && newState.deaf === false) { - newState.setDeaf(true); + if (oldState.channel?.members.size === 1 && oldState.channel.members.first()?.id === client.user?.id) { + await sleep(30000); + const channel = player.channel; + if (oldState.channel.members.size === 1) + player.destroy(); const embed = new MessageEmbed() .setColor(design.color as ColorResolvable) - .setTitle("Please do not undeafen me.") - .setDescription("It's for your own privacy, trust me.") - await player.channel.send({ embeds: [embed] }); - } - - if (newState.channel?.members.size === 1 && newState.channel.members.first()) { - await sleep(30000); - if (newState.channel.members.first()?.id === client.user?.id) - player.destroy(); + .setTitle("I've decided to leave to conserve my energy") + .setDescription("Since there was nobody in the voice channel.") + await channel.send({ embeds: [embed] }); } } diff --git a/src/types/Music.ts b/src/types/Music.ts index 260042a..bbf5824 100644 --- a/src/types/Music.ts +++ b/src/types/Music.ts @@ -20,17 +20,35 @@ import yts from "yt-search"; export class Player { public guild: Guild; public music: Music; + public channel: TextChannel; - public connection: VoiceConnection | undefined; - public player: AudioPlayer | undefined; + private _connection: VoiceConnection | undefined; + get connection(): VoiceConnection | undefined { + return this._connection; + } + + + private _player: AudioPlayer | undefined; + get player(): AudioPlayer | undefined { + return this._player; + } public queue: track[] = []; - public queuePosition: number = 0; - public nowPlaying: AudioResource | undefined; - public filters: filter = {}; - public repeatMode: loopOption = "LOOP"; - public channel: TextChannel; + private _queuePosition: number = 0; + get queuePosition(): number { + return this._queuePosition; + } + + private _nowPlaying: AudioResource | undefined; + + get nowPlaying(): AudioResource | undefined { + return this._nowPlaying; + } + + public filters: filter = {}; + + public repeatMode: loopOption = "LOOP"; public message: Message | undefined; public constructor(playerGuild: Guild, clientMusic: Music, ctxChannel: TextChannel) { @@ -49,28 +67,31 @@ export class Player { seek: seek }); - this.nowPlaying = createAudioResource(stream, { + this._nowPlaying = createAudioResource(stream, { inlineVolume: true, metadata: track }); - await player.play(this.nowPlaying); + await player.play(this._nowPlaying); return player; } private _resourceEndResolvable(): boolean { + if (this._nowPlaying) + this._nowPlaying.encoder?.destroy(); + switch (this.repeatMode) { case "NONE": { - if (++this.queuePosition >= this.queue.length) { - this.queuePosition = 0; - this.nowPlaying = undefined; + if (++this._queuePosition >= this.queue.length) { + this._queuePosition = 0; + this._nowPlaying = undefined; return false; } return true; } case "LOOP": { - this.queuePosition = (this.queuePosition + 1) % this.queue.length; + this._queuePosition = (this._queuePosition + 1) % this.queue.length; return true; } case "SONG": return true; @@ -107,15 +128,15 @@ export class Player { } public async play(seek: number = 0): Promise { - if (!this.connection || this.queue.length === 0) + if (!this._connection || this.queue.length === 0) return; - const track = this.queue[this.queuePosition]; + const track = this.queue[this._queuePosition]; - this.player = await this._playerCreator(track, seek); - this.connection.subscribe(this.player); + this._player = await this._playerCreator(track, seek); + this._connection.subscribe(this._player); - this.player.on(AudioPlayerStatus.Idle, async () => { + this._player.on(AudioPlayerStatus.Idle, async () => { if (this._resourceEndResolvable()) await this.play(); }); @@ -124,18 +145,18 @@ export class Player { } public connect(channel: VoiceChannel | StageChannel): void { - this.connection = joinVoiceChannel({ + this._connection = joinVoiceChannel({ channelId: channel.id, guildId: channel.guildId, - selfDeaf: true, + // selfDeaf: true, adapterCreator: channel.guild.voiceAdapterCreator as unknown as DiscordGatewayAdapterCreator }); - this.connection.on(VoiceConnectionStatus.Disconnected, async (oldState, newState) => { + this._connection.on(VoiceConnectionStatus.Disconnected, async (oldState, newState) => { try { await Promise.race([ - entersState(this.connection as VoiceConnection, VoiceConnectionStatus.Signalling, 5_000), - entersState(this.connection as VoiceConnection, VoiceConnectionStatus.Connecting, 5_000), + entersState(this._connection as VoiceConnection, VoiceConnectionStatus.Signalling, 5_000), + entersState(this._connection as VoiceConnection, VoiceConnectionStatus.Connecting, 5_000), ]); } catch (error) { @@ -159,8 +180,8 @@ export class Player { this.queue.push(metadata); else { this.queue.splice(Math.max(0, index), 0, metadata) - if (this.queuePosition >= index) - this.queuePosition++; + if (this._queuePosition >= index) + this._queuePosition++; } return metadata; @@ -168,24 +189,24 @@ export class Player { public clear() { this.queue = []; - this.queuePosition = 0; - this.nowPlaying = undefined; - if (this.player) - this.player.stop(); + this._queuePosition = 0; + this._nowPlaying = undefined; + if (this._player) + this._player.stop(); } public destroy() { - if (this.connection) - this.connection.destroy(); + if (this._connection) + this._connection.destroy(); this.music.delPlayer(this.guild.id); } public async jump(query: number | string): Promise { - if (!this.player) + if (!this._player) return false; if (typeof query === "number" && query < this.queue.length && query >= 0) { - this.queuePosition = query; + this._queuePosition = query; await this.play(); return true; } @@ -193,7 +214,7 @@ export class Player { for (let i = 0; i < this.queue.length; i++) { const track = this.queue[i]; if (track.title.toLowerCase().includes(String(query).toLowerCase())) { - this.queuePosition = i; + this._queuePosition = i; await this.play(); return true; } @@ -205,7 +226,7 @@ export class Player { public async remove(query: number | string): Promise { if (typeof query === "number" && query < this.queue.length && query >= 0) { this.queue.splice(query, 1); - if (query === this.queuePosition) + if (query === this._queuePosition) await this.play(); return true; } @@ -214,7 +235,7 @@ export class Player { const track = this.queue[i]; if (track.title.toLowerCase().includes(String(query).toLowerCase())) { this.queue.splice(i, 1); - if (i === this.queuePosition) + if (i === this._queuePosition) await this.play(); return true; } @@ -228,15 +249,15 @@ export class Player { } public pause(): boolean { - if (!this.player) + if (!this._player) return false; - if (this.player.state.status === AudioPlayerStatus.Paused) { - this.player.unpause(); + if (this._player.state.status === AudioPlayerStatus.Paused) { + this._player.unpause(); return false; } else { - this.player.pause(); + this._player.pause(); return true; } } @@ -246,8 +267,8 @@ export class Player { } public volume(amount: number): boolean { - if (amount > 0 && amount < Infinity && this.nowPlaying && this.nowPlaying.volume) { - this.nowPlaying.volume.setVolumeLogarithmic(amount / 100); + if (amount > 0 && amount < Infinity && this._nowPlaying && this._nowPlaying.volume) { + this._nowPlaying.volume.setVolumeLogarithmic(amount / 100); return true; } return false; @@ -258,8 +279,8 @@ export class Player { } public skip(): void { - if (this.player) - this.player.stop(); + if (this._player) + this._player.stop(); } } diff --git a/src/types/Client.ts b/src/types/MyClient.ts similarity index 62% rename from src/types/Client.ts rename to src/types/MyClient.ts index dd0036c..9c88df4 100644 --- a/src/types/Client.ts +++ b/src/types/MyClient.ts @@ -1,15 +1,28 @@ -import { ApplicationCommandData, Client as DiscordClient, Intents } from "discord.js"; +import { ApplicationCommandData, Client as DiscordClient, Intents, User } from "discord.js"; import { readdirSync } from "fs"; import { Music } from "./Music"; export class MyClient extends DiscordClient { - commands = new Map(); - restCommands: ApplicationCommandData[] = []; - players = new Music(); + private _commands = new Map(); + private _restCommands: ApplicationCommandData[] = []; + private _owner: string; + public players = new Music(); + + get commands(): Map { + return this._commands; + } + + get restCommands(): ApplicationCommandData[] { + return this._restCommands; + } + + get owner(): string { + return this._owner; + } - constructor(commandsPath: string, eventsPath: string) { + public constructor(commandsPath: string, eventsPath: string, ownerId: string) { super({ intents: [ Intents.FLAGS.GUILDS, @@ -24,8 +37,8 @@ export class MyClient extends DiscordClient { for (const file of cmdFiles) { import(`.${commandsPath}/${dir}/${file}`).then((command) => { const name = command.data.name; - this.restCommands.push(command.data); - this.commands.set(name, command); + this._restCommands.push(command.data); + this._commands.set(name, command); }); } }); @@ -39,5 +52,7 @@ export class MyClient extends DiscordClient { }); }); } + + this._owner = ownerId; } } \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index f63d889..0efe6a0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,7 +7,8 @@ "esModuleInterop": true, "moduleResolution": "Node", "lib": [ "ESNext", "DOM" ], - "sourceMap": true + "sourceMap": true, + "types": [ "node" ] }, "include": [ "src/**/*"