diff --git a/.gitignore b/.gitignore index 0b87358..65a4c07 100644 --- a/.gitignore +++ b/.gitignore @@ -131,6 +131,7 @@ out # Custom .replit +index.js replit.nix __dump__ __test__ diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..842d2e0 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,7 @@ +# Ignore artifacts: +dist +types +docs +metadata +__test__ +__dump__ diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..e74ed9f --- /dev/null +++ b/.prettierrc @@ -0,0 +1,6 @@ +{ + "trailingComma": "es5", + "tabWidth": 4, + "semi": false, + "singleQuote": true +} diff --git a/README.md b/README.md index 548dce1..fbbd5b5 100644 --- a/README.md +++ b/README.md @@ -1,131 +1,163 @@ -isologo +isologo # ForgeMusic -An standard music library tailored for [ForgeScript](https://npmjs.com/package/@tryforge/forgescript). + +A standard music library tailored for [ForgeScript](https://npmjs.com/package/@tryforge/forgescript). @tryforge/forge.music @tryforge/forgescript Discord ------ +--- + ## Features + - Easy to use API. - Various amount of events. - Support for various filters. - Support for most audio providers. ----- +--- + ## Contents + 1. [Installation](#installation) 2. [Setup](#setup) - 1. [Listening Events](#listening-events) + 1. [Listening Events](#listening-events) 1. [Disallowed Events](#disallowed-events) - 2. [Commands](#commands) - 1. [Event Data: Types and Interfaces](#event-data-types-and-interfaces) - 1. [Example](#example) + 2. [Commands](#commands) + 1. [Event Data: Types and Interfaces](#event-data-types-and-interfaces) + 1. [Example](#example) 3. [Advices](#advices) -4. [Tips](#tips) - 1. [Adding support for YouTube](#adding-support-for-youtube) -5. [Contributors](#contributors) ----- +4. [Contributors](#contributors) + +--- + ## Installation + In your project, navigate to your terminal and write the following command. + ```bash npm install @tryforge/forge.music ``` + If you are using another package manager than npm, Google how to install Node.js dependencies. ----- +--- + ## Setup + Now, you must require the `ForgeMusic` class in your main file. + ```js -const { ForgeMusic } = require("@tryforge/forge.music"); +const { ForgeMusic } = require('@tryforge/forge.music') ``` + As it is required, now you are allowed to create an instance of it. + ```js const music = new ForgeMusic({ - events: [] -}); + events: [], +}) ``` + Now, extension is defined and ready to be attached to the client. + ```js const client = new ForgeClient({ extensions: [music], // ...client options -}); +}) ``` + > [!CAUTION] > Your `ForgeClient` instance requires the following intent in order for ForgeMusic to work: **GuildVoiceStates**. + ### Listening Events + ForgeMusic provides a simple interface to declare the events to listen to. First, we need to require the `GuildQueueEvent` enumerator. + ```js -const { ForgeMusic, GuildQueueEvent } = require("@tryforge/forge.music"); +const { ForgeMusic, GuildQueueEvent } = require('@tryforge/forge.music') ``` + As it is required, now you must pass an array of values of this enumerator under `events` property in ForgeMusic constructor. + ```js const music = new ForgeMusic({ events: [ GuildQueueEvent.PlayerFinish, GuildQueueEvent.PlayerStart, GuildQueueEvent.PlayerError, - GuildQueueEvent.Error - ] -}); + GuildQueueEvent.Error, + ], +}) ``` + Current setup must look like this. + ```js -const { ForgeMusic, GuildQueueEvent } = require("@tryforge/forge.music"); +const { ForgeMusic, GuildQueueEvent } = require('@tryforge/forge.music') const music = new ForgeMusic({ events: [ GuildQueueEvent.PlayerFinish, GuildQueueEvent.PlayerStart, GuildQueueEvent.PlayerError, - GuildQueueEvent.Error - ] -}); + GuildQueueEvent.Error, + ], +}) const client = new ForgeClient({ extensions: [music], // ...client options -}); +}) ``` + #### Disallowed Events + The following events are not supported by the extension. + - VoiceStateUpdate - WillAutoPlay - WillPlayTrack + ### Commands + To add event commands, ForgeMusic provides an integrated command manager to take care of this. You must define your commands after your ForgeClient definition to prevent errors. + ```js // Adding directly. music.commands.add({ - name: "commandName", + name: 'commandName', type: GuildQueueEvent.PlayerStart, - code: "$log[A track started playing.]" -}); + code: '$log[A track started playing.]', +}) // Loading from a path tree. -music.commands.load("./path/to/commands"); +music.commands.load('./path/to/commands') ``` + #### Event Data: Types and Interfaces + In each music event, you can access to that event data using the JSON Dump ([$env](https://github.com/tryforge/ForgeScript/blob/main/src%2Fnative%2Fvariable%2Fenv.ts)). The following, is a list of event with its accessible properties. + - [AudioFiltersUpdate](https://github.com/tryforge/ForgeMusic/blob/main/src%2Fevents%2FaudioFiltersUpdate.ts) - `queue`: [GuildQueue](https://discord-player.js.org/docs/discord-player/class/GuildQueue) - `oldFilters`: [FiltersName](https://discord-player.js.org/docs/discord-player/type/FiltersName) - `newFilters`: [FiltersName](https://discord-player.js.org/docs/discord-player/type/FiltersName) - [AudioTrackAdd](https://github.com/tryforge/ForgeMusic/blob/main/src%2Fevents%2FaudioTrackAdd.ts) - - `queue`: [GuildQueue](https://discord-player.js.org/docs/discord-player/class/GuildQueue) - - `track`: [Track](https://discord-player.js.org/docs/discord-player/class/Track) + - `queue`: [GuildQueue](https://discord-player.js.org/docs/discord-player/class/GuildQueue) + - `track`: [Track](https://discord-player.js.org/docs/discord-player/class/Track) - [AudioTrackRemove](https://github.com/tryforge/ForgeMusic/blob/main/src%2Fevents%2FaudioTrackRemove.ts) - - `queue`: [GuildQueue](https://discord-player.js.org/docs/discord-player/class/GuildQueue) - - `track`: [Track](https://discord-player.js.org/docs/discord-player/class/Track) + - `queue`: [GuildQueue](https://discord-player.js.org/docs/discord-player/class/GuildQueue) + - `track`: [Track](https://discord-player.js.org/docs/discord-player/class/Track) - [BiquadFiltersUpdate](https://github.com/tryforge/ForgeMusic/blob/main/src%2Fevents%2FbiquadFiltersUpdate.ts) - - `queue`: [GuildQueue](https://discord-player.js.org/docs/discord-player/class/GuildQueue) - - `oldFilters`: [BiquadFilters](https://discord-player.js.org/docs/discord-player/type/BiquadFilters) - - `newFilters`: [BiquadFilters](https://discord-player.js.org/docs/discord-player/type/BiquadFilters) + - `queue`: [GuildQueue](https://discord-player.js.org/docs/discord-player/class/GuildQueue) + - `oldFilters`: [BiquadFilters](https://discord-player.js.org/docs/discord-player/type/BiquadFilters) + - `newFilters`: [BiquadFilters](https://discord-player.js.org/docs/discord-player/type/BiquadFilters) - [ChannelPopulate](https://github.com/tryforge/ForgeMusic/blob/main/src%2Fevents%2FchannelPopulate.ts) - `queue`: [GuildQueue](https://discord-player.js.org/docs/discord-player/class/GuildQueue) - [Connection](https://github.com/tryforge/ForgeMusic/blob/main/src%2Fevents%2Fconnection.ts) @@ -158,23 +190,23 @@ The following, is a list of event with its accessible properties. - `track`: [Track](https://discord-player.js.org/docs/discord-player/class/Track) - [PlayerFinish](https://github.com/tryforge/ForgeMusic/blob/main/src%2Fevents%2FplayerFinish.ts) - `queue`: [GuildQueue](https://discord-player.js.org/docs/discord-player/class/GuildQueue) - - `track`: [Track](https://discord-player.js.org/docs/discord-player/class/Track) + - `track`: [Track](https://discord-player.js.org/docs/discord-player/class/Track) - [PlayerPause](https://github.com/tryforge/ForgeMusic/blob/main/src%2Fevents%2FplayerPause.ts) - `queue`: [GuildQueue](https://discord-player.js.org/docs/discord-player/class/GuildQueue) - [PlayerResume](https://github.com/tryforge/ForgeMusic/blob/main/src%2Fevents%2FplayerResume.ts) - `queue`: [GuildQueue](https://discord-player.js.org/docs/discord-player/class/GuildQueue) - [PlayerSkip](https://github.com/tryforge/ForgeMusic/blob/main/src%2Fevents%2FplayerSkip.ts) - `queue`: [GuildQueue](https://discord-player.js.org/docs/discord-player/class/GuildQueue) - - `track`: [Track](https://discord-player.js.org/docs/discord-player/class/Track) - - `reason`: [TrackSkipReason]() - - `description`: string + - `track`: [Track](https://discord-player.js.org/docs/discord-player/class/Track) + - `reason`: [TrackSkipReason]() + - `description`: string - [PlayerStart](https://github.com/tryforge/ForgeMusic/blob/main/src%2Fevents%2FplayerStart.ts) - - `queue`: [GuildQueue](https://discord-player.js.org/docs/discord-player/class/GuildQueue) - - `track`: [Track](https://discord-player.js.org/docs/discord-player/class/Track) + - `queue`: [GuildQueue](https://discord-player.js.org/docs/discord-player/class/GuildQueue) + - `track`: [Track](https://discord-player.js.org/docs/discord-player/class/Track) - [PlayerTrigger](https://github.com/tryforge/ForgeMusic/blob/main/src%2Fevents%2FplayerTrigger.ts) - - `queue`: [GuildQueue](https://discord-player.js.org/docs/discord-player/class/GuildQueue) - - `track`: [Track](https://discord-player.js.org/docs/discord-player/class/Track) - - `reason`: [PlayerTriggeredReason](https://discord-player.js.org/docs/discord-player/type/PlayerTriggeredReason) + - `queue`: [GuildQueue](https://discord-player.js.org/docs/discord-player/class/GuildQueue) + - `track`: [Track](https://discord-player.js.org/docs/discord-player/class/Track) + - `reason`: [PlayerTriggeredReason](https://discord-player.js.org/docs/discord-player/type/PlayerTriggeredReason) - [QueueCreate](https://github.com/tryforge/ForgeMusic/blob/main/src%2Fevents%2FqueueCreate.ts) - `queue`: [GuildQueue](https://discord-player.js.org/docs/discord-player/class/GuildQueue) - [QueueDelete](https://github.com/tryforge/ForgeMusic/blob/main/src%2Fevents%2FqueueDelete.ts) @@ -183,7 +215,9 @@ The following, is a list of event with its accessible properties. - `queue`: [GuildQueue](https://discord-player.js.org/docs/discord-player/class/GuildQueue) - `oldVolume`: number - `newVolume`: number + ##### Example + ```js { name: "myCommand", @@ -191,45 +225,12 @@ The following, is a list of event with its accessible properties. code: "$!sendMessage[$env[queue;metadata;text;id];A track started playing.]" } ``` + ## Advices - You must add the following events to the extension in order to work properly. - GuildQueueEvent.Error - GuildQueueEvent.PlayerError -## Tips -### Default Extractors -The base framework provides some base music sources you can use. You must load them like follows. -```js -const { DefaultExtractors } = require("@tryforge/forge.music"); -const music = new ForgeMusic({ - // ... - includeExtractors: DefaultExtractors -}); -``` -### Adding Support for YouTube -ForgeMusic by default does not provide support for streaming from YouTube. -You must install `discord-player-youtubei` and then require `YoutubeiExtractor` from it. -```bash -npm install discord-player-youtubei -``` -then, do the following step. -```js -const { DefaultExtractors, ForgeMusic, GuildQueueEvent } = require("@tryforge/forge.music"); -const { YoutubeiExtractor } = require("discord-player-youtubei"); -const music = new ForgeMusic({ - events: [ - GuildQueueEvent.AudioTrackAdd, - GuildQueueEvent.Connection, - GuildQueueEvent.PlayerError, - GuildQueueEvent.Error - ], - includeExtractors: DefaultExtractors -}); -``` -With the previous step done, register the **YoutubeiExtractor** into the extension registry. -```js -music.player.extractors.register(YoutubeiExtractor, {}); -``` -And now, you're ready to use YouTube provider as smooth as possible. + ## Contributors Many thanks for the contributors for making this extension the best choice out there. [![tryforge/ForgeMusic](https://contrib.rocks/image?repo=tryforge/ForgeMusic)](https://github.com/tryforge/ForgeMusic) diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..2d67084 --- /dev/null +++ b/bun.lock @@ -0,0 +1,814 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "@tryforge/forge.music", + "dependencies": { + "@discord-player/extractor": "^7.2.0", + "@snazzah/davey": "^0.1.10", + "discord-player": "^7.2.0", + }, + "devDependencies": { + "@tryforge/forgescript": "^2.6.0", + "ascii-table3": "^0.9.0", + "discord-player-deezer": "^2.6.0", + "discord-player-soundcloud": "^1.0.7", + "discord-player-spotify": "^1.1.9", + "discord-player-youtubei": "^2.0.0-dev.2", + "discord.js": "^14.25.1", + "dotenv": "^16.6.1", + "googlevideo": "^4.0.4", + "prettier": "3.5.1", + "tsc-alias": "^1.8.16", + "typescript": "^5.9.3", + }, + }, + }, + "trustedDependencies": [ + "youtube-dl-exec", + ], + "packages": { + "@asamuzakjp/css-color": ["@asamuzakjp/css-color@3.2.0", "", { "dependencies": { "@csstools/css-calc": "^2.1.3", "@csstools/css-color-parser": "^3.0.9", "@csstools/css-parser-algorithms": "^3.0.4", "@csstools/css-tokenizer": "^3.0.3", "lru-cache": "^10.4.3" } }, "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw=="], + + "@bufbuild/protobuf": ["@bufbuild/protobuf@2.11.0", "", {}, "sha512-sBXGT13cpmPR5BMgHE6UEEfEaShh5Ror6rfN3yEK5si7QVrtZg8LEPQb0VVhiLRUslD2yLnXtnRzG035J/mZXQ=="], + + "@csstools/color-helpers": ["@csstools/color-helpers@5.1.0", "", {}, "sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA=="], + + "@csstools/css-calc": ["@csstools/css-calc@2.1.4", "", { "peerDependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" } }, "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ=="], + + "@csstools/css-color-parser": ["@csstools/css-color-parser@3.1.0", "", { "dependencies": { "@csstools/color-helpers": "^5.1.0", "@csstools/css-calc": "^2.1.4" }, "peerDependencies": { "@csstools/css-parser-algorithms": "^3.0.5", "@csstools/css-tokenizer": "^3.0.4" } }, "sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA=="], + + "@csstools/css-parser-algorithms": ["@csstools/css-parser-algorithms@3.0.5", "", { "peerDependencies": { "@csstools/css-tokenizer": "^3.0.4" } }, "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ=="], + + "@csstools/css-tokenizer": ["@csstools/css-tokenizer@3.0.4", "", {}, "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw=="], + + "@discord-player/equalizer": ["@discord-player/equalizer@7.2.0", "", {}, "sha512-k0mzMC92YrooRrSeT7LAgJNf+ce8VCxXJNDtRXL+Eli0WtUwvv30+Wz1vpIMdcuqEX+HRRDkBnMDY1thL5449A=="], + + "@discord-player/extractor": ["@discord-player/extractor@7.2.0", "", { "dependencies": { "file-type": "^16.5.4", "isomorphic-unfetch": "^4.0.2", "node-html-parser": "^7.0.2", "reverbnation-scraper": "^2.0.0", "soundcloud.ts": "^0.5.5", "spotify-url-info": "^3.2.6" } }, "sha512-S+e1g+A8+VXP3TUbK4CpQdVEFPLHJaJBXDVGypUHjezxWfn8YzbiS7eRdgcebuTw2kYC/bCww5+bDiUdEjxLLA=="], + + "@discord-player/ffmpeg": ["@discord-player/ffmpeg@7.2.0", "", {}, "sha512-XjBbi+Zpm7dtDE7gf4KLYf53J3PNKk0gDigFt1dvRVJ38WmrUUpqRn0QdrH7CwRJhXfexTimSg71xj7Zn65jWw=="], + + "@discord-player/opus": ["@discord-player/opus@7.2.0", "", {}, "sha512-R6/hdU95o42Xdt/oNVtpi6PLL8FqBVOCLalH3kmpQ42F2adLwA3E9V0qfQcyZuUW7NcVbWfLYevV8rmcj/75lg=="], + + "@discord-player/utils": ["@discord-player/utils@7.2.0", "", { "dependencies": { "@discordjs/collection": "^1.1.0" } }, "sha512-07zpzOXbSKIKwwZxKdj1UznB1MYHFZjrC3mZeggreY21yJzNE+MYeH2ueDRH8V4f9tOR8KGustJc36Qza6+uMQ=="], + + "@discordjs/builders": ["@discordjs/builders@1.14.0", "", { "dependencies": { "@discordjs/formatters": "^0.6.2", "@discordjs/util": "^1.2.0", "@sapphire/shapeshift": "^4.0.0", "discord-api-types": "^0.38.40", "fast-deep-equal": "^3.1.3", "ts-mixer": "^6.0.4", "tslib": "^2.6.3" } }, "sha512-7pVKxVWkeLUtrTo9nTYkjRcJk0Hlms6lYervXAD7E7+K5lil9ms2JrEB1TalMiHvQMh7h1HJZ4fCJa0/vHpl4w=="], + + "@discordjs/collection": ["@discordjs/collection@1.5.3", "", {}, "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ=="], + + "@discordjs/formatters": ["@discordjs/formatters@0.6.2", "", { "dependencies": { "discord-api-types": "^0.38.33" } }, "sha512-y4UPwWhH6vChKRkGdMB4odasUbHOUwy7KL+OVwF86PvT6QVOwElx+TiI1/6kcmcEe+g5YRXJFiXSXUdabqZOvQ=="], + + "@discordjs/rest": ["@discordjs/rest@2.6.1", "", { "dependencies": { "@discordjs/collection": "^2.1.1", "@discordjs/util": "^1.2.0", "@sapphire/async-queue": "^1.5.3", "@sapphire/snowflake": "^3.5.5", "@vladfrangu/async_event_emitter": "^2.4.6", "discord-api-types": "^0.38.40", "magic-bytes.js": "^1.13.0", "tslib": "^2.6.3", "undici": "6.24.1" } }, "sha512-wwQdgjeaoYFiaG+atbqx6aJDpqW7JHAo0HrQkBTbYzM3/PJ3GweQIpgElNcGZ26DCUOXMyawYd0YF7vtr+fZXg=="], + + "@discordjs/util": ["@discordjs/util@1.2.0", "", { "dependencies": { "discord-api-types": "^0.38.33" } }, "sha512-3LKP7F2+atl9vJFhaBjn4nOaSWahZ/yWjOvA4e5pnXkt2qyXRCHLxoBQy81GFtLGCq7K9lPm9R517M1U+/90Qg=="], + + "@discordjs/ws": ["@discordjs/ws@1.2.3", "", { "dependencies": { "@discordjs/collection": "^2.1.0", "@discordjs/rest": "^2.5.1", "@discordjs/util": "^1.1.0", "@sapphire/async-queue": "^1.5.2", "@types/ws": "^8.5.10", "@vladfrangu/async_event_emitter": "^2.2.4", "discord-api-types": "^0.38.1", "tslib": "^2.6.2", "ws": "^8.17.0" } }, "sha512-wPlQDxEmlDg5IxhJPuxXr3Vy9AjYq5xCvFWGJyD7w7Np8ZGu+Mc+97LCoEc/+AYCo2IDpKioiH0/c/mj5ZR9Uw=="], + + "@emnapi/core": ["@emnapi/core@1.9.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.0", "tslib": "^2.4.0" } }, "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA=="], + + "@emnapi/runtime": ["@emnapi/runtime@1.9.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA=="], + + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.4", "", { "os": "aix", "cpu": "ppc64" }, "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.27.4", "", { "os": "android", "cpu": "arm" }, "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.4", "", { "os": "android", "cpu": "arm64" }, "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.27.4", "", { "os": "android", "cpu": "x64" }, "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.4", "", { "os": "linux", "cpu": "arm" }, "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.4", "", { "os": "linux", "cpu": "ia32" }, "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.4", "", { "os": "linux", "cpu": "none" }, "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.4", "", { "os": "linux", "cpu": "none" }, "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.4", "", { "os": "linux", "cpu": "none" }, "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.4", "", { "os": "linux", "cpu": "x64" }, "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.4", "", { "os": "none", "cpu": "arm64" }, "sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.4", "", { "os": "none", "cpu": "x64" }, "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.4", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.4", "", { "os": "openbsd", "cpu": "x64" }, "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ=="], + + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.4", "", { "os": "none", "cpu": "arm64" }, "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.4", "", { "os": "sunos", "cpu": "x64" }, "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.4", "", { "os": "win32", "cpu": "x64" }, "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg=="], + + "@fastify/busboy": ["@fastify/busboy@2.1.1", "", {}, "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@kikobeats/time-span": ["@kikobeats/time-span@1.0.12", "", {}, "sha512-YeeiMfGaBKGoob/APJlRTZE1j8OL4cxKvjiOba49ED1IXlB+vj85q/aXMw/EZjEUMp5nBnfPmFoZEiwWLDNrYg=="], + + "@mithron/deezer-music-metadata": ["@mithron/deezer-music-metadata@1.0.3", "", { "dependencies": { "axios": "^0.27.2", "cheerio": "^1.0.0-rc.12" } }, "sha512-/RwhXUp7pfGRNoWOODOTA+ZtSCD0MnY6MDRRCbXXynMIGCOJUBUXXhCtuw6Z+2f785ggoSqwNSi1U6bsbJWBvw=="], + + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.1", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@tybys/wasm-util": "^0.10.1" } }, "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A=="], + + "@noble/hashes": ["@noble/hashes@2.0.1", "", {}, "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw=="], + + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + + "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + + "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.60.0", "", { "os": "android", "cpu": "arm" }, "sha512-WOhNW9K8bR3kf4zLxbfg6Pxu2ybOUbB2AjMDHSQx86LIF4rH4Ft7vmMwNt0loO0eonglSNy4cpD3MKXXKQu0/A=="], + + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.60.0", "", { "os": "android", "cpu": "arm64" }, "sha512-u6JHLll5QKRvjciE78bQXDmqRqNs5M/3GVqZeMwvmjaNODJih/WIrJlFVEihvV0MiYFmd+ZyPr9wxOVbPAG2Iw=="], + + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.60.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-qEF7CsKKzSRc20Ciu2Zw1wRrBz4g56F7r/vRwY430UPp/nt1x21Q/fpJ9N5l47WWvJlkNCPJz3QRVw008fi7yA=="], + + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.60.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-WADYozJ4QCnXCH4wPB+3FuGmDPoFseVCUrANmA5LWwGmC6FL14BWC7pcq+FstOZv3baGX65tZ378uT6WG8ynTw=="], + + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.60.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-6b8wGHJlDrGeSE3aH5mGNHBjA0TTkxdoNHik5EkvPHCt351XnigA4pS7Wsj/Eo9Y8RBU6f35cjN9SYmCFBtzxw=="], + + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.60.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-h25Ga0t4jaylMB8M/JKAyrvvfxGRjnPQIR8lnCayyzEjEOx2EJIlIiMbhpWxDRKGKF8jbNH01NnN663dH638mA=="], + + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.60.0", "", { "os": "linux", "cpu": "arm" }, "sha512-RzeBwv0B3qtVBWtcuABtSuCzToo2IEAIQrcyB/b2zMvBWVbjo8bZDjACUpnaafaxhTw2W+imQbP2BD1usasK4g=="], + + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.60.0", "", { "os": "linux", "cpu": "arm" }, "sha512-Sf7zusNI2CIU1HLzuu9Tc5YGAHEZs5Lu7N1ssJG4Tkw6e0MEsN7NdjUDDfGNHy2IU+ENyWT+L2obgWiguWibWQ=="], + + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.60.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-DX2x7CMcrJzsE91q7/O02IJQ5/aLkVtYFryqCjduJhUfGKG6yJV8hxaw8pZa93lLEpPTP/ohdN4wFz7yp/ry9A=="], + + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.60.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-09EL+yFVbJZlhcQfShpswwRZ0Rg+z/CsSELFCnPt3iK+iqwGsI4zht3secj5vLEs957QvFFXnzAT0FFPIxSrkQ=="], + + "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.60.0", "", { "os": "linux", "cpu": "none" }, "sha512-i9IcCMPr3EXm8EQg5jnja0Zyc1iFxJjZWlb4wr7U2Wx/GrddOuEafxRdMPRYVaXjgbhvqalp6np07hN1w9kAKw=="], + + "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.60.0", "", { "os": "linux", "cpu": "none" }, "sha512-DGzdJK9kyJ+B78MCkWeGnpXJ91tK/iKA6HwHxF4TAlPIY7GXEvMe8hBFRgdrR9Ly4qebR/7gfUs9y2IoaVEyog=="], + + "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.60.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-RwpnLsqC8qbS8z1H1AxBA1H6qknR4YpPR9w2XX0vo2Sz10miu57PkNcnHVaZkbqyw/kUWfKMI73jhmfi9BRMUQ=="], + + "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.60.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-Z8pPf54Ly3aqtdWC3G4rFigZgNvd+qJlOE52fmko3KST9SoGfAdSRCwyoyG05q1HrrAblLbk1/PSIV+80/pxLg=="], + + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.60.0", "", { "os": "linux", "cpu": "none" }, "sha512-3a3qQustp3COCGvnP4SvrMHnPQ9d1vzCakQVRTliaz8cIp/wULGjiGpbcqrkv0WrHTEp8bQD/B3HBjzujVWLOA=="], + + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.60.0", "", { "os": "linux", "cpu": "none" }, "sha512-pjZDsVH/1VsghMJ2/kAaxt6dL0psT6ZexQVrijczOf+PeP2BUqTHYejk3l6TlPRydggINOeNRhvpLa0AYpCWSQ=="], + + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.60.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-3ObQs0BhvPgiUVZrN7gqCSvmFuMWvWvsjG5ayJ3Lraqv+2KhOsp+pUbigqbeWqueGIsnn+09HBw27rJ+gYK4VQ=="], + + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.60.0", "", { "os": "linux", "cpu": "x64" }, "sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg=="], + + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.60.0", "", { "os": "linux", "cpu": "x64" }, "sha512-k09oiRCi/bHU9UVFqD17r3eJR9bn03TyKraCrlz5ULFJGdJGi7VOmm9jl44vOJvRJ6P7WuBi/s2A97LxxHGIdw=="], + + "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.60.0", "", { "os": "openbsd", "cpu": "x64" }, "sha512-1o/0/pIhozoSaDJoDcec+IVLbnRtQmHwPV730+AOD29lHEEo4F5BEUB24H0OBdhbBBDwIOSuf7vgg0Ywxdfiiw=="], + + "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.60.0", "", { "os": "none", "cpu": "arm64" }, "sha512-pESDkos/PDzYwtyzB5p/UoNU/8fJo68vcXM9ZW2V0kjYayj1KaaUfi1NmTUTUpMn4UhU4gTuK8gIaFO4UGuMbA=="], + + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.60.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-hj1wFStD7B1YBeYmvY+lWXZ7ey73YGPcViMShYikqKT1GtstIKQAtfUI6yrzPjAy/O7pO0VLXGmUVWXQMaYgTQ=="], + + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.60.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-SyaIPFoxmUPlNDq5EHkTbiKzmSEmq/gOYFI/3HHJ8iS/v1mbugVa7dXUzcJGQfoytp9DJFLhHH4U3/eTy2Bq4w=="], + + "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.60.0", "", { "os": "win32", "cpu": "x64" }, "sha512-RdcryEfzZr+lAr5kRm2ucN9aVlCCa2QNq4hXelZxb8GG0NJSazq44Z3PCCc8wISRuCVnGs0lQJVX5Vp6fKA+IA=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.60.0", "", { "os": "win32", "cpu": "x64" }, "sha512-PrsWNQ8BuE00O3Xsx3ALh2Df8fAj9+cvvX9AIA6o4KpATR98c9mud4XtDWVvsEuyia5U4tVSTKygawyJkjm60w=="], + + "@sapphire/async-queue": ["@sapphire/async-queue@1.5.5", "", {}, "sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg=="], + + "@sapphire/shapeshift": ["@sapphire/shapeshift@4.0.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "lodash": "^4.17.21" } }, "sha512-d9dUmWVA7MMiKobL3VpLF8P2aeanRTu6ypG2OIaEv/ZHH/SUQ2iHOVyi5wAPjQ+HmnMuL0whK9ez8I/raWbtIg=="], + + "@sapphire/snowflake": ["@sapphire/snowflake@3.5.3", "", {}, "sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ=="], + + "@snazzah/davey": ["@snazzah/davey@0.1.10", "", { "optionalDependencies": { "@snazzah/davey-android-arm-eabi": "0.1.10", "@snazzah/davey-android-arm64": "0.1.10", "@snazzah/davey-darwin-arm64": "0.1.10", "@snazzah/davey-darwin-x64": "0.1.10", "@snazzah/davey-freebsd-x64": "0.1.10", "@snazzah/davey-linux-arm-gnueabihf": "0.1.10", "@snazzah/davey-linux-arm64-gnu": "0.1.10", "@snazzah/davey-linux-arm64-musl": "0.1.10", "@snazzah/davey-linux-x64-gnu": "0.1.10", "@snazzah/davey-linux-x64-musl": "0.1.10", "@snazzah/davey-wasm32-wasi": "0.1.10", "@snazzah/davey-win32-arm64-msvc": "0.1.10", "@snazzah/davey-win32-ia32-msvc": "0.1.10", "@snazzah/davey-win32-x64-msvc": "0.1.10" } }, "sha512-J5f7vV5/tnj0xGnqufFRd6qiWn3FcR3iXjpjpEmO2Ok+Io0AASkMaZ3I39TsL45as0Qo5bq9wWuamFQ77PjJ+g=="], + + "@snazzah/davey-android-arm-eabi": ["@snazzah/davey-android-arm-eabi@0.1.10", "", { "os": "android", "cpu": "arm" }, "sha512-7bwHxSNEI2wVXOT6xnmpnO9SHb2xwAnf9oEdL45dlfVHTgU1Okg5rwGwRvZ2aLVFFbTyecfC8EVZyhpyTkjLSw=="], + + "@snazzah/davey-android-arm64": ["@snazzah/davey-android-arm64@0.1.10", "", { "os": "android", "cpu": "arm64" }, "sha512-68WUf2LQwQTP9MgPcCqTWwJztJSIk0keGfF2Y/b+MihSDh29fYJl7C0rbz69aUrVCvCC2lYkB/46P8X1kBz7yg=="], + + "@snazzah/davey-darwin-arm64": ["@snazzah/davey-darwin-arm64@0.1.10", "", { "os": "darwin", "cpu": "arm64" }, "sha512-nYC+DWCGUC1jUGEenCNQE/jJpL/02m0ebY/NvTCQbul5ktI/ShVzgA3kzssEhZvhf6jbH048Rs39wDhp/b24Jg=="], + + "@snazzah/davey-darwin-x64": ["@snazzah/davey-darwin-x64@0.1.10", "", { "os": "darwin", "cpu": "x64" }, "sha512-0q5Rrcs+O9sSSnPX+A3R3djEQs2nTAtMe5N3lApO6lZas/QNMl6wkEWCvTbDc2cfAYBMSk2jgc1awlRXi4LX3Q=="], + + "@snazzah/davey-freebsd-x64": ["@snazzah/davey-freebsd-x64@0.1.10", "", { "os": "freebsd", "cpu": "x64" }, "sha512-/Gq5YDD6Oz8iBqVJLswUnetCv9JCRo1quYX5ujzpAG8zPCNItZo4g4h5p9C+h4Yoay2quWBYhoaVqQKT96bm8g=="], + + "@snazzah/davey-linux-arm-gnueabihf": ["@snazzah/davey-linux-arm-gnueabihf@0.1.10", "", { "os": "linux", "cpu": "arm" }, "sha512-0Z7Vrt0WIbgxws9CeHB9qlueYJlvltI44rUuZmysdi70UcHGxlr7nE3MnzYCr9nRWRegohn8EQPWHMKMDJH2GA=="], + + "@snazzah/davey-linux-arm64-gnu": ["@snazzah/davey-linux-arm64-gnu@0.1.10", "", { "os": "linux", "cpu": "arm64" }, "sha512-xhZQycn4QB+qXhqm/QmZ+kb9MHMXcbjjoPfvcIL4WMQXFG/zUWHW8EiBk7ZTEGMOpeab3F9D1+MlgumglYByUQ=="], + + "@snazzah/davey-linux-arm64-musl": ["@snazzah/davey-linux-arm64-musl@0.1.10", "", { "os": "linux", "cpu": "arm64" }, "sha512-pudzQCP9rZItwW4qHHvciMwtNd9kWH4l73g6Id1LRpe6sc8jiFBV7W+YXITj2PZbI0by6XPfkRP6Dk5IkGOuAw=="], + + "@snazzah/davey-linux-x64-gnu": ["@snazzah/davey-linux-x64-gnu@0.1.10", "", { "os": "linux", "cpu": "x64" }, "sha512-DC8qRmk+xJEFNqjxKB46cETKeDQqgUqE5p39KXS2k6Vl/XTi8pw8pXOxrPfYte5neoqlWAVQzbxuLnwpyRJVEQ=="], + + "@snazzah/davey-linux-x64-musl": ["@snazzah/davey-linux-x64-musl@0.1.10", "", { "os": "linux", "cpu": "x64" }, "sha512-wPR5/2QmsF7sR0WUaCwbk4XI3TLcxK9PVK8mhgcAYyuRpbhcVgNGWXs8ulcyMSXve5pFRJAFAuMTGCEb014peg=="], + + "@snazzah/davey-wasm32-wasi": ["@snazzah/davey-wasm32-wasi@0.1.10", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.1.1" }, "cpu": "none" }, "sha512-SfQavU+eKTDbRmPeLRodrVSfsWq25PYTmH1nIZW3B27L6IkijzjXZZuxiU1ZG1gdI5fB7mwXrOTtx34t+vAG7Q=="], + + "@snazzah/davey-win32-arm64-msvc": ["@snazzah/davey-win32-arm64-msvc@0.1.10", "", { "os": "win32", "cpu": "arm64" }, "sha512-Raafk53smYs67wZCY9bQXHXzbaiRMS5QCdjTdin3D9fF5A06T/0Zv1z7/YnaN+O3GSL/Ou3RvynF7SziToYiFQ=="], + + "@snazzah/davey-win32-ia32-msvc": ["@snazzah/davey-win32-ia32-msvc@0.1.10", "", { "os": "win32", "cpu": "ia32" }, "sha512-pAs43l/DiZ+icqBwxIwNePzuYxFM1ZblVuf7t6vwwSLxvova7vnREnU7qDVjbc5/YTUHOsqYy3S6TpZMzDo2lw=="], + + "@snazzah/davey-win32-x64-msvc": ["@snazzah/davey-win32-x64-msvc@0.1.10", "", { "os": "win32", "cpu": "x64" }, "sha512-kr6148VVBoUT4CtD+5hYshTFRny7R/xQZxXFhFc0fYjtmdMVM8Px9M91olg1JFNxuNzdfMfTufR58Q3wfBocug=="], + + "@tokenizer/token": ["@tokenizer/token@0.3.0", "", {}, "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="], + + "@tryforge/forgescript": ["@tryforge/forgescript@2.6.0", "", { "dependencies": { "chalk": "^4.1.2", "discord.js": "^14.25.1", "ms-utility": "^3.3.0", "tiny-typed-emitter": "^2.1.0", "undici": "^5.23.0" } }, "sha512-S+HR3uo3959GW94GnFLLop5xJI+8rJ30Nx43662SDHmJ3il1r5VJQYdD8lso3mfhVv0pAqY74mTJwhXx7TQ7ag=="], + + "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + + "@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + + "@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="], + + "@vladfrangu/async_event_emitter": ["@vladfrangu/async_event_emitter@2.4.7", "", {}, "sha512-Xfe6rpCTxSxfbswi/W/Pz7zp1WWSNn4A0eW4mLkQUewCrXXtMj31lCg+iQyTkh/CkusZSq9eDflu7tjEDXUY6g=="], + + "@web-scrobbler/metadata-filter": ["@web-scrobbler/metadata-filter@3.2.0", "", {}, "sha512-K2Wkq9AOJkgj4Hk9g0flKnNWYkJy1GTPpHTgpNLU5OXaXgqPKLyrtb62M1cIxMN3ESH6XGvPKM92VEl/Gc3Rog=="], + + "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], + + "acorn": ["acorn@8.16.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw=="], + + "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], + + "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "any-promise": ["any-promise@1.3.0", "", {}, "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="], + + "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + + "array-union": ["array-union@2.1.0", "", {}, "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="], + + "ascii-table3": ["ascii-table3@0.9.0", "", { "dependencies": { "printable-characters": "^1.0.42" } }, "sha512-/JcvVCQRTVQHwLI8TCxSeOS9AcCV01MbCJC4plSP5ulygJH+D30lz85nvMcER5k+qoX2fJ1C/i13Zo1/eoMGTw=="], + + "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], + + "axios": ["axios@0.27.2", "", { "dependencies": { "follow-redirects": "^1.14.9", "form-data": "^4.0.0" } }, "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ=="], + + "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], + + "bgutils-js": ["bgutils-js@3.2.0", "", {}, "sha512-CacO15JvxbclbLeCAAm9DETGlLuisRGWpPigoRvNsccSCPEC4pwYwA2g2x/pv7Om/sk79d4ib35V5HHmxPBpDg=="], + + "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], + + "binary-version": ["binary-version@7.1.0", "", { "dependencies": { "execa": "^8.0.1", "find-versions": "^6.0.0" } }, "sha512-Iy//vPc3ANPNlIWd242Npqc8MK0a/i4kVcHDlDA6HNMv5zMxz4ulIFhOSYJVKw/8AbHdHy0CnGYEt1QqSXxPsw=="], + + "binary-version-check": ["binary-version-check@6.1.0", "", { "dependencies": { "binary-version": "^7.1.0", "semver": "^7.6.0", "semver-truncate": "^3.0.0" } }, "sha512-REKdLKmuViV2WrtWXvNSiPX04KbIjfUV3Cy8batUeOg+FtmowavzJorfFhWq95cVJzINnL/44ixP26TrdJZACA=="], + + "blowfish-node": ["blowfish-node@1.1.4", "", {}, "sha512-Iahpxc/cutT0M0tgwV5goklB+EzDuiYLgwJg050AmUG2jSIOpViWMLdnRgBxzZuNfswAgHSUiIdvmNdgL2v6DA=="], + + "boolbase": ["boolbase@1.0.0", "", {}, "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="], + + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + + "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], + + "bundle-require": ["bundle-require@5.1.0", "", { "dependencies": { "load-tsconfig": "^0.2.3" }, "peerDependencies": { "esbuild": ">=0.18" } }, "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA=="], + + "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], + + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], + + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "cheerio": ["cheerio@1.2.0", "", { "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", "domhandler": "^5.0.3", "domutils": "^3.2.2", "encoding-sniffer": "^0.2.1", "htmlparser2": "^10.1.0", "parse5": "^7.3.0", "parse5-htmlparser2-tree-adapter": "^7.1.0", "parse5-parser-stream": "^7.1.2", "undici": "^7.19.0", "whatwg-mimetype": "^4.0.0" } }, "sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg=="], + + "cheerio-select": ["cheerio-select@2.1.0", "", { "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", "css-what": "^6.1.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.0.1" } }, "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g=="], + + "chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], + + "commander": ["commander@9.5.0", "", {}, "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ=="], + + "confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], + + "consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], + + "convert-hrtime": ["convert-hrtime@5.0.0", "", {}, "sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg=="], + + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + + "css-select": ["css-select@5.2.2", "", { "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" } }, "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw=="], + + "css-what": ["css-what@6.2.2", "", {}, "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA=="], + + "cssstyle": ["cssstyle@4.6.0", "", { "dependencies": { "@asamuzakjp/css-color": "^3.2.0", "rrweb-cssom": "^0.8.0" } }, "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg=="], + + "dargs": ["dargs@7.0.0", "", {}, "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg=="], + + "data-uri-to-buffer": ["data-uri-to-buffer@4.0.1", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="], + + "data-urls": ["data-urls@5.0.0", "", { "dependencies": { "whatwg-mimetype": "^4.0.0", "whatwg-url": "^14.0.0" } }, "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg=="], + + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "debug-logfmt": ["debug-logfmt@1.4.10", "", { "dependencies": { "@kikobeats/time-span": "~1.0.5", "null-prototype-object": "~1.2.2", "pretty-ms": "~7.0.1" } }, "sha512-+8rNw7zjXNRntMoJyp5211Y4W3nkhCCMBO7qe8Pht/9NscMklHwyTXMLUzk84YUDSksg87XRmK/LCzJdJ4eU7Q=="], + + "decimal.js": ["decimal.js@10.6.0", "", {}, "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg=="], + + "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], + + "dir-glob": ["dir-glob@3.0.1", "", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="], + + "discord-api-types": ["discord-api-types@0.38.42", "", {}, "sha512-qs1kya7S84r5RR8m9kgttywGrmmoHaRifU1askAoi+wkoSefLpZP6aGXusjNw5b0jD3zOg3LTwUa3Tf2iHIceQ=="], + + "discord-player": ["discord-player@7.2.0", "", { "dependencies": { "@discord-player/equalizer": "^7.2.0", "@discord-player/ffmpeg": "^7.2.0", "@discord-player/utils": "^7.2.0", "@web-scrobbler/metadata-filter": "^3.1.0", "discord-voip": "^7.2.0", "libsodium-wrappers": "^0.7.13" }, "peerDependencies": { "@discord-player/extractor": "^7.2.0", "mediaplex": "^1" } }, "sha512-0UCo/IKZjEqkv3DLdEWh2jQ0hyzqaTxm25yCCG3NQpiRfCetaRVPbjdTgo4/4YOdNcZEypIPZtkE6lJxpkbtnA=="], + + "discord-player-deezer": ["discord-player-deezer@2.6.0", "", { "dependencies": { "@mithron/deezer-music-metadata": "^1.0.3", "blowfish-node": "^1.1.4" } }, "sha512-eFdOzbMWwG8iDCkLhehyXrEjG2BtmXBJfHWVmqfsVlGkB4DiBgPNjTjpEGvfBbo3ArgCsT+VxJuSCgog7TMvWg=="], + + "discord-player-soundcloud": ["discord-player-soundcloud@1.0.7", "", { "dependencies": { "soundcloud.ts": "^0.6.3" } }, "sha512-LWXoW/BXPa0lr4nd8NMLIQynbfWTiWLKYhd8ranif5ji1SPdynq7U5ogCR+14jHPmn0VJyx4DAwbi8XrW9yMlA=="], + + "discord-player-spotify": ["discord-player-spotify@1.1.9", "", { "dependencies": { "acorn": "^8.16.0", "node-html-parser": "^7.0.1", "otpauth": "^9.3.6" } }, "sha512-LASyWjB/645/JyPLiN1gVKVjRrwDm6gHYgbG8ekq5dVWnsBQ1AU8B377b0kBnTuP2VzNl/bNO6wHctaNtI+n9A=="], + + "discord-player-youtubei": ["discord-player-youtubei@2.0.0-dev.2", "", { "dependencies": { "bgutils-js": "^3.2.0", "jsdom": "^26.1.0", "tiny-typed-emitter": "^2.1.0", "undici": "^7.1.0", "youtube-dl-exec": "^3.1.3", "youtubei.js": "^16.0.1" }, "bin": { "discord-player-youtubei": "bin/index.js" } }, "sha512-GMePJAA8quiGcKsgA3XIqb1GDhbKxlLcJAhPpQqFyPoJbZlQeTqJakN/yGWN4sQJzcx8aiMOnXqe3cSuRD3ctQ=="], + + "discord-voip": ["discord-voip@7.2.0", "", { "dependencies": { "@discord-player/ffmpeg": "^7.2.0", "@discord-player/opus": "^7.2.0", "@discord-player/utils": "^7.2.0", "@types/ws": "^8.5.10", "tsup": "^8.3.5", "typescript": "^5.5.4" } }, "sha512-bteX8XrSSqltsjV13jd6uTr5qVZ+c8yjnx2hV/AhvxgA/9qJ2i43Hkrs4qisw/o94s23Ni3tXXQohvu0EzB4+w=="], + + "discord.js": ["discord.js@14.25.1", "", { "dependencies": { "@discordjs/builders": "^1.13.0", "@discordjs/collection": "1.5.3", "@discordjs/formatters": "^0.6.2", "@discordjs/rest": "^2.6.0", "@discordjs/util": "^1.2.0", "@discordjs/ws": "^1.2.3", "@sapphire/snowflake": "3.5.3", "discord-api-types": "^0.38.33", "fast-deep-equal": "3.1.3", "lodash.snakecase": "4.1.1", "magic-bytes.js": "^1.10.0", "tslib": "^2.6.3", "undici": "6.21.3" } }, "sha512-2l0gsPOLPs5t6GFZfQZKnL1OJNYFcuC/ETWsW4VtKVD/tg4ICa9x+jb9bkPffkMdRpRpuUaO/fKkHCBeiCKh8g=="], + + "dom-serializer": ["dom-serializer@2.0.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" } }, "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg=="], + + "domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="], + + "domhandler": ["domhandler@5.0.3", "", { "dependencies": { "domelementtype": "^2.3.0" } }, "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w=="], + + "domutils": ["domutils@3.2.2", "", { "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" } }, "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw=="], + + "dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], + + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + + "encoding-sniffer": ["encoding-sniffer@0.2.1", "", { "dependencies": { "iconv-lite": "^0.6.3", "whatwg-encoding": "^3.1.1" } }, "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw=="], + + "entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], + + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + + "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], + + "esbuild": ["esbuild@0.27.4", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.4", "@esbuild/android-arm": "0.27.4", "@esbuild/android-arm64": "0.27.4", "@esbuild/android-x64": "0.27.4", "@esbuild/darwin-arm64": "0.27.4", "@esbuild/darwin-x64": "0.27.4", "@esbuild/freebsd-arm64": "0.27.4", "@esbuild/freebsd-x64": "0.27.4", "@esbuild/linux-arm": "0.27.4", "@esbuild/linux-arm64": "0.27.4", "@esbuild/linux-ia32": "0.27.4", "@esbuild/linux-loong64": "0.27.4", "@esbuild/linux-mips64el": "0.27.4", "@esbuild/linux-ppc64": "0.27.4", "@esbuild/linux-riscv64": "0.27.4", "@esbuild/linux-s390x": "0.27.4", "@esbuild/linux-x64": "0.27.4", "@esbuild/netbsd-arm64": "0.27.4", "@esbuild/netbsd-x64": "0.27.4", "@esbuild/openbsd-arm64": "0.27.4", "@esbuild/openbsd-x64": "0.27.4", "@esbuild/openharmony-arm64": "0.27.4", "@esbuild/sunos-x64": "0.27.4", "@esbuild/win32-arm64": "0.27.4", "@esbuild/win32-ia32": "0.27.4", "@esbuild/win32-x64": "0.27.4" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ=="], + + "event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="], + + "events": ["events@3.3.0", "", {}, "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q=="], + + "execa": ["execa@8.0.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", "human-signals": "^5.0.0", "is-stream": "^3.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^5.1.0", "onetime": "^6.0.0", "signal-exit": "^4.1.0", "strip-final-newline": "^3.0.0" } }, "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg=="], + + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + + "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], + + "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], + + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + + "fetch-blob": ["fetch-blob@3.2.0", "", { "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" } }, "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ=="], + + "file-type": ["file-type@16.5.4", "", { "dependencies": { "readable-web-to-node-stream": "^3.0.0", "strtok3": "^6.2.4", "token-types": "^4.1.1" } }, "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw=="], + + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + + "find-versions": ["find-versions@6.0.0", "", { "dependencies": { "semver-regex": "^4.0.5", "super-regex": "^1.0.0" } }, "sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA=="], + + "fix-dts-default-cjs-exports": ["fix-dts-default-cjs-exports@1.0.1", "", { "dependencies": { "magic-string": "^0.30.17", "mlly": "^1.7.4", "rollup": "^4.34.8" } }, "sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg=="], + + "follow-redirects": ["follow-redirects@1.15.11", "", {}, "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="], + + "form-data": ["form-data@4.0.5", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w=="], + + "formdata-polyfill": ["formdata-polyfill@4.0.10", "", { "dependencies": { "fetch-blob": "^3.1.2" } }, "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "function-timeout": ["function-timeout@1.0.2", "", {}, "sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA=="], + + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + + "get-stream": ["get-stream@8.0.1", "", {}, "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA=="], + + "get-tsconfig": ["get-tsconfig@4.13.7", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q=="], + + "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "globby": ["globby@11.1.0", "", { "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" } }, "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g=="], + + "googlevideo": ["googlevideo@4.0.4", "", { "dependencies": { "@bufbuild/protobuf": "^2.0.0" } }, "sha512-S/rfuoPBI+qXCEUPJeVhXsHoISMgVhOz8hHSpGWa0OztfHhh+g9EKaEcqAb/+ttO7meoNQNqIy9dfIpz7HPc4g=="], + + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + + "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], + + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + + "he": ["he@1.2.0", "", { "bin": { "he": "bin/he" } }, "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="], + + "himalaya": ["himalaya@1.1.1", "", {}, "sha512-mJLY5tErGWtsw8hO2fJ2vK4IpG6S1AIgVkduRo4FqFJhgI2H3XLzgemRemk45zcnFyxNNpOfrIDle2KcnJM0lA=="], + + "html-encoding-sniffer": ["html-encoding-sniffer@4.0.0", "", { "dependencies": { "whatwg-encoding": "^3.1.1" } }, "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ=="], + + "htmlparser2": ["htmlparser2@10.1.0", "", { "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", "domutils": "^3.2.2", "entities": "^7.0.1" } }, "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ=="], + + "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], + + "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], + + "human-signals": ["human-signals@5.0.0", "", {}, "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ=="], + + "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + + "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], + + "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], + + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + + "is-potential-custom-element-name": ["is-potential-custom-element-name@1.0.1", "", {}, "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="], + + "is-stream": ["is-stream@3.0.0", "", {}, "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA=="], + + "is-unix": ["is-unix@2.0.14", "", {}, "sha512-ZE+Iq0h1pxZu/IGsBKobH5PZ0L3ylv7WHEmKiRG8kEzue6f+w0i3ckwnDY7Ckej2jjq1c7NDYljEkNqOxv4w9A=="], + + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "isomorphic-unfetch": ["isomorphic-unfetch@4.0.2", "", { "dependencies": { "node-fetch": "^3.2.0", "unfetch": "^5.0.0" } }, "sha512-1Yd+CF/7al18/N2BDbsLBcp6RO3tucSW+jcLq24dqdX5MNbCNTw1z4BsGsp4zNmjr/Izm2cs/cEqZPp4kvWSCA=="], + + "joycon": ["joycon@3.1.1", "", {}, "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw=="], + + "jsdom": ["jsdom@26.1.0", "", { "dependencies": { "cssstyle": "^4.2.1", "data-urls": "^5.0.0", "decimal.js": "^10.5.0", "html-encoding-sniffer": "^4.0.0", "http-proxy-agent": "^7.0.2", "https-proxy-agent": "^7.0.6", "is-potential-custom-element-name": "^1.0.1", "nwsapi": "^2.2.16", "parse5": "^7.2.1", "rrweb-cssom": "^0.8.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", "tough-cookie": "^5.1.1", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", "whatwg-encoding": "^3.1.1", "whatwg-mimetype": "^4.0.0", "whatwg-url": "^14.1.1", "ws": "^8.18.0", "xml-name-validator": "^5.0.0" }, "peerDependencies": { "canvas": "^3.0.0" }, "optionalPeers": ["canvas"] }, "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg=="], + + "libsodium": ["libsodium@0.7.16", "", {}, "sha512-3HrzSPuzm6Yt9aTYCDxYEG8x8/6C0+ag655Y7rhhWZM9PT4NpdnbqlzXhGZlDnkgR6MeSTnOt/VIyHLs9aSf+Q=="], + + "libsodium-wrappers": ["libsodium-wrappers@0.7.16", "", { "dependencies": { "libsodium": "^0.7.16" } }, "sha512-Gtr/WBx4dKjvRL1pvfwZqu7gO6AfrQ0u9vFL+kXihtHf6NfkROR8pjYWn98MFDI3jN19Ii1ZUfPR9afGiPyfHg=="], + + "lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], + + "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], + + "load-tsconfig": ["load-tsconfig@0.2.5", "", {}, "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg=="], + + "lodash": ["lodash@4.17.23", "", {}, "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="], + + "lodash.snakecase": ["lodash.snakecase@4.1.1", "", {}, "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw=="], + + "lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + + "magic-bytes.js": ["magic-bytes.js@1.13.0", "", {}, "sha512-afO2mnxW7GDTXMm5/AoN1WuOcdoKhtgXjIvHmobqTD1grNplhGdv3PFOyjCVmrnOZBIT/gD/koDKpYG+0mvHcg=="], + + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + + "make-asynchronous": ["make-asynchronous@1.1.0", "", { "dependencies": { "p-event": "^6.0.0", "type-fest": "^4.6.0", "web-worker": "^1.5.0" } }, "sha512-ayF7iT+44LXdxJLTrTd3TLQpFDDvPCBxXxbv+pMUSuHA5Q8zyAfwkRP6aHHwNVFBUFWtxAHqwNJxF8vMZLAbVg=="], + + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + + "mediaplex": ["mediaplex@1.0.0", "", { "optionalDependencies": { "mediaplex-android-arm-eabi": "1.0.0", "mediaplex-android-arm64": "1.0.0", "mediaplex-darwin-arm64": "1.0.0", "mediaplex-darwin-universal": "1.0.0", "mediaplex-darwin-x64": "1.0.0", "mediaplex-freebsd-x64": "1.0.0", "mediaplex-linux-arm-gnueabihf": "1.0.0", "mediaplex-linux-arm-musleabihf": "1.0.0", "mediaplex-linux-arm64-gnu": "1.0.0", "mediaplex-linux-arm64-musl": "1.0.0", "mediaplex-linux-riscv64-gnu": "1.0.0", "mediaplex-linux-x64-gnu": "1.0.0", "mediaplex-linux-x64-musl": "1.0.0", "mediaplex-win32-arm64-msvc": "1.0.0", "mediaplex-win32-ia32-msvc": "1.0.0", "mediaplex-win32-x64-msvc": "1.0.0" } }, "sha512-2vj7Px34rNUmHKilpAagU7jNhKIyoG8/wZ/cvJQzUdhvul8ef03NOK3No3LWVZEF1Pi27VSFOwBvawli/B86hA=="], + + "mediaplex-android-arm-eabi": ["mediaplex-android-arm-eabi@1.0.0", "", { "os": "android", "cpu": "arm" }, "sha512-/Ec33NNTeYxDLePRewOnjt82yVjwFy2monHk4OFk/wov7gDXvNCwSsLVRzgQgVQ2QAxmEND75Cx1nlyMWRjfFQ=="], + + "mediaplex-android-arm64": ["mediaplex-android-arm64@1.0.0", "", { "os": "android", "cpu": "arm64" }, "sha512-qisiHCK6HiRhw9qKr99yGFqtJHV9w///Vg5sc3RCA5FpEZOgK/EPkE3XEyVaBXux6XzU9lF5KeCfHuWW/rZEGQ=="], + + "mediaplex-darwin-arm64": ["mediaplex-darwin-arm64@1.0.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-uux5Lb2RfE+51Xz+wf0fwBpx14k66eexeMjw2IWpEK5LMIU8QI1AU+ag/ocIxEf6yIdu/Dj8b4zaxxfr2B7usw=="], + + "mediaplex-darwin-universal": ["mediaplex-darwin-universal@1.0.0", "", { "os": "darwin" }, "sha512-dwFIEZHuH7zsnAhAqP77Pc7i/YWMgXnDT2hBxF9/K5/wGxlV1HtdpJfY9Pug3A5SiCpb9YwQy5VGhW0se/aqIw=="], + + "mediaplex-darwin-x64": ["mediaplex-darwin-x64@1.0.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-pAiCp8vPNb1b103v2xV3x6W9SQZifg6+5TGZOczlltpEbANWSy5112MqEwCM3XBohOHcal1zLC2qxdaHM8edhw=="], + + "mediaplex-freebsd-x64": ["mediaplex-freebsd-x64@1.0.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-9lRsE3GumCRODm6OWBtfRyFCgC5mfLPVl+4miR52/+PVw2ABrdV+lnz2cKZDUfnmwxDGV1fTG6QMxs5D3xcuZQ=="], + + "mediaplex-linux-arm-gnueabihf": ["mediaplex-linux-arm-gnueabihf@1.0.0", "", { "os": "linux", "cpu": "arm" }, "sha512-mDBD2d/87CdmR4P0IUYyznzEmBoar7p4cbQiyT44voZ8LIG9w0RWHpP1r5zprbnt73YRrZwJTYhurF7mVixgRQ=="], + + "mediaplex-linux-arm-musleabihf": ["mediaplex-linux-arm-musleabihf@1.0.0", "", { "os": "linux", "cpu": "arm" }, "sha512-Jzu8hRxS9vjbgRh92sfPV++wHHUHVGMRmHS0YAxzLso73IAVKMArhsVIEcTDVVN4/yF4D0HzD63AX6M3dgeoCA=="], + + "mediaplex-linux-arm64-gnu": ["mediaplex-linux-arm64-gnu@1.0.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-y6NXkTtjFSDqd6cXliZ8QYcQuHcVCk9MYHIHRNpPJU30M0CUvFx5Itgaemr/Si4Pl+VbU+UGHsoY7O1yoT7xEQ=="], + + "mediaplex-linux-arm64-musl": ["mediaplex-linux-arm64-musl@1.0.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-7bpJG5wILQXLAEUAcFafMtlZmNZXKRFXaiMGKWSj29YZnyEwSHRiQEyemxu72SEYQibfwyq9Ah830pZAcfnIsg=="], + + "mediaplex-linux-riscv64-gnu": ["mediaplex-linux-riscv64-gnu@1.0.0", "", { "os": "linux", "cpu": "none" }, "sha512-p0m6R5O/jSg3w6u7LCw2bwCDeXKKeYEmIqy9ORvOVZT6Cin96ojhj6ELj8/spRh8Uox1DUxiPkBJrTEzeNWugA=="], + + "mediaplex-linux-x64-gnu": ["mediaplex-linux-x64-gnu@1.0.0", "", { "os": "linux", "cpu": "x64" }, "sha512-8piBl1DmEeRtElr+aG8OgC7cszzhQN8jGh+ClB6FKIZ2uiRf9SQ9tWH4hsE+qm17SamOekiibG5kXDLNAtPrtg=="], + + "mediaplex-linux-x64-musl": ["mediaplex-linux-x64-musl@1.0.0", "", { "os": "linux", "cpu": "x64" }, "sha512-9hZvUDxPHIuFI+Y4bT3io/TnDK1fnXbfAMWhObWd5qx7YyZJcvgS2M4p0x9a57dZnLSPc7sbNov1tQTqMm03RQ=="], + + "mediaplex-win32-arm64-msvc": ["mediaplex-win32-arm64-msvc@1.0.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-R2cQlKR+AjbafdtVnyPftkALxeam4XPEanT5SBo/IO1WmglC5MzppqHm8Gto5NleE16AqXHRPanQoi53fK49xg=="], + + "mediaplex-win32-ia32-msvc": ["mediaplex-win32-ia32-msvc@1.0.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-CWvcvHw4x0moo2gJeDZEbar39TbCeZ0bV3Vu0n+DWzFEDxl5p3iIeZqlDsHbSvNQeU0iKVCQOgatxvUly3E/4g=="], + + "mediaplex-win32-x64-msvc": ["mediaplex-win32-x64-msvc@1.0.0", "", { "os": "win32", "cpu": "x64" }, "sha512-yocvA647y6kAgBLpjllVjmp6ayvaBuqwrF+KhQnUnXbGH8celV0clJw9y7Ca8e38v89Yj4C73KpHxwGBk0sGqQ=="], + + "merge-stream": ["merge-stream@2.0.0", "", {}, "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="], + + "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], + + "meriyah": ["meriyah@6.1.4", "", {}, "sha512-Sz8FzjzI0kN13GK/6MVEsVzMZEPvOhnmmI1lU5+/1cGOiK3QUahntrNNtdVeihrO7t9JpoH75iMNXg6R6uWflQ=="], + + "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + + "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + + "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + + "mimic-fn": ["mimic-fn@4.0.0", "", {}, "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw=="], + + "mlly": ["mlly@1.8.2", "", { "dependencies": { "acorn": "^8.16.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", "ufo": "^1.6.3" } }, "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "ms-utility": ["ms-utility@3.3.0", "", {}, "sha512-PM1brH9z25ICcU17rK8yLwjH5sekCHs1xiftUTKmkoSlBY+F/l7G+zyUMmZ148SkVwOPb0qDGZgawKvELJ+klQ=="], + + "mylas": ["mylas@2.1.14", "", {}, "sha512-BzQguy9W9NJgoVn2mRWzbFrFWWztGCcng2QI9+41frfk+Athwgx3qhqhvStz7ExeUUu7Kzw427sNzHpEZNINog=="], + + "mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="], + + "node-domexception": ["node-domexception@1.0.0", "", {}, "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="], + + "node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="], + + "node-html-parser": ["node-html-parser@7.1.0", "", { "dependencies": { "css-select": "^5.1.0", "he": "1.2.0" } }, "sha512-iJo8b2uYGT40Y8BTyy5ufL6IVbN8rbm/1QK2xffXU/1a/v3AAa0d1YAoqBNYqaS4R/HajkWIpIfdE6KcyFh1AQ=="], + + "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + + "npm-run-path": ["npm-run-path@5.3.0", "", { "dependencies": { "path-key": "^4.0.0" } }, "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ=="], + + "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], + + "null-prototype-object": ["null-prototype-object@1.2.6", "", {}, "sha512-m+HuHAqaOiqlxVAzI3GtRgS4JIk3aAZ5RbkYxxPiACXyQZzS5uxjOXMASlWNdPYZ/5d4/+YclUlI+XXNlyN7Jg=="], + + "nwsapi": ["nwsapi@2.2.23", "", {}, "sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ=="], + + "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], + + "onetime": ["onetime@6.0.0", "", { "dependencies": { "mimic-fn": "^4.0.0" } }, "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ=="], + + "otpauth": ["otpauth@9.5.0", "", { "dependencies": { "@noble/hashes": "2.0.1" } }, "sha512-Ldhc6UYl4baR5toGr8nfKC+L/b8/RgHKoIixAebgoNGzUUCET02g04rMEZ2ZsPfeVQhMHcuaOgb28nwMr81zCA=="], + + "p-event": ["p-event@6.0.1", "", { "dependencies": { "p-timeout": "^6.1.2" } }, "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w=="], + + "p-timeout": ["p-timeout@6.1.4", "", {}, "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg=="], + + "parse-ms": ["parse-ms@2.1.0", "", {}, "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA=="], + + "parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "^6.0.0" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], + + "parse5-htmlparser2-tree-adapter": ["parse5-htmlparser2-tree-adapter@7.1.0", "", { "dependencies": { "domhandler": "^5.0.3", "parse5": "^7.0.0" } }, "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g=="], + + "parse5-parser-stream": ["parse5-parser-stream@7.1.2", "", { "dependencies": { "parse5": "^7.0.0" } }, "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow=="], + + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + + "path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], + + "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], + + "peek-readable": ["peek-readable@4.1.0", "", {}, "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], + + "pirates": ["pirates@4.0.7", "", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="], + + "pkg-types": ["pkg-types@1.3.1", "", { "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", "pathe": "^2.0.1" } }, "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ=="], + + "plimit-lit": ["plimit-lit@1.6.1", "", { "dependencies": { "queue-lit": "^1.5.1" } }, "sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA=="], + + "postcss-load-config": ["postcss-load-config@6.0.1", "", { "dependencies": { "lilconfig": "^3.1.1" }, "peerDependencies": { "jiti": ">=1.21.0", "postcss": ">=8.0.9", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["jiti", "postcss", "tsx", "yaml"] }, "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g=="], + + "prettier": ["prettier@3.5.1", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-hPpFQvHwL3Qv5AdRvBFMhnKo4tYxp0ReXiPn2bxkiohEX6mBeBwEpBSQTkD458RaaDKQMYSp4hX4UtfUTA5wDw=="], + + "pretty-ms": ["pretty-ms@7.0.1", "", { "dependencies": { "parse-ms": "^2.1.0" } }, "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q=="], + + "printable-characters": ["printable-characters@1.0.42", "", {}, "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ=="], + + "process": ["process@0.11.10", "", {}, "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="], + + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + + "queue-lit": ["queue-lit@1.5.2", "", {}, "sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw=="], + + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + + "readable-stream": ["readable-stream@4.7.0", "", { "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", "events": "^3.3.0", "process": "^0.11.10", "string_decoder": "^1.3.0" } }, "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg=="], + + "readable-web-to-node-stream": ["readable-web-to-node-stream@3.0.4", "", { "dependencies": { "readable-stream": "^4.7.0" } }, "sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw=="], + + "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], + + "resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], + + "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], + + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], + + "reverbnation-scraper": ["reverbnation-scraper@2.0.0", "", { "dependencies": { "node-fetch": "^2.6.0" } }, "sha512-t1Mew5QC9QEVEry5DXyagvci2O+TgXTGoMHbNoW5NRz6LTOzK/DLHUpnrQwloX8CVX5z1a802vwHM3YgUVOvKg=="], + + "rollup": ["rollup@4.60.0", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.60.0", "@rollup/rollup-android-arm64": "4.60.0", "@rollup/rollup-darwin-arm64": "4.60.0", "@rollup/rollup-darwin-x64": "4.60.0", "@rollup/rollup-freebsd-arm64": "4.60.0", "@rollup/rollup-freebsd-x64": "4.60.0", "@rollup/rollup-linux-arm-gnueabihf": "4.60.0", "@rollup/rollup-linux-arm-musleabihf": "4.60.0", "@rollup/rollup-linux-arm64-gnu": "4.60.0", "@rollup/rollup-linux-arm64-musl": "4.60.0", "@rollup/rollup-linux-loong64-gnu": "4.60.0", "@rollup/rollup-linux-loong64-musl": "4.60.0", "@rollup/rollup-linux-ppc64-gnu": "4.60.0", "@rollup/rollup-linux-ppc64-musl": "4.60.0", "@rollup/rollup-linux-riscv64-gnu": "4.60.0", "@rollup/rollup-linux-riscv64-musl": "4.60.0", "@rollup/rollup-linux-s390x-gnu": "4.60.0", "@rollup/rollup-linux-x64-gnu": "4.60.0", "@rollup/rollup-linux-x64-musl": "4.60.0", "@rollup/rollup-openbsd-x64": "4.60.0", "@rollup/rollup-openharmony-arm64": "4.60.0", "@rollup/rollup-win32-arm64-msvc": "4.60.0", "@rollup/rollup-win32-ia32-msvc": "4.60.0", "@rollup/rollup-win32-x64-gnu": "4.60.0", "@rollup/rollup-win32-x64-msvc": "4.60.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-yqjxruMGBQJ2gG4HtjZtAfXArHomazDHoFwFFmZZl0r7Pdo7qCIXKqKHZc8yeoMgzJJ+pO6pEEHa+V7uzWlrAQ=="], + + "rrweb-cssom": ["rrweb-cssom@0.8.0", "", {}, "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw=="], + + "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], + + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + + "saxes": ["saxes@6.0.0", "", { "dependencies": { "xmlchars": "^2.2.0" } }, "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA=="], + + "semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], + + "semver-regex": ["semver-regex@4.0.5", "", {}, "sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw=="], + + "semver-truncate": ["semver-truncate@3.0.0", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg=="], + + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + + "signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + + "slash": ["slash@3.0.0", "", {}, "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="], + + "soundcloud.ts": ["soundcloud.ts@0.6.9", "", {}, "sha512-mOUpdtNFPhoz8xwoEQMLY/W6VQeXhAeoWEwaMVZozhb0qKX1IfWcXKr2LyxoDpZgOUovIb+gOx9wHQNj1YcO3w=="], + + "source-map": ["source-map@0.7.6", "", {}, "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ=="], + + "spotify-uri": ["spotify-uri@4.1.0", "", {}, "sha512-SFpBt8pQqO7DOFBsdUjv3GxGZAKYP7UqcTflfE7h3YL1lynl/6Motq7NERoJJR8eF9kXQRSpcdMmV5ou84rbng=="], + + "spotify-url-info": ["spotify-url-info@3.3.0", "", { "dependencies": { "himalaya": "~1.1.0", "spotify-uri": "~4.1.0" } }, "sha512-Oln8MPghuttL6e2e8NyQg0MilZqEbMYawKZDAMbz1NpSX+on2bEtibKVBPYKlJGU/Lxvo/qXFqydMxa0fKCmwg=="], + + "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + + "strip-final-newline": ["strip-final-newline@3.0.0", "", {}, "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw=="], + + "strtok3": ["strtok3@6.3.0", "", { "dependencies": { "@tokenizer/token": "^0.3.0", "peek-readable": "^4.1.0" } }, "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw=="], + + "sucrase": ["sucrase@3.35.1", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "tinyglobby": "^0.2.11", "ts-interface-checker": "^0.1.9" }, "bin": { "sucrase": "bin/sucrase", "sucrase-node": "bin/sucrase-node" } }, "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw=="], + + "super-regex": ["super-regex@1.1.0", "", { "dependencies": { "function-timeout": "^1.0.1", "make-asynchronous": "^1.0.1", "time-span": "^5.1.0" } }, "sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ=="], + + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "symbol-tree": ["symbol-tree@3.2.4", "", {}, "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="], + + "thenify": ["thenify@3.3.1", "", { "dependencies": { "any-promise": "^1.0.0" } }, "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="], + + "thenify-all": ["thenify-all@1.6.0", "", { "dependencies": { "thenify": ">= 3.1.0 < 4" } }, "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA=="], + + "time-span": ["time-span@5.1.0", "", { "dependencies": { "convert-hrtime": "^5.0.0" } }, "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA=="], + + "tiny-typed-emitter": ["tiny-typed-emitter@2.1.0", "", {}, "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA=="], + + "tinyexec": ["tinyexec@0.3.2", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], + + "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + + "tinyspawn": ["tinyspawn@1.5.6", "", {}, "sha512-BKTzT5bfCP+P5I4lQlb7XJsWqRh0lNaZViiS/T3fXVjpGuT7PtaFl1w7fRAYFSUzlL9BHjJWQA9GNhdnF9EOhQ=="], + + "tldts": ["tldts@6.1.86", "", { "dependencies": { "tldts-core": "^6.1.86" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ=="], + + "tldts-core": ["tldts-core@6.1.86", "", {}, "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA=="], + + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + + "token-types": ["token-types@4.2.1", "", { "dependencies": { "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" } }, "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ=="], + + "tough-cookie": ["tough-cookie@5.1.2", "", { "dependencies": { "tldts": "^6.1.32" } }, "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A=="], + + "tr46": ["tr46@5.1.1", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw=="], + + "tree-kill": ["tree-kill@1.2.2", "", { "bin": { "tree-kill": "cli.js" } }, "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="], + + "ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="], + + "ts-mixer": ["ts-mixer@6.0.4", "", {}, "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA=="], + + "tsc-alias": ["tsc-alias@1.8.16", "", { "dependencies": { "chokidar": "^3.5.3", "commander": "^9.0.0", "get-tsconfig": "^4.10.0", "globby": "^11.0.4", "mylas": "^2.1.9", "normalize-path": "^3.0.0", "plimit-lit": "^1.2.6" }, "bin": { "tsc-alias": "dist/bin/index.js" } }, "sha512-QjCyu55NFyRSBAl6+MTFwplpFcnm2Pq01rR/uxfqJoLMm6X3O14KEGtaSDZpJYaE1bJBGDjD0eSuiIWPe2T58g=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "tsup": ["tsup@8.5.1", "", { "dependencies": { "bundle-require": "^5.1.0", "cac": "^6.7.14", "chokidar": "^4.0.3", "consola": "^3.4.0", "debug": "^4.4.0", "esbuild": "^0.27.0", "fix-dts-default-cjs-exports": "^1.0.0", "joycon": "^3.1.1", "picocolors": "^1.1.1", "postcss-load-config": "^6.0.1", "resolve-from": "^5.0.0", "rollup": "^4.34.8", "source-map": "^0.7.6", "sucrase": "^3.35.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.11", "tree-kill": "^1.2.2" }, "peerDependencies": { "@microsoft/api-extractor": "^7.36.0", "@swc/core": "^1", "postcss": "^8.4.12", "typescript": ">=4.5.0" }, "optionalPeers": ["@microsoft/api-extractor", "@swc/core", "postcss", "typescript"], "bin": { "tsup": "dist/cli-default.js", "tsup-node": "dist/cli-node.js" } }, "sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing=="], + + "type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], + + "undici": ["undici@5.29.0", "", { "dependencies": { "@fastify/busboy": "^2.0.0" } }, "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg=="], + + "undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + + "unfetch": ["unfetch@5.0.0", "", {}, "sha512-3xM2c89siXg0nHvlmYsQ2zkLASvVMBisZm5lF3gFDqfF2xonNStDJyMpvaOBe0a1Edxmqrf2E0HBdmy9QyZaeg=="], + + "w3c-xmlserializer": ["w3c-xmlserializer@5.0.0", "", { "dependencies": { "xml-name-validator": "^5.0.0" } }, "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA=="], + + "web-streams-polyfill": ["web-streams-polyfill@3.3.3", "", {}, "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="], + + "web-worker": ["web-worker@1.5.0", "", {}, "sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw=="], + + "webidl-conversions": ["webidl-conversions@7.0.0", "", {}, "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="], + + "whatwg-encoding": ["whatwg-encoding@3.1.1", "", { "dependencies": { "iconv-lite": "0.6.3" } }, "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ=="], + + "whatwg-mimetype": ["whatwg-mimetype@4.0.0", "", {}, "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg=="], + + "whatwg-url": ["whatwg-url@14.2.0", "", { "dependencies": { "tr46": "^5.1.0", "webidl-conversions": "^7.0.0" } }, "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw=="], + + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "ws": ["ws@8.20.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA=="], + + "xml-name-validator": ["xml-name-validator@5.0.0", "", {}, "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg=="], + + "xmlchars": ["xmlchars@2.2.0", "", {}, "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="], + + "youtube-dl-exec": ["youtube-dl-exec@3.1.4", "", { "dependencies": { "binary-version-check": "~6.1.0", "dargs": "~7.0.0", "debug-logfmt": "~1.4.0", "is-unix": "~2.0.10", "tinyspawn": "~1.5.0" } }, "sha512-2jctjIWELBD2SGiKNeBCgPoXKlXgq7pnVCqk0QlJv9B5ZMwYzBn8P9OJ+EErYNMbfZSsqtW6UqPHbmVT+0o5tQ=="], + + "youtubei.js": ["youtubei.js@16.0.1", "", { "dependencies": { "@bufbuild/protobuf": "^2.0.0", "meriyah": "^6.1.4" } }, "sha512-3802bCAGkBc2/G5WUTc0l/bO5mPYJbQAHL04d9hE9PnrDHoBUT8MN721Yqt4RCNncAXdHcfee9VdJy3Fhq1r5g=="], + + "@discord-player/extractor/soundcloud.ts": ["soundcloud.ts@0.5.5", "", { "dependencies": { "undici": "^6.17.0" } }, "sha512-bygjhC1w/w26Nk0Y+4D4cWSEJ1TdxLaE6+w4pCazFzPF+J4mzuB62ggWmFa7BiwnirzNf9lgPbjzrQYGege4Ew=="], + + "@discordjs/rest/@discordjs/collection": ["@discordjs/collection@2.1.1", "", {}, "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg=="], + + "@discordjs/rest/@sapphire/snowflake": ["@sapphire/snowflake@3.5.5", "", {}, "sha512-xzvBr1Q1c4lCe7i6sRnrofxeO1QTP/LKQ6A6qy0iB4x5yfiSfARMEQEghojzTNALDTcv8En04qYNIco9/K9eZQ=="], + + "@discordjs/rest/undici": ["undici@6.24.1", "", {}, "sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA=="], + + "@discordjs/ws/@discordjs/collection": ["@discordjs/collection@2.1.1", "", {}, "sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg=="], + + "cheerio/undici": ["undici@7.24.6", "", {}, "sha512-Xi4agocCbRzt0yYMZGMA6ApD7gvtUFaxm4ZmeacWI4cZxaF6C+8I8QfofC20NAePiB/IcvZmzkJ7XPa471AEtA=="], + + "discord-player-youtubei/undici": ["undici@7.24.6", "", {}, "sha512-Xi4agocCbRzt0yYMZGMA6ApD7gvtUFaxm4ZmeacWI4cZxaF6C+8I8QfofC20NAePiB/IcvZmzkJ7XPa471AEtA=="], + + "discord.js/undici": ["undici@6.21.3", "", {}, "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw=="], + + "dom-serializer/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + + "htmlparser2/entities": ["entities@7.0.1", "", {}, "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA=="], + + "npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], + + "reverbnation-scraper/node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], + + "sucrase/commander": ["commander@4.1.1", "", {}, "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="], + + "tinyglobby/picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], + + "tsup/chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], + + "@discord-player/extractor/soundcloud.ts/undici": ["undici@6.21.3", "", {}, "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw=="], + + "reverbnation-scraper/node-fetch/whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], + + "tsup/chokidar/readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], + + "reverbnation-scraper/node-fetch/whatwg-url/tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], + + "reverbnation-scraper/node-fetch/whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], + } +} diff --git a/dist/classes/handlers/MusicEventHandler.js b/dist/classes/handlers/MusicEventHandler.js index 0c26b16..65da12d 100644 --- a/dist/classes/handlers/MusicEventHandler.js +++ b/dist/classes/handlers/MusicEventHandler.js @@ -12,7 +12,9 @@ class MusicEventHandler extends forgescript_1.BaseEventHandler { * @param client - ForgeClient instance. */ register(client) { - client.getExtension(ForgeMusic_1.ForgeMusic).player.events.on(this.name, this.listener.bind(client)); + client + .getExtension(ForgeMusic_1.ForgeMusic) + .player.events.on(this.name, this.listener.bind(client)); } } exports.MusicEventHandler = MusicEventHandler; diff --git a/dist/classes/managers/MusicCommandManager.js b/dist/classes/managers/MusicCommandManager.js index 95acff6..576f57b 100644 --- a/dist/classes/managers/MusicCommandManager.js +++ b/dist/classes/managers/MusicCommandManager.js @@ -5,7 +5,7 @@ const forgescript_1 = require("@tryforge/forgescript"); /** * Common music handler name. */ -exports.handlerName = "ForgeMusic"; +exports.handlerName = 'ForgeMusic'; /** * The music command manager. */ diff --git a/dist/classes/structures/ForgeMusic.js b/dist/classes/structures/ForgeMusic.js index 9914d0e..6ce3380 100644 --- a/dist/classes/structures/ForgeMusic.js +++ b/dist/classes/structures/ForgeMusic.js @@ -11,8 +11,8 @@ const getVersion_1 = require("../../utils/getVersion"); class ForgeMusic extends forgescript_1.ForgeExtension { options; /** Cock my beloved. <3 */ - name = "ForgeMusic"; - description = "A standard music library tailored for ForgeScript."; + name = 'ForgeMusic'; + description = 'A standard music library tailored for ForgeScript.'; version = (0, getVersion_1.getVersion)(); /** * The entrypoint of the player application. @@ -25,7 +25,7 @@ class ForgeMusic extends forgescript_1.ForgeExtension { /** * The required intents for this extension to work. */ - requiredIntents = ["GuildVoiceStates"]; + requiredIntents = ['GuildVoiceStates']; /** * Creates an instance of the music extension. * @returns {ForgeMusic} @@ -38,6 +38,24 @@ class ForgeMusic extends forgescript_1.ForgeExtension { process.exit(); } } + /** + * Add multiple extractors into the player. + * @param engines - Extractor engines to add. + */ + addEngines(engines) { + const extractors = engines.map((engine) => engine[0]); + const extractorOptions = {}; + let i = 0; + for (const engine of engines) { + const id = engine[0].identifier; + const options = engine[1]; + if (options) { + extractorOptions[id] = options; + } + i++; + } + this.player.extractors.loadMulti(extractors, extractorOptions); + } /** * Starts the music extension. * @param client - The discord client instance. @@ -61,22 +79,23 @@ class ForgeMusic extends forgescript_1.ForgeExtension { } // Loading the extractors. if (this.options.includeExtractors) { - this.player.extractors.loadMulti(this.options.includeExtractors) - .then(() => forgescript_1.Logger.info("Extractors loaded successfully!")) - .catch((e) => forgescript_1.Logger.error("Unable to load the extractors; with reason: " + e)); + this.player.extractors + .loadMulti(this.options.includeExtractors) + .then(() => forgescript_1.Logger.info('Extractors loaded successfully!')) + .catch((e) => forgescript_1.Logger.error('Unable to load the extractors; with reason: ' + e)); } } /** * Returns the events location. */ get eventsLocation() { - return __dirname.replace(/classes(\\|\/)structures/, "events"); + return __dirname.replace(/classes(\\|\/)structures/, 'events'); } /** * Returns the native functions location. */ get nativesLocation() { - return __dirname.replace(/classes(\\|\/)structures/, "natives"); + return __dirname.replace(/classes(\\|\/)structures/, 'natives'); } /** * Returns the user-defined `on connect` options. @@ -89,7 +108,9 @@ class ForgeMusic extends forgescript_1.ForgeExtension { * @returns {boolean} */ #hasInvalidEvents() { - return this.options && this.options.events && this.options.events.some(this.#invalidEventPredicate); + return (this.options && + this.options.events && + this.options.events.some(this.#invalidEventPredicate)); } /** * Event check predicate. @@ -97,7 +118,9 @@ class ForgeMusic extends forgescript_1.ForgeExtension { * @returns {boolean} */ #invalidEventPredicate(event) { - return event === discord_player_1.GuildQueueEvent.VoiceStateUpdate || event === discord_player_1.GuildQueueEvent.WillAutoPlay || event === discord_player_1.GuildQueueEvent.WillPlayTrack; + return (event === discord_player_1.GuildQueueEvent.VoiceStateUpdate || + event === discord_player_1.GuildQueueEvent.WillAutoPlay || + event === discord_player_1.GuildQueueEvent.WillPlayTrack); } } exports.ForgeMusic = ForgeMusic; diff --git a/dist/docgen.js b/dist/docgen.js index 4bcae3a..f7f5654 100644 --- a/dist/docgen.js +++ b/dist/docgen.js @@ -5,33 +5,42 @@ const forgescript_1 = require("@tryforge/forgescript"); const MusicCommandManager_1 = require("./classes/managers/MusicCommandManager"); const ascii_table3_1 = require("ascii-table3"); const path_1 = require("path"); -(0, forgescript_1.generateMetadata)((0, path_1.join)(__dirname, "natives"), "natives", MusicCommandManager_1.handlerName, true, void 0, (0, path_1.join)(__dirname, "events")) - .then(() => forgescript_1.Logger.info("Documentation generation done")) +(0, forgescript_1.generateMetadata)((0, path_1.join)(__dirname, 'natives'), 'natives', MusicCommandManager_1.handlerName, true, void 0, (0, path_1.join)(__dirname, 'events')) + .then(() => forgescript_1.Logger.info('Documentation generation done')) .catch((e) => forgescript_1.Logger.error(e)); function toCamelCase(text) { - return text.split(' ').map((part, i) => i === 0 + return text + .split(' ') + .map((part, i) => i === 0 ? part.toLowerCase() - : `${part[0].toUpperCase()}${part.slice(1)}`).join(""); + : `${part[0].toUpperCase()}${part.slice(1)}`) + .join(''); } /** * Generates markdown documentation for every function in the library. */ function generateFunctionDocs() { - const dataPath = (0, path_1.join)(process.cwd(), "metadata", "functions.json"); - const data = JSON.parse((0, fs_1.readFileSync)(dataPath, "utf-8")); - if (!(0, fs_1.existsSync)((0, path_1.join)(process.cwd(), "docs"))) { - (0, fs_1.mkdirSync)((0, path_1.join)(process.cwd(), "docs")); + const dataPath = (0, path_1.join)(process.cwd(), 'metadata', 'functions.json'); + const data = JSON.parse((0, fs_1.readFileSync)(dataPath, 'utf-8')); + if (!(0, fs_1.existsSync)((0, path_1.join)(process.cwd(), 'docs'))) { + (0, fs_1.mkdirSync)((0, path_1.join)(process.cwd(), 'docs')); } for (const func of data) { - forgescript_1.Logger.info("Parsing", func.name); + forgescript_1.Logger.info('Parsing', func.name); let content = [ `# ${func.name}`, func.description, '## Usage', - `\`\`\`\n${func.name}${!!func.args ? ('[' + `${func.args.map(t => `${t.rest ? '...' : ''}${toCamelCase(t.name)}${t.required ? '' : '?'}`).join(";")}` + ']') : ''}\n\`\`\``, + `\`\`\`\n${func.name}${!!func.args ? '[' + `${func.args.map((t) => `${t.rest ? '...' : ''}${toCamelCase(t.name)}${t.required ? '' : '?'}`).join(';')}` + ']' : ''}\n\`\`\``, ]; if (func.args) { - const args = func.args.map(f => [f.name, f.description, f.type, f.required ? 'Yes' : 'No', f.rest ? 'Yes' : 'No']); + const args = func.args.map((f) => [ + f.name, + f.description, + f.type, + f.required ? 'Yes' : 'No', + f.rest ? 'Yes' : 'No', + ]); const table = new ascii_table3_1.AsciiTable3() .setStyle('github-markdown') .setHeading('Name', 'Description', 'Type', 'Required', 'Rest') @@ -42,7 +51,7 @@ function generateFunctionDocs() { content.push('## Output', `> ${func.output.join(', ')}`); } content.push(`View source on [GitHub](https://github.com/Cyberghxst/forgemusic/blob/dev/src/natives/${func.name.slice(1)}.ts)`); - (0, fs_1.writeFileSync)((0, path_1.join)(process.cwd(), "docs", `${func.name.slice(1)}.md`), content.join("\n"), "utf-8"); + (0, fs_1.writeFileSync)((0, path_1.join)(process.cwd(), 'docs', `${func.name.slice(1)}.md`), content.join('\n'), 'utf-8'); } return true; } diff --git a/dist/events/audioFiltersUpdate.js b/dist/events/audioFiltersUpdate.js index 2083dc6..b38debf 100644 --- a/dist/events/audioFiltersUpdate.js +++ b/dist/events/audioFiltersUpdate.js @@ -10,7 +10,7 @@ const discord_player_1 = require("discord-player"); const eventName = discord_player_1.GuildQueueEvent.AudioFiltersUpdate; exports.default = new MusicEventHandler_1.MusicEventHandler({ name: eventName, - description: "Executed when FFMPEG audio filters are updated.", + description: 'Executed when FFMPEG audio filters are updated.', async listener(queue, oldFilters, newFilters) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(eventName); if (!commands) @@ -21,12 +21,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue, oldFilters, newFilters }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/audioTrackAdd.js b/dist/events/audioTrackAdd.js index 4951e4f..a9bbdde 100644 --- a/dist/events/audioTrackAdd.js +++ b/dist/events/audioTrackAdd.js @@ -6,7 +6,7 @@ const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); const discord_player_1 = require("discord-player"); exports.default = new MusicEventHandler_1.MusicEventHandler({ name: discord_player_1.GuildQueueEvent.AudioTrackAdd, - description: "Executed when audio track is added to the queue.", + description: 'Executed when audio track is added to the queue.', async listener(queue, track) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(discord_player_1.GuildQueueEvent.AudioTrackAdd); if (!commands) @@ -17,12 +17,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue, track }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/audioTrackRemove.js b/dist/events/audioTrackRemove.js index b52d4e0..b8d6dc5 100644 --- a/dist/events/audioTrackRemove.js +++ b/dist/events/audioTrackRemove.js @@ -6,7 +6,7 @@ const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); const discord_player_1 = require("discord-player"); exports.default = new MusicEventHandler_1.MusicEventHandler({ name: discord_player_1.GuildQueueEvent.AudioTrackRemove, - description: "Executed when audio track is removed from the queue.", + description: 'Executed when audio track is removed from the queue.', async listener(queue, track) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(discord_player_1.GuildQueueEvent.AudioTrackRemove); if (!commands) @@ -17,12 +17,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue, track }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/audioTracksAdd.js b/dist/events/audioTracksAdd.js index ff69078..c7dfbd6 100644 --- a/dist/events/audioTracksAdd.js +++ b/dist/events/audioTracksAdd.js @@ -6,7 +6,7 @@ const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); const discord_player_1 = require("discord-player"); exports.default = new MusicEventHandler_1.MusicEventHandler({ name: discord_player_1.GuildQueueEvent.AudioTracksAdd, - description: "Executed when multiple audio track are added to the queue.", + description: 'Executed when multiple audio track are added to the queue.', async listener(queue, tracks) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(discord_player_1.GuildQueueEvent.AudioTracksAdd); if (!commands) @@ -17,12 +17,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue, tracks }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/biquadFiltersUpdate.js b/dist/events/biquadFiltersUpdate.js index 993a638..ffb6860 100644 --- a/dist/events/biquadFiltersUpdate.js +++ b/dist/events/biquadFiltersUpdate.js @@ -10,7 +10,7 @@ const discord_player_1 = require("discord-player"); const eventName = discord_player_1.GuildQueueEvent.BiquadFiltersUpdate; exports.default = new MusicEventHandler_1.MusicEventHandler({ name: eventName, - description: "Executed when biquad filters is updated.", + description: 'Executed when biquad filters is updated.', async listener(queue, oldFilters, newFilters) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(eventName); if (!commands) @@ -21,12 +21,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue, oldFilters, newFilters }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/channelPopulate.js b/dist/events/channelPopulate.js index cb97ebf..8a4417a 100644 --- a/dist/events/channelPopulate.js +++ b/dist/events/channelPopulate.js @@ -6,7 +6,7 @@ const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); const discord_player_1 = require("discord-player"); exports.default = new MusicEventHandler_1.MusicEventHandler({ name: discord_player_1.GuildQueueEvent.ChannelPopulate, - description: "Executed when a voice channel is populated.", + description: 'Executed when a voice channel is populated.', async listener(queue) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(discord_player_1.GuildQueueEvent.ChannelPopulate); if (!commands) @@ -17,12 +17,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/connection.js b/dist/events/connection.js index 3d5c112..239e839 100644 --- a/dist/events/connection.js +++ b/dist/events/connection.js @@ -6,7 +6,7 @@ const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); const discord_player_1 = require("discord-player"); exports.default = new MusicEventHandler_1.MusicEventHandler({ name: discord_player_1.GuildQueueEvent.Connection, - description: "Executed when a connection is created.", + description: 'Executed when a connection is created.', async listener(queue) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(discord_player_1.GuildQueueEvent.Connection); if (!commands) @@ -17,12 +17,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/connectionDestroyed.js b/dist/events/connectionDestroyed.js index 047b660..bf6032e 100644 --- a/dist/events/connectionDestroyed.js +++ b/dist/events/connectionDestroyed.js @@ -6,7 +6,7 @@ const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); const discord_player_1 = require("discord-player"); exports.default = new MusicEventHandler_1.MusicEventHandler({ name: discord_player_1.GuildQueueEvent.ConnectionDestroyed, - description: "Executed when a connection is destroyed.", + description: 'Executed when a connection is destroyed.', async listener(queue) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(discord_player_1.GuildQueueEvent.ConnectionDestroyed); if (!commands) @@ -17,12 +17,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/debug.js b/dist/events/debug.js index 560de6b..c651eb0 100644 --- a/dist/events/debug.js +++ b/dist/events/debug.js @@ -6,7 +6,7 @@ const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); const discord_player_1 = require("discord-player"); exports.default = new MusicEventHandler_1.MusicEventHandler({ name: discord_player_1.GuildQueueEvent.Debug, - description: "Executed when the queue sends a debug info.", + description: 'Executed when the queue sends a debug info.', async listener(queue, message) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(discord_player_1.GuildQueueEvent.Debug); if (!commands) @@ -17,12 +17,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue, message }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/disconnect.js b/dist/events/disconnect.js index b7ef191..2666fc5 100644 --- a/dist/events/disconnect.js +++ b/dist/events/disconnect.js @@ -6,7 +6,7 @@ const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); const discord_player_1 = require("discord-player"); exports.default = new MusicEventHandler_1.MusicEventHandler({ name: discord_player_1.GuildQueueEvent.Disconnect, - description: "Executed when the bot is disconnected from the channel.", + description: 'Executed when the bot is disconnected from the channel.', async listener(queue) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(discord_player_1.GuildQueueEvent.Disconnect); if (!commands) @@ -17,12 +17,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/dspUpdate.js b/dist/events/dspUpdate.js index 66be937..0d38713 100644 --- a/dist/events/dspUpdate.js +++ b/dist/events/dspUpdate.js @@ -10,7 +10,7 @@ const discord_player_1 = require("discord-player"); const eventName = discord_player_1.GuildQueueEvent.DSPUpdate; exports.default = new MusicEventHandler_1.MusicEventHandler({ name: eventName, - description: "Executed when dsp filters are updated.", + description: 'Executed when dsp filters are updated.', async listener(queue, oldFilters, newFilters) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(eventName); if (!commands) @@ -21,12 +21,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue, oldFilters, newFilters }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/emptyChannel.js b/dist/events/emptyChannel.js index 48f95c4..b1de610 100644 --- a/dist/events/emptyChannel.js +++ b/dist/events/emptyChannel.js @@ -6,7 +6,7 @@ const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); const discord_player_1 = require("discord-player"); exports.default = new MusicEventHandler_1.MusicEventHandler({ name: discord_player_1.GuildQueueEvent.EmptyChannel, - description: "Executed when the voice channel is empty.", + description: 'Executed when the voice channel is empty.', async listener(queue) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(discord_player_1.GuildQueueEvent.EmptyChannel); if (!commands) @@ -17,12 +17,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/emptyQueue.js b/dist/events/emptyQueue.js index 7b512e4..8885957 100644 --- a/dist/events/emptyQueue.js +++ b/dist/events/emptyQueue.js @@ -6,7 +6,7 @@ const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); const discord_player_1 = require("discord-player"); exports.default = new MusicEventHandler_1.MusicEventHandler({ name: discord_player_1.GuildQueueEvent.EmptyQueue, - description: "Executed when the queue is empty.", + description: 'Executed when the queue is empty.', async listener(queue) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(discord_player_1.GuildQueueEvent.EmptyQueue); if (!commands) @@ -17,12 +17,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/equalizerUpdate.js b/dist/events/equalizerUpdate.js index 633c5dc..d0d1647 100644 --- a/dist/events/equalizerUpdate.js +++ b/dist/events/equalizerUpdate.js @@ -10,7 +10,7 @@ const discord_player_1 = require("discord-player"); const eventName = discord_player_1.GuildQueueEvent.EqualizerUpdate; exports.default = new MusicEventHandler_1.MusicEventHandler({ name: eventName, - description: "Executed when equalizer config is updated.", + description: 'Executed when equalizer config is updated.', async listener(queue, oldFilters, newFilters) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(eventName); if (!commands) @@ -21,12 +21,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue, oldFilters, newFilters }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/error.js b/dist/events/error.js index 37bafab..0e32aea 100644 --- a/dist/events/error.js +++ b/dist/events/error.js @@ -6,7 +6,7 @@ const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); const discord_player_1 = require("discord-player"); exports.default = new MusicEventHandler_1.MusicEventHandler({ name: discord_player_1.GuildQueueEvent.Error, - description: "Executed when the queue encounters error.", + description: 'Executed when the queue encounters error.', async listener(queue, error) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(discord_player_1.GuildQueueEvent.Error); if (!commands) @@ -17,12 +17,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue, error }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/playerError.js b/dist/events/playerError.js index 6d24820..74f6b44 100644 --- a/dist/events/playerError.js +++ b/dist/events/playerError.js @@ -6,7 +6,7 @@ const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); const discord_player_1 = require("discord-player"); exports.default = new MusicEventHandler_1.MusicEventHandler({ name: discord_player_1.GuildQueueEvent.PlayerError, - description: "Executed when the audio player errors while streaming audio track.", + description: 'Executed when the audio player errors while streaming audio track.', async listener(queue, error, track) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(discord_player_1.GuildQueueEvent.PlayerError); if (!commands) @@ -17,12 +17,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue, error, track }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/playerFinish.js b/dist/events/playerFinish.js index 05e5356..772e405 100644 --- a/dist/events/playerFinish.js +++ b/dist/events/playerFinish.js @@ -6,7 +6,7 @@ const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); const discord_player_1 = require("discord-player"); exports.default = new MusicEventHandler_1.MusicEventHandler({ name: discord_player_1.GuildQueueEvent.PlayerFinish, - description: "Executed when the audio player finishes streaming audio track.", + description: 'Executed when the audio player finishes streaming audio track.', async listener(queue, track) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(discord_player_1.GuildQueueEvent.PlayerFinish); if (!commands) @@ -17,12 +17,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue, track }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/playerPause.js b/dist/events/playerPause.js index ea2d508..96cad0a 100644 --- a/dist/events/playerPause.js +++ b/dist/events/playerPause.js @@ -6,7 +6,7 @@ const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); const discord_player_1 = require("discord-player"); exports.default = new MusicEventHandler_1.MusicEventHandler({ name: discord_player_1.GuildQueueEvent.PlayerPause, - description: "Executed when audio player is paused.", + description: 'Executed when audio player is paused.', async listener(queue) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(discord_player_1.GuildQueueEvent.PlayerPause); if (!commands) @@ -17,12 +17,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/playerResume.js b/dist/events/playerResume.js index 837d967..4f129af 100644 --- a/dist/events/playerResume.js +++ b/dist/events/playerResume.js @@ -6,7 +6,7 @@ const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); const discord_player_1 = require("discord-player"); exports.default = new MusicEventHandler_1.MusicEventHandler({ name: discord_player_1.GuildQueueEvent.PlayerResume, - description: "Executed when audio player is resumed.", + description: 'Executed when audio player is resumed.', async listener(queue) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(discord_player_1.GuildQueueEvent.PlayerResume); if (!commands) @@ -17,12 +17,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/playerSkip.js b/dist/events/playerSkip.js index 55cb779..981c497 100644 --- a/dist/events/playerSkip.js +++ b/dist/events/playerSkip.js @@ -6,7 +6,7 @@ const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); const discord_player_1 = require("discord-player"); exports.default = new MusicEventHandler_1.MusicEventHandler({ name: discord_player_1.GuildQueueEvent.PlayerSkip, - description: "Executed when the audio player skips current track.", + description: 'Executed when the audio player skips current track.', async listener(queue, track, reason, description) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(discord_player_1.GuildQueueEvent.PlayerSkip); if (!commands) @@ -17,12 +17,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue, track, reason, description }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/playerStart.js b/dist/events/playerStart.js index 863b591..151600d 100644 --- a/dist/events/playerStart.js +++ b/dist/events/playerStart.js @@ -6,7 +6,7 @@ const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); const discord_player_1 = require("discord-player"); exports.default = new MusicEventHandler_1.MusicEventHandler({ name: discord_player_1.GuildQueueEvent.PlayerStart, - description: "Executed when the audio player starts streaming audio track.", + description: 'Executed when the audio player starts streaming audio track.', async listener(queue, track) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(discord_player_1.GuildQueueEvent.PlayerStart); if (!commands) @@ -17,12 +17,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue, track }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/playerTrigger.js b/dist/events/playerTrigger.js index 735f8bd..d86abfd 100644 --- a/dist/events/playerTrigger.js +++ b/dist/events/playerTrigger.js @@ -6,7 +6,7 @@ const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); const discord_player_1 = require("discord-player"); exports.default = new MusicEventHandler_1.MusicEventHandler({ name: discord_player_1.GuildQueueEvent.PlayerTrigger, - description: "Executed when the audio player is triggered.", + description: 'Executed when the audio player is triggered.', async listener(queue, track, reason) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(discord_player_1.GuildQueueEvent.PlayerTrigger); if (!commands) @@ -17,12 +17,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue, track, reason }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/queueCreate.js b/dist/events/queueCreate.js index fef4ce1..9745701 100644 --- a/dist/events/queueCreate.js +++ b/dist/events/queueCreate.js @@ -6,7 +6,7 @@ const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); const discord_player_1 = require("discord-player"); exports.default = new MusicEventHandler_1.MusicEventHandler({ name: discord_player_1.GuildQueueEvent.QueueCreate, - description: "Executed when a queue is successfully created.", + description: 'Executed when a queue is successfully created.', async listener(queue) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(discord_player_1.GuildQueueEvent.QueueCreate); if (!commands) @@ -17,12 +17,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/queueDelete.js b/dist/events/queueDelete.js index 49dcc52..ea62a5b 100644 --- a/dist/events/queueDelete.js +++ b/dist/events/queueDelete.js @@ -6,7 +6,7 @@ const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); const discord_player_1 = require("discord-player"); exports.default = new MusicEventHandler_1.MusicEventHandler({ name: discord_player_1.GuildQueueEvent.QueueDelete, - description: "Executed when a queue is successfully deleted.", + description: 'Executed when a queue is successfully deleted.', async listener(queue) { const commands = this.getExtension(ForgeMusic_1.ForgeMusic).commands.get(discord_player_1.GuildQueueEvent.QueueDelete); if (!commands) @@ -17,12 +17,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/events/volumeChange.js b/dist/events/volumeChange.js index 279812e..d8a4c48 100644 --- a/dist/events/volumeChange.js +++ b/dist/events/volumeChange.js @@ -21,12 +21,9 @@ exports.default = new MusicEventHandler_1.MusicEventHandler({ client: this, command, environment: { queue, oldVolume, newVolume }, - data: command.compiled.code + data: command.compiled.code, }); - await this.getExtension(ForgeMusic_1.ForgeMusic) - .player - .context - .provide(context, () => forgescript_1.Interpreter.run(context)); + await this.getExtension(ForgeMusic_1.ForgeMusic).player.context.provide(context, () => forgescript_1.Interpreter.run(context)); } - } + }, }); diff --git a/dist/index.js b/dist/index.js index 96e7a7f..cc6def0 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,11 +1,44 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.QueryType = exports.QueueRepeatMode = exports.GuildQueueEvent = exports.ForgeMusic = exports.DefaultExtractors = void 0; +exports.withErrorEvents = exports.QueryType = exports.QueueRepeatMode = exports.GuildQueueEvent = exports.ForgeMusic = exports.DefaultExtractors = exports.AttachmentExtractor = exports.AllEvents = void 0; +const extractor_1 = require("@discord-player/extractor"); +Object.defineProperty(exports, "AttachmentExtractor", { enumerable: true, get: function () { return extractor_1.AttachmentExtractor; } }); +Object.defineProperty(exports, "DefaultExtractors", { enumerable: true, get: function () { return extractor_1.DefaultExtractors; } }); const discord_player_1 = require("discord-player"); Object.defineProperty(exports, "GuildQueueEvent", { enumerable: true, get: function () { return discord_player_1.GuildQueueEvent; } }); Object.defineProperty(exports, "QueueRepeatMode", { enumerable: true, get: function () { return discord_player_1.QueueRepeatMode; } }); Object.defineProperty(exports, "QueryType", { enumerable: true, get: function () { return discord_player_1.QueryType; } }); -const extractor_1 = require("@discord-player/extractor"); -Object.defineProperty(exports, "DefaultExtractors", { enumerable: true, get: function () { return extractor_1.DefaultExtractors; } }); const ForgeMusic_1 = require("./classes/structures/ForgeMusic"); Object.defineProperty(exports, "ForgeMusic", { enumerable: true, get: function () { return ForgeMusic_1.ForgeMusic; } }); +/** + * An array including the events that are not supported. + */ +const blacklistedEvents = [ + 'audioTracksAdd', + 'audioTracksRemove', + 'willPlayTrack', + 'willAutoPlay', + 'voiceStateUpdate', +]; +/** + * The list of all events. + */ +const AllEvents = Object.keys(discord_player_1.GuildQueueEvent).filter((event) => !blacklistedEvents.includes(event)); +exports.AllEvents = AllEvents; +/** + * Returns an array including the given events and the error events. + * @param events The events to be included. + * @returns An array including the given events and the error events. + * @example + * ```typescript + * // This: + * events: [GuildQueueEvent.AudioTracksAdd, GuildQueueEvent.PlayerStart, GuildQueueEvent.Error, GuildQueueEvent.PlayerError] + * + * // is the same as: + * events: withErrorEvents(GuildQueueEvent.AudioTracksAdd, GuildQueueEvent.PlayerStart) + * ``` + */ +const withErrorEvents = (...events) => { + return Array.from(new Set([discord_player_1.GuildQueueEvent.Error, discord_player_1.GuildQueueEvent.PlayerError, ...events])); +}; +exports.withErrorEvents = withErrorEvents; diff --git a/dist/natives/clearQueue.js b/dist/natives/clearQueue.js index 9a4a492..4414da5 100644 --- a/dist/natives/clearQueue.js +++ b/dist/natives/clearQueue.js @@ -3,13 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$clearQueue", - version: "1.0.0", - description: "Clear the guild queue.", + name: '$clearQueue', + version: '1.0.0', + description: 'Clear the guild queue.', unwrap: false, execute(ctx) { - const queue = (0, discord_player_1.useQueue)(ctx.guild); + const queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (!queue) + return this.customError('No queue found.'); queue.clear(); return this.success(); - } + }, }); diff --git a/dist/natives/clearQueueHistory.js b/dist/natives/clearQueueHistory.js index 6e12487..5b1ebf7 100644 --- a/dist/natives/clearQueueHistory.js +++ b/dist/natives/clearQueueHistory.js @@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$clearQueueHistory", - version: "1.0.0", - description: "Clear the queue history.", + name: '$clearQueueHistory', + version: '1.0.0', + description: 'Clear the queue history.', unwrap: false, execute(ctx) { - (0, discord_player_1.useQueue)(ctx.guild).history.clear(); + (0, discord_player_1.useQueue)(ctx.guild.id).history.clear(); return this.success(); - } + }, }); diff --git a/dist/natives/currentTrackTotalDuration.js b/dist/natives/currentTrackTotalDuration.js index 38af666..2e94f83 100644 --- a/dist/natives/currentTrackTotalDuration.js +++ b/dist/natives/currentTrackTotalDuration.js @@ -1,17 +1,17 @@ "use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); -const getNode_1 = __importDefault(require("../utils/getNode")); +const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$currentTrackTotalDuration", - version: "1.0.0", - description: "Returns the total duration of the current audio track.", + name: '$currentTrackTotalDuration', + version: '1.0.0', + description: 'Returns the total duration of the current audio track.', unwrap: false, output: forgescript_1.ArgType.Number, execute(ctx) { - return this.success((0, getNode_1.default)(ctx).totalDuration); - } + const queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (!queue) + return this.customError('No queue found.'); + return this.success(queue.currentTrack.durationMS); + }, }); diff --git a/dist/natives/deleteQueue.js b/dist/natives/deleteQueue.js index b2c568e..508eb80 100644 --- a/dist/natives/deleteQueue.js +++ b/dist/natives/deleteQueue.js @@ -3,15 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$deleteQueue", - version: "1.0.0", - description: "Deletes the queue of the current guild.", + name: '$deleteQueue', + version: '1.0.0', + description: 'Deletes the queue of the current guild.', unwrap: false, output: forgescript_1.ArgType.Unknown, execute(ctx) { - if ((0, discord_player_1.useQueue)(ctx.guild)) { - (0, discord_player_1.useQueue)(ctx.guild).delete(); + if ((0, discord_player_1.useQueue)(ctx.guild.id)) { + (0, discord_player_1.useQueue)(ctx.guild.id).delete(); } return this.success(); - } + }, }); diff --git a/dist/natives/disableAllFilters.js b/dist/natives/disableAllFilters.js index 2826b58..5b37a5a 100644 --- a/dist/natives/disableAllFilters.js +++ b/dist/natives/disableAllFilters.js @@ -4,19 +4,23 @@ const forgescript_1 = require("@tryforge/forgescript"); const constants_1 = require("../utils/constants"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$disableAllFilters", - version: "1.0.0", - description: "Disable the provided FFMPEG filters.", + name: '$disableAllFilters', + version: '1.0.0', + description: 'Disable the provided FFMPEG filters.', brackets: true, unwrap: true, - args: [forgescript_1.Arg.restEnum(constants_1.FFMPEGFilters, "Filters", "Filter names to be disabled.")], + args: [ + forgescript_1.Arg.restEnum(constants_1.FFMPEGFilters, 'Filters', 'Filter names to be disabled.'), + ], async execute(ctx, [filters]) { - const queue = (0, discord_player_1.useQueue)(ctx.guild); + const queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (!queue) + return this.customError('No queue found.'); const allFilters = queue.filters.ffmpeg.getFiltersEnabled(); for (const filter of filters) { const foundFilter = allFilters.find((fil) => fil.toLowerCase() === filter.toLowerCase()); await queue.filters.ffmpeg.toggle(foundFilter); } return this.success(); - } + }, }); diff --git a/dist/natives/enableAllFilters.js b/dist/natives/enableAllFilters.js index 72fba85..551988b 100644 --- a/dist/natives/enableAllFilters.js +++ b/dist/natives/enableAllFilters.js @@ -4,19 +4,23 @@ const forgescript_1 = require("@tryforge/forgescript"); const constants_1 = require("../utils/constants"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$enableAllFilters", - version: "1.0.0", - description: "Enable the provided FFMPEG filters.", + name: '$enableAllFilters', + version: '1.0.0', + description: 'Enable the provided FFMPEG filters.', brackets: true, unwrap: true, - args: [forgescript_1.Arg.restEnum(constants_1.FFMPEGFilters, "Filters", "Filter names to be enabled.")], + args: [ + forgescript_1.Arg.restEnum(constants_1.FFMPEGFilters, 'Filters', 'Filter names to be enabled.'), + ], async execute(ctx, [filters]) { - const queue = (0, discord_player_1.useQueue)(ctx.guild); + const queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (!queue) + return this.customError('No queue found.'); const allFilters = queue.filters.ffmpeg.getFiltersDisabled(); for (const filter of filters) { const foundFilter = allFilters.find((fil) => fil.toLowerCase() === filter.toLowerCase()); await queue.filters.ffmpeg.toggle(foundFilter); } return this.success(); - } + }, }); diff --git a/dist/natives/findExtractor.js b/dist/natives/findExtractor.js new file mode 100644 index 0000000..629e59a --- /dev/null +++ b/dist/natives/findExtractor.js @@ -0,0 +1,22 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); +const forgescript_1 = require("@tryforge/forgescript"); +exports.default = new forgescript_1.NativeFunction({ + name: '$findExtractor', + version: '1.0.0', + description: 'Find an extractor by name.', + brackets: true, + unwrap: true, + args: [forgescript_1.Arg.requiredString('Name', 'The name of the extractor to find.')], + async execute(ctx, [query]) { + const globalPlayer = ctx.getExtension(ForgeMusic_1.ForgeMusic).player; + if (!globalPlayer) + return this.customError('Unable to find an instance of player!'); + const extractors = Array.from(globalPlayer.extractors.store.values()); + let result; + result = extractors.find((ex) => ex.identifier.toLowerCase().includes(query.toLowerCase()) || + ex.constructor.name.toLowerCase().includes(query.toLowerCase()))?.identifier; + return this.success(result); + }, +}); diff --git a/dist/natives/getAvailableProviders.js b/dist/natives/getAvailableProviders.js index 0123040..c55cb09 100644 --- a/dist/natives/getAvailableProviders.js +++ b/dist/natives/getAvailableProviders.js @@ -3,14 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$getAvailableProviders", - version: "1.0.0", - description: "Get the available audio providers.", + name: '$getAvailableProviders', + version: '1.0.0', + description: 'Get the available audio providers.', unwrap: false, output: forgescript_1.ArgType.String, execute(ctx) { - const names = [...(0, discord_player_1.useMainPlayer)().extractors.store.values()] - .map((x) => x.constructor.name.replace("Extractor", "").replace(/[^a-zA-Z+]/g, "")); - return this.success(names.join(",")); - } + const names = [...(0, discord_player_1.useMainPlayer)().extractors.store.values()].map((x) => x.constructor.name + .replace('Extractor', '') + .replace(/[^a-zA-Z+]/g, '')); + return this.success(names.join(',')); + }, }); diff --git a/dist/natives/getDisabledFilters.js b/dist/natives/getDisabledFilters.js index f30c282..2ac20a8 100644 --- a/dist/natives/getDisabledFilters.js +++ b/dist/natives/getDisabledFilters.js @@ -3,13 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$getDisabledFilters", - version: "1.0.0", - description: "Return the disabled FFMPEG filters.", + name: '$getDisabledFilters', + version: '1.0.0', + description: 'Return the disabled FFMPEG filters.', unwrap: false, output: forgescript_1.ArgType.String, execute(ctx) { - const queue = (0, discord_player_1.useQueue)(ctx.guild); - return this.success(queue.filters.ffmpeg.getFiltersDisabled().join(",")); - } + const queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (!queue) + return this.customError('No queue found.'); + return this.success(queue.filters.ffmpeg.getFiltersDisabled().join(',')); + }, }); diff --git a/dist/natives/getEnabledFilters.js b/dist/natives/getEnabledFilters.js index f636ebe..9d90b5d 100644 --- a/dist/natives/getEnabledFilters.js +++ b/dist/natives/getEnabledFilters.js @@ -3,13 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$getEnabledFilters", - version: "1.0.0", - description: "Return the enabled FFMPEG filters.", + name: '$getEnabledFilters', + version: '1.0.0', + description: 'Return the enabled FFMPEG filters.', unwrap: false, output: forgescript_1.ArgType.String, execute(ctx) { - const queue = (0, discord_player_1.useQueue)(ctx.guild); - return this.success(queue.filters.ffmpeg.getFiltersEnabled().join(",")); - } + const queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (!queue) + return this.customError('No queue found.'); + return this.success(queue.filters.ffmpeg.getFiltersEnabled().join(',')); + }, }); diff --git a/dist/natives/getLoopMode.js b/dist/natives/getLoopMode.js index e2e50d5..9856d3f 100644 --- a/dist/natives/getLoopMode.js +++ b/dist/natives/getLoopMode.js @@ -3,13 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true }); const discord_player_1 = require("discord-player"); const forgescript_1 = require("@tryforge/forgescript"); exports.default = new forgescript_1.NativeFunction({ - name: "$getLoopMode", - version: "1.0.0", - description: "Returns the state of the loop mode.", + name: '$getLoopMode', + version: '1.0.0', + description: 'Returns the state of the loop mode.', unwrap: false, output: discord_player_1.QueueRepeatMode, execute(ctx) { const player = (0, discord_player_1.useMainPlayer)(); - return this.success(Object.keys(discord_player_1.QueueRepeatMode)[player.queues.get(ctx.guild).repeatMode]); - } + return this.success(Object.keys(discord_player_1.QueueRepeatMode)[player.queues.get(ctx.guild.id).repeatMode]); + }, }); diff --git a/dist/natives/getVolume.js b/dist/natives/getVolume.js index 8e16b5d..7228dae 100644 --- a/dist/natives/getVolume.js +++ b/dist/natives/getVolume.js @@ -1,17 +1,17 @@ "use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); -const getNode_1 = __importDefault(require("../utils/getNode")); +const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$getVolume", - version: "1.0.0", - description: "Get the current volume of the music player.", + name: '$getVolume', + version: '1.0.0', + description: 'Get the current volume of the music player.', unwrap: false, output: forgescript_1.ArgType.Number, execute(ctx) { - return this.success((0, getNode_1.default)(ctx).volume); - } + const queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (!queue) + return this.customError('No queue found.'); + return this.success(queue.node.volume); + }, }); diff --git a/dist/natives/hasMusicNode.js b/dist/natives/hasMusicNode.js index 1d3facb..d988002 100644 --- a/dist/natives/hasMusicNode.js +++ b/dist/natives/hasMusicNode.js @@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$hasMusicNode", - version: "1.0.0", - description: "Check whether the current guild has a music node created.", + name: '$hasMusicNode', + version: '1.0.0', + description: 'Check whether the current guild has a music node created.', unwrap: false, output: forgescript_1.ArgType.Boolean, execute(ctx) { - return this.success((0, discord_player_1.useMainPlayer)().nodes.has(ctx.guild)); - } + return this.success((0, discord_player_1.useMainPlayer)().nodes.has(ctx.guild.id)); + }, }); diff --git a/dist/natives/isFilterEnabled.js b/dist/natives/isFilterEnabled.js index fcb1897..28363d8 100644 --- a/dist/natives/isFilterEnabled.js +++ b/dist/natives/isFilterEnabled.js @@ -4,17 +4,23 @@ const forgescript_1 = require("@tryforge/forgescript"); const constants_1 = require("../utils/constants"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$isFilterEnabled", - version: "1.0.0", - description: "Check whether the provided filter is enabled.", + name: '$isFilterEnabled', + version: '1.0.0', + description: 'Check whether the provided filter is enabled.', brackets: true, unwrap: true, - args: [forgescript_1.Arg.requiredEnum(constants_1.FFMPEGFilters, "Filters", "Filter names to be toggled.")], + args: [ + forgescript_1.Arg.requiredEnum(constants_1.FFMPEGFilters, 'Filters', 'Filter names to be toggled.'), + ], output: forgescript_1.ArgType.Boolean, async execute(ctx, [filter]) { - const queue = (0, discord_player_1.useQueue)(ctx.guild); - const allFilters = queue.filters.ffmpeg.getFiltersEnabled().concat(queue.filters.ffmpeg.getFiltersDisabled()); + const queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (!queue) + return this.customError('No queue found.'); + const allFilters = queue.filters.ffmpeg + .getFiltersEnabled() + .concat(queue.filters.ffmpeg.getFiltersDisabled()); const foundFilter = allFilters.find((fil) => fil.toLowerCase() === filter.toLowerCase()); return this.success(queue.filters.ffmpeg.isEnabled(foundFilter)); - } + }, }); diff --git a/dist/natives/isPaused.js b/dist/natives/isPaused.js index 9a094ff..22efffb 100644 --- a/dist/natives/isPaused.js +++ b/dist/natives/isPaused.js @@ -1,17 +1,17 @@ "use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); -const getNode_1 = __importDefault(require("../utils/getNode")); +const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$isPaused", - version: "1.0.0", - description: "Check whether the music player is paused.", + name: '$isPaused', + version: '1.0.0', + description: 'Check whether the music player is paused.', unwrap: false, output: forgescript_1.ArgType.Boolean, execute(ctx) { - return this.success((0, getNode_1.default)(ctx).isPaused()); - } + const queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (!queue) + return this.customError('No queue found.'); + return this.success(queue.node.isPaused()); + }, }); diff --git a/dist/natives/isPlaying.js b/dist/natives/isPlaying.js index ace42af..9226735 100644 --- a/dist/natives/isPlaying.js +++ b/dist/natives/isPlaying.js @@ -3,13 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$isPlaying", - version: "1.0.0", - description: "Check whether the music player is playing a track.", + name: '$isPlaying', + version: '1.0.0', + description: 'Check whether the music player is playing a track.', unwrap: false, output: forgescript_1.ArgType.Boolean, execute(ctx) { const player = (0, discord_player_1.useMainPlayer)(); - return this.success(player.queues.get(ctx.guild).isPlaying()); - } + return this.success(player.queues.get(ctx.guild.id).isPlaying()); + }, }); diff --git a/dist/natives/isQueueHistoryDisabled.js b/dist/natives/isQueueHistoryDisabled.js index 3994a0b..665fe56 100644 --- a/dist/natives/isQueueHistoryDisabled.js +++ b/dist/natives/isQueueHistoryDisabled.js @@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$isQueueHistoryDisabled", - version: "1.0.0", - description: "Returns whether the queue history is disabled.", + name: '$isQueueHistoryDisabled', + version: '1.0.0', + description: 'Returns whether the queue history is disabled.', unwrap: false, output: forgescript_1.ArgType.Boolean, execute(ctx) { - return this.success((0, discord_player_1.useQueue)(ctx.guild).history.disabled); - } + return this.success((0, discord_player_1.useQueue)(ctx.guild.id).history.disabled); + }, }); diff --git a/dist/natives/isQueueHistoryEmpty.js b/dist/natives/isQueueHistoryEmpty.js index 8df347c..056ad10 100644 --- a/dist/natives/isQueueHistoryEmpty.js +++ b/dist/natives/isQueueHistoryEmpty.js @@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$isQueueHistoryEmpty", - version: "1.0.0", - description: "Returns whether the queue history is empty.", + name: '$isQueueHistoryEmpty', + version: '1.0.0', + description: 'Returns whether the queue history is empty.', unwrap: false, output: forgescript_1.ArgType.Boolean, execute(ctx) { - return this.success((0, discord_player_1.useQueue)(ctx.guild).history.isEmpty()); - } + return this.success((0, discord_player_1.useQueue)(ctx.guild.id).history.isEmpty()); + }, }); diff --git a/dist/natives/leaveVoiceChannel.js b/dist/natives/leaveVoiceChannel.js index 84c5ab7..56f24cd 100644 --- a/dist/natives/leaveVoiceChannel.js +++ b/dist/natives/leaveVoiceChannel.js @@ -1,20 +1,17 @@ "use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); const discord_player_1 = require("discord-player"); -const hasQueue_1 = __importDefault(require("../utils/hasQueue")); exports.default = new forgescript_1.NativeFunction({ - name: "$leaveVoiceChannel", - version: "1.0.0", - description: "Destroys the current voice connection.", + name: '$leaveVoiceChannel', + version: '1.0.0', + description: 'Destroys the current voice connection.', unwrap: false, async execute(ctx) { - if ((0, hasQueue_1.default)(ctx)) { - await (0, discord_player_1.useQueue)(ctx.guild).connection.destroy(); + const queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (queue) { + await queue.connection.destroy(); } return this.success(); - } + }, }); diff --git a/dist/natives/moveTrack.js b/dist/natives/moveTrack.js index d41a776..8dd238d 100644 --- a/dist/natives/moveTrack.js +++ b/dist/natives/moveTrack.js @@ -3,20 +3,22 @@ Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$moveTrack", - version: "1.0.0", - description: "Moves the track to a new position.", + name: '$moveTrack', + version: '1.0.0', + description: 'Moves the track to a new position.', brackets: true, unwrap: true, args: [ - forgescript_1.Arg.requiredNumber("Position", "The track position to be moved."), - forgescript_1.Arg.requiredNumber("New Position", "The new position of the track.") + forgescript_1.Arg.requiredNumber('Position', 'The track position to be moved.'), + forgescript_1.Arg.requiredNumber('New Position', 'The new position of the track.'), ], execute(ctx, [position, newPosition]) { const player = (0, discord_player_1.useMainPlayer)(); - const queue = player.queues.get(ctx.guild); + const queue = player.queues.get(ctx.guild.id); + if (!queue) + return this.customError('No queue found.'); const track = queue.node.remove(position); queue.node.insert(track, newPosition); return this.success(); - } + }, }); diff --git a/dist/natives/pauseTrack.js b/dist/natives/pauseTrack.js index 93b42e2..907edca 100644 --- a/dist/natives/pauseTrack.js +++ b/dist/natives/pauseTrack.js @@ -1,17 +1,17 @@ "use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); -const getNode_1 = __importDefault(require("../utils/getNode")); +const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$pauseTrack", - version: "1.0.0", - description: "Pauses the current track.", + name: '$pauseTrack', + version: '1.0.0', + description: 'Pauses the current track.', unwrap: false, output: forgescript_1.ArgType.Boolean, execute(ctx) { - return this.success((0, getNode_1.default)(ctx).pause()); - } + const queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (!queue) + return this.customError('No queue found.'); + return this.success(queue.node.pause()); + }, }); diff --git a/dist/natives/playNext.js b/dist/natives/playNext.js index 466da6d..c008bd7 100644 --- a/dist/natives/playNext.js +++ b/dist/natives/playNext.js @@ -3,13 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$playNext", - version: "1.0.0", - description: "Play the next track in the queue, if any.", + name: '$playNext', + version: '1.0.0', + description: 'Play the next track in the queue, if any.', unwrap: false, output: forgescript_1.ArgType.Unknown, async execute(ctx) { - await (0, discord_player_1.useQueue)(ctx.guild).history.next(); + await (0, discord_player_1.useQueue)(ctx.guild.id).history.next(); return this.success(); - } + }, }); diff --git a/dist/natives/playPrevious.js b/dist/natives/playPrevious.js index 2509fd4..04bb868 100644 --- a/dist/natives/playPrevious.js +++ b/dist/natives/playPrevious.js @@ -3,13 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$playPrevious", - version: "1.0.0", - description: "Play the previous track in the queue history, if any.", + name: '$playPrevious', + version: '1.0.0', + description: 'Play the previous track in the queue history, if any.', unwrap: false, output: forgescript_1.ArgType.Unknown, async execute(ctx) { - await (0, discord_player_1.useQueue)(ctx.guild).history.previous(); + await (0, discord_player_1.useQueue)(ctx.guild.id).history.previous(); return this.success(); - } + }, }); diff --git a/dist/natives/playTrack.js b/dist/natives/playTrack.js index 6111367..21ccbd5 100644 --- a/dist/natives/playTrack.js +++ b/dist/natives/playTrack.js @@ -4,49 +4,52 @@ const discord_player_1 = require("discord-player"); const forgescript_1 = require("@tryforge/forgescript"); const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); exports.default = new forgescript_1.NativeFunction({ - name: "$playTrack", - version: "1.0.0", - description: "Play a track by query.", + name: '$playTrack', + version: '1.0.0', + description: 'Play a track by query.', brackets: true, unwrap: true, args: [ { - name: "Channel ID", - description: "Voice channel ID to play the track on.", + name: 'Channel ID', + description: 'Voice channel ID to play the track on.', type: forgescript_1.ArgType.Channel, required: true, rest: false, - check: (c) => c.isVoiceBased() + check: (c) => c.isVoiceBased(), }, - forgescript_1.Arg.requiredString("Query", "Track name to be searched."), - forgescript_1.Arg.optionalString("Engine", "The query search engine, can be extractor name to target an specific one. (custom)"), - forgescript_1.Arg.optionalEnum(discord_player_1.QueryType, "Fallback Engine", "Fallback search engine to use."), + forgescript_1.Arg.requiredString('Query', 'Track name to be searched.'), + forgescript_1.Arg.optionalString('Engine', 'The query search engine, can be extractor name to target an specific one. (custom)'), + forgescript_1.Arg.optionalEnum(discord_player_1.QueryType, 'Fallback Engine', 'Fallback search engine to use.'), { - name: "Block Extractors", - description: "List of extractors to block.", + name: 'Block Extractors', + description: 'List of extractors to block.', type: forgescript_1.ArgType.String, required: false, - rest: true - } + rest: true, + }, ], - async execute(ctx, [voiceChannel, query, searchEngine, fallbackSearchEngine, blockExtractors]) { + async execute(ctx, [voiceChannel, query, searchEngine, fallbackSearchEngine, blockExtractors,]) { const player = (0, discord_player_1.useMainPlayer)(); const connectOptions = ctx.getExtension(ForgeMusic_1.ForgeMusic).connectOptions ?? {}; const connectionOptionsUnion = { metadata: { text: ctx.channel }, - ...connectOptions + ...connectOptions, }; let executed = true; - const result = await player.play(voiceChannel, query, { + const result = await player + .play(voiceChannel, query, { nodeOptions: connectionOptionsUnion, - searchEngine: searchEngine, - fallbackSearchEngine, - blockExtractors, - requestedBy: ctx.user - }).catch((e) => { + searchEngine: searchEngine || + undefined, + fallbackSearchEngine: fallbackSearchEngine || undefined, + blockExtractors: blockExtractors || undefined, + requestedBy: ctx.user, + }) + .catch((e) => { executed = false; return e; }); return executed ? this.success() : this.error(result); - } + }, }); diff --git a/dist/natives/playerElapsedTime.js b/dist/natives/playerElapsedTime.js index 5028230..bcdf3f8 100644 --- a/dist/natives/playerElapsedTime.js +++ b/dist/natives/playerElapsedTime.js @@ -1,17 +1,17 @@ "use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); -const getNode_1 = __importDefault(require("../utils/getNode")); +const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$playerElapsedTime", - version: "1.0.0", - description: "Returns the elapsed time of the current song in milliseconds.", + name: '$playerElapsedTime', + version: '1.0.0', + description: 'Returns the elapsed time of the current song in milliseconds.', unwrap: false, output: forgescript_1.ArgType.Number, execute(ctx) { - return this.success((0, getNode_1.default)(ctx).getTimestamp().progress * 1000); - } + const queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (!queue) + return this.customError('No queue found.'); + return this.success(queue.node.getTimestamp().progress * 1000); + }, }); diff --git a/dist/natives/queue.js b/dist/natives/queue.js index be780d0..6cf392e 100644 --- a/dist/natives/queue.js +++ b/dist/natives/queue.js @@ -5,23 +5,26 @@ const constants_1 = require("../utils/constants"); const node_vm_1 = require("node:vm"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$queue", - description: "Returns queue songs resolving the given text placeholders.", - version: "1.0.0", + name: '$queue', + description: 'Returns queue songs resolving the given text placeholders.', + version: '1.0.0', brackets: false, unwrap: true, args: [ - forgescript_1.Arg.optionalNumber("Start Index", "The queue song start index."), - forgescript_1.Arg.optionalNumber("Limit", "The amount of queue songs to be retrieved."), - forgescript_1.Arg.optionalString("Text", "The text to be resolved."), - forgescript_1.Arg.optionalString("Separator", "The separator for each result.") + forgescript_1.Arg.optionalNumber('Start Index', 'The queue song start index.'), + forgescript_1.Arg.optionalNumber('Limit', 'The amount of queue songs to be retrieved.'), + forgescript_1.Arg.optionalString('Text', 'The text to be resolved.'), + forgescript_1.Arg.optionalString('Separator', 'The separator for each result.'), ], output: forgescript_1.ArgType.String, async execute(ctx, [index, limit, text, separator]) { - const queue = (0, discord_player_1.useQueue)(ctx.guild); + const queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (!queue) + return this.customError('No queue found.'); const tracks = queue.tracks.data; - text ||= "{position} {track.title} | <@{track.requestedBy.username}>"; - const results = tracks.slice(index ?? 0, limit ?? undefined) + text ||= '{position} {track.title} | <@{track.requestedBy.username}>'; + const results = tracks + .slice(index ?? 0, limit ?? undefined) .map((_, i) => text.replace(/\{position\}/g, String(i + 1))) .map((song, i) => { const matches = song.match(constants_1.PLACEHOLDER_PATTERN) ?? []; @@ -29,10 +32,10 @@ exports.default = new forgescript_1.NativeFunction({ for (const match of matches) { const placeholderValue = match.slice(1, -1); const result = (0, node_vm_1.runInContext)(placeholderValue, context); - song = song.replace(new RegExp(match, "g"), result); + song = song.replace(new RegExp(match, 'g'), result); } return song; }); - return this.success(results.join(separator || ",")); - } + return this.success(results.join(separator || ',')); + }, }); diff --git a/dist/natives/queueEstimatedDuration.js b/dist/natives/queueEstimatedDuration.js index 3b62e84..c08d390 100644 --- a/dist/natives/queueEstimatedDuration.js +++ b/dist/natives/queueEstimatedDuration.js @@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$queueEstimatedDuration", - version: "1.0.0", - description: "Returns the estimated duration of the current guild queue in milliseconds.", + name: '$queueEstimatedDuration', + version: '1.0.0', + description: 'Returns the estimated duration of the current guild queue in milliseconds.', unwrap: false, output: forgescript_1.ArgType.Number, execute(ctx) { - return this.success((0, discord_player_1.useQueue)(ctx.guild).estimatedDuration); - } + return this.success((0, discord_player_1.useQueue)(ctx.guild.id).estimatedDuration); + }, }); diff --git a/dist/natives/queueHistory.js b/dist/natives/queueHistory.js index 6db9c60..bf678bd 100644 --- a/dist/natives/queueHistory.js +++ b/dist/natives/queueHistory.js @@ -5,25 +5,27 @@ const constants_1 = require("../utils/constants"); const node_vm_1 = require("node:vm"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$queueHistory", - description: "Returns queue history songs resolving the given text placeholders.", - version: "1.0.0", + name: '$queueHistory', + description: 'Returns queue history songs resolving the given text placeholders.', + version: '1.0.0', brackets: false, unwrap: true, args: [ - forgescript_1.Arg.optionalNumber("Start Index", "The queue song start index."), - forgescript_1.Arg.optionalNumber("Limit", "The amount of queue history songs to be retrieved."), - forgescript_1.Arg.optionalString("Text", "The text to be resolved."), - forgescript_1.Arg.optionalString("Separator", "The separator for each result.") + forgescript_1.Arg.optionalNumber('Start Index', 'The queue song start index.'), + forgescript_1.Arg.optionalNumber('Limit', 'The amount of queue history songs to be retrieved.'), + forgescript_1.Arg.optionalString('Text', 'The text to be resolved.'), + forgescript_1.Arg.optionalString('Separator', 'The separator for each result.'), ], output: forgescript_1.ArgType.String, async execute(ctx, [index, limit, text, separator]) { - const queue = (0, discord_player_1.useQueue)(ctx.guild); + const queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (!queue) + return this.customError('No queue found.'); let tracks = queue.history.tracks.data; if (index) tracks = tracks.slice(index, limit ?? undefined); const resolvedTracks = []; - text ??= "{position} {track.title} | {track.requestedBy}"; + text ??= '{position} {track.title} | {track.requestedBy}'; let i = 0, advance = () => i++; for (const track of tracks) { let result = text.replace(/\{position\}/g, String(i + 1)); @@ -37,11 +39,11 @@ exports.default = new forgescript_1.NativeFunction({ for (const match of matches) { const placeholderValue = match.slice(1, -1); const placeholderResult = (0, node_vm_1.runInContext)(placeholderValue, context); - result = result.replace(new RegExp(match, "g"), placeholderResult); + result = result.replace(new RegExp(match, 'g'), placeholderResult); } resolvedTracks.push(result); advance(); } - return this.success(resolvedTracks.join(separator ?? ",")); - } + return this.success(resolvedTracks.join(separator ?? ',')); + }, }); diff --git a/dist/natives/queueHistoryLength.js b/dist/natives/queueHistoryLength.js index e76193d..a8832a9 100644 --- a/dist/natives/queueHistoryLength.js +++ b/dist/natives/queueHistoryLength.js @@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$queueHistoryLength", - version: "1.0.0", - description: "Returns the length of the tracks that were played.", + name: '$queueHistoryLength', + version: '1.0.0', + description: 'Returns the length of the tracks that were played.', unwrap: false, output: forgescript_1.ArgType.Number, execute(ctx) { - return this.success((0, discord_player_1.useQueue)(ctx.guild).history.tracks.data.length); - } + return this.success((0, discord_player_1.useQueue)(ctx.guild.id).history.tracks.data.length); + }, }); diff --git a/dist/natives/queueLength.js b/dist/natives/queueLength.js index 4fc3337..6c1d83a 100644 --- a/dist/natives/queueLength.js +++ b/dist/natives/queueLength.js @@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$queueLength", - version: "1.0.0", - description: "Returns the length of the current guild queue.", + name: '$queueLength', + version: '1.0.0', + description: 'Returns the length of the current guild queue.', unwrap: false, output: forgescript_1.ArgType.Number, execute(ctx) { - return this.success((0, discord_player_1.useQueue)(ctx.guild).tracks.size); - } + return this.success((0, discord_player_1.useQueue)(ctx.guild.id).tracks.size); + }, }); diff --git a/dist/natives/queuePing.js b/dist/natives/queuePing.js index df89a8a..4e247bc 100644 --- a/dist/natives/queuePing.js +++ b/dist/natives/queuePing.js @@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$queuePing", - version: "1.0.0", - description: "Returns the latency of the current guild queue.", + name: '$queuePing', + version: '1.0.0', + description: 'Returns the latency of the current guild queue.', unwrap: false, output: forgescript_1.ArgType.Number, execute(ctx) { - return this.success((0, discord_player_1.useQueue)(ctx.guild).ping); - } + return this.success((0, discord_player_1.useQueue)(ctx.guild.id).ping); + }, }); diff --git a/dist/natives/removeTrack.js b/dist/natives/removeTrack.js index 5266377..f9bec0a 100644 --- a/dist/natives/removeTrack.js +++ b/dist/natives/removeTrack.js @@ -1,19 +1,19 @@ "use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); -const getNode_1 = __importDefault(require("../utils/getNode")); +const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$removeTrack", - version: "1.0.0", - description: "Removes the track that is located at the given position.", + name: '$removeTrack', + version: '1.0.0', + description: 'Removes the track that is located at the given position.', brackets: true, unwrap: true, - args: [forgescript_1.Arg.requiredNumber("Position", "The track position to be removed.")], + args: [forgescript_1.Arg.requiredNumber('Position', 'The track position to be removed.')], output: forgescript_1.ArgType.Boolean, execute(ctx, [position]) { - return this.success(!!(0, getNode_1.default)(ctx).remove(position)); - } + const queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (!queue) + return this.customError('No queue found.'); + return this.success(!!queue.node.remove(position)); + }, }); diff --git a/dist/natives/resumeTrack.js b/dist/natives/resumeTrack.js index 4d2a50c..0f8942c 100644 --- a/dist/natives/resumeTrack.js +++ b/dist/natives/resumeTrack.js @@ -1,17 +1,17 @@ "use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); -const getNode_1 = __importDefault(require("../utils/getNode")); +const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$resumeTrack", - version: "1.0.0", - description: "Resumes the current paused track.", + name: '$resumeTrack', + version: '1.0.0', + description: 'Resumes the current paused track.', unwrap: false, output: forgescript_1.ArgType.Boolean, execute(ctx) { - return this.success((0, getNode_1.default)(ctx).resume()); - } + const queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (!queue) + return this.customError('No queue found.'); + return this.success(queue.node.resume()); + }, }); diff --git a/dist/natives/searchTrack.js b/dist/natives/searchTrack.js index 2058041..53163aa 100644 --- a/dist/natives/searchTrack.js +++ b/dist/natives/searchTrack.js @@ -1,52 +1,52 @@ "use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); const discord_player_1 = require("discord-player"); const forgescript_1 = require("@tryforge/forgescript"); const constants_1 = require("../utils/constants"); const node_vm_1 = require("node:vm"); const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); -const hasQueue_1 = __importDefault(require("../utils/hasQueue")); exports.default = new forgescript_1.NativeFunction({ - name: "$searchTrack", - version: "1.0.0", - description: "Search for a track using the given query.", + name: '$searchTrack', + version: '1.0.0', + description: 'Search for a track using the given query.', brackets: true, unwrap: true, args: [ - forgescript_1.Arg.requiredString("Query", "The query to search for."), - forgescript_1.Arg.requiredString("Text Result", "The formatted text result to return."), - forgescript_1.Arg.optionalString("Separator", "The result separator."), - forgescript_1.Arg.optionalString("Engine", "The query search engine, can be extractor name to target an specific one. (custom)"), - forgescript_1.Arg.optionalEnum(discord_player_1.QueryType, "Fallback Engine", "Fallback search engine to use."), - forgescript_1.Arg.optionalNumber("Limit", "The maximum number of results to return."), - forgescript_1.Arg.optionalBoolean("Add To Player", "Whether add the results to the music player."), + forgescript_1.Arg.requiredString('Query', 'The query to search for.'), + forgescript_1.Arg.requiredString('Text Result', 'The formatted text result to return.'), + forgescript_1.Arg.optionalString('Separator', 'The result separator.'), + forgescript_1.Arg.optionalString('Engine', 'The query search engine, can be extractor name to target an specific one. (custom)'), + forgescript_1.Arg.optionalEnum(discord_player_1.QueryType, 'Fallback Engine', 'Fallback search engine to use.'), + forgescript_1.Arg.optionalNumber('Limit', 'The maximum number of results to return.'), + forgescript_1.Arg.optionalBoolean('Add To Player', 'Whether add the results to the music player.'), { - name: "Block Extractors", - description: "List of extractors to block.", + name: 'Block Extractors', + description: 'List of extractors to block.', type: forgescript_1.ArgType.String, required: false, - rest: true - } + rest: true, + }, ], - async execute(ctx, [query, text, separator, engine, fallbackEngine, limit, addToPlayer, blockedExtractors]) { - const searchResult = await ctx.client.getExtension(ForgeMusic_1.ForgeMusic).player.search(query, { - searchEngine: engine, - fallbackSearchEngine: fallbackEngine, - blockExtractors: blockedExtractors, - requestedBy: ctx.user - }); + async execute(ctx, [query, text, separator, engine, fallbackEngine, limit, addToPlayer, blockedExtractors,]) { + const searchOptions = { + searchEngine: engine || undefined, + fallbackSearchEngine: fallbackEngine || undefined, + blockExtractors: blockedExtractors || undefined, + requestedBy: ctx.user, + }; + const searchResult = await ctx.client + .getExtension(ForgeMusic_1.ForgeMusic) + .player.search(query, searchOptions); const connectOptions = ctx.getExtension(ForgeMusic_1.ForgeMusic).connectOptions ?? {}; const connectionOptionsUnion = { metadata: { text: ctx.channel }, - ...connectOptions + ...connectOptions, }; let tracks = searchResult.tracks; if (limit && tracks.length > limit) tracks = tracks.slice(0, limit); - const formattedTracks = tracks.map((_, i) => text.replace(/\{position\}/g, String(i + 1))) + const formattedTracks = tracks + .map((_, i) => text.replace(/\{position\}/g, String(i + 1))) .map((trackText, i) => { const track = tracks[i]; const matches = trackText.match(constants_1.PLACEHOLDER_PATTERN) ?? []; @@ -54,16 +54,21 @@ exports.default = new forgescript_1.NativeFunction({ for (const match of matches) { const placeholderValue = match.slice(1, -1); const result = (0, node_vm_1.runInContext)(placeholderValue, context); - trackText = trackText.replace(new RegExp(match, "g"), result); + trackText = trackText.replace(new RegExp(match, 'g'), result); } return trackText; }); - if (addToPlayer && (0, hasQueue_1.default)(ctx)) - (0, discord_player_1.useQueue)(ctx.guild).addTrack(tracks); - else if (addToPlayer && !(0, hasQueue_1.default)(ctx)) { - const queue = await ctx.client.getExtension(ForgeMusic_1.ForgeMusic).player.queues.create(ctx.guild, connectionOptionsUnion); + let queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (addToPlayer && queue) + queue.addTrack(tracks); + else if (addToPlayer && !queue) { + queue = await ctx.client + .getExtension(ForgeMusic_1.ForgeMusic) + .player.queues.create(ctx.guild.id, connectionOptionsUnion); queue.addTrack(tracks); } - return this.success(searchResult.tracks.length > 0 ? formattedTracks.join(separator ?? ",") : ""); - } + return this.success(searchResult.tracks.length > 0 + ? formattedTracks.join(separator ?? ',') + : ''); + }, }); diff --git a/dist/natives/seekTrack.js b/dist/natives/seekTrack.js index b080bc2..5063a9f 100644 --- a/dist/natives/seekTrack.js +++ b/dist/natives/seekTrack.js @@ -1,19 +1,19 @@ "use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); -const getNode_1 = __importDefault(require("../utils/getNode")); +const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$seekTrack", - version: "1.0.0", - description: "Seeks a track.", + name: '$seekTrack', + version: '1.0.0', + description: 'Seeks a track.', brackets: true, unwrap: true, - args: [forgescript_1.Arg.requiredTime("Duration", "Seek duration to be applied.")], + args: [forgescript_1.Arg.requiredTime('Duration', 'Seek duration to be applied.')], output: forgescript_1.ArgType.Boolean, async execute(ctx, [duration]) { - return this.success(await (0, getNode_1.default)(ctx).seek(duration)); - } + const queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (!queue) + return this.customError('No queue found.'); + return this.success(await queue.node.seek(duration)); + }, }); diff --git a/dist/natives/setLoopMode.js b/dist/natives/setLoopMode.js index 276a7ca..44b0314 100644 --- a/dist/natives/setLoopMode.js +++ b/dist/natives/setLoopMode.js @@ -3,15 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true }); const discord_player_1 = require("discord-player"); const forgescript_1 = require("@tryforge/forgescript"); exports.default = new forgescript_1.NativeFunction({ - name: "$setLoopMode", - version: "1.0.0", - description: "Set the loop mode of the music player.", + name: '$setLoopMode', + version: '1.0.0', + description: 'Set the loop mode of the music player.', brackets: true, unwrap: true, - args: [forgescript_1.Arg.requiredString("Mode", "The loop mode of the music player.")], + args: [forgescript_1.Arg.requiredString('Mode', 'The loop mode of the music player.')], execute(ctx, [mode]) { const player = (0, discord_player_1.useMainPlayer)(); - player.queues.get(ctx.guild).setRepeatMode(discord_player_1.QueueRepeatMode[mode.toUpperCase()]); + player.queues + .get(ctx.guild.id) + .setRepeatMode(discord_player_1.QueueRepeatMode[mode.toUpperCase()]); return this.success(); - } + }, }); diff --git a/dist/natives/setVolume.js b/dist/natives/setVolume.js index 23f8c85..3b5662e 100644 --- a/dist/natives/setVolume.js +++ b/dist/natives/setVolume.js @@ -1,19 +1,19 @@ "use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); -const getNode_1 = __importDefault(require("../utils/getNode")); +const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$setVolume", - version: "1.0.0", - description: "Set the volume of the music player.", + name: '$setVolume', + version: '1.0.0', + description: 'Set the volume of the music player.', brackets: true, unwrap: true, - args: [forgescript_1.Arg.requiredNumber("Amount", "The volume amount to be applied.")], + args: [forgescript_1.Arg.requiredNumber('Amount', 'The volume amount to be applied.')], execute(ctx, [amount]) { - (0, getNode_1.default)(ctx).setVolume(amount); + const queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (!queue) + return this.customError('No queue found.'); + queue.node.setVolume(amount); return this.success(); - } + }, }); diff --git a/dist/natives/shuffleQueue.js b/dist/natives/shuffleQueue.js index dbcfa84..8358117 100644 --- a/dist/natives/shuffleQueue.js +++ b/dist/natives/shuffleQueue.js @@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$shuffleQueue", - version: "1.0.0", - description: "Shuffle the queue when the current track ends, unlike $shuffleTracks that can be undone, this function does not mutates the queue.", + name: '$shuffleQueue', + version: '1.0.0', + description: 'Shuffle the queue when the current track ends, unlike $shuffleTracks that can be undone, this function does not mutates the queue.', unwrap: false, output: forgescript_1.ArgType.Boolean, execute(ctx) { - return this.success((0, discord_player_1.useQueue)(ctx.guild).enableShuffle(true)); - } + return this.success((0, discord_player_1.useQueue)(ctx.guild.id).enableShuffle(true)); + }, }); diff --git a/dist/natives/shuffleTracks.js b/dist/natives/shuffleTracks.js index 0aaac8c..98cdb5d 100644 --- a/dist/natives/shuffleTracks.js +++ b/dist/natives/shuffleTracks.js @@ -3,13 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$shuffleTracks", - version: "1.0.0", - description: "Shuffle the current guild queue.", + name: '$shuffleTracks', + version: '1.0.0', + description: 'Shuffle the current guild queue.', unwrap: false, execute(ctx) { const player = (0, discord_player_1.useMainPlayer)(); - player.queues.get(ctx.guild).tracks.shuffle(); + player.queues.get(ctx.guild.id).tracks.shuffle(); return this.success(); - } + }, }); diff --git a/dist/natives/skipTo.js b/dist/natives/skipTo.js index 238a146..6dd444f 100644 --- a/dist/natives/skipTo.js +++ b/dist/natives/skipTo.js @@ -1,19 +1,19 @@ "use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); -const getNode_1 = __importDefault(require("../utils/getNode")); +const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$skipTo", - version: "1.0.0", - description: "Skip the current track to the given position.", + name: '$skipTo', + version: '1.0.0', + description: 'Skip the current track to the given position.', brackets: true, unwrap: true, - args: [forgescript_1.Arg.requiredNumber("Position", "The track position to be played.")], + args: [forgescript_1.Arg.requiredNumber('Position', 'The track position to be played.')], output: forgescript_1.ArgType.Boolean, execute(ctx, [position]) { - return this.success((0, getNode_1.default)(ctx).skipTo(position)); - } + const queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (!queue) + return this.customError('No queue found.'); + return this.success(queue.node.skipTo(position)); + }, }); diff --git a/dist/natives/skipTrack.js b/dist/natives/skipTrack.js index 8f715f7..3ae8b8b 100644 --- a/dist/natives/skipTrack.js +++ b/dist/natives/skipTrack.js @@ -1,17 +1,17 @@ "use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); -const getNode_1 = __importDefault(require("../utils/getNode")); +const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$skipTrack", - version: "1.0.0", - description: "Skip the current track.", + name: '$skipTrack', + version: '1.0.0', + description: 'Skip the current track.', unwrap: false, output: forgescript_1.ArgType.Boolean, execute(ctx) { - return this.success((0, getNode_1.default)(ctx).skip()); - } + const queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (!queue) + return this.customError('No queue found.'); + return this.success(queue.node.skip()); + }, }); diff --git a/dist/natives/stopTrack.js b/dist/natives/stopTrack.js index 6053b94..1da635d 100644 --- a/dist/natives/stopTrack.js +++ b/dist/natives/stopTrack.js @@ -1,17 +1,17 @@ "use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); -const getNode_1 = __importDefault(require("../utils/getNode")); +const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$stopTrack", - version: "1.0.0", - description: "Forces to stop the current track.", + name: '$stopTrack', + version: '1.0.0', + description: 'Forces to stop the current track.', unwrap: false, output: forgescript_1.ArgType.Boolean, execute(ctx) { - return this.success((0, getNode_1.default)(ctx).stop(true)); - } + const queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (!queue) + return this.customError('No queue found.'); + return this.success(queue.node.stop(true)); + }, }); diff --git a/dist/natives/toggleFilters.js b/dist/natives/toggleFilters.js index ebe2278..544d5dd 100644 --- a/dist/natives/toggleFilters.js +++ b/dist/natives/toggleFilters.js @@ -4,19 +4,25 @@ const forgescript_1 = require("@tryforge/forgescript"); const constants_1 = require("../utils/constants"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$toggleFilters", - version: "1.0.0", - description: "Toggle the provided FFMPEG filters.", + name: '$toggleFilters', + version: '1.0.0', + description: 'Toggle the provided FFMPEG filters.', brackets: true, unwrap: true, - args: [forgescript_1.Arg.restEnum(constants_1.FFMPEGFilters, "Filters", "Filter names to be toggled.")], + args: [ + forgescript_1.Arg.restEnum(constants_1.FFMPEGFilters, 'Filters', 'Filter names to be toggled.'), + ], async execute(ctx, [filters]) { - const queue = (0, discord_player_1.useQueue)(ctx.guild); - const allFilters = queue.filters.ffmpeg.getFiltersEnabled().concat(queue.filters.ffmpeg.getFiltersDisabled()); + const queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (!queue) + return this.customError('No queue found.'); + const allFilters = queue.filters.ffmpeg + .getFiltersEnabled() + .concat(queue.filters.ffmpeg.getFiltersDisabled()); for (const filter of filters) { const foundFilter = allFilters.find((fil) => fil.toLowerCase() === filter.toLowerCase()); await queue.filters.ffmpeg.toggle(foundFilter); } return this.success(); - } + }, }); diff --git a/dist/natives/trackInfo.js b/dist/natives/trackInfo.js index ff84b3c..e4435a6 100644 --- a/dist/natives/trackInfo.js +++ b/dist/natives/trackInfo.js @@ -3,21 +3,21 @@ Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$trackInfo", - version: "1.0.0", - description: "Returns information of the current track.", + name: '$trackInfo', + version: '1.0.0', + description: 'Returns information of the current track.', brackets: true, unwrap: true, - args: [ - forgescript_1.Arg.restString("Properties", "The track properties to be accesed.") - ], + args: [forgescript_1.Arg.restString('Properties', 'The track properties to be accesed.')], output: forgescript_1.ArgType.String, execute(ctx, [properties]) { - const queue = (0, discord_player_1.useQueue)(ctx.guild); + const queue = (0, discord_player_1.useQueue)(ctx.guild.id); + if (!queue) + return this.customError('No queue found.'); const track = queue.currentTrack; - ctx.setEnvironmentKey("myTrack", track); - const got = ctx.getEnvironmentKey(...["myTrack", ...properties]); - ctx.deleteEnvironmentKey("myTrack"); + ctx.setEnvironmentKey('myTrack', track); + const got = ctx.getEnvironmentKey(...['myTrack', ...properties]); + ctx.deleteEnvironmentKey('myTrack'); return this.success(got); - } + }, }); diff --git a/dist/natives/unshuffleQueue.js b/dist/natives/unshuffleQueue.js index d30be44..485047c 100644 --- a/dist/natives/unshuffleQueue.js +++ b/dist/natives/unshuffleQueue.js @@ -3,12 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true }); const forgescript_1 = require("@tryforge/forgescript"); const discord_player_1 = require("discord-player"); exports.default = new forgescript_1.NativeFunction({ - name: "$unshuffleQueue", - version: "1.0.0", - description: "Disable shuffle mode for the queue.", + name: '$unshuffleQueue', + version: '1.0.0', + description: 'Disable shuffle mode for the queue.', unwrap: false, output: forgescript_1.ArgType.Boolean, execute(ctx) { - return this.success((0, discord_player_1.useQueue)(ctx.guild).disableShuffle()); - } + return this.success((0, discord_player_1.useQueue)(ctx.guild.id).disableShuffle()); + }, }); diff --git a/dist/utils/getNode.js b/dist/utils/getNode.js deleted file mode 100644 index 37cc219..0000000 --- a/dist/utils/getNode.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.default = default_1; -const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); -function default_1(ctx) { - const extension = ctx.client.getExtension(ForgeMusic_1.ForgeMusic); - const queue = extension.player.queues.get(ctx.guild); - return queue.node; -} diff --git a/dist/utils/getQueue.js b/dist/utils/getQueue.js deleted file mode 100644 index 24a5d9b..0000000 --- a/dist/utils/getQueue.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.default = default_1; -const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); -function default_1(ctx) { - const extension = ctx.client.getExtension(ForgeMusic_1.ForgeMusic); - const queue = extension.player.queues.get(ctx.guild); - return queue; -} diff --git a/dist/utils/getVersion.js b/dist/utils/getVersion.js index fbc94c5..f4d2895 100644 --- a/dist/utils/getVersion.js +++ b/dist/utils/getVersion.js @@ -8,7 +8,7 @@ const path_1 = require("path"); * @returns {string} */ function getVersion() { - const stringContent = (0, fs_1.readFileSync)((0, path_1.join)(process.cwd(), "package.json"), "utf-8"); + const stringContent = (0, fs_1.readFileSync)((0, path_1.join)(process.cwd(), 'package.json'), 'utf-8'); const data = JSON.parse(stringContent); return data.version; } diff --git a/dist/utils/hasQueue.js b/dist/utils/hasQueue.js deleted file mode 100644 index 3ee9323..0000000 --- a/dist/utils/hasQueue.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.default = default_1; -const ForgeMusic_1 = require("../classes/structures/ForgeMusic"); -function default_1(ctx) { - const extension = ctx.client.getExtension(ForgeMusic_1.ForgeMusic); - return extension.player.queues.has(ctx.guild); -} diff --git a/docs/findExtractor.md b/docs/findExtractor.md new file mode 100644 index 0000000..5f475cd --- /dev/null +++ b/docs/findExtractor.md @@ -0,0 +1,12 @@ +# $findExtractor +Find an extractor by name. +## Usage +``` +$findExtractor[name] +``` +## Fields +| Name | Description | Type | Required | Rest | +|------|------------------------------------|--------|----------|------| +| Name | The name of the extractor to find. | String | Yes | No | + +View source on [GitHub](https://github.com/Cyberghxst/forgemusic/blob/dev/src/natives/findExtractor.ts) \ No newline at end of file diff --git a/docs/trackInfo.md b/docs/trackInfo.md index 604f2b2..11470a9 100644 --- a/docs/trackInfo.md +++ b/docs/trackInfo.md @@ -2,12 +2,12 @@ Returns information of the current track. ## Usage ``` -$trackInfo[...properties] +$trackInfo[...properties?] ``` ## Fields | Name | Description | Type | Required | Rest | |------------|-------------------------------------|--------|----------|------| -| Properties | The track properties to be accesed. | String | Yes | Yes | +| Properties | The track properties to be accesed. | String | No | Yes | ## Output > String diff --git a/metadata/events.json b/metadata/events.json index be8cf54..07c5a2c 100644 --- a/metadata/events.json +++ b/metadata/events.json @@ -1 +1 @@ -[{"name":"audioFiltersUpdate","description":"Executed when FFMPEG audio filters are updated.","version":"1.0.0"},{"name":"audioTrackAdd","description":"Executed when audio track is added to the queue.","version":"1.0.0"},{"name":"audioTrackRemove","description":"Executed when audio track is removed from the queue.","version":"1.0.0"},{"name":"audioTracksAdd","description":"Executed when multiple audio track are added to the queue.","version":"1.0.0"},{"name":"biquadFiltersUpdate","description":"Executed when biquad filters is updated.","version":"1.0.0"},{"name":"channelPopulate","description":"Executed when a voice channel is populated.","version":"1.0.0"},{"name":"connection","description":"Executed when a connection is created.","version":"1.0.0"},{"name":"connectionDestroyed","description":"Executed when a connection is destroyed.","version":"1.0.0"},{"name":"debug","description":"Executed when the queue sends a debug info.","version":"1.0.0"},{"name":"disconnect","description":"Executed when the bot is disconnected from the channel.","version":"1.0.0"},{"name":"dspUpdate","description":"Executed when dsp filters are updated.","version":"1.0.0"},{"name":"emptyChannel","description":"Executed when the voice channel is empty.","version":"1.0.0"},{"name":"emptyQueue","description":"Executed when the queue is empty.","version":"1.0.0"},{"name":"equalizerUpdate","description":"Executed when equalizer config is updated.","version":"1.0.0"},{"name":"error","description":"Executed when the queue encounters error.","version":"1.0.0"},{"name":"playerError","description":"Executed when the audio player errors while streaming audio track.","version":"1.0.0"},{"name":"playerFinish","description":"Executed when the audio player finishes streaming audio track.","version":"1.0.0"},{"name":"playerPause","description":"Executed when audio player is paused.","version":"1.0.0"},{"name":"playerResume","description":"Executed when audio player is resumed.","version":"1.0.0"},{"name":"playerSkip","description":"Executed when the audio player skips current track.","version":"1.0.0"},{"name":"playerStart","description":"Executed when the audio player starts streaming audio track.","version":"1.0.0"},{"name":"playerTrigger","description":"Executed when the audio player is triggered.","version":"1.0.0"},{"name":"queueCreate","description":"Executed when a queue is successfully created.","version":"1.0.0"},{"name":"queueDelete","description":"Executed when a queue is successfully deleted.","version":"1.0.0"},{"name":"volumeChange","description":"Executed when audio player's volume is changed.","version":"1.0.0"}] \ No newline at end of file +[{"name":"audioFiltersUpdate","description":"Executed when FFMPEG audio filters are updated.","version":"1.0.1"},{"name":"audioTrackAdd","description":"Executed when audio track is added to the queue.","version":"1.0.1"},{"name":"audioTrackRemove","description":"Executed when audio track is removed from the queue.","version":"1.0.1"},{"name":"audioTracksAdd","description":"Executed when multiple audio track are added to the queue.","version":"1.0.1"},{"name":"biquadFiltersUpdate","description":"Executed when biquad filters is updated.","version":"1.0.1"},{"name":"channelPopulate","description":"Executed when a voice channel is populated.","version":"1.0.1"},{"name":"connection","description":"Executed when a connection is created.","version":"1.0.1"},{"name":"connectionDestroyed","description":"Executed when a connection is destroyed.","version":"1.0.1"},{"name":"debug","description":"Executed when the queue sends a debug info.","version":"1.0.1"},{"name":"disconnect","description":"Executed when the bot is disconnected from the channel.","version":"1.0.1"},{"name":"dspUpdate","description":"Executed when dsp filters are updated.","version":"1.0.1"},{"name":"emptyChannel","description":"Executed when the voice channel is empty.","version":"1.0.1"},{"name":"emptyQueue","description":"Executed when the queue is empty.","version":"1.0.1"},{"name":"equalizerUpdate","description":"Executed when equalizer config is updated.","version":"1.0.1"},{"name":"error","description":"Executed when the queue encounters error.","version":"1.0.1"},{"name":"playerError","description":"Executed when the audio player errors while streaming audio track.","version":"1.0.1"},{"name":"playerFinish","description":"Executed when the audio player finishes streaming audio track.","version":"1.0.1"},{"name":"playerPause","description":"Executed when audio player is paused.","version":"1.0.1"},{"name":"playerResume","description":"Executed when audio player is resumed.","version":"1.0.1"},{"name":"playerSkip","description":"Executed when the audio player skips current track.","version":"1.0.1"},{"name":"playerStart","description":"Executed when the audio player starts streaming audio track.","version":"1.0.1"},{"name":"playerTrigger","description":"Executed when the audio player is triggered.","version":"1.0.1"},{"name":"queueCreate","description":"Executed when a queue is successfully created.","version":"1.0.1"},{"name":"queueDelete","description":"Executed when a queue is successfully deleted.","version":"1.0.1"},{"name":"volumeChange","description":"Executed when audio player's volume is changed.","version":"1.0.1"}] \ No newline at end of file diff --git a/metadata/functions.json b/metadata/functions.json index b24f0f8..8313293 100644 --- a/metadata/functions.json +++ b/metadata/functions.json @@ -1 +1 @@ -[{"name":"$clearQueue","version":"1.0.0","description":"Clear the guild queue.","unwrap":false},{"name":"$clearQueueHistory","version":"1.0.0","description":"Clear the queue history.","unwrap":false},{"name":"$currentTrackTotalDuration","version":"1.0.0","description":"Returns the total duration of the current audio track.","unwrap":false,"output":["Number"]},{"name":"$deleteQueue","version":"1.0.0","description":"Deletes the queue of the current guild.","unwrap":false,"output":["Unknown"]},{"name":"$disableAllFilters","version":"1.0.0","description":"Disable the provided FFMPEG filters.","brackets":true,"unwrap":true,"args":[{"name":"Filters","description":"Filter names to be disabled.","rest":true,"type":"Enum","enum":["Bassboost_low","Bassboost","Bassboost_high","8d","Vaporwave","Nightcore","Lofi","Phaser","Tremolo","Vibrato","Reverse","Treble","Normalizer2","Normalizer","Surrounding","Pulsator","Subboost","Karaoke","Flanger","Gate","Haas","Mcompand","Mono","Mstlr","Mstrr","Compressor","Expander","Softlimiter","Chorus","Chorus2d","Chorus3d","Fadein","Dim","Earrape","Silenceremove"],"enumName":"FFMPEGFilters"}]},{"name":"$enableAllFilters","version":"1.0.0","description":"Enable the provided FFMPEG filters.","brackets":true,"unwrap":true,"args":[{"name":"Filters","description":"Filter names to be enabled.","rest":true,"type":"Enum","enum":["Bassboost_low","Bassboost","Bassboost_high","8d","Vaporwave","Nightcore","Lofi","Phaser","Tremolo","Vibrato","Reverse","Treble","Normalizer2","Normalizer","Surrounding","Pulsator","Subboost","Karaoke","Flanger","Gate","Haas","Mcompand","Mono","Mstlr","Mstrr","Compressor","Expander","Softlimiter","Chorus","Chorus2d","Chorus3d","Fadein","Dim","Earrape","Silenceremove"],"enumName":"FFMPEGFilters"}]},{"name":"$getAvailableProviders","version":"1.0.0","description":"Get the available audio providers.","unwrap":false,"output":["String"]},{"name":"$getDisabledFilters","version":"1.0.0","description":"Return the disabled FFMPEG filters.","unwrap":false,"output":["String"]},{"name":"$getEnabledFilters","version":"1.0.0","description":"Return the enabled FFMPEG filters.","unwrap":false,"output":["String"]},{"name":"$getLoopMode","version":"1.0.0","description":"Returns the state of the loop mode.","unwrap":false,"output":["QueueRepeatMode"]},{"name":"$getVolume","version":"1.0.0","description":"Get the current volume of the music player.","unwrap":false,"output":["Number"]},{"name":"$hasMusicNode","version":"1.0.0","description":"Check whether the current guild has a music node created.","unwrap":false,"output":["Boolean"]},{"name":"$isFilterEnabled","version":"1.0.0","description":"Check whether the provided filter is enabled.","brackets":true,"unwrap":true,"args":[{"name":"Filters","description":"Filter names to be toggled.","rest":false,"required":true,"type":"Enum","enum":["Bassboost_low","Bassboost","Bassboost_high","8d","Vaporwave","Nightcore","Lofi","Phaser","Tremolo","Vibrato","Reverse","Treble","Normalizer2","Normalizer","Surrounding","Pulsator","Subboost","Karaoke","Flanger","Gate","Haas","Mcompand","Mono","Mstlr","Mstrr","Compressor","Expander","Softlimiter","Chorus","Chorus2d","Chorus3d","Fadein","Dim","Earrape","Silenceremove"],"enumName":"FFMPEGFilters"}],"output":["Boolean"]},{"name":"$isPaused","version":"1.0.0","description":"Check whether the music player is paused.","unwrap":false,"output":["Boolean"]},{"name":"$isPlaying","version":"1.0.0","description":"Check whether the music player is playing a track.","unwrap":false,"output":["Boolean"]},{"name":"$isQueueHistoryDisabled","version":"1.0.0","description":"Returns whether the queue history is disabled.","unwrap":false,"output":["Boolean"]},{"name":"$isQueueHistoryEmpty","version":"1.0.0","description":"Returns whether the queue history is empty.","unwrap":false,"output":["Boolean"]},{"name":"$leaveVoiceChannel","version":"1.0.0","description":"Destroys the current voice connection.","unwrap":false},{"name":"$moveTrack","version":"1.0.0","description":"Moves the track to a new position.","brackets":true,"unwrap":true,"args":[{"name":"Position","description":"The track position to be moved.","rest":false,"required":true,"type":"Number"},{"name":"New Position","description":"The new position of the track.","rest":false,"required":true,"type":"Number"}]},{"name":"$pauseTrack","version":"1.0.0","description":"Pauses the current track.","unwrap":false,"output":["Boolean"]},{"name":"$playerElapsedTime","version":"1.0.0","description":"Returns the elapsed time of the current song in milliseconds.","unwrap":false,"output":["Number"]},{"name":"$playNext","version":"1.0.0","description":"Play the next track in the queue, if any.","unwrap":false,"output":["Unknown"]},{"name":"$playPrevious","version":"1.0.0","description":"Play the previous track in the queue history, if any.","unwrap":false,"output":["Unknown"]},{"name":"$playTrack","version":"1.0.0","description":"Play a track by query.","brackets":true,"unwrap":true,"args":[{"name":"Channel ID","description":"Voice channel ID to play the track on.","type":"Channel","required":true,"rest":false},{"name":"Query","description":"Track name to be searched.","rest":false,"required":true,"type":"String"},{"name":"Engine","description":"The query search engine, can be extractor name to target an specific one. (custom)","rest":false,"type":"String"},{"name":"Fallback Engine","description":"Fallback search engine to use.","rest":false,"type":"Enum","enum":["AUTO","YOUTUBE","YOUTUBE_PLAYLIST","SOUNDCLOUD_TRACK","SOUNDCLOUD_PLAYLIST","SOUNDCLOUD","SPOTIFY_SONG","SPOTIFY_ALBUM","SPOTIFY_PLAYLIST","SPOTIFY_SEARCH","FACEBOOK","VIMEO","ARBITRARY","REVERBNATION","YOUTUBE_SEARCH","YOUTUBE_VIDEO","SOUNDCLOUD_SEARCH","APPLE_MUSIC_SONG","APPLE_MUSIC_ALBUM","APPLE_MUSIC_PLAYLIST","APPLE_MUSIC_SEARCH","FILE","AUTO_SEARCH","DISCORD_PLAYER_BLOB"],"enumName":"QueryType"},{"name":"Block Extractors","description":"List of extractors to block.","type":"String","required":false,"rest":true}]},{"name":"$queue","description":"Returns queue songs resolving the given text placeholders.","version":"1.0.0","brackets":false,"unwrap":true,"args":[{"name":"Start Index","description":"The queue song start index.","rest":false,"type":"Number"},{"name":"Limit","description":"The amount of queue songs to be retrieved.","rest":false,"type":"Number"},{"name":"Text","description":"The text to be resolved.","rest":false,"type":"String"},{"name":"Separator","description":"The separator for each result.","rest":false,"type":"String"}],"output":["String"]},{"name":"$queueEstimatedDuration","version":"1.0.0","description":"Returns the estimated duration of the current guild queue in milliseconds.","unwrap":false,"output":["Number"]},{"name":"$queueHistory","description":"Returns queue history songs resolving the given text placeholders.","version":"1.0.0","brackets":false,"unwrap":true,"args":[{"name":"Start Index","description":"The queue song start index.","rest":false,"type":"Number"},{"name":"Limit","description":"The amount of queue history songs to be retrieved.","rest":false,"type":"Number"},{"name":"Text","description":"The text to be resolved.","rest":false,"type":"String"},{"name":"Separator","description":"The separator for each result.","rest":false,"type":"String"}],"output":["String"]},{"name":"$queueHistoryLength","version":"1.0.0","description":"Returns the length of the tracks that were played.","unwrap":false,"output":["Number"]},{"name":"$queueLength","version":"1.0.0","description":"Returns the length of the current guild queue.","unwrap":false,"output":["Number"]},{"name":"$queuePing","version":"1.0.0","description":"Returns the latency of the current guild queue.","unwrap":false,"output":["Number"]},{"name":"$removeTrack","version":"1.0.0","description":"Removes the track that is located at the given position.","brackets":true,"unwrap":true,"args":[{"name":"Position","description":"The track position to be removed.","rest":false,"required":true,"type":"Number"}],"output":["Boolean"]},{"name":"$resumeTrack","version":"1.0.0","description":"Resumes the current paused track.","unwrap":false,"output":["Boolean"]},{"name":"$searchTrack","version":"1.0.0","description":"Search for a track using the given query.","brackets":true,"unwrap":true,"args":[{"name":"Query","description":"The query to search for.","rest":false,"required":true,"type":"String"},{"name":"Text Result","description":"The formatted text result to return.","rest":false,"required":true,"type":"String"},{"name":"Separator","description":"The result separator.","rest":false,"type":"String"},{"name":"Engine","description":"The query search engine, can be extractor name to target an specific one. (custom)","rest":false,"type":"String"},{"name":"Fallback Engine","description":"Fallback search engine to use.","rest":false,"type":"Enum","enum":["AUTO","YOUTUBE","YOUTUBE_PLAYLIST","SOUNDCLOUD_TRACK","SOUNDCLOUD_PLAYLIST","SOUNDCLOUD","SPOTIFY_SONG","SPOTIFY_ALBUM","SPOTIFY_PLAYLIST","SPOTIFY_SEARCH","FACEBOOK","VIMEO","ARBITRARY","REVERBNATION","YOUTUBE_SEARCH","YOUTUBE_VIDEO","SOUNDCLOUD_SEARCH","APPLE_MUSIC_SONG","APPLE_MUSIC_ALBUM","APPLE_MUSIC_PLAYLIST","APPLE_MUSIC_SEARCH","FILE","AUTO_SEARCH","DISCORD_PLAYER_BLOB"],"enumName":"QueryType"},{"name":"Limit","description":"The maximum number of results to return.","rest":false,"type":"Number"},{"name":"Add To Player","description":"Whether add the results to the music player.","rest":false,"type":"Boolean"},{"name":"Block Extractors","description":"List of extractors to block.","type":"String","required":false,"rest":true}]},{"name":"$seekTrack","version":"1.0.0","description":"Seeks a track.","brackets":true,"unwrap":true,"args":[{"name":"Duration","description":"Seek duration to be applied.","rest":false,"required":true,"type":"Time"}],"output":["Boolean"]},{"name":"$setLoopMode","version":"1.0.0","description":"Set the loop mode of the music player.","brackets":true,"unwrap":true,"args":[{"name":"Mode","description":"The loop mode of the music player.","rest":false,"required":true,"type":"String"}]},{"name":"$setVolume","version":"1.0.0","description":"Set the volume of the music player.","brackets":true,"unwrap":true,"args":[{"name":"Amount","description":"The volume amount to be applied.","rest":false,"required":true,"type":"Number"}]},{"name":"$shuffleQueue","version":"1.0.0","description":"Shuffle the queue when the current track ends, unlike $shuffleTracks that can be undone, this function does not mutates the queue.","unwrap":false,"output":["Boolean"]},{"name":"$shuffleTracks","version":"1.0.0","description":"Shuffle the current guild queue.","unwrap":false},{"name":"$skipTo","version":"1.0.0","description":"Skip the current track to the given position.","brackets":true,"unwrap":true,"args":[{"name":"Position","description":"The track position to be played.","rest":false,"required":true,"type":"Number"}],"output":["Boolean"]},{"name":"$skipTrack","version":"1.0.0","description":"Skip the current track.","unwrap":false,"output":["Boolean"]},{"name":"$stopTrack","version":"1.0.0","description":"Forces to stop the current track.","unwrap":false,"output":["Boolean"]},{"name":"$toggleFilters","version":"1.0.0","description":"Toggle the provided FFMPEG filters.","brackets":true,"unwrap":true,"args":[{"name":"Filters","description":"Filter names to be toggled.","rest":true,"type":"Enum","enum":["Bassboost_low","Bassboost","Bassboost_high","8d","Vaporwave","Nightcore","Lofi","Phaser","Tremolo","Vibrato","Reverse","Treble","Normalizer2","Normalizer","Surrounding","Pulsator","Subboost","Karaoke","Flanger","Gate","Haas","Mcompand","Mono","Mstlr","Mstrr","Compressor","Expander","Softlimiter","Chorus","Chorus2d","Chorus3d","Fadein","Dim","Earrape","Silenceremove"],"enumName":"FFMPEGFilters"}]},{"name":"$trackInfo","version":"1.0.0","description":"Returns information of the current track.","brackets":true,"unwrap":true,"args":[{"name":"Properties","description":"The track properties to be accesed.","rest":true,"required":true,"type":"String"}],"output":["String"]},{"name":"$unshuffleQueue","version":"1.0.0","description":"Disable shuffle mode for the queue.","unwrap":false,"output":["Boolean"]}] \ No newline at end of file +[{"name":"$clearQueue","version":"1.0.0","description":"Clear the guild queue.","unwrap":false},{"name":"$clearQueueHistory","version":"1.0.0","description":"Clear the queue history.","unwrap":false},{"name":"$currentTrackTotalDuration","version":"1.0.0","description":"Returns the total duration of the current audio track.","unwrap":false,"output":["Number"]},{"name":"$deleteQueue","version":"1.0.0","description":"Deletes the queue of the current guild.","unwrap":false,"output":["Unknown"]},{"name":"$disableAllFilters","version":"1.0.0","description":"Disable the provided FFMPEG filters.","brackets":true,"unwrap":true,"args":[{"name":"Filters","description":"Filter names to be disabled.","rest":true,"required":false,"type":"Enum","enum":["Bassboost_low","Bassboost","Bassboost_high","8d","Vaporwave","Nightcore","Lofi","Phaser","Tremolo","Vibrato","Reverse","Treble","Normalizer2","Normalizer","Surrounding","Pulsator","Subboost","Karaoke","Flanger","Gate","Haas","Mcompand","Mono","Mstlr","Mstrr","Compressor","Expander","Softlimiter","Chorus","Chorus2d","Chorus3d","Fadein","Dim","Earrape","Silenceremove"],"enumName":"FFMPEGFilters"}]},{"name":"$enableAllFilters","version":"1.0.0","description":"Enable the provided FFMPEG filters.","brackets":true,"unwrap":true,"args":[{"name":"Filters","description":"Filter names to be enabled.","rest":true,"required":false,"type":"Enum","enum":["Bassboost_low","Bassboost","Bassboost_high","8d","Vaporwave","Nightcore","Lofi","Phaser","Tremolo","Vibrato","Reverse","Treble","Normalizer2","Normalizer","Surrounding","Pulsator","Subboost","Karaoke","Flanger","Gate","Haas","Mcompand","Mono","Mstlr","Mstrr","Compressor","Expander","Softlimiter","Chorus","Chorus2d","Chorus3d","Fadein","Dim","Earrape","Silenceremove"],"enumName":"FFMPEGFilters"}]},{"name":"$findExtractor","version":"1.0.0","description":"Find an extractor by name.","brackets":true,"unwrap":true,"args":[{"name":"Name","description":"The name of the extractor to find.","rest":false,"required":true,"type":"String"}]},{"name":"$getAvailableProviders","version":"1.0.0","description":"Get the available audio providers.","unwrap":false,"output":["String"]},{"name":"$getDisabledFilters","version":"1.0.0","description":"Return the disabled FFMPEG filters.","unwrap":false,"output":["String"]},{"name":"$getEnabledFilters","version":"1.0.0","description":"Return the enabled FFMPEG filters.","unwrap":false,"output":["String"]},{"name":"$getLoopMode","version":"1.0.0","description":"Returns the state of the loop mode.","unwrap":false,"output":["QueueRepeatMode"]},{"name":"$getVolume","version":"1.0.0","description":"Get the current volume of the music player.","unwrap":false,"output":["Number"]},{"name":"$hasMusicNode","version":"1.0.0","description":"Check whether the current guild has a music node created.","unwrap":false,"output":["Boolean"]},{"name":"$isFilterEnabled","version":"1.0.0","description":"Check whether the provided filter is enabled.","brackets":true,"unwrap":true,"args":[{"name":"Filters","description":"Filter names to be toggled.","rest":false,"required":true,"type":"Enum","enum":["Bassboost_low","Bassboost","Bassboost_high","8d","Vaporwave","Nightcore","Lofi","Phaser","Tremolo","Vibrato","Reverse","Treble","Normalizer2","Normalizer","Surrounding","Pulsator","Subboost","Karaoke","Flanger","Gate","Haas","Mcompand","Mono","Mstlr","Mstrr","Compressor","Expander","Softlimiter","Chorus","Chorus2d","Chorus3d","Fadein","Dim","Earrape","Silenceremove"],"enumName":"FFMPEGFilters"}],"output":["Boolean"]},{"name":"$isPaused","version":"1.0.0","description":"Check whether the music player is paused.","unwrap":false,"output":["Boolean"]},{"name":"$isPlaying","version":"1.0.0","description":"Check whether the music player is playing a track.","unwrap":false,"output":["Boolean"]},{"name":"$isQueueHistoryDisabled","version":"1.0.0","description":"Returns whether the queue history is disabled.","unwrap":false,"output":["Boolean"]},{"name":"$isQueueHistoryEmpty","version":"1.0.0","description":"Returns whether the queue history is empty.","unwrap":false,"output":["Boolean"]},{"name":"$leaveVoiceChannel","version":"1.0.0","description":"Destroys the current voice connection.","unwrap":false},{"name":"$moveTrack","version":"1.0.0","description":"Moves the track to a new position.","brackets":true,"unwrap":true,"args":[{"name":"Position","description":"The track position to be moved.","rest":false,"required":true,"type":"Number"},{"name":"New Position","description":"The new position of the track.","rest":false,"required":true,"type":"Number"}]},{"name":"$pauseTrack","version":"1.0.0","description":"Pauses the current track.","unwrap":false,"output":["Boolean"]},{"name":"$playerElapsedTime","version":"1.0.0","description":"Returns the elapsed time of the current song in milliseconds.","unwrap":false,"output":["Number"]},{"name":"$playNext","version":"1.0.0","description":"Play the next track in the queue, if any.","unwrap":false,"output":["Unknown"]},{"name":"$playPrevious","version":"1.0.0","description":"Play the previous track in the queue history, if any.","unwrap":false,"output":["Unknown"]},{"name":"$playTrack","version":"1.0.0","description":"Play a track by query.","brackets":true,"unwrap":true,"args":[{"name":"Channel ID","description":"Voice channel ID to play the track on.","type":"Channel","required":true,"rest":false},{"name":"Query","description":"Track name to be searched.","rest":false,"required":true,"type":"String"},{"name":"Engine","description":"The query search engine, can be extractor name to target an specific one. (custom)","rest":false,"type":"String"},{"name":"Fallback Engine","description":"Fallback search engine to use.","rest":false,"type":"Enum","enum":["AUTO","YOUTUBE","YOUTUBE_PLAYLIST","SOUNDCLOUD_TRACK","SOUNDCLOUD_PLAYLIST","SOUNDCLOUD","SPOTIFY_SONG","SPOTIFY_ALBUM","SPOTIFY_PLAYLIST","SPOTIFY_SEARCH","FACEBOOK","VIMEO","ARBITRARY","REVERBNATION","YOUTUBE_SEARCH","YOUTUBE_VIDEO","SOUNDCLOUD_SEARCH","APPLE_MUSIC_SONG","APPLE_MUSIC_ALBUM","APPLE_MUSIC_PLAYLIST","APPLE_MUSIC_SEARCH","FILE","AUTO_SEARCH","DISCORD_PLAYER_BLOB"],"enumName":"QueryType"},{"name":"Block Extractors","description":"List of extractors to block.","type":"String","required":false,"rest":true}]},{"name":"$queue","description":"Returns queue songs resolving the given text placeholders.","version":"1.0.0","brackets":false,"unwrap":true,"args":[{"name":"Start Index","description":"The queue song start index.","rest":false,"type":"Number"},{"name":"Limit","description":"The amount of queue songs to be retrieved.","rest":false,"type":"Number"},{"name":"Text","description":"The text to be resolved.","rest":false,"type":"String"},{"name":"Separator","description":"The separator for each result.","rest":false,"type":"String"}],"output":["String"]},{"name":"$queueEstimatedDuration","version":"1.0.0","description":"Returns the estimated duration of the current guild queue in milliseconds.","unwrap":false,"output":["Number"]},{"name":"$queueHistory","description":"Returns queue history songs resolving the given text placeholders.","version":"1.0.0","brackets":false,"unwrap":true,"args":[{"name":"Start Index","description":"The queue song start index.","rest":false,"type":"Number"},{"name":"Limit","description":"The amount of queue history songs to be retrieved.","rest":false,"type":"Number"},{"name":"Text","description":"The text to be resolved.","rest":false,"type":"String"},{"name":"Separator","description":"The separator for each result.","rest":false,"type":"String"}],"output":["String"]},{"name":"$queueHistoryLength","version":"1.0.0","description":"Returns the length of the tracks that were played.","unwrap":false,"output":["Number"]},{"name":"$queueLength","version":"1.0.0","description":"Returns the length of the current guild queue.","unwrap":false,"output":["Number"]},{"name":"$queuePing","version":"1.0.0","description":"Returns the latency of the current guild queue.","unwrap":false,"output":["Number"]},{"name":"$removeTrack","version":"1.0.0","description":"Removes the track that is located at the given position.","brackets":true,"unwrap":true,"args":[{"name":"Position","description":"The track position to be removed.","rest":false,"required":true,"type":"Number"}],"output":["Boolean"]},{"name":"$resumeTrack","version":"1.0.0","description":"Resumes the current paused track.","unwrap":false,"output":["Boolean"]},{"name":"$searchTrack","version":"1.0.0","description":"Search for a track using the given query.","brackets":true,"unwrap":true,"args":[{"name":"Query","description":"The query to search for.","rest":false,"required":true,"type":"String"},{"name":"Text Result","description":"The formatted text result to return.","rest":false,"required":true,"type":"String"},{"name":"Separator","description":"The result separator.","rest":false,"type":"String"},{"name":"Engine","description":"The query search engine, can be extractor name to target an specific one. (custom)","rest":false,"type":"String"},{"name":"Fallback Engine","description":"Fallback search engine to use.","rest":false,"type":"Enum","enum":["AUTO","YOUTUBE","YOUTUBE_PLAYLIST","SOUNDCLOUD_TRACK","SOUNDCLOUD_PLAYLIST","SOUNDCLOUD","SPOTIFY_SONG","SPOTIFY_ALBUM","SPOTIFY_PLAYLIST","SPOTIFY_SEARCH","FACEBOOK","VIMEO","ARBITRARY","REVERBNATION","YOUTUBE_SEARCH","YOUTUBE_VIDEO","SOUNDCLOUD_SEARCH","APPLE_MUSIC_SONG","APPLE_MUSIC_ALBUM","APPLE_MUSIC_PLAYLIST","APPLE_MUSIC_SEARCH","FILE","AUTO_SEARCH","DISCORD_PLAYER_BLOB"],"enumName":"QueryType"},{"name":"Limit","description":"The maximum number of results to return.","rest":false,"type":"Number"},{"name":"Add To Player","description":"Whether add the results to the music player.","rest":false,"type":"Boolean"},{"name":"Block Extractors","description":"List of extractors to block.","type":"String","required":false,"rest":true}]},{"name":"$seekTrack","version":"1.0.0","description":"Seeks a track.","brackets":true,"unwrap":true,"args":[{"name":"Duration","description":"Seek duration to be applied.","rest":false,"required":true,"type":"Time"}],"output":["Boolean"]},{"name":"$setLoopMode","version":"1.0.0","description":"Set the loop mode of the music player.","brackets":true,"unwrap":true,"args":[{"name":"Mode","description":"The loop mode of the music player.","rest":false,"required":true,"type":"String"}]},{"name":"$setVolume","version":"1.0.0","description":"Set the volume of the music player.","brackets":true,"unwrap":true,"args":[{"name":"Amount","description":"The volume amount to be applied.","rest":false,"required":true,"type":"Number"}]},{"name":"$shuffleQueue","version":"1.0.0","description":"Shuffle the queue when the current track ends, unlike $shuffleTracks that can be undone, this function does not mutates the queue.","unwrap":false,"output":["Boolean"]},{"name":"$shuffleTracks","version":"1.0.0","description":"Shuffle the current guild queue.","unwrap":false},{"name":"$skipTo","version":"1.0.0","description":"Skip the current track to the given position.","brackets":true,"unwrap":true,"args":[{"name":"Position","description":"The track position to be played.","rest":false,"required":true,"type":"Number"}],"output":["Boolean"]},{"name":"$skipTrack","version":"1.0.0","description":"Skip the current track.","unwrap":false,"output":["Boolean"]},{"name":"$stopTrack","version":"1.0.0","description":"Forces to stop the current track.","unwrap":false,"output":["Boolean"]},{"name":"$toggleFilters","version":"1.0.0","description":"Toggle the provided FFMPEG filters.","brackets":true,"unwrap":true,"args":[{"name":"Filters","description":"Filter names to be toggled.","rest":true,"required":false,"type":"Enum","enum":["Bassboost_low","Bassboost","Bassboost_high","8d","Vaporwave","Nightcore","Lofi","Phaser","Tremolo","Vibrato","Reverse","Treble","Normalizer2","Normalizer","Surrounding","Pulsator","Subboost","Karaoke","Flanger","Gate","Haas","Mcompand","Mono","Mstlr","Mstrr","Compressor","Expander","Softlimiter","Chorus","Chorus2d","Chorus3d","Fadein","Dim","Earrape","Silenceremove"],"enumName":"FFMPEGFilters"}]},{"name":"$trackInfo","version":"1.0.0","description":"Returns information of the current track.","brackets":true,"unwrap":true,"args":[{"name":"Properties","description":"The track properties to be accesed.","rest":true,"required":false,"type":"String"}],"output":["String"]},{"name":"$unshuffleQueue","version":"1.0.0","description":"Disable shuffle mode for the queue.","unwrap":false,"output":["Boolean"]}] \ No newline at end of file diff --git a/metadata/paths.json b/metadata/paths.json new file mode 100644 index 0000000..67dcef0 --- /dev/null +++ b/metadata/paths.json @@ -0,0 +1 @@ +{"functions":"src/natives","events":"src/events"} \ No newline at end of file diff --git a/package.json b/package.json index 760d3b8..aac420b 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,13 @@ { "name": "@tryforge/forge.music", - "version": "1.0.0", + "version": "1.0.1", "description": "Extension to add music functionality to your ForgeScript bot.", "main": "./dist/index.js", "types": "./types/index.d.ts", "scripts": { - "build": "tsc -p tsconfig.json && tsc-alias -p tsconfig.json && node ./dist/docgen.js", - "test": "node ./__test__" + "build": "tsc -p tsconfig.json && tsc-alias -p tsconfig.json && node ./dist/docgen.js && bun run prettier", + "test": "node ./__test__", + "prettier": "prettier ./src/ --write" }, "keywords": [ "forgescript", @@ -16,20 +17,26 @@ "bdfd-music" ], "author": "BotForge", - "packageManager": "pnpm@9.15.2", + "packageManager": "bun@1.3.9", "license": "GPL-3.0", "devDependencies": { - "@tryforge/forgescript": "github:tryforge/ForgeScript#dev", + "@tryforge/forgescript": "^2.6.0", "ascii-table3": "^0.9.0", - "discord-player-youtubei": "^1.4.1", - "discord.js": "^14.17.3", - "dotenv": "^16.4.7", - "tsc-alias": "^1.8.10", - "typescript": "^5.7.3" + "discord-player-deezer": "^2.6.0", + "discord-player-soundcloud": "^1.0.7", + "discord-player-spotify": "^1.1.9", + "discord-player-youtubei": "^2.0.0-dev.2", + "discord.js": "^14.25.1", + "dotenv": "^16.6.1", + "googlevideo": "^4.0.4", + "prettier": "3.5.1", + "tsc-alias": "^1.8.16", + "typescript": "^5.9.3" }, "dependencies": { - "@discord-player/extractor": "^7.1.0", - "discord-player": "^7.1.0" + "@discord-player/extractor": "^7.2.0", + "@snazzah/davey": "^0.1.10", + "discord-player": "^7.2.0" }, "pnpm": { "peerDependencyRules": { @@ -37,5 +44,16 @@ "@discord-player/extractor": "7" } } - } -} + }, + "homepage": "https://docs.botforge.org/?p=ForgeMusic", + "repository": { + "type": "git", + "url": "https://github.com/tryforge/ForgeMusic.git" + }, + "bugs": { + "url": "https://github.com/tryforge/ForgeMusic/issues" + }, + "trustedDependencies": [ + "youtube-dl-exec" + ] +} \ No newline at end of file diff --git a/src/classes/handlers/MusicEventHandler.ts b/src/classes/handlers/MusicEventHandler.ts index 7980aeb..5c5b7b5 100644 --- a/src/classes/handlers/MusicEventHandler.ts +++ b/src/classes/handlers/MusicEventHandler.ts @@ -1,7 +1,7 @@ -import { BaseEventHandler, ForgeClient } from "@tryforge/forgescript" -import { GuildQueueEvent, GuildQueueEvents } from "discord-player" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildTextBasedChannel } from "discord.js" +import { BaseEventHandler, ForgeClient } from '@tryforge/forgescript' +import { GuildQueueEvent, GuildQueueEvents } from 'discord-player' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildTextBasedChannel } from 'discord.js' /** * Fix the typings for the music event handler. @@ -13,13 +13,21 @@ export type TypedGuildQueueEvents = { /** * The generic music event handler. */ -export class MusicEventHandler extends BaseEventHandler { +export class MusicEventHandler< + Events extends TypedGuildQueueEvents = TypedGuildQueueEvents, + Names extends keyof Events = keyof Events, +> extends BaseEventHandler { /** * Register this event. * @param client - ForgeClient instance. */ public register(client: ForgeClient) { - client.getExtension(ForgeMusic).player.events.on(this.name as keyof GuildQueueEvents, this.listener.bind(client)) + client + .getExtension(ForgeMusic) + .player.events.on( + this.name as keyof GuildQueueEvents, + this.listener.bind(client) + ) } } @@ -32,4 +40,4 @@ export interface AdditionalMeta { * The text channel where the command was called. */ text: GuildTextBasedChannel -} \ No newline at end of file +} diff --git a/src/classes/managers/MusicCommandManager.ts b/src/classes/managers/MusicCommandManager.ts index a4630d6..95a9b0f 100644 --- a/src/classes/managers/MusicCommandManager.ts +++ b/src/classes/managers/MusicCommandManager.ts @@ -1,14 +1,14 @@ -import { BaseCommandManager } from "@tryforge/forgescript" -import { GuildQueueEvent } from "discord-player" +import { BaseCommandManager } from '@tryforge/forgescript' +import { GuildQueueEvent } from 'discord-player' /** * Common music handler name. */ -export const handlerName = "ForgeMusic" +export const handlerName = 'ForgeMusic' /** * The music command manager. */ export class MusicCommandManager extends BaseCommandManager<`${GuildQueueEvent}`> { handlerName = handlerName -} \ No newline at end of file +} diff --git a/src/classes/structures/ForgeMusic.ts b/src/classes/structures/ForgeMusic.ts index decc22a..14dd9e4 100644 --- a/src/classes/structures/ForgeMusic.ts +++ b/src/classes/structures/ForgeMusic.ts @@ -1,8 +1,19 @@ -import { type BaseExtractor, GuildNodeCreateOptions, GuildQueueEvent, Player, type PlayerInitOptions } from "discord-player" -import { EventManager, ForgeClient, ForgeExtension, Logger } from "@tryforge/forgescript" -import { MusicCommandManager, handlerName } from "@managers/MusicCommandManager" -import { type GatewayIntentsString } from "discord.js" -import { getVersion } from "@utils/getVersion" +import { + type BaseExtractor, + GuildNodeCreateOptions, + GuildQueueEvent, + Player, + type PlayerInitOptions, +} from 'discord-player' +import { + EventManager, + ForgeClient, + ForgeExtension, + Logger, +} from '@tryforge/forgescript' +import { MusicCommandManager, handlerName } from '@managers/MusicCommandManager' +import { type GatewayIntentsString } from 'discord.js' +import { getVersion } from '@utils/getVersion' /** * Constructor options of the music extension. @@ -11,7 +22,7 @@ interface ForgeMusicInitOptions extends PlayerInitOptions { /** * Options that are used when a guild node is created. */ - connectOptions?: Omit, "metadata"> + connectOptions?: Omit, 'metadata'> /** * Array of event names the extension must listen to. */ @@ -19,16 +30,21 @@ interface ForgeMusicInitOptions extends PlayerInitOptions { /** * Predicate to load certain extractors. */ - includeExtractors?: typeof BaseExtractor[] + includeExtractors?: (typeof BaseExtractor)[] } +type TupleEngineOption> = [ + T, + ConstructorParameters['1'], +] + /** * The entrypoint of the forge music system. */ export class ForgeMusic extends ForgeExtension { /** Cock my beloved. <3 */ - public name = "ForgeMusic" - public description = "A standard music library tailored for ForgeScript." + public name = 'ForgeMusic' + public description = 'A standard music library tailored for ForgeScript.' public version = getVersion() /** @@ -42,7 +58,7 @@ export class ForgeMusic extends ForgeExtension { /** * The required intents for this extension to work. */ - private requiredIntents: GatewayIntentsString[] = ["GuildVoiceStates"] + private requiredIntents: GatewayIntentsString[] = ['GuildVoiceStates'] /** * Creates an instance of the music extension. @@ -51,11 +67,38 @@ export class ForgeMusic extends ForgeExtension { public constructor(private options?: ForgeMusicInitOptions) { super() if (this.#hasInvalidEvents()) { - Logger.error("ForgeMusic found that you are using some of the following events:\n- VoiceStateUpdate\n- WillAutoPlay\n- WillPlayTrack\nthat aren't supported.") + Logger.error( + "ForgeMusic found that you are using some of the following events:\n- VoiceStateUpdate\n- WillAutoPlay\n- WillPlayTrack\nthat aren't supported." + ) process.exit() } } + /** + * Add multiple extractors into the player. + * @param engines - Extractor engines to add. + */ + public addEngines>( + engines: TupleEngineOption[] + ) { + const extractors = engines.map((engine) => engine[0]) + const extractorOptions: Record = {} + + let i = 0 + for (const engine of engines) { + const id = engine[0].identifier + const options = engine[1] + + if (options) { + extractorOptions[id] = options + } + + i++ + } + + this.player.extractors.loadMulti(extractors, extractorOptions) + } + /** * Starts the music extension. * @param client - The discord client instance. @@ -64,7 +107,9 @@ export class ForgeMusic extends ForgeExtension { public init(client: ForgeClient) { // Checking if client has the required intents. if (!client.options.intents.has(this.requiredIntents[0])) { - Logger.warn(`${this.name} requires the following intents to work: \"${this.requiredIntents[0]}\"`) + Logger.warn( + `${this.name} requires the following intents to work: \"${this.requiredIntents[0]}\"` + ) } // Create a main player instance. @@ -83,9 +128,14 @@ export class ForgeMusic extends ForgeExtension { // Loading the extractors. if (this.options.includeExtractors) { - this.player.extractors.loadMulti(this.options.includeExtractors) - .then(() => Logger.info("Extractors loaded successfully!")) - .catch((e) => Logger.error("Unable to load the extractors; with reason: " + e)) + this.player.extractors + .loadMulti(this.options.includeExtractors) + .then(() => Logger.info('Extractors loaded successfully!')) + .catch((e) => + Logger.error( + 'Unable to load the extractors; with reason: ' + e + ) + ) } } @@ -93,14 +143,14 @@ export class ForgeMusic extends ForgeExtension { * Returns the events location. */ public get eventsLocation() { - return __dirname.replace(/classes(\\|\/)structures/, "events") + return __dirname.replace(/classes(\\|\/)structures/, 'events') } /** * Returns the native functions location. */ public get nativesLocation() { - return __dirname.replace(/classes(\\|\/)structures/, "natives") + return __dirname.replace(/classes(\\|\/)structures/, 'natives') } /** @@ -115,7 +165,11 @@ export class ForgeMusic extends ForgeExtension { * @returns {boolean} */ #hasInvalidEvents() { - return this.options && this.options.events && this.options.events.some(this.#invalidEventPredicate) + return ( + this.options && + this.options.events && + this.options.events.some(this.#invalidEventPredicate) + ) } /** @@ -124,6 +178,10 @@ export class ForgeMusic extends ForgeExtension { * @returns {boolean} */ #invalidEventPredicate(event: GuildQueueEvent) { - return event === GuildQueueEvent.VoiceStateUpdate || event === GuildQueueEvent.WillAutoPlay || event === GuildQueueEvent.WillPlayTrack + return ( + event === GuildQueueEvent.VoiceStateUpdate || + event === GuildQueueEvent.WillAutoPlay || + event === GuildQueueEvent.WillPlayTrack + ) } -} \ No newline at end of file +} diff --git a/src/docgen.ts b/src/docgen.ts index 90319f1..cc4efc1 100644 --- a/src/docgen.ts +++ b/src/docgen.ts @@ -1,56 +1,65 @@ -import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs" -import { generateMetadata, Logger } from "@tryforge/forgescript" -import { handlerName } from "@managers/MusicCommandManager" -import { AsciiTable3 } from "ascii-table3" -import { join } from "path" +import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs' +import { generateMetadata, Logger } from '@tryforge/forgescript' +import { handlerName } from '@managers/MusicCommandManager' +import { AsciiTable3 } from 'ascii-table3' +import { join } from 'path' generateMetadata( - join(__dirname, "natives"), - "natives", + join(__dirname, 'natives'), + 'natives', handlerName, true, void 0, - join(__dirname, "events") + join(__dirname, 'events') ) -.then(() => Logger.info("Documentation generation done")) -.catch((e) => Logger.error(e)); + .then(() => Logger.info('Documentation generation done')) + .catch((e) => Logger.error(e)) function toCamelCase(text: string): string { - return text.split(' ').map( - (part, i) => i === 0 - ? part.toLowerCase() - : `${part[0].toUpperCase()}${part.slice(1)}` - ).join("") + return text + .split(' ') + .map((part, i) => + i === 0 + ? part.toLowerCase() + : `${part[0].toUpperCase()}${part.slice(1)}` + ) + .join('') } /** * Generates markdown documentation for every function in the library. */ function generateFunctionDocs() { - const dataPath = join(process.cwd(), "metadata", "functions.json") - const data = JSON.parse(readFileSync(dataPath, "utf-8")) + const dataPath = join(process.cwd(), 'metadata', 'functions.json') + const data = JSON.parse(readFileSync(dataPath, 'utf-8')) - if (!existsSync(join(process.cwd(), "docs"))) { - mkdirSync(join(process.cwd(), "docs")) + if (!existsSync(join(process.cwd(), 'docs'))) { + mkdirSync(join(process.cwd(), 'docs')) } for (const func of data) { - Logger.info("Parsing", func.name) + Logger.info('Parsing', func.name) let content = [ `# ${func.name}`, func.description, '## Usage', - `\`\`\`\n${func.name}${!!func.args ? ('[' + `${func.args.map(t => `${t.rest ? '...' : ''}${toCamelCase(t.name)}${t.required ? '' : '?'}`).join(";")}` + ']') : ''}\n\`\`\``, + `\`\`\`\n${func.name}${!!func.args ? '[' + `${func.args.map((t) => `${t.rest ? '...' : ''}${toCamelCase(t.name)}${t.required ? '' : '?'}`).join(';')}` + ']' : ''}\n\`\`\``, ] if (func.args) { - const args = func.args.map(f => [f.name, f.description, f.type, f.required ? 'Yes' : 'No', f.rest ? 'Yes' : 'No']) + const args = func.args.map((f) => [ + f.name, + f.description, + f.type, + f.required ? 'Yes' : 'No', + f.rest ? 'Yes' : 'No', + ]) const table = new AsciiTable3() - .setStyle('github-markdown') - .setHeading('Name', 'Description', 'Type', 'Required', 'Rest') - .addRowMatrix(args) + .setStyle('github-markdown') + .setHeading('Name', 'Description', 'Type', 'Required', 'Rest') + .addRowMatrix(args) content.push('## Fields', table.toString()) } @@ -59,12 +68,18 @@ function generateFunctionDocs() { content.push('## Output', `> ${func.output.join(', ')}`) } - content.push(`View source on [GitHub](https://github.com/Cyberghxst/forgemusic/blob/dev/src/natives/${func.name.slice(1)}.ts)`) + content.push( + `View source on [GitHub](https://github.com/Cyberghxst/forgemusic/blob/dev/src/natives/${func.name.slice(1)}.ts)` + ) - writeFileSync(join(process.cwd(), "docs", `${func.name.slice(1)}.md`), content.join("\n"), "utf-8") + writeFileSync( + join(process.cwd(), 'docs', `${func.name.slice(1)}.md`), + content.join('\n'), + 'utf-8' + ) } return true } -generateFunctionDocs() \ No newline at end of file +generateFunctionDocs() diff --git a/src/events/audioFiltersUpdate.ts b/src/events/audioFiltersUpdate.ts index afc4951..850a811 100644 --- a/src/events/audioFiltersUpdate.ts +++ b/src/events/audioFiltersUpdate.ts @@ -1,7 +1,7 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' /** * The event should be listen to. @@ -10,10 +10,10 @@ const eventName = GuildQueueEvent.AudioFiltersUpdate export default new MusicEventHandler({ name: eventName, - description: "Executed when FFMPEG audio filters are updated.", + description: 'Executed when FFMPEG audio filters are updated.', async listener(queue, oldFilters, newFilters) { const commands = this.getExtension(ForgeMusic).commands.get(eventName) - if (!commands) return; + if (!commands) return for (const command of commands) { const context = new Context({ @@ -21,13 +21,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue, oldFilters, newFilters }, - data: command.compiled.code + data: command.compiled.code, }) - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/audioTrackAdd.ts b/src/events/audioTrackAdd.ts index 70cf859..1af2008 100644 --- a/src/events/audioTrackAdd.ts +++ b/src/events/audioTrackAdd.ts @@ -1,14 +1,16 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' export default new MusicEventHandler({ name: GuildQueueEvent.AudioTrackAdd, - description: "Executed when audio track is added to the queue.", + description: 'Executed when audio track is added to the queue.', async listener(queue, track) { - const commands = this.getExtension(ForgeMusic).commands.get(GuildQueueEvent.AudioTrackAdd) - if (!commands) return; + const commands = this.getExtension(ForgeMusic).commands.get( + GuildQueueEvent.AudioTrackAdd + ) + if (!commands) return for (const command of commands) { const context = new Context({ @@ -16,13 +18,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue, track }, - data: command.compiled.code + data: command.compiled.code, }) - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/audioTrackRemove.ts b/src/events/audioTrackRemove.ts index e97884c..4badbc4 100644 --- a/src/events/audioTrackRemove.ts +++ b/src/events/audioTrackRemove.ts @@ -1,14 +1,16 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' export default new MusicEventHandler({ name: GuildQueueEvent.AudioTrackRemove, - description: "Executed when audio track is removed from the queue.", + description: 'Executed when audio track is removed from the queue.', async listener(queue, track) { - const commands = this.getExtension(ForgeMusic).commands.get(GuildQueueEvent.AudioTrackRemove) - if (!commands) return; + const commands = this.getExtension(ForgeMusic).commands.get( + GuildQueueEvent.AudioTrackRemove + ) + if (!commands) return for (const command of commands) { const context = new Context({ @@ -16,13 +18,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue, track }, - data: command.compiled.code + data: command.compiled.code, }) - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/audioTracksAdd.ts b/src/events/audioTracksAdd.ts index e144b0a..54f17cd 100644 --- a/src/events/audioTracksAdd.ts +++ b/src/events/audioTracksAdd.ts @@ -1,14 +1,16 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' export default new MusicEventHandler({ name: GuildQueueEvent.AudioTracksAdd, - description: "Executed when multiple audio track are added to the queue.", + description: 'Executed when multiple audio track are added to the queue.', async listener(queue, tracks) { - const commands = this.getExtension(ForgeMusic).commands.get(GuildQueueEvent.AudioTracksAdd) - if (!commands) return; + const commands = this.getExtension(ForgeMusic).commands.get( + GuildQueueEvent.AudioTracksAdd + ) + if (!commands) return for (const command of commands) { const context = new Context({ @@ -16,13 +18,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue, tracks }, - data: command.compiled.code + data: command.compiled.code, }) - - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/biquadFiltersUpdate.ts b/src/events/biquadFiltersUpdate.ts index 3431954..d33d98c 100644 --- a/src/events/biquadFiltersUpdate.ts +++ b/src/events/biquadFiltersUpdate.ts @@ -1,7 +1,7 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' /** * The event should be listen to. @@ -10,10 +10,10 @@ const eventName = GuildQueueEvent.BiquadFiltersUpdate export default new MusicEventHandler({ name: eventName, - description: "Executed when biquad filters is updated.", + description: 'Executed when biquad filters is updated.', async listener(queue, oldFilters, newFilters) { const commands = this.getExtension(ForgeMusic).commands.get(eventName) - if (!commands) return; + if (!commands) return for (const command of commands) { const context = new Context({ @@ -21,13 +21,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue, oldFilters, newFilters }, - data: command.compiled.code + data: command.compiled.code, }) - - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/channelPopulate.ts b/src/events/channelPopulate.ts index c3761e0..7b66a32 100644 --- a/src/events/channelPopulate.ts +++ b/src/events/channelPopulate.ts @@ -1,14 +1,16 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' export default new MusicEventHandler({ name: GuildQueueEvent.ChannelPopulate, - description: "Executed when a voice channel is populated.", + description: 'Executed when a voice channel is populated.', async listener(queue) { - const commands = this.getExtension(ForgeMusic).commands.get(GuildQueueEvent.ChannelPopulate) - if (!commands) return; + const commands = this.getExtension(ForgeMusic).commands.get( + GuildQueueEvent.ChannelPopulate + ) + if (!commands) return for (const command of commands) { const context = new Context({ @@ -16,13 +18,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue }, - data: command.compiled.code + data: command.compiled.code, }) - - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/connection.ts b/src/events/connection.ts index 957a43a..6dce433 100644 --- a/src/events/connection.ts +++ b/src/events/connection.ts @@ -1,14 +1,16 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' export default new MusicEventHandler({ name: GuildQueueEvent.Connection, - description: "Executed when a connection is created.", + description: 'Executed when a connection is created.', async listener(queue) { - const commands = this.getExtension(ForgeMusic).commands.get(GuildQueueEvent.Connection) - if (!commands) return; + const commands = this.getExtension(ForgeMusic).commands.get( + GuildQueueEvent.Connection + ) + if (!commands) return for (const command of commands) { const context = new Context({ @@ -16,13 +18,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue }, - data: command.compiled.code + data: command.compiled.code, }) - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/connectionDestroyed.ts b/src/events/connectionDestroyed.ts index 33214b5..3e30d68 100644 --- a/src/events/connectionDestroyed.ts +++ b/src/events/connectionDestroyed.ts @@ -1,28 +1,30 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' export default new MusicEventHandler({ name: GuildQueueEvent.ConnectionDestroyed, - description: "Executed when a connection is destroyed.", + description: 'Executed when a connection is destroyed.', async listener(queue) { - const commands = this.getExtension(ForgeMusic).commands.get(GuildQueueEvent.ConnectionDestroyed) - if (!commands) return; - + const commands = this.getExtension(ForgeMusic).commands.get( + GuildQueueEvent.ConnectionDestroyed + ) + if (!commands) return + for (const command of commands) { const context = new Context({ obj: queue.metadata.text, client: this, command, environment: { queue }, - data: command.compiled.code + data: command.compiled.code, }) - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/debug.ts b/src/events/debug.ts index a3ec8fb..4d4dfcc 100644 --- a/src/events/debug.ts +++ b/src/events/debug.ts @@ -1,14 +1,16 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' export default new MusicEventHandler({ name: GuildQueueEvent.Debug, - description: "Executed when the queue sends a debug info.", + description: 'Executed when the queue sends a debug info.', async listener(queue, message) { - const commands = this.getExtension(ForgeMusic).commands.get(GuildQueueEvent.Debug) - if (!commands) return; + const commands = this.getExtension(ForgeMusic).commands.get( + GuildQueueEvent.Debug + ) + if (!commands) return for (const command of commands) { const context = new Context({ @@ -16,13 +18,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue, message }, - data: command.compiled.code + data: command.compiled.code, }) - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/disconnect.ts b/src/events/disconnect.ts index 0de9108..bf44294 100644 --- a/src/events/disconnect.ts +++ b/src/events/disconnect.ts @@ -1,14 +1,16 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' export default new MusicEventHandler({ name: GuildQueueEvent.Disconnect, - description: "Executed when the bot is disconnected from the channel.", + description: 'Executed when the bot is disconnected from the channel.', async listener(queue) { - const commands = this.getExtension(ForgeMusic).commands.get(GuildQueueEvent.Disconnect) - if (!commands) return; + const commands = this.getExtension(ForgeMusic).commands.get( + GuildQueueEvent.Disconnect + ) + if (!commands) return for (const command of commands) { const context = new Context({ @@ -16,13 +18,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue }, - data: command.compiled.code + data: command.compiled.code, }) - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/dspUpdate.ts b/src/events/dspUpdate.ts index 37e54a0..8a8c596 100644 --- a/src/events/dspUpdate.ts +++ b/src/events/dspUpdate.ts @@ -1,7 +1,7 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' /** * The event should be listen to. @@ -10,10 +10,10 @@ const eventName = GuildQueueEvent.DSPUpdate export default new MusicEventHandler({ name: eventName, - description: "Executed when dsp filters are updated.", + description: 'Executed when dsp filters are updated.', async listener(queue, oldFilters, newFilters) { const commands = this.getExtension(ForgeMusic).commands.get(eventName) - if (!commands) return; + if (!commands) return for (const command of commands) { const context = new Context({ @@ -21,13 +21,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue, oldFilters, newFilters }, - data: command.compiled.code + data: command.compiled.code, }) - - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/emptyChannel.ts b/src/events/emptyChannel.ts index 390b2a0..60ffaf4 100644 --- a/src/events/emptyChannel.ts +++ b/src/events/emptyChannel.ts @@ -1,14 +1,16 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' export default new MusicEventHandler({ name: GuildQueueEvent.EmptyChannel, - description: "Executed when the voice channel is empty.", + description: 'Executed when the voice channel is empty.', async listener(queue) { - const commands = this.getExtension(ForgeMusic).commands.get(GuildQueueEvent.EmptyChannel) - if (!commands) return; + const commands = this.getExtension(ForgeMusic).commands.get( + GuildQueueEvent.EmptyChannel + ) + if (!commands) return for (const command of commands) { const context = new Context({ @@ -16,13 +18,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue }, - data: command.compiled.code + data: command.compiled.code, }) - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/emptyQueue.ts b/src/events/emptyQueue.ts index 8a43116..8f4ad56 100644 --- a/src/events/emptyQueue.ts +++ b/src/events/emptyQueue.ts @@ -1,14 +1,16 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' export default new MusicEventHandler({ name: GuildQueueEvent.EmptyQueue, - description: "Executed when the queue is empty.", + description: 'Executed when the queue is empty.', async listener(queue) { - const commands = this.getExtension(ForgeMusic).commands.get(GuildQueueEvent.EmptyQueue) - if (!commands) return; + const commands = this.getExtension(ForgeMusic).commands.get( + GuildQueueEvent.EmptyQueue + ) + if (!commands) return for (const command of commands) { const context = new Context({ @@ -16,13 +18,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue }, - data: command.compiled.code + data: command.compiled.code, }) - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/equalizerUpdate.ts b/src/events/equalizerUpdate.ts index 184fe7f..20de877 100644 --- a/src/events/equalizerUpdate.ts +++ b/src/events/equalizerUpdate.ts @@ -1,7 +1,7 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' /** * The event should be listen to. @@ -10,10 +10,10 @@ const eventName = GuildQueueEvent.EqualizerUpdate export default new MusicEventHandler({ name: eventName, - description: "Executed when equalizer config is updated.", + description: 'Executed when equalizer config is updated.', async listener(queue, oldFilters, newFilters) { const commands = this.getExtension(ForgeMusic).commands.get(eventName) - if (!commands) return; + if (!commands) return for (const command of commands) { const context = new Context({ @@ -21,13 +21,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue, oldFilters, newFilters }, - data: command.compiled.code + data: command.compiled.code, }) - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/error.ts b/src/events/error.ts index 2963cd7..0a38a39 100644 --- a/src/events/error.ts +++ b/src/events/error.ts @@ -1,14 +1,16 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' export default new MusicEventHandler({ name: GuildQueueEvent.Error, - description: "Executed when the queue encounters error.", + description: 'Executed when the queue encounters error.', async listener(queue, error) { - const commands = this.getExtension(ForgeMusic).commands.get(GuildQueueEvent.Error) - if (!commands) return; + const commands = this.getExtension(ForgeMusic).commands.get( + GuildQueueEvent.Error + ) + if (!commands) return for (const command of commands) { const context = new Context({ @@ -16,13 +18,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue, error }, - data: command.compiled.code + data: command.compiled.code, }) - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/playerError.ts b/src/events/playerError.ts index 1ad9d37..c4c8057 100644 --- a/src/events/playerError.ts +++ b/src/events/playerError.ts @@ -1,14 +1,17 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' export default new MusicEventHandler({ name: GuildQueueEvent.PlayerError, - description: "Executed when the audio player errors while streaming audio track.", + description: + 'Executed when the audio player errors while streaming audio track.', async listener(queue, error, track) { - const commands = this.getExtension(ForgeMusic).commands.get(GuildQueueEvent.PlayerError) - if (!commands) return; + const commands = this.getExtension(ForgeMusic).commands.get( + GuildQueueEvent.PlayerError + ) + if (!commands) return for (const command of commands) { const context = new Context({ @@ -16,13 +19,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue, error, track }, - data: command.compiled.code + data: command.compiled.code, }) - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/playerFinish.ts b/src/events/playerFinish.ts index 8154608..a1de04c 100644 --- a/src/events/playerFinish.ts +++ b/src/events/playerFinish.ts @@ -1,14 +1,17 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' export default new MusicEventHandler({ name: GuildQueueEvent.PlayerFinish, - description: "Executed when the audio player finishes streaming audio track.", + description: + 'Executed when the audio player finishes streaming audio track.', async listener(queue, track) { - const commands = this.getExtension(ForgeMusic).commands.get(GuildQueueEvent.PlayerFinish) - if (!commands) return; + const commands = this.getExtension(ForgeMusic).commands.get( + GuildQueueEvent.PlayerFinish + ) + if (!commands) return for (const command of commands) { const context = new Context({ @@ -16,13 +19,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue, track }, - data: command.compiled.code + data: command.compiled.code, }) - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/playerPause.ts b/src/events/playerPause.ts index a1200a8..ef57a03 100644 --- a/src/events/playerPause.ts +++ b/src/events/playerPause.ts @@ -1,14 +1,16 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' export default new MusicEventHandler({ name: GuildQueueEvent.PlayerPause, - description: "Executed when audio player is paused.", + description: 'Executed when audio player is paused.', async listener(queue) { - const commands = this.getExtension(ForgeMusic).commands.get(GuildQueueEvent.PlayerPause) - if (!commands) return; + const commands = this.getExtension(ForgeMusic).commands.get( + GuildQueueEvent.PlayerPause + ) + if (!commands) return for (const command of commands) { const context = new Context({ @@ -16,13 +18,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue }, - data: command.compiled.code + data: command.compiled.code, }) - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/playerResume.ts b/src/events/playerResume.ts index 09faf11..9e4ed53 100644 --- a/src/events/playerResume.ts +++ b/src/events/playerResume.ts @@ -1,14 +1,16 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' export default new MusicEventHandler({ name: GuildQueueEvent.PlayerResume, - description: "Executed when audio player is resumed.", + description: 'Executed when audio player is resumed.', async listener(queue) { - const commands = this.getExtension(ForgeMusic).commands.get(GuildQueueEvent.PlayerResume) - if (!commands) return; + const commands = this.getExtension(ForgeMusic).commands.get( + GuildQueueEvent.PlayerResume + ) + if (!commands) return for (const command of commands) { const context = new Context({ @@ -16,13 +18,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue }, - data: command.compiled.code + data: command.compiled.code, }) - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/playerSkip.ts b/src/events/playerSkip.ts index e648481..36b46c9 100644 --- a/src/events/playerSkip.ts +++ b/src/events/playerSkip.ts @@ -1,14 +1,16 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' export default new MusicEventHandler({ name: GuildQueueEvent.PlayerSkip, - description: "Executed when the audio player skips current track.", + description: 'Executed when the audio player skips current track.', async listener(queue, track, reason, description) { - const commands = this.getExtension(ForgeMusic).commands.get(GuildQueueEvent.PlayerSkip) - if (!commands) return; + const commands = this.getExtension(ForgeMusic).commands.get( + GuildQueueEvent.PlayerSkip + ) + if (!commands) return for (const command of commands) { const context = new Context({ @@ -16,13 +18,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue, track, reason, description }, - data: command.compiled.code + data: command.compiled.code, }) - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/playerStart.ts b/src/events/playerStart.ts index c181418..74b0cca 100644 --- a/src/events/playerStart.ts +++ b/src/events/playerStart.ts @@ -1,14 +1,16 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' export default new MusicEventHandler({ name: GuildQueueEvent.PlayerStart, - description: "Executed when the audio player starts streaming audio track.", + description: 'Executed when the audio player starts streaming audio track.', async listener(queue, track) { - const commands = this.getExtension(ForgeMusic).commands.get(GuildQueueEvent.PlayerStart) - if (!commands) return; + const commands = this.getExtension(ForgeMusic).commands.get( + GuildQueueEvent.PlayerStart + ) + if (!commands) return for (const command of commands) { const context = new Context({ @@ -16,13 +18,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue, track }, - data: command.compiled.code + data: command.compiled.code, }) - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/playerTrigger.ts b/src/events/playerTrigger.ts index 33410ca..a8da7f4 100644 --- a/src/events/playerTrigger.ts +++ b/src/events/playerTrigger.ts @@ -1,14 +1,16 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' export default new MusicEventHandler({ name: GuildQueueEvent.PlayerTrigger, - description: "Executed when the audio player is triggered.", + description: 'Executed when the audio player is triggered.', async listener(queue, track, reason) { - const commands = this.getExtension(ForgeMusic).commands.get(GuildQueueEvent.PlayerTrigger) - if (!commands) return; + const commands = this.getExtension(ForgeMusic).commands.get( + GuildQueueEvent.PlayerTrigger + ) + if (!commands) return for (const command of commands) { const context = new Context({ @@ -16,13 +18,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue, track, reason }, - data: command.compiled.code + data: command.compiled.code, }) - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/queueCreate.ts b/src/events/queueCreate.ts index 237e655..6ca9af5 100644 --- a/src/events/queueCreate.ts +++ b/src/events/queueCreate.ts @@ -1,14 +1,16 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' export default new MusicEventHandler({ name: GuildQueueEvent.QueueCreate, - description: "Executed when a queue is successfully created.", + description: 'Executed when a queue is successfully created.', async listener(queue) { - const commands = this.getExtension(ForgeMusic).commands.get(GuildQueueEvent.QueueCreate) - if (!commands) return; + const commands = this.getExtension(ForgeMusic).commands.get( + GuildQueueEvent.QueueCreate + ) + if (!commands) return for (const command of commands) { const context = new Context({ @@ -16,13 +18,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue }, - data: command.compiled.code + data: command.compiled.code, }) - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/queueDelete.ts b/src/events/queueDelete.ts index d456c31..3d9a8bd 100644 --- a/src/events/queueDelete.ts +++ b/src/events/queueDelete.ts @@ -1,14 +1,16 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' export default new MusicEventHandler({ name: GuildQueueEvent.QueueDelete, - description: "Executed when a queue is successfully deleted.", + description: 'Executed when a queue is successfully deleted.', async listener(queue) { - const commands = this.getExtension(ForgeMusic).commands.get(GuildQueueEvent.QueueDelete) - if (!commands) return; + const commands = this.getExtension(ForgeMusic).commands.get( + GuildQueueEvent.QueueDelete + ) + if (!commands) return for (const command of commands) { const context = new Context({ @@ -16,13 +18,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue }, - data: command.compiled.code + data: command.compiled.code, }) - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/events/volumeChange.ts b/src/events/volumeChange.ts index e7e6c98..4de08ad 100644 --- a/src/events/volumeChange.ts +++ b/src/events/volumeChange.ts @@ -1,7 +1,7 @@ -import { MusicEventHandler } from "@handlers/MusicEventHandler" -import { Context, Interpreter } from "@tryforge/forgescript" -import { ForgeMusic } from "@structures/ForgeMusic" -import { GuildQueueEvent } from "discord-player" +import { MusicEventHandler } from '@handlers/MusicEventHandler' +import { Context, Interpreter } from '@tryforge/forgescript' +import { ForgeMusic } from '@structures/ForgeMusic' +import { GuildQueueEvent } from 'discord-player' /** * The event should be listen to. @@ -13,7 +13,7 @@ export default new MusicEventHandler({ description: "Executed when audio player's volume is changed.", async listener(queue, oldVolume, newVolume) { const commands = this.getExtension(ForgeMusic).commands.get(eventName) - if (!commands) return; + if (!commands) return for (const command of commands) { const context = new Context({ @@ -21,13 +21,13 @@ export default new MusicEventHandler({ client: this, command, environment: { queue, oldVolume, newVolume }, - data: command.compiled.code + data: command.compiled.code, }) - await this.getExtension(ForgeMusic) - .player - .context - .provide(context, () => Interpreter.run(context)) + await this.getExtension(ForgeMusic).player.context.provide( + context, + () => Interpreter.run(context) + ) } - } -}) \ No newline at end of file + }, +}) diff --git a/src/index.ts b/src/index.ts index 261a02a..95187b3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,11 +1,57 @@ -import { GuildQueueEvent, QueueRepeatMode, QueryType } from "discord-player" -import { DefaultExtractors } from "@discord-player/extractor" -import { ForgeMusic } from "@structures/ForgeMusic" +import { + AttachmentExtractor, + DefaultExtractors, +} from '@discord-player/extractor' +import { GuildQueueEvent, QueueRepeatMode, QueryType } from 'discord-player' +import { ForgeMusic } from '@structures/ForgeMusic' + +/** + * An array including the events that are not supported. + */ +const blacklistedEvents = [ + 'audioTracksAdd', + 'audioTracksRemove', + 'willPlayTrack', + 'willAutoPlay', + 'voiceStateUpdate', +] + +/** + * The list of all events. + */ +const AllEvents = Object.keys(GuildQueueEvent).filter( + (event) => !blacklistedEvents.includes(event) +) + +/** + * Returns an array including the given events and the error events. + * @param events The events to be included. + * @returns An array including the given events and the error events. + * @example + * ```typescript + * // This: + * events: [GuildQueueEvent.AudioTracksAdd, GuildQueueEvent.PlayerStart, GuildQueueEvent.Error, GuildQueueEvent.PlayerError] + * + * // is the same as: + * events: withErrorEvents(GuildQueueEvent.AudioTracksAdd, GuildQueueEvent.PlayerStart) + * ``` + */ +const withErrorEvents = (...events: GuildQueueEvent[]) => { + return Array.from( + new Set([GuildQueueEvent.Error, GuildQueueEvent.PlayerError, ...events]) + ) +} -export { +export { + AllEvents, + AttachmentExtractor, + /** + * Not fully stable. + */ DefaultExtractors, ForgeMusic, GuildQueueEvent, QueueRepeatMode, - QueryType -} \ No newline at end of file + QueryType, + withErrorEvents, +} diff --git a/src/natives/clearQueue.ts b/src/natives/clearQueue.ts index 8712af9..c800cc8 100644 --- a/src/natives/clearQueue.ts +++ b/src/natives/clearQueue.ts @@ -1,16 +1,17 @@ -import { NativeFunction } from "@tryforge/forgescript" -import { useQueue } from "discord-player" +import { NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$clearQueue", - version: "1.0.0", - description: "Clear the guild queue.", + name: '$clearQueue', + version: '1.0.0', + description: 'Clear the guild queue.', unwrap: false, execute(ctx) { - const queue = useQueue(ctx.guild) + const queue = useQueue(ctx.guild.id) + if (!queue) return this.customError('No queue found.') queue.clear() return this.success() - } -}) \ No newline at end of file + }, +}) diff --git a/src/natives/clearQueueHistory.ts b/src/natives/clearQueueHistory.ts index 3943194..74eef10 100644 --- a/src/natives/clearQueueHistory.ts +++ b/src/natives/clearQueueHistory.ts @@ -1,13 +1,13 @@ -import { NativeFunction } from "@tryforge/forgescript" -import { useQueue } from "discord-player" +import { NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$clearQueueHistory", - version: "1.0.0", - description: "Clear the queue history.", + name: '$clearQueueHistory', + version: '1.0.0', + description: 'Clear the queue history.', unwrap: false, execute(ctx) { - useQueue(ctx.guild).history.clear() + useQueue(ctx.guild.id).history.clear() return this.success() - } -}) \ No newline at end of file + }, +}) diff --git a/src/natives/currentTrackTotalDuration.ts b/src/natives/currentTrackTotalDuration.ts index 2df8f26..59e08a0 100644 --- a/src/natives/currentTrackTotalDuration.ts +++ b/src/natives/currentTrackTotalDuration.ts @@ -1,13 +1,16 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import getNode from "@utils/getNode" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$currentTrackTotalDuration", - version: "1.0.0", - description: "Returns the total duration of the current audio track.", + name: '$currentTrackTotalDuration', + version: '1.0.0', + description: 'Returns the total duration of the current audio track.', unwrap: false, output: ArgType.Number, execute(ctx) { - return this.success(getNode(ctx).totalDuration) - } -}) \ No newline at end of file + const queue = useQueue(ctx.guild.id) + if (!queue) return this.customError('No queue found.') + + return this.success(queue.currentTrack.durationMS) + }, +}) diff --git a/src/natives/deleteQueue.ts b/src/natives/deleteQueue.ts index 3476e0f..07cce72 100644 --- a/src/natives/deleteQueue.ts +++ b/src/natives/deleteQueue.ts @@ -1,17 +1,17 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import { useQueue } from "discord-player" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$deleteQueue", - version: "1.0.0", - description: "Deletes the queue of the current guild.", + name: '$deleteQueue', + version: '1.0.0', + description: 'Deletes the queue of the current guild.', unwrap: false, output: ArgType.Unknown, execute(ctx) { - if (useQueue(ctx.guild)) { - useQueue(ctx.guild).delete() + if (useQueue(ctx.guild.id)) { + useQueue(ctx.guild.id).delete() } return this.success() - } -}) \ No newline at end of file + }, +}) diff --git a/src/natives/disableAllFilters.ts b/src/natives/disableAllFilters.ts index 6f17ba4..f957338 100644 --- a/src/natives/disableAllFilters.ts +++ b/src/natives/disableAllFilters.ts @@ -1,23 +1,29 @@ -import { Arg, NativeFunction } from "@tryforge/forgescript" -import { FFMPEGFilters } from "@utils/constants" -import { useQueue } from "discord-player" +import { Arg, NativeFunction } from '@tryforge/forgescript' +import { FFMPEGFilters } from '@utils/constants' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$disableAllFilters", - version: "1.0.0", - description: "Disable the provided FFMPEG filters.", + name: '$disableAllFilters', + version: '1.0.0', + description: 'Disable the provided FFMPEG filters.', brackets: true, unwrap: true, - args: [Arg.restEnum(FFMPEGFilters, "Filters", "Filter names to be disabled.")], + args: [ + Arg.restEnum(FFMPEGFilters, 'Filters', 'Filter names to be disabled.'), + ], async execute(ctx, [filters]) { - const queue = useQueue(ctx.guild) + const queue = useQueue(ctx.guild.id) + if (!queue) return this.customError('No queue found.') + const allFilters = queue.filters.ffmpeg.getFiltersEnabled() for (const filter of filters) { - const foundFilter = allFilters.find((fil) => fil.toLowerCase() === filter.toLowerCase()) - await queue.filters.ffmpeg.toggle(foundFilter); + const foundFilter = allFilters.find( + (fil) => fil.toLowerCase() === filter.toLowerCase() + ) + await queue.filters.ffmpeg.toggle(foundFilter) } return this.success() - } -}) \ No newline at end of file + }, +}) diff --git a/src/natives/enableAllFilters.ts b/src/natives/enableAllFilters.ts index a8c54b0..9af44cc 100644 --- a/src/natives/enableAllFilters.ts +++ b/src/natives/enableAllFilters.ts @@ -1,23 +1,29 @@ -import { Arg, NativeFunction } from "@tryforge/forgescript" -import { FFMPEGFilters } from "@utils/constants" -import { useQueue } from "discord-player" +import { Arg, NativeFunction } from '@tryforge/forgescript' +import { FFMPEGFilters } from '@utils/constants' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$enableAllFilters", - version: "1.0.0", - description: "Enable the provided FFMPEG filters.", + name: '$enableAllFilters', + version: '1.0.0', + description: 'Enable the provided FFMPEG filters.', brackets: true, unwrap: true, - args: [Arg.restEnum(FFMPEGFilters, "Filters", "Filter names to be enabled.")], + args: [ + Arg.restEnum(FFMPEGFilters, 'Filters', 'Filter names to be enabled.'), + ], async execute(ctx, [filters]) { - const queue = useQueue(ctx.guild) + const queue = useQueue(ctx.guild.id) + if (!queue) return this.customError('No queue found.') + const allFilters = queue.filters.ffmpeg.getFiltersDisabled() for (const filter of filters) { - const foundFilter = allFilters.find((fil) => fil.toLowerCase() === filter.toLowerCase()) - await queue.filters.ffmpeg.toggle(foundFilter); + const foundFilter = allFilters.find( + (fil) => fil.toLowerCase() === filter.toLowerCase() + ) + await queue.filters.ffmpeg.toggle(foundFilter) } return this.success() - } -}) \ No newline at end of file + }, +}) diff --git a/src/natives/findExtractor.ts b/src/natives/findExtractor.ts new file mode 100644 index 0000000..2b3aa3c --- /dev/null +++ b/src/natives/findExtractor.ts @@ -0,0 +1,28 @@ +import { ForgeMusic } from '@structures/ForgeMusic' +import { Arg, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' + +export default new NativeFunction({ + name: '$findExtractor', + version: '1.0.0', + description: 'Find an extractor by name.', + brackets: true, + unwrap: true, + args: [Arg.requiredString('Name', 'The name of the extractor to find.')], + async execute(ctx, [query]) { + const globalPlayer = ctx.getExtension(ForgeMusic).player + if (!globalPlayer) + return this.customError('Unable to find an instance of player!') + + const extractors = Array.from(globalPlayer.extractors.store.values()) + let result: string + + result = extractors.find( + (ex) => + ex.identifier.toLowerCase().includes(query.toLowerCase()) || + ex.constructor.name.toLowerCase().includes(query.toLowerCase()) + )?.identifier + + return this.success(result) + }, +}) diff --git a/src/natives/getAvailableProviders.ts b/src/natives/getAvailableProviders.ts index a5efc39..d464b76 100644 --- a/src/natives/getAvailableProviders.ts +++ b/src/natives/getAvailableProviders.ts @@ -1,16 +1,19 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import { useMainPlayer } from "discord-player" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useMainPlayer } from 'discord-player' export default new NativeFunction({ - name: "$getAvailableProviders", - version: "1.0.0", - description: "Get the available audio providers.", + name: '$getAvailableProviders', + version: '1.0.0', + description: 'Get the available audio providers.', unwrap: false, output: ArgType.String, execute(ctx) { - const names = [...useMainPlayer().extractors.store.values()] - .map((x) => x.constructor.name.replace("Extractor", "").replace(/[^a-zA-Z+]/g, "")) + const names = [...useMainPlayer().extractors.store.values()].map((x) => + x.constructor.name + .replace('Extractor', '') + .replace(/[^a-zA-Z+]/g, '') + ) - return this.success(names.join(",")) - } -}) \ No newline at end of file + return this.success(names.join(',')) + }, +}) diff --git a/src/natives/getDisabledFilters.ts b/src/natives/getDisabledFilters.ts index 0aa5de0..90adcba 100644 --- a/src/natives/getDisabledFilters.ts +++ b/src/natives/getDisabledFilters.ts @@ -1,14 +1,16 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import { useQueue } from "discord-player" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$getDisabledFilters", - version: "1.0.0", - description: "Return the disabled FFMPEG filters.", + name: '$getDisabledFilters', + version: '1.0.0', + description: 'Return the disabled FFMPEG filters.', unwrap: false, output: ArgType.String, execute(ctx) { - const queue = useQueue(ctx.guild) - return this.success(queue.filters.ffmpeg.getFiltersDisabled().join(",")) - } -}) \ No newline at end of file + const queue = useQueue(ctx.guild.id) + if (!queue) return this.customError('No queue found.') + + return this.success(queue.filters.ffmpeg.getFiltersDisabled().join(',')) + }, +}) diff --git a/src/natives/getEnabledFilters.ts b/src/natives/getEnabledFilters.ts index 1bba07f..35e8c51 100644 --- a/src/natives/getEnabledFilters.ts +++ b/src/natives/getEnabledFilters.ts @@ -1,14 +1,16 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import { useQueue } from "discord-player" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$getEnabledFilters", - version: "1.0.0", - description: "Return the enabled FFMPEG filters.", + name: '$getEnabledFilters', + version: '1.0.0', + description: 'Return the enabled FFMPEG filters.', unwrap: false, output: ArgType.String, execute(ctx) { - const queue = useQueue(ctx.guild) - return this.success(queue.filters.ffmpeg.getFiltersEnabled().join(",")) - } -}) \ No newline at end of file + const queue = useQueue(ctx.guild.id) + if (!queue) return this.customError('No queue found.') + + return this.success(queue.filters.ffmpeg.getFiltersEnabled().join(',')) + }, +}) diff --git a/src/natives/getLoopMode.ts b/src/natives/getLoopMode.ts index 7479eee..d7d70c5 100644 --- a/src/natives/getLoopMode.ts +++ b/src/natives/getLoopMode.ts @@ -1,15 +1,19 @@ -import { QueueRepeatMode, useMainPlayer } from "discord-player" -import { NativeFunction } from "@tryforge/forgescript" +import { QueueRepeatMode, useMainPlayer } from 'discord-player' +import { NativeFunction } from '@tryforge/forgescript' export default new NativeFunction({ - name: "$getLoopMode", - version: "1.0.0", - description: "Returns the state of the loop mode.", + name: '$getLoopMode', + version: '1.0.0', + description: 'Returns the state of the loop mode.', unwrap: false, output: QueueRepeatMode, execute(ctx) { const player = useMainPlayer() - - return this.success(Object.keys(QueueRepeatMode)[player.queues.get(ctx.guild).repeatMode]) - } -}) \ No newline at end of file + + return this.success( + Object.keys(QueueRepeatMode)[ + player.queues.get(ctx.guild.id).repeatMode + ] + ) + }, +}) diff --git a/src/natives/getVolume.ts b/src/natives/getVolume.ts index 968bc9c..0d74913 100644 --- a/src/natives/getVolume.ts +++ b/src/natives/getVolume.ts @@ -1,13 +1,16 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import getNode from "@utils/getNode" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$getVolume", - version: "1.0.0", - description: "Get the current volume of the music player.", + name: '$getVolume', + version: '1.0.0', + description: 'Get the current volume of the music player.', unwrap: false, output: ArgType.Number, execute(ctx) { - return this.success(getNode(ctx).volume) - } -}) \ No newline at end of file + const queue = useQueue(ctx.guild.id) + if (!queue) return this.customError('No queue found.') + + return this.success(queue.node.volume) + }, +}) diff --git a/src/natives/hasMusicNode.ts b/src/natives/hasMusicNode.ts index 7cd1789..4ee96b6 100644 --- a/src/natives/hasMusicNode.ts +++ b/src/natives/hasMusicNode.ts @@ -1,13 +1,13 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import { useMainPlayer } from "discord-player" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useMainPlayer } from 'discord-player' export default new NativeFunction({ - name: "$hasMusicNode", - version: "1.0.0", - description: "Check whether the current guild has a music node created.", + name: '$hasMusicNode', + version: '1.0.0', + description: 'Check whether the current guild has a music node created.', unwrap: false, output: ArgType.Boolean, execute(ctx) { - return this.success(useMainPlayer().nodes.has(ctx.guild)) - } -}) \ No newline at end of file + return this.success(useMainPlayer().nodes.has(ctx.guild.id)) + }, +}) diff --git a/src/natives/isFilterEnabled.ts b/src/natives/isFilterEnabled.ts index 5c3e070..db60164 100644 --- a/src/natives/isFilterEnabled.ts +++ b/src/natives/isFilterEnabled.ts @@ -1,21 +1,33 @@ -import { Arg, ArgType, NativeFunction } from "@tryforge/forgescript" -import { FFMPEGFilters } from "@utils/constants" -import { useQueue } from "discord-player" +import { Arg, ArgType, NativeFunction } from '@tryforge/forgescript' +import { FFMPEGFilters } from '@utils/constants' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$isFilterEnabled", - version: "1.0.0", - description: "Check whether the provided filter is enabled.", + name: '$isFilterEnabled', + version: '1.0.0', + description: 'Check whether the provided filter is enabled.', brackets: true, unwrap: true, - args: [Arg.requiredEnum(FFMPEGFilters, "Filters", "Filter names to be toggled.")], + args: [ + Arg.requiredEnum( + FFMPEGFilters, + 'Filters', + 'Filter names to be toggled.' + ), + ], output: ArgType.Boolean, async execute(ctx, [filter]) { - const queue = useQueue(ctx.guild) - const allFilters = queue.filters.ffmpeg.getFiltersEnabled().concat(queue.filters.ffmpeg.getFiltersDisabled()) + const queue = useQueue(ctx.guild.id) + if (!queue) return this.customError('No queue found.') - const foundFilter = allFilters.find((fil) => fil.toLowerCase() === filter.toLowerCase()) + const allFilters = queue.filters.ffmpeg + .getFiltersEnabled() + .concat(queue.filters.ffmpeg.getFiltersDisabled()) + + const foundFilter = allFilters.find( + (fil) => fil.toLowerCase() === filter.toLowerCase() + ) return this.success(queue.filters.ffmpeg.isEnabled(foundFilter)) - } -}) \ No newline at end of file + }, +}) diff --git a/src/natives/isPaused.ts b/src/natives/isPaused.ts index a761bf5..fa4efb3 100644 --- a/src/natives/isPaused.ts +++ b/src/natives/isPaused.ts @@ -1,13 +1,16 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import getNode from "@utils/getNode" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$isPaused", - version: "1.0.0", - description: "Check whether the music player is paused.", + name: '$isPaused', + version: '1.0.0', + description: 'Check whether the music player is paused.', unwrap: false, output: ArgType.Boolean, execute(ctx) { - return this.success(getNode(ctx).isPaused()) - } -}) \ No newline at end of file + const queue = useQueue(ctx.guild.id) + if (!queue) return this.customError('No queue found.') + + return this.success(queue.node.isPaused()) + }, +}) diff --git a/src/natives/isPlaying.ts b/src/natives/isPlaying.ts index cc93214..7a14499 100644 --- a/src/natives/isPlaying.ts +++ b/src/natives/isPlaying.ts @@ -1,14 +1,14 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import { useMainPlayer } from "discord-player" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useMainPlayer } from 'discord-player' export default new NativeFunction({ - name: "$isPlaying", - version: "1.0.0", - description: "Check whether the music player is playing a track.", + name: '$isPlaying', + version: '1.0.0', + description: 'Check whether the music player is playing a track.', unwrap: false, output: ArgType.Boolean, execute(ctx) { const player = useMainPlayer() - return this.success(player.queues.get(ctx.guild).isPlaying()) - } -}) \ No newline at end of file + return this.success(player.queues.get(ctx.guild.id).isPlaying()) + }, +}) diff --git a/src/natives/isQueueHistoryDisabled.ts b/src/natives/isQueueHistoryDisabled.ts index cb7f9b3..401fd70 100644 --- a/src/natives/isQueueHistoryDisabled.ts +++ b/src/natives/isQueueHistoryDisabled.ts @@ -1,13 +1,13 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import { useQueue } from "discord-player" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$isQueueHistoryDisabled", - version: "1.0.0", - description: "Returns whether the queue history is disabled.", + name: '$isQueueHistoryDisabled', + version: '1.0.0', + description: 'Returns whether the queue history is disabled.', unwrap: false, output: ArgType.Boolean, execute(ctx) { - return this.success(useQueue(ctx.guild).history.disabled) - } -}) \ No newline at end of file + return this.success(useQueue(ctx.guild.id).history.disabled) + }, +}) diff --git a/src/natives/isQueueHistoryEmpty.ts b/src/natives/isQueueHistoryEmpty.ts index 8721267..c1d60ff 100644 --- a/src/natives/isQueueHistoryEmpty.ts +++ b/src/natives/isQueueHistoryEmpty.ts @@ -1,13 +1,13 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import { useQueue } from "discord-player" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$isQueueHistoryEmpty", - version: "1.0.0", - description: "Returns whether the queue history is empty.", + name: '$isQueueHistoryEmpty', + version: '1.0.0', + description: 'Returns whether the queue history is empty.', unwrap: false, output: ArgType.Boolean, execute(ctx) { - return this.success(useQueue(ctx.guild).history.isEmpty()) - } -}) \ No newline at end of file + return this.success(useQueue(ctx.guild.id).history.isEmpty()) + }, +}) diff --git a/src/natives/leaveVoiceChannel.ts b/src/natives/leaveVoiceChannel.ts index 1cdb0cf..5c1c2bb 100644 --- a/src/natives/leaveVoiceChannel.ts +++ b/src/natives/leaveVoiceChannel.ts @@ -1,17 +1,17 @@ -import { NativeFunction } from "@tryforge/forgescript" -import { useQueue } from "discord-player" -import hasQueue from "@utils/hasQueue" +import { NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$leaveVoiceChannel", - version: "1.0.0", - description: "Destroys the current voice connection.", + name: '$leaveVoiceChannel', + version: '1.0.0', + description: 'Destroys the current voice connection.', unwrap: false, async execute(ctx) { - if (hasQueue(ctx)) { - await useQueue(ctx.guild).connection.destroy() + const queue = useQueue(ctx.guild.id) + if (queue) { + await queue.connection.destroy() } return this.success() - } -}) \ No newline at end of file + }, +}) diff --git a/src/natives/moveTrack.ts b/src/natives/moveTrack.ts index ace172e..96b8fcd 100644 --- a/src/natives/moveTrack.ts +++ b/src/natives/moveTrack.ts @@ -1,23 +1,25 @@ -import { Arg, NativeFunction } from "@tryforge/forgescript" -import { useMainPlayer } from "discord-player" +import { Arg, NativeFunction } from '@tryforge/forgescript' +import { useMainPlayer } from 'discord-player' export default new NativeFunction({ - name: "$moveTrack", - version: "1.0.0", - description: "Moves the track to a new position.", + name: '$moveTrack', + version: '1.0.0', + description: 'Moves the track to a new position.', brackets: true, unwrap: true, args: [ - Arg.requiredNumber("Position", "The track position to be moved."), - Arg.requiredNumber("New Position", "The new position of the track.") + Arg.requiredNumber('Position', 'The track position to be moved.'), + Arg.requiredNumber('New Position', 'The new position of the track.'), ], execute(ctx, [position, newPosition]) { const player = useMainPlayer() - const queue = player.queues.get(ctx.guild) + const queue = player.queues.get(ctx.guild.id) + if (!queue) return this.customError('No queue found.') + const track = queue.node.remove(position) queue.node.insert(track, newPosition) return this.success() - } -}) \ No newline at end of file + }, +}) diff --git a/src/natives/pauseTrack.ts b/src/natives/pauseTrack.ts index 2a279b2..b24d911 100644 --- a/src/natives/pauseTrack.ts +++ b/src/natives/pauseTrack.ts @@ -1,13 +1,16 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import getNode from "@utils/getNode" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$pauseTrack", - version: "1.0.0", - description: "Pauses the current track.", + name: '$pauseTrack', + version: '1.0.0', + description: 'Pauses the current track.', unwrap: false, output: ArgType.Boolean, execute(ctx) { - return this.success(getNode(ctx).pause()) - } -}) \ No newline at end of file + const queue = useQueue(ctx.guild.id) + if (!queue) return this.customError('No queue found.') + + return this.success(queue.node.pause()) + }, +}) diff --git a/src/natives/playNext.ts b/src/natives/playNext.ts index 3ee305d..9edfdd7 100644 --- a/src/natives/playNext.ts +++ b/src/natives/playNext.ts @@ -1,14 +1,14 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import { useQueue } from "discord-player" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$playNext", - version: "1.0.0", - description: "Play the next track in the queue, if any.", + name: '$playNext', + version: '1.0.0', + description: 'Play the next track in the queue, if any.', unwrap: false, output: ArgType.Unknown, async execute(ctx) { - await useQueue(ctx.guild).history.next(); + await useQueue(ctx.guild.id).history.next() return this.success() - } -}) \ No newline at end of file + }, +}) diff --git a/src/natives/playPrevious.ts b/src/natives/playPrevious.ts index c064677..93b8449 100644 --- a/src/natives/playPrevious.ts +++ b/src/natives/playPrevious.ts @@ -1,14 +1,14 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import { useQueue } from "discord-player" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$playPrevious", - version: "1.0.0", - description: "Play the previous track in the queue history, if any.", + name: '$playPrevious', + version: '1.0.0', + description: 'Play the previous track in the queue history, if any.', unwrap: false, output: ArgType.Unknown, async execute(ctx) { - await useQueue(ctx.guild).history.previous(); + await useQueue(ctx.guild.id).history.previous() return this.success() - } -}) \ No newline at end of file + }, +}) diff --git a/src/natives/playTrack.ts b/src/natives/playTrack.ts index 3e23633..88b6ba0 100644 --- a/src/natives/playTrack.ts +++ b/src/natives/playTrack.ts @@ -1,54 +1,74 @@ -import { QueryType, SearchQueryType, useMainPlayer } from "discord-player" -import { Arg, ArgType, NativeFunction } from "@tryforge/forgescript" -import { BaseChannel, VoiceBasedChannel } from "discord.js" -import { ForgeMusic } from "@structures/ForgeMusic" +import { QueryType, SearchQueryType, useMainPlayer } from 'discord-player' +import { Arg, ArgType, NativeFunction } from '@tryforge/forgescript' +import { BaseChannel, VoiceBasedChannel } from 'discord.js' +import { ForgeMusic } from '@structures/ForgeMusic' export default new NativeFunction({ - name: "$playTrack", - version: "1.0.0", - description: "Play a track by query.", + name: '$playTrack', + version: '1.0.0', + description: 'Play a track by query.', brackets: true, unwrap: true, args: [ { - name: "Channel ID", - description: "Voice channel ID to play the track on.", + name: 'Channel ID', + description: 'Voice channel ID to play the track on.', type: ArgType.Channel, required: true, rest: false, - check: (c: BaseChannel) => c.isVoiceBased() + check: (c: BaseChannel) => c.isVoiceBased(), }, - Arg.requiredString("Query", "Track name to be searched."), - Arg.optionalString("Engine", "The query search engine, can be extractor name to target an specific one. (custom)"), - Arg.optionalEnum(QueryType, "Fallback Engine", "Fallback search engine to use."), + Arg.requiredString('Query', 'Track name to be searched.'), + Arg.optionalString( + 'Engine', + 'The query search engine, can be extractor name to target an specific one. (custom)' + ), + Arg.optionalEnum( + QueryType, + 'Fallback Engine', + 'Fallback search engine to use.' + ), { - name: "Block Extractors", - description: "List of extractors to block.", + name: 'Block Extractors', + description: 'List of extractors to block.', type: ArgType.String, required: false, - rest: true - } + rest: true, + }, ], - async execute(ctx, [voiceChannel, query, searchEngine, fallbackSearchEngine, blockExtractors]) { + async execute( + ctx, + [ + voiceChannel, + query, + searchEngine, + fallbackSearchEngine, + blockExtractors, + ] + ) { const player = useMainPlayer() const connectOptions = ctx.getExtension(ForgeMusic).connectOptions ?? {} const connectionOptionsUnion = { metadata: { text: ctx.channel }, - ...connectOptions + ...connectOptions, } let executed = true - const result = await player.play(voiceChannel, query, { - nodeOptions: connectionOptionsUnion, - searchEngine: searchEngine as (SearchQueryType | `ext:${string}`) | undefined, - fallbackSearchEngine, - blockExtractors, - requestedBy: ctx.user - }).catch((e) => { - executed = false - return e - }) + const result = await player + .play(voiceChannel, query, { + nodeOptions: connectionOptionsUnion, + searchEngine: + searchEngine || + undefined, + fallbackSearchEngine: fallbackSearchEngine || undefined, + blockExtractors: blockExtractors || undefined, + requestedBy: ctx.user, + }) + .catch((e) => { + executed = false + return e + }) return executed ? this.success() : this.error(result) - } -}) \ No newline at end of file + }, +}) diff --git a/src/natives/playerElapsedTime.ts b/src/natives/playerElapsedTime.ts index 3840bac..1e47822 100644 --- a/src/natives/playerElapsedTime.ts +++ b/src/natives/playerElapsedTime.ts @@ -1,13 +1,17 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import getNode from "@utils/getNode" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$playerElapsedTime", - version: "1.0.0", - description: "Returns the elapsed time of the current song in milliseconds.", + name: '$playerElapsedTime', + version: '1.0.0', + description: + 'Returns the elapsed time of the current song in milliseconds.', unwrap: false, output: ArgType.Number, execute(ctx) { - return this.success(getNode(ctx).getTimestamp().progress * 1000) - } -}) \ No newline at end of file + const queue = useQueue(ctx.guild.id) + if (!queue) return this.customError('No queue found.') + + return this.success(queue.node.getTimestamp().progress * 1000) + }, +}) diff --git a/src/natives/queue.ts b/src/natives/queue.ts index aa980f8..f3d1dd2 100644 --- a/src/natives/queue.ts +++ b/src/natives/queue.ts @@ -1,43 +1,48 @@ -import { Arg, ArgType, NativeFunction } from "@tryforge/forgescript" -import { PLACEHOLDER_PATTERN } from "@utils/constants" -import { createContext, runInContext } from "node:vm" -import { useQueue } from "discord-player" +import { Arg, ArgType, NativeFunction } from '@tryforge/forgescript' +import { PLACEHOLDER_PATTERN } from '@utils/constants' +import { createContext, runInContext } from 'node:vm' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$queue", - description: "Returns queue songs resolving the given text placeholders.", - version: "1.0.0", + name: '$queue', + description: 'Returns queue songs resolving the given text placeholders.', + version: '1.0.0', brackets: false, unwrap: true, args: [ - Arg.optionalNumber("Start Index", "The queue song start index."), - Arg.optionalNumber("Limit", "The amount of queue songs to be retrieved."), - Arg.optionalString("Text", "The text to be resolved."), - Arg.optionalString("Separator", "The separator for each result.") - + Arg.optionalNumber('Start Index', 'The queue song start index.'), + Arg.optionalNumber( + 'Limit', + 'The amount of queue songs to be retrieved.' + ), + Arg.optionalString('Text', 'The text to be resolved.'), + Arg.optionalString('Separator', 'The separator for each result.'), ], output: ArgType.String, async execute(ctx, [index, limit, text, separator]) { - const queue = useQueue(ctx.guild) + const queue = useQueue(ctx.guild.id) + if (!queue) return this.customError('No queue found.') + const tracks = queue.tracks.data - text ||= "{position} {track.title} | <@{track.requestedBy.username}>" + text ||= '{position} {track.title} | <@{track.requestedBy.username}>' + + const results = tracks + .slice(index ?? 0, limit ?? undefined) + .map((_, i) => text.replace(/\{position\}/g, String(i + 1))) + .map((song, i) => { + const matches = song.match(PLACEHOLDER_PATTERN) ?? [] + const context = createContext({ track: tracks[i] }) - const results = tracks.slice(index ?? 0, limit ?? undefined) - .map((_, i) => text.replace(/\{position\}/g, String(i + 1))) - .map((song, i) => { - const matches = song.match(PLACEHOLDER_PATTERN) ?? [] - const context = createContext({ track: tracks[i] }) + for (const match of matches) { + const placeholderValue = match.slice(1, -1) + const result = runInContext(placeholderValue, context) + song = song.replace(new RegExp(match, 'g'), result) + } - for (const match of matches) { - const placeholderValue = match.slice(1, -1) - const result = runInContext(placeholderValue, context) - song = song.replace(new RegExp(match, "g"), result) - } + return song + }) - return song - }) - - return this.success(results.join(separator || ",")) - } -}) \ No newline at end of file + return this.success(results.join(separator || ',')) + }, +}) diff --git a/src/natives/queueEstimatedDuration.ts b/src/natives/queueEstimatedDuration.ts index 46c5c44..6bbe58e 100644 --- a/src/natives/queueEstimatedDuration.ts +++ b/src/natives/queueEstimatedDuration.ts @@ -1,13 +1,14 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import { useQueue } from "discord-player" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$queueEstimatedDuration", - version: "1.0.0", - description: "Returns the estimated duration of the current guild queue in milliseconds.", + name: '$queueEstimatedDuration', + version: '1.0.0', + description: + 'Returns the estimated duration of the current guild queue in milliseconds.', unwrap: false, output: ArgType.Number, execute(ctx) { - return this.success(useQueue(ctx.guild).estimatedDuration) - } -}) \ No newline at end of file + return this.success(useQueue(ctx.guild.id).estimatedDuration) + }, +}) diff --git a/src/natives/queueHistory.ts b/src/natives/queueHistory.ts index e986588..1bc0f3f 100644 --- a/src/natives/queueHistory.ts +++ b/src/natives/queueHistory.ts @@ -1,32 +1,38 @@ -import { Arg, ArgType, NativeFunction } from "@tryforge/forgescript" -import { PLACEHOLDER_PATTERN } from "@utils/constants" -import { createContext, runInContext } from "node:vm" -import { useQueue } from "discord-player" +import { Arg, ArgType, NativeFunction } from '@tryforge/forgescript' +import { PLACEHOLDER_PATTERN } from '@utils/constants' +import { createContext, runInContext } from 'node:vm' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$queueHistory", - description: "Returns queue history songs resolving the given text placeholders.", - version: "1.0.0", + name: '$queueHistory', + description: + 'Returns queue history songs resolving the given text placeholders.', + version: '1.0.0', brackets: false, unwrap: true, args: [ - Arg.optionalNumber("Start Index", "The queue song start index."), - Arg.optionalNumber("Limit", "The amount of queue history songs to be retrieved."), - Arg.optionalString("Text", "The text to be resolved."), - Arg.optionalString("Separator", "The separator for each result.") - + Arg.optionalNumber('Start Index', 'The queue song start index.'), + Arg.optionalNumber( + 'Limit', + 'The amount of queue history songs to be retrieved.' + ), + Arg.optionalString('Text', 'The text to be resolved.'), + Arg.optionalString('Separator', 'The separator for each result.'), ], output: ArgType.String, async execute(ctx, [index, limit, text, separator]) { - const queue = useQueue(ctx.guild) + const queue = useQueue(ctx.guild.id) + if (!queue) return this.customError('No queue found.') + let tracks = queue.history.tracks.data - if (index) tracks = tracks.slice(index, limit ?? undefined); + if (index) tracks = tracks.slice(index, limit ?? undefined) const resolvedTracks: string[] = [] - text ??= "{position} {track.title} | {track.requestedBy}" + text ??= '{position} {track.title} | {track.requestedBy}' - let i = 0, advance = () => i++ + let i = 0, + advance = () => i++ for (const track of tracks) { let result = text.replace(/\{position\}/g, String(i + 1)) @@ -40,15 +46,21 @@ export default new NativeFunction({ const context = createContext({ track }) for (const match of matches) { const placeholderValue = match.slice(1, -1) - const placeholderResult = runInContext(placeholderValue, context) + const placeholderResult = runInContext( + placeholderValue, + context + ) - result = result.replace(new RegExp(match, "g"), placeholderResult) + result = result.replace( + new RegExp(match, 'g'), + placeholderResult + ) } resolvedTracks.push(result) advance() } - - return this.success(resolvedTracks.join(separator ?? ",")) - } -}) \ No newline at end of file + + return this.success(resolvedTracks.join(separator ?? ',')) + }, +}) diff --git a/src/natives/queueHistoryLength.ts b/src/natives/queueHistoryLength.ts index 59ef90a..10ee555 100644 --- a/src/natives/queueHistoryLength.ts +++ b/src/natives/queueHistoryLength.ts @@ -1,13 +1,13 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import { useQueue } from "discord-player" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$queueHistoryLength", - version: "1.0.0", - description: "Returns the length of the tracks that were played.", + name: '$queueHistoryLength', + version: '1.0.0', + description: 'Returns the length of the tracks that were played.', unwrap: false, output: ArgType.Number, execute(ctx) { - return this.success(useQueue(ctx.guild).history.tracks.data.length) - } -}) \ No newline at end of file + return this.success(useQueue(ctx.guild.id).history.tracks.data.length) + }, +}) diff --git a/src/natives/queueLength.ts b/src/natives/queueLength.ts index 65f59fd..739d0e1 100644 --- a/src/natives/queueLength.ts +++ b/src/natives/queueLength.ts @@ -1,13 +1,13 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import { useQueue } from "discord-player" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$queueLength", - version: "1.0.0", - description: "Returns the length of the current guild queue.", + name: '$queueLength', + version: '1.0.0', + description: 'Returns the length of the current guild queue.', unwrap: false, output: ArgType.Number, execute(ctx) { - return this.success(useQueue(ctx.guild).tracks.size) - } -}) \ No newline at end of file + return this.success(useQueue(ctx.guild.id).tracks.size) + }, +}) diff --git a/src/natives/queuePing.ts b/src/natives/queuePing.ts index 2dce660..e417794 100644 --- a/src/natives/queuePing.ts +++ b/src/natives/queuePing.ts @@ -1,13 +1,13 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import { useQueue } from "discord-player" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$queuePing", - version: "1.0.0", - description: "Returns the latency of the current guild queue.", + name: '$queuePing', + version: '1.0.0', + description: 'Returns the latency of the current guild queue.', unwrap: false, output: ArgType.Number, execute(ctx) { - return this.success(useQueue(ctx.guild).ping) - } -}) \ No newline at end of file + return this.success(useQueue(ctx.guild.id).ping) + }, +}) diff --git a/src/natives/removeTrack.ts b/src/natives/removeTrack.ts index 5067f1b..b7670f0 100644 --- a/src/natives/removeTrack.ts +++ b/src/natives/removeTrack.ts @@ -1,15 +1,18 @@ -import { Arg, ArgType, NativeFunction } from "@tryforge/forgescript" -import getNode from "@utils/getNode" +import { Arg, ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$removeTrack", - version: "1.0.0", - description: "Removes the track that is located at the given position.", + name: '$removeTrack', + version: '1.0.0', + description: 'Removes the track that is located at the given position.', brackets: true, unwrap: true, - args: [Arg.requiredNumber("Position", "The track position to be removed.")], + args: [Arg.requiredNumber('Position', 'The track position to be removed.')], output: ArgType.Boolean, execute(ctx, [position]) { - return this.success(!!getNode(ctx).remove(position)) - } -}) \ No newline at end of file + const queue = useQueue(ctx.guild.id) + if (!queue) return this.customError('No queue found.') + + return this.success(!!queue.node.remove(position)) + }, +}) diff --git a/src/natives/resumeTrack.ts b/src/natives/resumeTrack.ts index 1013498..9ca6008 100644 --- a/src/natives/resumeTrack.ts +++ b/src/natives/resumeTrack.ts @@ -1,13 +1,16 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import getNode from "@utils/getNode" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$resumeTrack", - version: "1.0.0", - description: "Resumes the current paused track.", + name: '$resumeTrack', + version: '1.0.0', + description: 'Resumes the current paused track.', unwrap: false, output: ArgType.Boolean, execute(ctx) { - return this.success(getNode(ctx).resume()) - } -}) \ No newline at end of file + const queue = useQueue(ctx.guild.id) + if (!queue) return this.customError('No queue found.') + + return this.success(queue.node.resume()) + }, +}) diff --git a/src/natives/searchTrack.ts b/src/natives/searchTrack.ts index 7c2ec00..8def96a 100644 --- a/src/natives/searchTrack.ts +++ b/src/natives/searchTrack.ts @@ -1,71 +1,110 @@ -import { SearchQueryType, useQueue, QueryType } from "discord-player" -import { Arg, ArgType, NativeFunction } from "@tryforge/forgescript" -import { PLACEHOLDER_PATTERN } from "@utils/constants" -import { createContext, runInContext } from "node:vm" -import { ForgeMusic } from "@structures/ForgeMusic" -import hasQueue from "@utils/hasQueue" +import { SearchQueryType, useQueue, QueryType } from 'discord-player' +import { Arg, ArgType, NativeFunction } from '@tryforge/forgescript' +import { PLACEHOLDER_PATTERN } from '@utils/constants' +import { createContext, runInContext } from 'node:vm' +import { ForgeMusic } from '@structures/ForgeMusic' export default new NativeFunction({ - name: "$searchTrack", - version: "1.0.0", - description: "Search for a track using the given query.", + name: '$searchTrack', + version: '1.0.0', + description: 'Search for a track using the given query.', brackets: true, unwrap: true, args: [ - Arg.requiredString("Query", "The query to search for."), - Arg.requiredString("Text Result", "The formatted text result to return."), - Arg.optionalString("Separator", "The result separator."), - Arg.optionalString("Engine", "The query search engine, can be extractor name to target an specific one. (custom)"), - Arg.optionalEnum(QueryType, "Fallback Engine", "Fallback search engine to use."), - Arg.optionalNumber("Limit", "The maximum number of results to return."), - Arg.optionalBoolean("Add To Player", "Whether add the results to the music player."), + Arg.requiredString('Query', 'The query to search for.'), + Arg.requiredString( + 'Text Result', + 'The formatted text result to return.' + ), + Arg.optionalString('Separator', 'The result separator.'), + Arg.optionalString( + 'Engine', + 'The query search engine, can be extractor name to target an specific one. (custom)' + ), + Arg.optionalEnum( + QueryType, + 'Fallback Engine', + 'Fallback search engine to use.' + ), + Arg.optionalNumber('Limit', 'The maximum number of results to return.'), + Arg.optionalBoolean( + 'Add To Player', + 'Whether add the results to the music player.' + ), { - name: "Block Extractors", - description: "List of extractors to block.", + name: 'Block Extractors', + description: 'List of extractors to block.', type: ArgType.String, required: false, - rest: true - } + rest: true, + }, ], - async execute(ctx, [query, text, separator, engine, fallbackEngine, limit, addToPlayer, blockedExtractors]) { - const searchResult = await ctx.client.getExtension(ForgeMusic).player.search(query, { - searchEngine: engine as SearchQueryType | `ext:${string}`, - fallbackSearchEngine: fallbackEngine, - blockExtractors: blockedExtractors, - requestedBy: ctx.user - }) + async execute( + ctx, + [ + query, + text, + separator, + engine, + fallbackEngine, + limit, + addToPlayer, + blockedExtractors, + ] + ) { + const searchOptions = { + searchEngine: + engine || undefined, + fallbackSearchEngine: fallbackEngine || undefined, + blockExtractors: blockedExtractors || undefined, + requestedBy: ctx.user, + } + const searchResult = await ctx.client + .getExtension(ForgeMusic) + .player.search(query, searchOptions) const connectOptions = ctx.getExtension(ForgeMusic).connectOptions ?? {} const connectionOptionsUnion = { metadata: { text: ctx.channel }, - ...connectOptions + ...connectOptions, } let tracks = searchResult.tracks - if (limit && tracks.length > limit) tracks = tracks.slice(0, limit); + if (limit && tracks.length > limit) tracks = tracks.slice(0, limit) - const formattedTracks = tracks.map((_, i) => text.replace(/\{position\}/g, String(i + 1))) - .map((trackText, i) => { - const track = tracks[i] - const matches = trackText.match(PLACEHOLDER_PATTERN) ?? [] - const context = createContext({ track }) + const formattedTracks = tracks + .map((_, i) => text.replace(/\{position\}/g, String(i + 1))) + .map((trackText, i) => { + const track = tracks[i] + const matches = trackText.match(PLACEHOLDER_PATTERN) ?? [] + const context = createContext({ track }) - for (const match of matches) { - const placeholderValue = match.slice(1, -1) - const result = runInContext(placeholderValue, context) + for (const match of matches) { + const placeholderValue = match.slice(1, -1) + const result = runInContext(placeholderValue, context) - trackText = trackText.replace(new RegExp(match, "g"), result) - } + trackText = trackText.replace( + new RegExp(match, 'g'), + result + ) + } - return trackText - }) + return trackText + }) - if (addToPlayer && hasQueue(ctx)) useQueue(ctx.guild).addTrack(tracks); - else if (addToPlayer && !hasQueue(ctx)) { - const queue = await ctx.client.getExtension(ForgeMusic).player.queues.create(ctx.guild, connectionOptionsUnion) + let queue = useQueue(ctx.guild.id) + if (addToPlayer && queue) queue.addTrack(tracks) + else if (addToPlayer && !queue) { + queue = await ctx.client + .getExtension(ForgeMusic) + .player.queues.create(ctx.guild.id, connectionOptionsUnion) queue.addTrack(tracks) } - return this.success(searchResult.tracks.length > 0 ? formattedTracks.join(separator ?? ",") : "") - } -}) \ No newline at end of file + return this.success( + searchResult.tracks.length > 0 + ? formattedTracks.join(separator ?? ',') + : '' + ) + }, +}) diff --git a/src/natives/seekTrack.ts b/src/natives/seekTrack.ts index a145283..40f4ac6 100644 --- a/src/natives/seekTrack.ts +++ b/src/natives/seekTrack.ts @@ -1,15 +1,18 @@ -import { Arg, ArgType, NativeFunction } from "@tryforge/forgescript" -import getNode from "@utils/getNode" +import { Arg, ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$seekTrack", - version: "1.0.0", - description: "Seeks a track.", + name: '$seekTrack', + version: '1.0.0', + description: 'Seeks a track.', brackets: true, unwrap: true, - args: [Arg.requiredTime("Duration", "Seek duration to be applied.")], + args: [Arg.requiredTime('Duration', 'Seek duration to be applied.')], output: ArgType.Boolean, async execute(ctx, [duration]) { - return this.success(await getNode(ctx).seek(duration)) - } -}) \ No newline at end of file + const queue = useQueue(ctx.guild.id) + if (!queue) return this.customError('No queue found.') + + return this.success(await queue.node.seek(duration)) + }, +}) diff --git a/src/natives/setLoopMode.ts b/src/natives/setLoopMode.ts index 99b418a..ac04d2e 100644 --- a/src/natives/setLoopMode.ts +++ b/src/natives/setLoopMode.ts @@ -1,18 +1,20 @@ -import { QueueRepeatMode, useMainPlayer } from "discord-player" -import { Arg, NativeFunction } from "@tryforge/forgescript" +import { QueueRepeatMode, useMainPlayer } from 'discord-player' +import { Arg, NativeFunction } from '@tryforge/forgescript' export default new NativeFunction({ - name: "$setLoopMode", - version: "1.0.0", - description: "Set the loop mode of the music player.", + name: '$setLoopMode', + version: '1.0.0', + description: 'Set the loop mode of the music player.', brackets: true, unwrap: true, - args: [Arg.requiredString("Mode", "The loop mode of the music player.")], + args: [Arg.requiredString('Mode', 'The loop mode of the music player.')], execute(ctx, [mode]) { const player = useMainPlayer() - player.queues.get(ctx.guild).setRepeatMode(QueueRepeatMode[mode.toUpperCase()]) + player.queues + .get(ctx.guild.id) + .setRepeatMode(QueueRepeatMode[mode.toUpperCase()]) return this.success() - } -}) \ No newline at end of file + }, +}) diff --git a/src/natives/setVolume.ts b/src/natives/setVolume.ts index 3350c64..6cf5704 100644 --- a/src/natives/setVolume.ts +++ b/src/natives/setVolume.ts @@ -1,16 +1,19 @@ -import { Arg, NativeFunction } from "@tryforge/forgescript" -import getNode from "@utils/getNode" +import { Arg, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$setVolume", - version: "1.0.0", - description: "Set the volume of the music player.", + name: '$setVolume', + version: '1.0.0', + description: 'Set the volume of the music player.', brackets: true, unwrap: true, - args: [Arg.requiredNumber("Amount", "The volume amount to be applied.")], + args: [Arg.requiredNumber('Amount', 'The volume amount to be applied.')], execute(ctx, [amount]) { - getNode(ctx).setVolume(amount) + const queue = useQueue(ctx.guild.id) + if (!queue) return this.customError('No queue found.') + + queue.node.setVolume(amount) return this.success() - } -}) \ No newline at end of file + }, +}) diff --git a/src/natives/shuffleQueue.ts b/src/natives/shuffleQueue.ts index 47fafe5..0eb6399 100644 --- a/src/natives/shuffleQueue.ts +++ b/src/natives/shuffleQueue.ts @@ -1,13 +1,14 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import { useQueue } from "discord-player" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$shuffleQueue", - version: "1.0.0", - description: "Shuffle the queue when the current track ends, unlike $shuffleTracks that can be undone, this function does not mutates the queue.", + name: '$shuffleQueue', + version: '1.0.0', + description: + 'Shuffle the queue when the current track ends, unlike $shuffleTracks that can be undone, this function does not mutates the queue.', unwrap: false, output: ArgType.Boolean, execute(ctx) { - return this.success(useQueue(ctx.guild).enableShuffle(true)) - } -}) \ No newline at end of file + return this.success(useQueue(ctx.guild.id).enableShuffle(true)) + }, +}) diff --git a/src/natives/shuffleTracks.ts b/src/natives/shuffleTracks.ts index 9d0327d..077efa0 100644 --- a/src/natives/shuffleTracks.ts +++ b/src/natives/shuffleTracks.ts @@ -1,16 +1,16 @@ -import { NativeFunction } from "@tryforge/forgescript" -import { useMainPlayer } from "discord-player" +import { NativeFunction } from '@tryforge/forgescript' +import { useMainPlayer } from 'discord-player' export default new NativeFunction({ - name: "$shuffleTracks", - version: "1.0.0", - description: "Shuffle the current guild queue.", + name: '$shuffleTracks', + version: '1.0.0', + description: 'Shuffle the current guild queue.', unwrap: false, execute(ctx) { const player = useMainPlayer() - player.queues.get(ctx.guild).tracks.shuffle() + player.queues.get(ctx.guild.id).tracks.shuffle() return this.success() - } -}) \ No newline at end of file + }, +}) diff --git a/src/natives/skipTo.ts b/src/natives/skipTo.ts index 8b98e70..d103c38 100644 --- a/src/natives/skipTo.ts +++ b/src/natives/skipTo.ts @@ -1,15 +1,18 @@ -import { Arg, ArgType, NativeFunction } from "@tryforge/forgescript" -import getNode from "@utils/getNode" +import { Arg, ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$skipTo", - version: "1.0.0", - description: "Skip the current track to the given position.", + name: '$skipTo', + version: '1.0.0', + description: 'Skip the current track to the given position.', brackets: true, unwrap: true, - args: [Arg.requiredNumber("Position", "The track position to be played.")], + args: [Arg.requiredNumber('Position', 'The track position to be played.')], output: ArgType.Boolean, execute(ctx, [position]) { - return this.success(getNode(ctx).skipTo(position)) - } -}) \ No newline at end of file + const queue = useQueue(ctx.guild.id) + if (!queue) return this.customError('No queue found.') + + return this.success(queue.node.skipTo(position)) + }, +}) diff --git a/src/natives/skipTrack.ts b/src/natives/skipTrack.ts index 4a51249..21449ec 100644 --- a/src/natives/skipTrack.ts +++ b/src/natives/skipTrack.ts @@ -1,13 +1,16 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import getNode from "@utils/getNode" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$skipTrack", - version: "1.0.0", - description: "Skip the current track.", + name: '$skipTrack', + version: '1.0.0', + description: 'Skip the current track.', unwrap: false, output: ArgType.Boolean, execute(ctx) { - return this.success(getNode(ctx).skip()) - } -}) \ No newline at end of file + const queue = useQueue(ctx.guild.id) + if (!queue) return this.customError('No queue found.') + + return this.success(queue.node.skip()) + }, +}) diff --git a/src/natives/stopTrack.ts b/src/natives/stopTrack.ts index ccf4808..5b39fff 100644 --- a/src/natives/stopTrack.ts +++ b/src/natives/stopTrack.ts @@ -1,13 +1,16 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import getNode from "@utils/getNode" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$stopTrack", - version: "1.0.0", - description: "Forces to stop the current track.", + name: '$stopTrack', + version: '1.0.0', + description: 'Forces to stop the current track.', unwrap: false, output: ArgType.Boolean, execute(ctx) { - return this.success(getNode(ctx).stop(true)) - } -}) \ No newline at end of file + const queue = useQueue(ctx.guild.id) + if (!queue) return this.customError('No queue found.') + + return this.success(queue.node.stop(true)) + }, +}) diff --git a/src/natives/toggleFilters.ts b/src/natives/toggleFilters.ts index 945b96e..cda1a2e 100644 --- a/src/natives/toggleFilters.ts +++ b/src/natives/toggleFilters.ts @@ -1,23 +1,31 @@ -import { Arg, NativeFunction } from "@tryforge/forgescript" -import { FFMPEGFilters } from "@utils/constants" -import { useQueue } from "discord-player" +import { Arg, NativeFunction } from '@tryforge/forgescript' +import { FFMPEGFilters } from '@utils/constants' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$toggleFilters", - version: "1.0.0", - description: "Toggle the provided FFMPEG filters.", + name: '$toggleFilters', + version: '1.0.0', + description: 'Toggle the provided FFMPEG filters.', brackets: true, unwrap: true, - args: [Arg.restEnum(FFMPEGFilters, "Filters", "Filter names to be toggled.")], + args: [ + Arg.restEnum(FFMPEGFilters, 'Filters', 'Filter names to be toggled.'), + ], async execute(ctx, [filters]) { - const queue = useQueue(ctx.guild) - const allFilters = queue.filters.ffmpeg.getFiltersEnabled().concat(queue.filters.ffmpeg.getFiltersDisabled()) + const queue = useQueue(ctx.guild.id) + if (!queue) return this.customError('No queue found.') + + const allFilters = queue.filters.ffmpeg + .getFiltersEnabled() + .concat(queue.filters.ffmpeg.getFiltersDisabled()) for (const filter of filters) { - const foundFilter = allFilters.find((fil) => fil.toLowerCase() === filter.toLowerCase()) - await queue.filters.ffmpeg.toggle(foundFilter); + const foundFilter = allFilters.find( + (fil) => fil.toLowerCase() === filter.toLowerCase() + ) + await queue.filters.ffmpeg.toggle(foundFilter) } return this.success() - } -}) \ No newline at end of file + }, +}) diff --git a/src/natives/trackInfo.ts b/src/natives/trackInfo.ts index f963d41..caecc73 100644 --- a/src/natives/trackInfo.ts +++ b/src/natives/trackInfo.ts @@ -1,24 +1,24 @@ -import { Arg, ArgType, NativeFunction } from "@tryforge/forgescript" -import { useQueue } from "discord-player" +import { Arg, ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$trackInfo", - version: "1.0.0", - description: "Returns information of the current track.", + name: '$trackInfo', + version: '1.0.0', + description: 'Returns information of the current track.', brackets: true, unwrap: true, - args: [ - Arg.restString("Properties", "The track properties to be accesed.") - ], + args: [Arg.restString('Properties', 'The track properties to be accesed.')], output: ArgType.String, execute(ctx, [properties]) { - const queue = useQueue(ctx.guild) + const queue = useQueue(ctx.guild.id) + if (!queue) return this.customError('No queue found.') + const track = queue.currentTrack - ctx.setEnvironmentKey("myTrack", track) - const got = ctx.getEnvironmentKey(...["myTrack", ...properties]) - ctx.deleteEnvironmentKey("myTrack") + ctx.setEnvironmentKey('myTrack', track) + const got = ctx.getEnvironmentKey(...['myTrack', ...properties]) + ctx.deleteEnvironmentKey('myTrack') return this.success(got) - } -}) \ No newline at end of file + }, +}) diff --git a/src/natives/unshuffleQueue.ts b/src/natives/unshuffleQueue.ts index 897a1d7..f9a84ec 100644 --- a/src/natives/unshuffleQueue.ts +++ b/src/natives/unshuffleQueue.ts @@ -1,13 +1,13 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript" -import { useQueue } from "discord-player" +import { ArgType, NativeFunction } from '@tryforge/forgescript' +import { useQueue } from 'discord-player' export default new NativeFunction({ - name: "$unshuffleQueue", - version: "1.0.0", - description: "Disable shuffle mode for the queue.", + name: '$unshuffleQueue', + version: '1.0.0', + description: 'Disable shuffle mode for the queue.', unwrap: false, output: ArgType.Boolean, execute(ctx) { - return this.success(useQueue(ctx.guild).disableShuffle()) - } -}) \ No newline at end of file + return this.success(useQueue(ctx.guild.id).disableShuffle()) + }, +}) diff --git a/src/utils/constants.ts b/src/utils/constants.ts index 9fce89e..478421c 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -2,44 +2,44 @@ * The list including the names of valid filters. */ export enum FFMPEGFilters { - Bassboost_low = "Bassboost_low", - Bassboost = "Bassboost", - Bassboost_high = "Bassboost_high", - "8d" = "8d", - Vaporwave = "Vaporwave", - Nightcore = "Nightcore", - Lofi = "Lofi", - Phaser = "Phaser", - Tremolo = "Tremolo", - Vibrato = "Vibrato", - Reverse = "Reverse", - Treble = "Treble", - Normalizer2 = "Normalizer2", - Normalizer = "Normalizer", - Surrounding = "Surrounding", - Pulsator = "Pulsator", - Subboost = "Subboost", - Karaoke = "Karaoke", - Flanger = "Flanger", - Gate = "Gate", - Haas = "Haas", - Mcompand = "Mcompand", - Mono = "Mono", - Mstlr = "Mstlr", - Mstrr = "Mstrr", - Compressor = "Compressor", - Expander = "Expander", - Softlimiter = "Softlimiter", - Chorus = "Chorus", - Chorus2d = "Chorus2d", - Chorus3d = "Chorus3d", - Fadein = "Fadein", - Dim = "Dim", - Earrape = "Earrape", - Silenceremove = "Silenceremove" + Bassboost_low = 'Bassboost_low', + Bassboost = 'Bassboost', + Bassboost_high = 'Bassboost_high', + '8d' = '8d', + Vaporwave = 'Vaporwave', + Nightcore = 'Nightcore', + Lofi = 'Lofi', + Phaser = 'Phaser', + Tremolo = 'Tremolo', + Vibrato = 'Vibrato', + Reverse = 'Reverse', + Treble = 'Treble', + Normalizer2 = 'Normalizer2', + Normalizer = 'Normalizer', + Surrounding = 'Surrounding', + Pulsator = 'Pulsator', + Subboost = 'Subboost', + Karaoke = 'Karaoke', + Flanger = 'Flanger', + Gate = 'Gate', + Haas = 'Haas', + Mcompand = 'Mcompand', + Mono = 'Mono', + Mstlr = 'Mstlr', + Mstrr = 'Mstrr', + Compressor = 'Compressor', + Expander = 'Expander', + Softlimiter = 'Softlimiter', + Chorus = 'Chorus', + Chorus2d = 'Chorus2d', + Chorus3d = 'Chorus3d', + Fadein = 'Fadein', + Dim = 'Dim', + Earrape = 'Earrape', + Silenceremove = 'Silenceremove', } /** * Capture pattern for song placeholders. */ -export const PLACEHOLDER_PATTERN = /\{[a-zA-Z0-9._]+(?:\.[a-zA-Z0-9._]+)*\}/g \ No newline at end of file +export const PLACEHOLDER_PATTERN = /\{[a-zA-Z0-9._]+(?:\.[a-zA-Z0-9._]+)*\}/g diff --git a/src/utils/getNode.ts b/src/utils/getNode.ts deleted file mode 100644 index b105dba..0000000 --- a/src/utils/getNode.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ForgeMusic } from "@structures/ForgeMusic" -import { Context } from "@tryforge/forgescript" - -export default function(ctx: Context) { - const extension = ctx.client.getExtension(ForgeMusic) - const queue = extension.player.queues.get(ctx.guild) - - return queue.node -} \ No newline at end of file diff --git a/src/utils/getQueue.ts b/src/utils/getQueue.ts deleted file mode 100644 index 1ced584..0000000 --- a/src/utils/getQueue.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { ForgeMusic } from "@structures/ForgeMusic" -import { Context } from "@tryforge/forgescript" - -export default function(ctx: Context) { - const extension = ctx.client.getExtension(ForgeMusic) - const queue = extension.player.queues.get(ctx.guild) - - return queue -} \ No newline at end of file diff --git a/src/utils/getVersion.ts b/src/utils/getVersion.ts index 079c0ee..ac81690 100644 --- a/src/utils/getVersion.ts +++ b/src/utils/getVersion.ts @@ -1,5 +1,5 @@ -import { readFileSync } from "fs" -import { join } from "path" +import { readFileSync } from 'fs' +import { join } from 'path' /** * Returns the package version. @@ -7,13 +7,10 @@ import { join } from "path" */ export function getVersion() { const stringContent = readFileSync( - join( - process.cwd(), - "package.json" - ), - "utf-8" + join(process.cwd(), 'package.json'), + 'utf-8' ) const data = JSON.parse(stringContent) return data.version as string -} \ No newline at end of file +} diff --git a/src/utils/hasQueue.ts b/src/utils/hasQueue.ts deleted file mode 100644 index 94eeba3..0000000 --- a/src/utils/hasQueue.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { ForgeMusic } from "@structures/ForgeMusic" -import { Context } from "@tryforge/forgescript" - -export default function(ctx: Context) { - const extension = ctx.client.getExtension(ForgeMusic) - - return extension.player.queues.has(ctx.guild) -} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index c233261..6ce5dba 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -17,14 +17,9 @@ "@structures/*": ["./src/classes/structures/*"] }, "tsBuildInfoFile": "./__dump__/.tsbuildinfo", - "skipLibCheck": true + "skipLibCheck": true, + "skipDefaultLibCheck": true }, - "include": [ - "./src/**/*.ts" - ], - "exclude": [ - "./__dump__", - "./__test__", - "./node_modules", - ] -} \ No newline at end of file + "include": ["./src/**/*.ts"], + "exclude": ["./__dump__", "./__test__", "./node_modules"] +} diff --git a/types/classes/handlers/MusicEventHandler.d.ts b/types/classes/handlers/MusicEventHandler.d.ts index ab5a1e0..88dca84 100644 --- a/types/classes/handlers/MusicEventHandler.d.ts +++ b/types/classes/handlers/MusicEventHandler.d.ts @@ -1,6 +1,6 @@ -import { BaseEventHandler, ForgeClient } from "@tryforge/forgescript"; -import { GuildQueueEvent, GuildQueueEvents } from "discord-player"; -import { GuildTextBasedChannel } from "discord.js"; +import { BaseEventHandler, ForgeClient } from '@tryforge/forgescript'; +import { GuildQueueEvent, GuildQueueEvents } from 'discord-player'; +import { GuildTextBasedChannel } from 'discord.js'; /** * Fix the typings for the music event handler. */ diff --git a/types/classes/managers/MusicCommandManager.d.ts b/types/classes/managers/MusicCommandManager.d.ts index c61e6ca..6a20923 100644 --- a/types/classes/managers/MusicCommandManager.d.ts +++ b/types/classes/managers/MusicCommandManager.d.ts @@ -1,5 +1,5 @@ -import { BaseCommandManager } from "@tryforge/forgescript"; -import { GuildQueueEvent } from "discord-player"; +import { BaseCommandManager } from '@tryforge/forgescript'; +import { GuildQueueEvent } from 'discord-player'; /** * Common music handler name. */ diff --git a/types/classes/structures/ForgeMusic.d.ts b/types/classes/structures/ForgeMusic.d.ts index e412ac2..099afb4 100644 --- a/types/classes/structures/ForgeMusic.d.ts +++ b/types/classes/structures/ForgeMusic.d.ts @@ -1,6 +1,6 @@ -import { type BaseExtractor, GuildNodeCreateOptions, GuildQueueEvent, Player, type PlayerInitOptions } from "discord-player"; -import { ForgeClient, ForgeExtension } from "@tryforge/forgescript"; -import { MusicCommandManager } from "../managers/MusicCommandManager"; +import { type BaseExtractor, GuildNodeCreateOptions, GuildQueueEvent, Player, type PlayerInitOptions } from 'discord-player'; +import { ForgeClient, ForgeExtension } from '@tryforge/forgescript'; +import { MusicCommandManager } from '../managers/MusicCommandManager'; /** * Constructor options of the music extension. */ @@ -8,7 +8,7 @@ interface ForgeMusicInitOptions extends PlayerInitOptions { /** * Options that are used when a guild node is created. */ - connectOptions?: Omit, "metadata">; + connectOptions?: Omit, 'metadata'>; /** * Array of event names the extension must listen to. */ @@ -16,8 +16,12 @@ interface ForgeMusicInitOptions extends PlayerInitOptions { /** * Predicate to load certain extractors. */ - includeExtractors?: typeof BaseExtractor[]; + includeExtractors?: (typeof BaseExtractor)[]; } +type TupleEngineOption> = [ + T, + ConstructorParameters['1'] +]; /** * The entrypoint of the forge music system. */ @@ -45,6 +49,11 @@ export declare class ForgeMusic extends ForgeExtension { * @returns {ForgeMusic} */ constructor(options?: ForgeMusicInitOptions); + /** + * Add multiple extractors into the player. + * @param engines - Extractor engines to add. + */ + addEngines>(engines: TupleEngineOption[]): void; /** * Starts the music extension. * @param client - The discord client instance. diff --git a/types/events/audioFiltersUpdate.d.ts b/types/events/audioFiltersUpdate.d.ts index 49e4cd8..40614b1 100644 --- a/types/events/audioFiltersUpdate.d.ts +++ b/types/events/audioFiltersUpdate.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/audioTrackAdd.d.ts b/types/events/audioTrackAdd.d.ts index 16996ba..83eaba0 100644 --- a/types/events/audioTrackAdd.d.ts +++ b/types/events/audioTrackAdd.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/audioTrackRemove.d.ts b/types/events/audioTrackRemove.d.ts index 7912189..2f9a1b3 100644 --- a/types/events/audioTrackRemove.d.ts +++ b/types/events/audioTrackRemove.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/audioTracksAdd.d.ts b/types/events/audioTracksAdd.d.ts index 3c9cfa5..7ba683b 100644 --- a/types/events/audioTracksAdd.d.ts +++ b/types/events/audioTracksAdd.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/biquadFiltersUpdate.d.ts b/types/events/biquadFiltersUpdate.d.ts index 0bfffe0..931d66c 100644 --- a/types/events/biquadFiltersUpdate.d.ts +++ b/types/events/biquadFiltersUpdate.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/channelPopulate.d.ts b/types/events/channelPopulate.d.ts index db8d6e0..301ba15 100644 --- a/types/events/channelPopulate.d.ts +++ b/types/events/channelPopulate.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/connection.d.ts b/types/events/connection.d.ts index 5479408..ce8c799 100644 --- a/types/events/connection.d.ts +++ b/types/events/connection.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/connectionDestroyed.d.ts b/types/events/connectionDestroyed.d.ts index 5c08648..0f39be3 100644 --- a/types/events/connectionDestroyed.d.ts +++ b/types/events/connectionDestroyed.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/debug.d.ts b/types/events/debug.d.ts index 5f3ac27..c66d16e 100644 --- a/types/events/debug.d.ts +++ b/types/events/debug.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/disconnect.d.ts b/types/events/disconnect.d.ts index a5a3999..e807f70 100644 --- a/types/events/disconnect.d.ts +++ b/types/events/disconnect.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/dspUpdate.d.ts b/types/events/dspUpdate.d.ts index f07b497..0d927eb 100644 --- a/types/events/dspUpdate.d.ts +++ b/types/events/dspUpdate.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/emptyChannel.d.ts b/types/events/emptyChannel.d.ts index a8f4cda..71e1dcb 100644 --- a/types/events/emptyChannel.d.ts +++ b/types/events/emptyChannel.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/emptyQueue.d.ts b/types/events/emptyQueue.d.ts index f0d9d09..d2e00e4 100644 --- a/types/events/emptyQueue.d.ts +++ b/types/events/emptyQueue.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/equalizerUpdate.d.ts b/types/events/equalizerUpdate.d.ts index 79d151f..e1c7f75 100644 --- a/types/events/equalizerUpdate.d.ts +++ b/types/events/equalizerUpdate.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/error.d.ts b/types/events/error.d.ts index b940614..fa26af0 100644 --- a/types/events/error.d.ts +++ b/types/events/error.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/playerError.d.ts b/types/events/playerError.d.ts index 2f4aced..35417f9 100644 --- a/types/events/playerError.d.ts +++ b/types/events/playerError.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/playerFinish.d.ts b/types/events/playerFinish.d.ts index 3256c20..b396a15 100644 --- a/types/events/playerFinish.d.ts +++ b/types/events/playerFinish.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/playerPause.d.ts b/types/events/playerPause.d.ts index d52463e..bbdfa5b 100644 --- a/types/events/playerPause.d.ts +++ b/types/events/playerPause.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/playerResume.d.ts b/types/events/playerResume.d.ts index 5400f6b..1755437 100644 --- a/types/events/playerResume.d.ts +++ b/types/events/playerResume.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/playerSkip.d.ts b/types/events/playerSkip.d.ts index a224341..275eb0b 100644 --- a/types/events/playerSkip.d.ts +++ b/types/events/playerSkip.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/playerStart.d.ts b/types/events/playerStart.d.ts index fb2c4bd..1a36a9d 100644 --- a/types/events/playerStart.d.ts +++ b/types/events/playerStart.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/playerTrigger.d.ts b/types/events/playerTrigger.d.ts index 88854d4..97eb9a7 100644 --- a/types/events/playerTrigger.d.ts +++ b/types/events/playerTrigger.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/queueCreate.d.ts b/types/events/queueCreate.d.ts index ab2c490..b2cae2a 100644 --- a/types/events/queueCreate.d.ts +++ b/types/events/queueCreate.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/queueDelete.d.ts b/types/events/queueDelete.d.ts index fbf4271..98fb679 100644 --- a/types/events/queueDelete.d.ts +++ b/types/events/queueDelete.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/events/volumeChange.d.ts b/types/events/volumeChange.d.ts index ef31308..0f4370c 100644 --- a/types/events/volumeChange.d.ts +++ b/types/events/volumeChange.d.ts @@ -1,3 +1,3 @@ -import { MusicEventHandler } from "../classes/handlers/MusicEventHandler"; +import { MusicEventHandler } from '../classes/handlers/MusicEventHandler'; declare const _default: MusicEventHandler; export default _default; diff --git a/types/index.d.ts b/types/index.d.ts index 80c924d..5495bda 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -1,4 +1,26 @@ -import { GuildQueueEvent, QueueRepeatMode, QueryType } from "discord-player"; -import { DefaultExtractors } from "@discord-player/extractor"; -import { ForgeMusic } from "./classes/structures/ForgeMusic"; -export { DefaultExtractors, ForgeMusic, GuildQueueEvent, QueueRepeatMode, QueryType }; +import { AttachmentExtractor, DefaultExtractors } from '@discord-player/extractor'; +import { GuildQueueEvent, QueueRepeatMode, QueryType } from 'discord-player'; +import { ForgeMusic } from './classes/structures/ForgeMusic'; +/** + * The list of all events. + */ +declare const AllEvents: string[]; +/** + * Returns an array including the given events and the error events. + * @param events The events to be included. + * @returns An array including the given events and the error events. + * @example + * ```typescript + * // This: + * events: [GuildQueueEvent.AudioTracksAdd, GuildQueueEvent.PlayerStart, GuildQueueEvent.Error, GuildQueueEvent.PlayerError] + * + * // is the same as: + * events: withErrorEvents(GuildQueueEvent.AudioTracksAdd, GuildQueueEvent.PlayerStart) + * ``` + */ +declare const withErrorEvents: (...events: GuildQueueEvent[]) => GuildQueueEvent[]; +export { AllEvents, AttachmentExtractor, +/** + * Not fully stable. + */ +DefaultExtractors, ForgeMusic, GuildQueueEvent, QueueRepeatMode, QueryType, withErrorEvents, }; diff --git a/types/natives/clearQueue.d.ts b/types/natives/clearQueue.d.ts index cdb6ef4..4ed2244 100644 --- a/types/natives/clearQueue.d.ts +++ b/types/natives/clearQueue.d.ts @@ -1,3 +1,3 @@ -import { NativeFunction } from "@tryforge/forgescript"; +import { NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/clearQueueHistory.d.ts b/types/natives/clearQueueHistory.d.ts index cdb6ef4..4ed2244 100644 --- a/types/natives/clearQueueHistory.d.ts +++ b/types/natives/clearQueueHistory.d.ts @@ -1,3 +1,3 @@ -import { NativeFunction } from "@tryforge/forgescript"; +import { NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/currentTrackTotalDuration.d.ts b/types/natives/currentTrackTotalDuration.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/currentTrackTotalDuration.d.ts +++ b/types/natives/currentTrackTotalDuration.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/deleteQueue.d.ts b/types/natives/deleteQueue.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/deleteQueue.d.ts +++ b/types/natives/deleteQueue.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/disableAllFilters.d.ts b/types/natives/disableAllFilters.d.ts index a7d8f5f..65ac5de 100644 --- a/types/natives/disableAllFilters.d.ts +++ b/types/natives/disableAllFilters.d.ts @@ -1,4 +1,4 @@ -import { NativeFunction } from "@tryforge/forgescript"; -import { FFMPEGFilters } from "../utils/constants"; +import { NativeFunction } from '@tryforge/forgescript'; +import { FFMPEGFilters } from '../utils/constants'; declare const _default: NativeFunction<[import("@tryforge/forgescript").IArg], true>; export default _default; diff --git a/types/natives/enableAllFilters.d.ts b/types/natives/enableAllFilters.d.ts index a7d8f5f..65ac5de 100644 --- a/types/natives/enableAllFilters.d.ts +++ b/types/natives/enableAllFilters.d.ts @@ -1,4 +1,4 @@ -import { NativeFunction } from "@tryforge/forgescript"; -import { FFMPEGFilters } from "../utils/constants"; +import { NativeFunction } from '@tryforge/forgescript'; +import { FFMPEGFilters } from '../utils/constants'; declare const _default: NativeFunction<[import("@tryforge/forgescript").IArg], true>; export default _default; diff --git a/types/natives/findExtractor.d.ts b/types/natives/findExtractor.d.ts new file mode 100644 index 0000000..1777dcc --- /dev/null +++ b/types/natives/findExtractor.d.ts @@ -0,0 +1,3 @@ +import { NativeFunction } from '@tryforge/forgescript'; +declare const _default: NativeFunction<[import("@tryforge/forgescript").IArg], true>; +export default _default; diff --git a/types/natives/getAvailableProviders.d.ts b/types/natives/getAvailableProviders.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/getAvailableProviders.d.ts +++ b/types/natives/getAvailableProviders.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/getDisabledFilters.d.ts b/types/natives/getDisabledFilters.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/getDisabledFilters.d.ts +++ b/types/natives/getDisabledFilters.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/getEnabledFilters.d.ts b/types/natives/getEnabledFilters.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/getEnabledFilters.d.ts +++ b/types/natives/getEnabledFilters.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/getLoopMode.d.ts b/types/natives/getLoopMode.d.ts index cdb6ef4..4ed2244 100644 --- a/types/natives/getLoopMode.d.ts +++ b/types/natives/getLoopMode.d.ts @@ -1,3 +1,3 @@ -import { NativeFunction } from "@tryforge/forgescript"; +import { NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/getVolume.d.ts b/types/natives/getVolume.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/getVolume.d.ts +++ b/types/natives/getVolume.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/hasMusicNode.d.ts b/types/natives/hasMusicNode.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/hasMusicNode.d.ts +++ b/types/natives/hasMusicNode.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/isFilterEnabled.d.ts b/types/natives/isFilterEnabled.d.ts index ea6e73b..a4a160d 100644 --- a/types/natives/isFilterEnabled.d.ts +++ b/types/natives/isFilterEnabled.d.ts @@ -1,4 +1,4 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; -import { FFMPEGFilters } from "../utils/constants"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; +import { FFMPEGFilters } from '../utils/constants'; declare const _default: NativeFunction<[import("@tryforge/forgescript").IArg], true>; export default _default; diff --git a/types/natives/isPaused.d.ts b/types/natives/isPaused.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/isPaused.d.ts +++ b/types/natives/isPaused.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/isPlaying.d.ts b/types/natives/isPlaying.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/isPlaying.d.ts +++ b/types/natives/isPlaying.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/isQueueHistoryDisabled.d.ts b/types/natives/isQueueHistoryDisabled.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/isQueueHistoryDisabled.d.ts +++ b/types/natives/isQueueHistoryDisabled.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/isQueueHistoryEmpty.d.ts b/types/natives/isQueueHistoryEmpty.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/isQueueHistoryEmpty.d.ts +++ b/types/natives/isQueueHistoryEmpty.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/leaveVoiceChannel.d.ts b/types/natives/leaveVoiceChannel.d.ts index cdb6ef4..4ed2244 100644 --- a/types/natives/leaveVoiceChannel.d.ts +++ b/types/natives/leaveVoiceChannel.d.ts @@ -1,3 +1,3 @@ -import { NativeFunction } from "@tryforge/forgescript"; +import { NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/moveTrack.d.ts b/types/natives/moveTrack.d.ts index 066df76..b8b7eae 100644 --- a/types/natives/moveTrack.d.ts +++ b/types/natives/moveTrack.d.ts @@ -1,3 +1,3 @@ -import { NativeFunction } from "@tryforge/forgescript"; +import { NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction<[import("@tryforge/forgescript").IArg, import("@tryforge/forgescript").IArg], true>; export default _default; diff --git a/types/natives/pauseTrack.d.ts b/types/natives/pauseTrack.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/pauseTrack.d.ts +++ b/types/natives/pauseTrack.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/playNext.d.ts b/types/natives/playNext.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/playNext.d.ts +++ b/types/natives/playNext.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/playPrevious.d.ts b/types/natives/playPrevious.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/playPrevious.d.ts +++ b/types/natives/playPrevious.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/playTrack.d.ts b/types/natives/playTrack.d.ts index d6307cb..7bec452 100644 --- a/types/natives/playTrack.d.ts +++ b/types/natives/playTrack.d.ts @@ -1,5 +1,5 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; -import { BaseChannel, VoiceBasedChannel } from "discord.js"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; +import { BaseChannel, VoiceBasedChannel } from 'discord.js'; declare const _default: NativeFunction<[{ name: string; description: string; diff --git a/types/natives/playerElapsedTime.d.ts b/types/natives/playerElapsedTime.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/playerElapsedTime.d.ts +++ b/types/natives/playerElapsedTime.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/queue.d.ts b/types/natives/queue.d.ts index c410fad..35be515 100644 --- a/types/natives/queue.d.ts +++ b/types/natives/queue.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction<[import("@tryforge/forgescript").IArg, import("@tryforge/forgescript").IArg, import("@tryforge/forgescript").IArg, import("@tryforge/forgescript").IArg], true>; export default _default; diff --git a/types/natives/queueEstimatedDuration.d.ts b/types/natives/queueEstimatedDuration.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/queueEstimatedDuration.d.ts +++ b/types/natives/queueEstimatedDuration.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/queueHistory.d.ts b/types/natives/queueHistory.d.ts index c410fad..35be515 100644 --- a/types/natives/queueHistory.d.ts +++ b/types/natives/queueHistory.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction<[import("@tryforge/forgescript").IArg, import("@tryforge/forgescript").IArg, import("@tryforge/forgescript").IArg, import("@tryforge/forgescript").IArg], true>; export default _default; diff --git a/types/natives/queueHistoryLength.d.ts b/types/natives/queueHistoryLength.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/queueHistoryLength.d.ts +++ b/types/natives/queueHistoryLength.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/queueLength.d.ts b/types/natives/queueLength.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/queueLength.d.ts +++ b/types/natives/queueLength.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/queuePing.d.ts b/types/natives/queuePing.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/queuePing.d.ts +++ b/types/natives/queuePing.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/removeTrack.d.ts b/types/natives/removeTrack.d.ts index c02f47c..0033a28 100644 --- a/types/natives/removeTrack.d.ts +++ b/types/natives/removeTrack.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction<[import("@tryforge/forgescript").IArg], true>; export default _default; diff --git a/types/natives/resumeTrack.d.ts b/types/natives/resumeTrack.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/resumeTrack.d.ts +++ b/types/natives/resumeTrack.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/searchTrack.d.ts b/types/natives/searchTrack.d.ts index 8935c9e..9aa4c47 100644 --- a/types/natives/searchTrack.d.ts +++ b/types/natives/searchTrack.d.ts @@ -1,4 +1,4 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction<[import("@tryforge/forgescript").IArg, import("@tryforge/forgescript").IArg, import("@tryforge/forgescript").IArg, import("@tryforge/forgescript").IArg, import("@tryforge/forgescript").IArg], true>; export default _default; diff --git a/types/natives/setLoopMode.d.ts b/types/natives/setLoopMode.d.ts index cf23df1..1777dcc 100644 --- a/types/natives/setLoopMode.d.ts +++ b/types/natives/setLoopMode.d.ts @@ -1,3 +1,3 @@ -import { NativeFunction } from "@tryforge/forgescript"; +import { NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction<[import("@tryforge/forgescript").IArg], true>; export default _default; diff --git a/types/natives/setVolume.d.ts b/types/natives/setVolume.d.ts index 403d9d1..dac2c5a 100644 --- a/types/natives/setVolume.d.ts +++ b/types/natives/setVolume.d.ts @@ -1,3 +1,3 @@ -import { NativeFunction } from "@tryforge/forgescript"; +import { NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction<[import("@tryforge/forgescript").IArg], true>; export default _default; diff --git a/types/natives/shuffleQueue.d.ts b/types/natives/shuffleQueue.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/shuffleQueue.d.ts +++ b/types/natives/shuffleQueue.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/shuffleTracks.d.ts b/types/natives/shuffleTracks.d.ts index cdb6ef4..4ed2244 100644 --- a/types/natives/shuffleTracks.d.ts +++ b/types/natives/shuffleTracks.d.ts @@ -1,3 +1,3 @@ -import { NativeFunction } from "@tryforge/forgescript"; +import { NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/skipTo.d.ts b/types/natives/skipTo.d.ts index c02f47c..0033a28 100644 --- a/types/natives/skipTo.d.ts +++ b/types/natives/skipTo.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction<[import("@tryforge/forgescript").IArg], true>; export default _default; diff --git a/types/natives/skipTrack.d.ts b/types/natives/skipTrack.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/skipTrack.d.ts +++ b/types/natives/skipTrack.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/stopTrack.d.ts b/types/natives/stopTrack.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/stopTrack.d.ts +++ b/types/natives/stopTrack.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/natives/toggleFilters.d.ts b/types/natives/toggleFilters.d.ts index a7d8f5f..65ac5de 100644 --- a/types/natives/toggleFilters.d.ts +++ b/types/natives/toggleFilters.d.ts @@ -1,4 +1,4 @@ -import { NativeFunction } from "@tryforge/forgescript"; -import { FFMPEGFilters } from "../utils/constants"; +import { NativeFunction } from '@tryforge/forgescript'; +import { FFMPEGFilters } from '../utils/constants'; declare const _default: NativeFunction<[import("@tryforge/forgescript").IArg], true>; export default _default; diff --git a/types/natives/trackInfo.d.ts b/types/natives/trackInfo.d.ts index c159807..5d05f28 100644 --- a/types/natives/trackInfo.d.ts +++ b/types/natives/trackInfo.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; -declare const _default: NativeFunction<[import("@tryforge/forgescript").IArg], true>; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; +declare const _default: NativeFunction<[import("@tryforge/forgescript").IArg], true>; export default _default; diff --git a/types/natives/unshuffleQueue.d.ts b/types/natives/unshuffleQueue.d.ts index 44d2f55..4c6d1fc 100644 --- a/types/natives/unshuffleQueue.d.ts +++ b/types/natives/unshuffleQueue.d.ts @@ -1,3 +1,3 @@ -import { ArgType, NativeFunction } from "@tryforge/forgescript"; +import { ArgType, NativeFunction } from '@tryforge/forgescript'; declare const _default: NativeFunction>[], false>; export default _default; diff --git a/types/utils/constants.d.ts b/types/utils/constants.d.ts index affb5ab..3742bc1 100644 --- a/types/utils/constants.d.ts +++ b/types/utils/constants.d.ts @@ -5,7 +5,7 @@ export declare enum FFMPEGFilters { Bassboost_low = "Bassboost_low", Bassboost = "Bassboost", Bassboost_high = "Bassboost_high", - "8d" = "8d", + '8d' = "8d", Vaporwave = "Vaporwave", Nightcore = "Nightcore", Lofi = "Lofi", diff --git a/types/utils/getNode.d.ts b/types/utils/getNode.d.ts deleted file mode 100644 index 5291278..0000000 --- a/types/utils/getNode.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Context } from "@tryforge/forgescript"; -export default function (ctx: Context): import("discord-player").GuildQueuePlayerNode; diff --git a/types/utils/getQueue.d.ts b/types/utils/getQueue.d.ts deleted file mode 100644 index f19f944..0000000 --- a/types/utils/getQueue.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Context } from "@tryforge/forgescript"; -export default function (ctx: Context): import("discord-player").GuildQueue; diff --git a/types/utils/hasQueue.d.ts b/types/utils/hasQueue.d.ts deleted file mode 100644 index df647a1..0000000 --- a/types/utils/hasQueue.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import { Context } from "@tryforge/forgescript"; -export default function (ctx: Context): boolean;