From 4880e032861893b27e80b7c2d6c36639afbb3479 Mon Sep 17 00:00:00 2001 From: Appu Date: Sat, 21 Sep 2024 20:46:04 +0530 Subject: [PATCH 01/14] update pkg-pr-new --- .github/workflows/check.yml | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index ec6153b..3b56d49 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -5,8 +5,22 @@ jobs: publish: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 with: node-version: 20 - - run: npx --yes pkg-pr-new publish + + - name: Install pnpm + run: npm install -g pnpm + + - name: Install dependencies + run: pnpm install + + - name: Build + run: pnpm build + + - name: Publish + run: npx --yes pkg-pr-new publish From 37bff5df5f2c65638947a849420720cd3015ea21 Mon Sep 17 00:00:00 2001 From: Appu Date: Sat, 21 Sep 2024 23:33:14 +0530 Subject: [PATCH 02/14] added new docs --- .gitignore | 1 + docs/.gitignore | 26 + docs/.nojekyll | 1 - docs/README.md | 55 + docs/assets/highlight.css | 99 -- docs/assets/main.js | 59 - docs/assets/material-style.css | 247 --- docs/assets/navigation.js | 1 - docs/assets/search.js | 1 - docs/assets/style.css | 1394 --------------- docs/astro.config.mjs | 89 + docs/classes/Filters.FilterManager.html | 227 --- .../LavalinkManager.LavalinkManager.html | 409 ----- docs/classes/Node.LavalinkNode.html | 604 ------- docs/classes/NodeManager.NodeManager.html | 384 ---- docs/classes/Player.Player.html | 297 ---- docs/classes/Queue.DefaultQueueStore.html | 197 --- docs/classes/Queue.Queue.html | 220 --- docs/classes/Queue.QueueSaver.html | 196 --- docs/classes/Utils.ManagerUtils.html | 197 --- docs/classes/Utils.MiniMap.html | 214 --- docs/enums/Constants.DebugEvents.html | 214 --- docs/enums/Constants.DestroyReasons.html | 186 -- ...earches_BandCampSearch.bandCampSearch.html | 174 -- .../functions/Utils.parseLavalinkConnUrl.html | 175 -- docs/functions/Utils.queueTrackEnd.html | 174 -- docs/index.html | 619 ------- .../Types_Filters.ChannelMixFilter.html | 185 -- .../Types_Filters.DistortionFilter.html | 183 -- docs/interfaces/Types_Filters.EQBand.html | 183 -- docs/interfaces/Types_Filters.FilterData.html | 185 -- .../Types_Filters.KaraokeFilter.html | 183 -- .../Types_Filters.LavalinkFilterData.html | 186 -- .../Types_Filters.LowPassFilter.html | 178 -- .../Types_Filters.PlayerFilters.html | 203 --- .../Types_Filters.RotationFilter.html | 178 -- .../Types_Filters.TimescaleFilter.html | 181 -- .../Types_Filters.TremoloFilter.html | 180 -- .../Types_Filters.VibratoFilter.html | 179 -- .../Types_Manager.BotClientOptions.html | 180 -- .../Types_Manager.LavalinkManagerEvents.html | 251 --- .../Types_Manager.ManagerOptions.html | 207 --- .../Types_Manager.ManagerPlayerOptions.html | 202 --- docs/interfaces/Types_Node.BaseNodeStats.html | 187 -- docs/interfaces/Types_Node.CPUStats.html | 181 -- docs/interfaces/Types_Node.FrameStats.html | 181 -- docs/interfaces/Types_Node.GitObject.html | 181 -- docs/interfaces/Types_Node.LavalinkInfo.html | 191 -- .../Types_Node.LavalinkNodeOptions.html | 201 --- docs/interfaces/Types_Node.LyricsLine.html | 182 -- docs/interfaces/Types_Node.LyricsResult.html | 184 -- docs/interfaces/Types_Node.MemoryStats.html | 183 -- .../Types_Node.NodeManagerEvents.html | 203 --- docs/interfaces/Types_Node.NodeStats.html | 187 -- docs/interfaces/Types_Node.PluginObject.html | 179 -- docs/interfaces/Types_Node.VersionObject.html | 187 -- .../Types_Player.BasePlayOptions.html | 186 -- .../Types_Player.LavalinkPlayOptions.html | 192 -- docs/interfaces/Types_Player.PlayOptions.html | 196 --- docs/interfaces/Types_Player.PlayerJson.html | 212 --- .../Types_Player.PlayerOptions.html | 194 --- .../Types_Queue.ManagerQueueOptions.html | 180 -- .../Types_Queue.QueueChangesWatcher.html | 180 -- .../Types_Queue.QueueStoreManager.html | 184 -- docs/interfaces/Types_Queue.StoredQueue.html | 177 -- .../interfaces/Types_Track.LavalinkTrack.html | 182 -- .../Types_Track.LavalinkTrackInfo.html | 194 --- docs/interfaces/Types_Track.PluginInfo.html | 204 --- docs/interfaces/Types_Track.Track.html | 184 -- docs/interfaces/Types_Track.TrackInfo.html | 194 --- .../Types_Track.UnresolvedQuery.html | 196 --- .../Types_Track.UnresolvedTrack.html | 186 -- .../Types_Track.UnresolvedTrackInfo.html | 194 --- .../Types_Utils.ChannelDeletePacket.html | 180 -- docs/interfaces/Types_Utils.Exception.html | 182 -- .../Types_Utils.FailingAddress.html | 180 -- .../Types_Utils.GuildShardPayload.html | 182 -- ...ypes_Utils.InvalidLavalinkRestRequest.html | 186 -- ...ypes_Utils.LavaSearchFilteredResponse.html | 180 -- .../Types_Utils.LavaSearchResponse.html | 186 -- .../Types_Utils.LavalinkPlayer.html | 192 -- .../Types_Utils.LavalinkPlayerVoice.html | 184 -- ...ypes_Utils.LavalinkPlayerVoiceOptions.html | 180 -- .../Types_Utils.LyricsFoundEvent.html | 181 -- .../Types_Utils.LyricsLineEvent.html | 185 -- .../Types_Utils.LyricsNotFoundEvent.html | 179 -- .../Types_Utils.MiniMapConstructor.html | 177 -- docs/interfaces/Types_Utils.NodeMessage.html | 193 --- docs/interfaces/Types_Utils.PlayerEvent.html | 177 -- .../Types_Utils.PlayerUpdateInfo.html | 180 -- docs/interfaces/Types_Utils.PlaylistInfo.html | 188 -- docs/interfaces/Types_Utils.RoutePlanner.html | 185 -- docs/interfaces/Types_Utils.SearchResult.html | 179 -- docs/interfaces/Types_Utils.Session.html | 178 -- ...ypes_Utils.SponsorBlockChapterStarted.html | 180 -- ...ypes_Utils.SponsorBlockChaptersLoaded.html | 180 -- ...ypes_Utils.SponsorBlockSegmentSkipped.html | 178 -- ...ypes_Utils.SponsorBlockSegmentsLoaded.html | 178 -- .../interfaces/Types_Utils.TrackEndEvent.html | 179 -- .../Types_Utils.TrackExceptionEvent.html | 180 -- .../Types_Utils.TrackStartEvent.html | 178 -- .../Types_Utils.TrackStuckEvent.html | 179 -- .../Types_Utils.UnresolvedSearchResult.html | 179 -- docs/interfaces/Types_Utils.VoicePacket.html | 178 -- docs/interfaces/Types_Utils.VoiceServer.html | 180 -- docs/interfaces/Types_Utils.VoiceState.html | 190 -- .../Types_Utils.WebSocketClosedEvent.html | 180 -- docs/modules/Constants.html | 179 -- .../CustomSearches_BandCampSearch.html | 175 -- docs/modules/Filters.html | 175 -- docs/modules/LavalinkManager.html | 175 -- docs/modules/LavalinkManagerStatics.html | 177 -- docs/modules/Node.html | 175 -- docs/modules/NodeManager.html | 175 -- docs/modules/Player.html | 175 -- docs/modules/Queue.html | 177 -- docs/modules/Types_Filters.html | 187 -- docs/modules/Types_Manager.html | 178 -- docs/modules/Types_Node.html | 190 -- docs/modules/Types_Player.html | 182 -- docs/modules/Types_Queue.html | 178 -- docs/modules/Types_Track.html | 185 -- docs/modules/Types_Utils.html | 237 --- docs/modules/Utils.html | 182 -- docs/package.json | 22 + docs/public/favicon.svg | 1 + docs/src/assets/houston.webp | Bin 0 -> 98506 bytes docs/src/components/version.astro | 6 + docs/src/content/config.ts | 6 + docs/src/content/docs/api/README.md | 178 ++ .../docs/api/classes/DefaultQueueStore.md | 187 ++ .../content/docs/api/classes/FilterManager.md | 477 +++++ .../docs/api/classes/LavalinkManager.md | 1542 +++++++++++++++++ .../content/docs/api/classes/LavalinkNode.md | 690 ++++++++ .../content/docs/api/classes/ManagerUtils.md | 376 ++++ docs/src/content/docs/api/classes/MiniMap.md | 588 +++++++ .../content/docs/api/classes/NodeManager.md | 1390 +++++++++++++++ docs/src/content/docs/api/classes/Player.md | 725 ++++++++ docs/src/content/docs/api/classes/Queue.md | 220 +++ .../content/docs/api/classes/QueueSaver.md | 140 ++ .../docs/api/enumerations/DebugEvents.md | 51 + .../docs/api/enumerations/DestroyReasons.md | 23 + .../api/functions/parseLavalinkConnUrl.md | 33 + .../docs/api/functions/queueTrackEnd.md | 24 + .../docs/api/interfaces/BaseNodeStats.md | 23 + .../docs/api/interfaces/BasePlayOptions.md | 21 + .../docs/api/interfaces/BotClientOptions.md | 19 + .../content/docs/api/interfaces/CPUStats.md | 16 + .../api/interfaces/ChannelDeletePacket.md | 15 + .../docs/api/interfaces/ChannelMixFilter.md | 19 + .../docs/api/interfaces/DistortionFilter.md | 21 + .../src/content/docs/api/interfaces/EQBand.md | 19 + .../content/docs/api/interfaces/Exception.md | 15 + .../docs/api/interfaces/FailingAddress.md | 14 + .../content/docs/api/interfaces/FilterData.md | 46 + .../content/docs/api/interfaces/FrameStats.md | 16 + .../content/docs/api/interfaces/GitObject.md | 16 + .../docs/api/interfaces/GuildShardPayload.md | 17 + .../interfaces/InvalidLavalinkRestRequest.md | 17 + .../docs/api/interfaces/KaraokeFilter.md | 17 + .../interfaces/LavaSearchFilteredResponse.md | 14 + .../docs/api/interfaces/LavaSearchResponse.md | 17 + .../docs/api/interfaces/LavalinkFilterData.md | 47 + .../docs/api/interfaces/LavalinkInfo.md | 21 + .../api/interfaces/LavalinkManagerEvents.md | 32 + .../api/interfaces/LavalinkNodeOptions.md | 26 + .../api/interfaces/LavalinkPlayOptions.md | 30 + .../docs/api/interfaces/LavalinkPlayer.md | 22 + .../api/interfaces/LavalinkPlayerVoice.md | 16 + .../docs/api/interfaces/LavalinkTrack.md | 15 + .../docs/api/interfaces/LavalinkTrackInfo.md | 21 + .../docs/api/interfaces/LowPassFilter.md | 15 + .../docs/api/interfaces/LyricsFoundEvent.md | 19 + .../content/docs/api/interfaces/LyricsLine.md | 15 + .../docs/api/interfaces/LyricsLineEvent.md | 21 + .../api/interfaces/LyricsNotFoundEvent.md | 18 + .../docs/api/interfaces/LyricsResult.md | 16 + .../docs/api/interfaces/ManagerOptions.md | 33 + .../api/interfaces/ManagerPlayerOptions.md | 29 + .../api/interfaces/ManagerQueueOptions.md | 14 + .../docs/api/interfaces/MemoryStats.md | 17 + .../docs/api/interfaces/NodeManagerEvents.md | 20 + .../docs/api/interfaces/NodeMessage.md | 26 + .../content/docs/api/interfaces/NodeStats.md | 27 + .../docs/api/interfaces/PlayOptions.md | 28 + .../docs/api/interfaces/PlayerEvent.md | 29 + .../docs/api/interfaces/PlayerFilters.md | 31 + .../content/docs/api/interfaces/PlayerJson.md | 31 + .../docs/api/interfaces/PlayerOptions.md | 21 + .../docs/api/interfaces/PlayerUpdateInfo.md | 14 + .../docs/api/interfaces/PlaylistInfo.md | 18 + .../content/docs/api/interfaces/PluginInfo.md | 27 + .../docs/api/interfaces/PluginObject.md | 15 + .../api/interfaces/QueueChangesWatcher.md | 14 + .../docs/api/interfaces/QueueStoreManager.md | 20 + .../docs/api/interfaces/RotationFilter.md | 15 + .../docs/api/interfaces/RoutePlanner.md | 22 + .../docs/api/interfaces/SearchResult.md | 16 + .../content/docs/api/interfaces/Session.md | 13 + .../interfaces/SponsorBlockChapterStarted.md | 23 + .../interfaces/SponsorBlockChaptersLoaded.md | 19 + .../interfaces/SponsorBlockSegmentSkipped.md | 22 + .../interfaces/SponsorBlockSegmentsLoaded.md | 19 + .../docs/api/interfaces/StoredQueue.md | 14 + .../docs/api/interfaces/TimescaleFilter.md | 16 + docs/src/content/docs/api/interfaces/Track.md | 16 + .../docs/api/interfaces/TrackEndEvent.md | 20 + .../api/interfaces/TrackExceptionEvent.md | 21 + .../content/docs/api/interfaces/TrackInfo.md | 21 + .../docs/api/interfaces/TrackStartEvent.md | 19 + .../docs/api/interfaces/TrackStuckEvent.md | 20 + .../docs/api/interfaces/TremoloFilter.md | 16 + .../docs/api/interfaces/UnresolvedQuery.md | 26 + .../api/interfaces/UnresolvedSearchResult.md | 16 + .../docs/api/interfaces/UnresolvedTrack.md | 17 + .../api/interfaces/UnresolvedTrackInfo.md | 29 + .../docs/api/interfaces/VersionObject.md | 19 + .../docs/api/interfaces/VibratoFilter.md | 15 + .../docs/api/interfaces/VoicePacket.md | 13 + .../docs/api/interfaces/VoiceServer.md | 14 + .../content/docs/api/interfaces/VoiceState.md | 19 + .../api/interfaces/WebSocketClosedEvent.md | 21 + .../docs/api/type-aliases/AudioOutputs.md | 16 + .../content/docs/api/type-aliases/Base64.md | 16 + .../ClientCustomSearchPlatformUtils.md | 19 + .../api/type-aliases/ClientSearchPlatform.md | 47 + .../api/type-aliases/DestroyReasonsType.md | 14 + .../api/type-aliases/DuncteSearchPlatform.md | 19 + .../docs/api/type-aliases/FloatNumber.md | 16 + .../docs/api/type-aliases/IntegerNumber.md | 16 + .../type-aliases/JioSaavnSearchPlatform.md | 14 + .../docs/api/type-aliases/LavaSearchQuery.md | 24 + .../docs/api/type-aliases/LavaSearchType.md | 26 + .../api/type-aliases/LavaSrcSearchPlatform.md | 14 + .../type-aliases/LavaSrcSearchPlatformBase.md | 20 + .../LavalinkClientSearchPlatform.md | 14 + .../LavalinkClientSearchPlatformResolve.md | 14 + .../type-aliases/LavalinkNodeIdentifier.md | 14 + .../LavalinkPlayerVoiceOptions.md | 14 + .../LavalinkPlugin_LavaSrc_SourceNames.md | 21 + .../type-aliases/LavalinkSearchPlatform.md | 22 + .../api/type-aliases/LavalinkSourceNames.md | 21 + .../docs/api/type-aliases/LoadTypes.md | 19 + .../docs/api/type-aliases/LyricsEvent.md | 16 + .../docs/api/type-aliases/LyricsEventType.md | 14 + .../docs/api/type-aliases/ModifyRequest.md | 26 + .../content/docs/api/type-aliases/Opaque.md | 29 + .../docs/api/type-aliases/PlayerEventType.md | 21 + .../docs/api/type-aliases/PlayerEvents.md | 21 + .../docs/api/type-aliases/RepeatMode.md | 14 + .../api/type-aliases/RoutePlannerTypes.md | 14 + .../docs/api/type-aliases/SearchPlatform.md | 14 + .../docs/api/type-aliases/SearchQuery.md | 16 + .../content/docs/api/type-aliases/Severity.md | 14 + .../docs/api/type-aliases/SourceNames.md | 16 + .../docs/api/type-aliases/SourcesRegex.md | 50 + .../api/type-aliases/SponsorBlockSegment.md | 22 + .../SponsorBlockSegmentEventType.md | 14 + .../type-aliases/SponsorBlockSegmentEvents.md | 16 + .../content/docs/api/type-aliases/State.md | 19 + .../docs/api/type-aliases/TrackEndReason.md | 19 + .../docs/api/type-aliases/anyObject.md | 18 + .../docs/api/variables/DefaultSources.md | 16 + docs/src/content/docs/api/variables/EQList.md | 30 + .../docs/api/variables/LavalinkPlugins.md | 28 + .../content/docs/api/variables/NodeSymbol.md | 14 + .../content/docs/api/variables/QueueSymbol.md | 14 + .../docs/api/variables/SourceLinksRegexes.md | 16 + .../content/docs/api/variables/TrackSymbol.md | 14 + .../api/variables/UnresolvedTrackSymbol.md | 14 + .../docs/api/variables/audioOutputsData.md | 16 + .../docs/api/variables/validSponsorBlocks.md | 14 + .../src/content/docs/extra/manager-events.mdx | 62 + docs/src/content/docs/extra/node-events.mdx | 49 + docs/src/content/docs/home/configuration.mdx | 153 ++ docs/src/content/docs/home/example.mdx | 200 +++ docs/src/content/docs/home/features.mdx | 40 + docs/src/content/docs/home/installation.mdx | 24 + docs/src/content/docs/index.mdx | 25 + docs/src/env.d.ts | 2 + docs/tsconfig.json | 3 + docs/types/Types_Filters.AudioOutputs.html | 175 -- .../Types_Node.LavalinkNodeIdentifier.html | 174 -- docs/types/Types_Node.ModifyRequest.html | 175 -- .../types/Types_Node.SponsorBlockSegment.html | 174 -- .../Types_Player.DestroyReasonsType.html | 174 -- docs/types/Types_Player.RepeatMode.html | 174 -- docs/types/Types_Player.anyObject.html | 174 -- ...ck.LavalinkPlugin_LavaSrc_SourceNames.html | 175 -- .../Types_Track.LavalinkSourceNames.html | 175 -- docs/types/Types_Track.SourceNames.html | 175 -- docs/types/Types_Utils.Base64.html | 175 -- ...Utils.ClientCustomSearchPlatformUtils.html | 174 -- .../Types_Utils.ClientSearchPlatform.html | 174 -- .../Types_Utils.DuncteSearchPlatform.html | 174 -- docs/types/Types_Utils.FloatNumber.html | 175 -- docs/types/Types_Utils.IntegerNumber.html | 175 -- .../Types_Utils.JioSaavnSearchPlatform.html | 174 -- docs/types/Types_Utils.LavaSearchQuery.html | 178 -- docs/types/Types_Utils.LavaSearchType.html | 175 -- .../Types_Utils.LavaSrcSearchPlatform.html | 174 -- ...Types_Utils.LavaSrcSearchPlatformBase.html | 174 -- ...es_Utils.LavalinkClientSearchPlatform.html | 174 -- ...s.LavalinkClientSearchPlatformResolve.html | 174 -- .../Types_Utils.LavalinkSearchPlatform.html | 174 -- docs/types/Types_Utils.LoadTypes.html | 174 -- docs/types/Types_Utils.LyricsEvent.html | 175 -- docs/types/Types_Utils.LyricsEventType.html | 174 -- docs/types/Types_Utils.Opaque.html | 175 -- docs/types/Types_Utils.PlayerEventType.html | 174 -- docs/types/Types_Utils.PlayerEvents.html | 174 -- docs/types/Types_Utils.RoutePlannerTypes.html | 174 -- docs/types/Types_Utils.SearchPlatform.html | 174 -- docs/types/Types_Utils.SearchQuery.html | 178 -- docs/types/Types_Utils.Severity.html | 174 -- docs/types/Types_Utils.SourcesRegex.html | 174 -- ...es_Utils.SponsorBlockSegmentEventType.html | 174 -- ...Types_Utils.SponsorBlockSegmentEvents.html | 175 -- docs/types/Types_Utils.State.html | 174 -- docs/types/Types_Utils.TrackEndReason.html | 174 -- docs/variables/Constants.EQList.html | 185 -- .../variables/Constants.audioOutputsData.html | 175 -- .../Constants.validSponsorBlocks.html | 174 -- ...LavalinkManagerStatics.DefaultSources.html | 175 -- ...avalinkManagerStatics.LavalinkPlugins.html | 175 -- ...linkManagerStatics.SourceLinksRegexes.html | 175 -- docs/variables/Utils.NodeSymbol.html | 174 -- docs/variables/Utils.QueueSymbol.html | 174 -- docs/variables/Utils.TrackSymbol.html | 174 -- .../Utils.UnresolvedTrackSymbol.html | 174 -- package.json | 11 +- 331 files changed, 9950 insertions(+), 32840 deletions(-) create mode 100644 docs/.gitignore delete mode 100644 docs/.nojekyll create mode 100644 docs/README.md delete mode 100644 docs/assets/highlight.css delete mode 100644 docs/assets/main.js delete mode 100644 docs/assets/material-style.css delete mode 100644 docs/assets/navigation.js delete mode 100644 docs/assets/search.js delete mode 100644 docs/assets/style.css create mode 100644 docs/astro.config.mjs delete mode 100644 docs/classes/Filters.FilterManager.html delete mode 100644 docs/classes/LavalinkManager.LavalinkManager.html delete mode 100644 docs/classes/Node.LavalinkNode.html delete mode 100644 docs/classes/NodeManager.NodeManager.html delete mode 100644 docs/classes/Player.Player.html delete mode 100644 docs/classes/Queue.DefaultQueueStore.html delete mode 100644 docs/classes/Queue.Queue.html delete mode 100644 docs/classes/Queue.QueueSaver.html delete mode 100644 docs/classes/Utils.ManagerUtils.html delete mode 100644 docs/classes/Utils.MiniMap.html delete mode 100644 docs/enums/Constants.DebugEvents.html delete mode 100644 docs/enums/Constants.DestroyReasons.html delete mode 100644 docs/functions/CustomSearches_BandCampSearch.bandCampSearch.html delete mode 100644 docs/functions/Utils.parseLavalinkConnUrl.html delete mode 100644 docs/functions/Utils.queueTrackEnd.html delete mode 100644 docs/index.html delete mode 100644 docs/interfaces/Types_Filters.ChannelMixFilter.html delete mode 100644 docs/interfaces/Types_Filters.DistortionFilter.html delete mode 100644 docs/interfaces/Types_Filters.EQBand.html delete mode 100644 docs/interfaces/Types_Filters.FilterData.html delete mode 100644 docs/interfaces/Types_Filters.KaraokeFilter.html delete mode 100644 docs/interfaces/Types_Filters.LavalinkFilterData.html delete mode 100644 docs/interfaces/Types_Filters.LowPassFilter.html delete mode 100644 docs/interfaces/Types_Filters.PlayerFilters.html delete mode 100644 docs/interfaces/Types_Filters.RotationFilter.html delete mode 100644 docs/interfaces/Types_Filters.TimescaleFilter.html delete mode 100644 docs/interfaces/Types_Filters.TremoloFilter.html delete mode 100644 docs/interfaces/Types_Filters.VibratoFilter.html delete mode 100644 docs/interfaces/Types_Manager.BotClientOptions.html delete mode 100644 docs/interfaces/Types_Manager.LavalinkManagerEvents.html delete mode 100644 docs/interfaces/Types_Manager.ManagerOptions.html delete mode 100644 docs/interfaces/Types_Manager.ManagerPlayerOptions.html delete mode 100644 docs/interfaces/Types_Node.BaseNodeStats.html delete mode 100644 docs/interfaces/Types_Node.CPUStats.html delete mode 100644 docs/interfaces/Types_Node.FrameStats.html delete mode 100644 docs/interfaces/Types_Node.GitObject.html delete mode 100644 docs/interfaces/Types_Node.LavalinkInfo.html delete mode 100644 docs/interfaces/Types_Node.LavalinkNodeOptions.html delete mode 100644 docs/interfaces/Types_Node.LyricsLine.html delete mode 100644 docs/interfaces/Types_Node.LyricsResult.html delete mode 100644 docs/interfaces/Types_Node.MemoryStats.html delete mode 100644 docs/interfaces/Types_Node.NodeManagerEvents.html delete mode 100644 docs/interfaces/Types_Node.NodeStats.html delete mode 100644 docs/interfaces/Types_Node.PluginObject.html delete mode 100644 docs/interfaces/Types_Node.VersionObject.html delete mode 100644 docs/interfaces/Types_Player.BasePlayOptions.html delete mode 100644 docs/interfaces/Types_Player.LavalinkPlayOptions.html delete mode 100644 docs/interfaces/Types_Player.PlayOptions.html delete mode 100644 docs/interfaces/Types_Player.PlayerJson.html delete mode 100644 docs/interfaces/Types_Player.PlayerOptions.html delete mode 100644 docs/interfaces/Types_Queue.ManagerQueueOptions.html delete mode 100644 docs/interfaces/Types_Queue.QueueChangesWatcher.html delete mode 100644 docs/interfaces/Types_Queue.QueueStoreManager.html delete mode 100644 docs/interfaces/Types_Queue.StoredQueue.html delete mode 100644 docs/interfaces/Types_Track.LavalinkTrack.html delete mode 100644 docs/interfaces/Types_Track.LavalinkTrackInfo.html delete mode 100644 docs/interfaces/Types_Track.PluginInfo.html delete mode 100644 docs/interfaces/Types_Track.Track.html delete mode 100644 docs/interfaces/Types_Track.TrackInfo.html delete mode 100644 docs/interfaces/Types_Track.UnresolvedQuery.html delete mode 100644 docs/interfaces/Types_Track.UnresolvedTrack.html delete mode 100644 docs/interfaces/Types_Track.UnresolvedTrackInfo.html delete mode 100644 docs/interfaces/Types_Utils.ChannelDeletePacket.html delete mode 100644 docs/interfaces/Types_Utils.Exception.html delete mode 100644 docs/interfaces/Types_Utils.FailingAddress.html delete mode 100644 docs/interfaces/Types_Utils.GuildShardPayload.html delete mode 100644 docs/interfaces/Types_Utils.InvalidLavalinkRestRequest.html delete mode 100644 docs/interfaces/Types_Utils.LavaSearchFilteredResponse.html delete mode 100644 docs/interfaces/Types_Utils.LavaSearchResponse.html delete mode 100644 docs/interfaces/Types_Utils.LavalinkPlayer.html delete mode 100644 docs/interfaces/Types_Utils.LavalinkPlayerVoice.html delete mode 100644 docs/interfaces/Types_Utils.LavalinkPlayerVoiceOptions.html delete mode 100644 docs/interfaces/Types_Utils.LyricsFoundEvent.html delete mode 100644 docs/interfaces/Types_Utils.LyricsLineEvent.html delete mode 100644 docs/interfaces/Types_Utils.LyricsNotFoundEvent.html delete mode 100644 docs/interfaces/Types_Utils.MiniMapConstructor.html delete mode 100644 docs/interfaces/Types_Utils.NodeMessage.html delete mode 100644 docs/interfaces/Types_Utils.PlayerEvent.html delete mode 100644 docs/interfaces/Types_Utils.PlayerUpdateInfo.html delete mode 100644 docs/interfaces/Types_Utils.PlaylistInfo.html delete mode 100644 docs/interfaces/Types_Utils.RoutePlanner.html delete mode 100644 docs/interfaces/Types_Utils.SearchResult.html delete mode 100644 docs/interfaces/Types_Utils.Session.html delete mode 100644 docs/interfaces/Types_Utils.SponsorBlockChapterStarted.html delete mode 100644 docs/interfaces/Types_Utils.SponsorBlockChaptersLoaded.html delete mode 100644 docs/interfaces/Types_Utils.SponsorBlockSegmentSkipped.html delete mode 100644 docs/interfaces/Types_Utils.SponsorBlockSegmentsLoaded.html delete mode 100644 docs/interfaces/Types_Utils.TrackEndEvent.html delete mode 100644 docs/interfaces/Types_Utils.TrackExceptionEvent.html delete mode 100644 docs/interfaces/Types_Utils.TrackStartEvent.html delete mode 100644 docs/interfaces/Types_Utils.TrackStuckEvent.html delete mode 100644 docs/interfaces/Types_Utils.UnresolvedSearchResult.html delete mode 100644 docs/interfaces/Types_Utils.VoicePacket.html delete mode 100644 docs/interfaces/Types_Utils.VoiceServer.html delete mode 100644 docs/interfaces/Types_Utils.VoiceState.html delete mode 100644 docs/interfaces/Types_Utils.WebSocketClosedEvent.html delete mode 100644 docs/modules/Constants.html delete mode 100644 docs/modules/CustomSearches_BandCampSearch.html delete mode 100644 docs/modules/Filters.html delete mode 100644 docs/modules/LavalinkManager.html delete mode 100644 docs/modules/LavalinkManagerStatics.html delete mode 100644 docs/modules/Node.html delete mode 100644 docs/modules/NodeManager.html delete mode 100644 docs/modules/Player.html delete mode 100644 docs/modules/Queue.html delete mode 100644 docs/modules/Types_Filters.html delete mode 100644 docs/modules/Types_Manager.html delete mode 100644 docs/modules/Types_Node.html delete mode 100644 docs/modules/Types_Player.html delete mode 100644 docs/modules/Types_Queue.html delete mode 100644 docs/modules/Types_Track.html delete mode 100644 docs/modules/Types_Utils.html delete mode 100644 docs/modules/Utils.html create mode 100644 docs/package.json create mode 100644 docs/public/favicon.svg create mode 100644 docs/src/assets/houston.webp create mode 100644 docs/src/components/version.astro create mode 100644 docs/src/content/config.ts create mode 100644 docs/src/content/docs/api/README.md create mode 100644 docs/src/content/docs/api/classes/DefaultQueueStore.md create mode 100644 docs/src/content/docs/api/classes/FilterManager.md create mode 100644 docs/src/content/docs/api/classes/LavalinkManager.md create mode 100644 docs/src/content/docs/api/classes/LavalinkNode.md create mode 100644 docs/src/content/docs/api/classes/ManagerUtils.md create mode 100644 docs/src/content/docs/api/classes/MiniMap.md create mode 100644 docs/src/content/docs/api/classes/NodeManager.md create mode 100644 docs/src/content/docs/api/classes/Player.md create mode 100644 docs/src/content/docs/api/classes/Queue.md create mode 100644 docs/src/content/docs/api/classes/QueueSaver.md create mode 100644 docs/src/content/docs/api/enumerations/DebugEvents.md create mode 100644 docs/src/content/docs/api/enumerations/DestroyReasons.md create mode 100644 docs/src/content/docs/api/functions/parseLavalinkConnUrl.md create mode 100644 docs/src/content/docs/api/functions/queueTrackEnd.md create mode 100644 docs/src/content/docs/api/interfaces/BaseNodeStats.md create mode 100644 docs/src/content/docs/api/interfaces/BasePlayOptions.md create mode 100644 docs/src/content/docs/api/interfaces/BotClientOptions.md create mode 100644 docs/src/content/docs/api/interfaces/CPUStats.md create mode 100644 docs/src/content/docs/api/interfaces/ChannelDeletePacket.md create mode 100644 docs/src/content/docs/api/interfaces/ChannelMixFilter.md create mode 100644 docs/src/content/docs/api/interfaces/DistortionFilter.md create mode 100644 docs/src/content/docs/api/interfaces/EQBand.md create mode 100644 docs/src/content/docs/api/interfaces/Exception.md create mode 100644 docs/src/content/docs/api/interfaces/FailingAddress.md create mode 100644 docs/src/content/docs/api/interfaces/FilterData.md create mode 100644 docs/src/content/docs/api/interfaces/FrameStats.md create mode 100644 docs/src/content/docs/api/interfaces/GitObject.md create mode 100644 docs/src/content/docs/api/interfaces/GuildShardPayload.md create mode 100644 docs/src/content/docs/api/interfaces/InvalidLavalinkRestRequest.md create mode 100644 docs/src/content/docs/api/interfaces/KaraokeFilter.md create mode 100644 docs/src/content/docs/api/interfaces/LavaSearchFilteredResponse.md create mode 100644 docs/src/content/docs/api/interfaces/LavaSearchResponse.md create mode 100644 docs/src/content/docs/api/interfaces/LavalinkFilterData.md create mode 100644 docs/src/content/docs/api/interfaces/LavalinkInfo.md create mode 100644 docs/src/content/docs/api/interfaces/LavalinkManagerEvents.md create mode 100644 docs/src/content/docs/api/interfaces/LavalinkNodeOptions.md create mode 100644 docs/src/content/docs/api/interfaces/LavalinkPlayOptions.md create mode 100644 docs/src/content/docs/api/interfaces/LavalinkPlayer.md create mode 100644 docs/src/content/docs/api/interfaces/LavalinkPlayerVoice.md create mode 100644 docs/src/content/docs/api/interfaces/LavalinkTrack.md create mode 100644 docs/src/content/docs/api/interfaces/LavalinkTrackInfo.md create mode 100644 docs/src/content/docs/api/interfaces/LowPassFilter.md create mode 100644 docs/src/content/docs/api/interfaces/LyricsFoundEvent.md create mode 100644 docs/src/content/docs/api/interfaces/LyricsLine.md create mode 100644 docs/src/content/docs/api/interfaces/LyricsLineEvent.md create mode 100644 docs/src/content/docs/api/interfaces/LyricsNotFoundEvent.md create mode 100644 docs/src/content/docs/api/interfaces/LyricsResult.md create mode 100644 docs/src/content/docs/api/interfaces/ManagerOptions.md create mode 100644 docs/src/content/docs/api/interfaces/ManagerPlayerOptions.md create mode 100644 docs/src/content/docs/api/interfaces/ManagerQueueOptions.md create mode 100644 docs/src/content/docs/api/interfaces/MemoryStats.md create mode 100644 docs/src/content/docs/api/interfaces/NodeManagerEvents.md create mode 100644 docs/src/content/docs/api/interfaces/NodeMessage.md create mode 100644 docs/src/content/docs/api/interfaces/NodeStats.md create mode 100644 docs/src/content/docs/api/interfaces/PlayOptions.md create mode 100644 docs/src/content/docs/api/interfaces/PlayerEvent.md create mode 100644 docs/src/content/docs/api/interfaces/PlayerFilters.md create mode 100644 docs/src/content/docs/api/interfaces/PlayerJson.md create mode 100644 docs/src/content/docs/api/interfaces/PlayerOptions.md create mode 100644 docs/src/content/docs/api/interfaces/PlayerUpdateInfo.md create mode 100644 docs/src/content/docs/api/interfaces/PlaylistInfo.md create mode 100644 docs/src/content/docs/api/interfaces/PluginInfo.md create mode 100644 docs/src/content/docs/api/interfaces/PluginObject.md create mode 100644 docs/src/content/docs/api/interfaces/QueueChangesWatcher.md create mode 100644 docs/src/content/docs/api/interfaces/QueueStoreManager.md create mode 100644 docs/src/content/docs/api/interfaces/RotationFilter.md create mode 100644 docs/src/content/docs/api/interfaces/RoutePlanner.md create mode 100644 docs/src/content/docs/api/interfaces/SearchResult.md create mode 100644 docs/src/content/docs/api/interfaces/Session.md create mode 100644 docs/src/content/docs/api/interfaces/SponsorBlockChapterStarted.md create mode 100644 docs/src/content/docs/api/interfaces/SponsorBlockChaptersLoaded.md create mode 100644 docs/src/content/docs/api/interfaces/SponsorBlockSegmentSkipped.md create mode 100644 docs/src/content/docs/api/interfaces/SponsorBlockSegmentsLoaded.md create mode 100644 docs/src/content/docs/api/interfaces/StoredQueue.md create mode 100644 docs/src/content/docs/api/interfaces/TimescaleFilter.md create mode 100644 docs/src/content/docs/api/interfaces/Track.md create mode 100644 docs/src/content/docs/api/interfaces/TrackEndEvent.md create mode 100644 docs/src/content/docs/api/interfaces/TrackExceptionEvent.md create mode 100644 docs/src/content/docs/api/interfaces/TrackInfo.md create mode 100644 docs/src/content/docs/api/interfaces/TrackStartEvent.md create mode 100644 docs/src/content/docs/api/interfaces/TrackStuckEvent.md create mode 100644 docs/src/content/docs/api/interfaces/TremoloFilter.md create mode 100644 docs/src/content/docs/api/interfaces/UnresolvedQuery.md create mode 100644 docs/src/content/docs/api/interfaces/UnresolvedSearchResult.md create mode 100644 docs/src/content/docs/api/interfaces/UnresolvedTrack.md create mode 100644 docs/src/content/docs/api/interfaces/UnresolvedTrackInfo.md create mode 100644 docs/src/content/docs/api/interfaces/VersionObject.md create mode 100644 docs/src/content/docs/api/interfaces/VibratoFilter.md create mode 100644 docs/src/content/docs/api/interfaces/VoicePacket.md create mode 100644 docs/src/content/docs/api/interfaces/VoiceServer.md create mode 100644 docs/src/content/docs/api/interfaces/VoiceState.md create mode 100644 docs/src/content/docs/api/interfaces/WebSocketClosedEvent.md create mode 100644 docs/src/content/docs/api/type-aliases/AudioOutputs.md create mode 100644 docs/src/content/docs/api/type-aliases/Base64.md create mode 100644 docs/src/content/docs/api/type-aliases/ClientCustomSearchPlatformUtils.md create mode 100644 docs/src/content/docs/api/type-aliases/ClientSearchPlatform.md create mode 100644 docs/src/content/docs/api/type-aliases/DestroyReasonsType.md create mode 100644 docs/src/content/docs/api/type-aliases/DuncteSearchPlatform.md create mode 100644 docs/src/content/docs/api/type-aliases/FloatNumber.md create mode 100644 docs/src/content/docs/api/type-aliases/IntegerNumber.md create mode 100644 docs/src/content/docs/api/type-aliases/JioSaavnSearchPlatform.md create mode 100644 docs/src/content/docs/api/type-aliases/LavaSearchQuery.md create mode 100644 docs/src/content/docs/api/type-aliases/LavaSearchType.md create mode 100644 docs/src/content/docs/api/type-aliases/LavaSrcSearchPlatform.md create mode 100644 docs/src/content/docs/api/type-aliases/LavaSrcSearchPlatformBase.md create mode 100644 docs/src/content/docs/api/type-aliases/LavalinkClientSearchPlatform.md create mode 100644 docs/src/content/docs/api/type-aliases/LavalinkClientSearchPlatformResolve.md create mode 100644 docs/src/content/docs/api/type-aliases/LavalinkNodeIdentifier.md create mode 100644 docs/src/content/docs/api/type-aliases/LavalinkPlayerVoiceOptions.md create mode 100644 docs/src/content/docs/api/type-aliases/LavalinkPlugin_LavaSrc_SourceNames.md create mode 100644 docs/src/content/docs/api/type-aliases/LavalinkSearchPlatform.md create mode 100644 docs/src/content/docs/api/type-aliases/LavalinkSourceNames.md create mode 100644 docs/src/content/docs/api/type-aliases/LoadTypes.md create mode 100644 docs/src/content/docs/api/type-aliases/LyricsEvent.md create mode 100644 docs/src/content/docs/api/type-aliases/LyricsEventType.md create mode 100644 docs/src/content/docs/api/type-aliases/ModifyRequest.md create mode 100644 docs/src/content/docs/api/type-aliases/Opaque.md create mode 100644 docs/src/content/docs/api/type-aliases/PlayerEventType.md create mode 100644 docs/src/content/docs/api/type-aliases/PlayerEvents.md create mode 100644 docs/src/content/docs/api/type-aliases/RepeatMode.md create mode 100644 docs/src/content/docs/api/type-aliases/RoutePlannerTypes.md create mode 100644 docs/src/content/docs/api/type-aliases/SearchPlatform.md create mode 100644 docs/src/content/docs/api/type-aliases/SearchQuery.md create mode 100644 docs/src/content/docs/api/type-aliases/Severity.md create mode 100644 docs/src/content/docs/api/type-aliases/SourceNames.md create mode 100644 docs/src/content/docs/api/type-aliases/SourcesRegex.md create mode 100644 docs/src/content/docs/api/type-aliases/SponsorBlockSegment.md create mode 100644 docs/src/content/docs/api/type-aliases/SponsorBlockSegmentEventType.md create mode 100644 docs/src/content/docs/api/type-aliases/SponsorBlockSegmentEvents.md create mode 100644 docs/src/content/docs/api/type-aliases/State.md create mode 100644 docs/src/content/docs/api/type-aliases/TrackEndReason.md create mode 100644 docs/src/content/docs/api/type-aliases/anyObject.md create mode 100644 docs/src/content/docs/api/variables/DefaultSources.md create mode 100644 docs/src/content/docs/api/variables/EQList.md create mode 100644 docs/src/content/docs/api/variables/LavalinkPlugins.md create mode 100644 docs/src/content/docs/api/variables/NodeSymbol.md create mode 100644 docs/src/content/docs/api/variables/QueueSymbol.md create mode 100644 docs/src/content/docs/api/variables/SourceLinksRegexes.md create mode 100644 docs/src/content/docs/api/variables/TrackSymbol.md create mode 100644 docs/src/content/docs/api/variables/UnresolvedTrackSymbol.md create mode 100644 docs/src/content/docs/api/variables/audioOutputsData.md create mode 100644 docs/src/content/docs/api/variables/validSponsorBlocks.md create mode 100644 docs/src/content/docs/extra/manager-events.mdx create mode 100644 docs/src/content/docs/extra/node-events.mdx create mode 100644 docs/src/content/docs/home/configuration.mdx create mode 100644 docs/src/content/docs/home/example.mdx create mode 100644 docs/src/content/docs/home/features.mdx create mode 100644 docs/src/content/docs/home/installation.mdx create mode 100644 docs/src/content/docs/index.mdx create mode 100644 docs/src/env.d.ts create mode 100644 docs/tsconfig.json delete mode 100644 docs/types/Types_Filters.AudioOutputs.html delete mode 100644 docs/types/Types_Node.LavalinkNodeIdentifier.html delete mode 100644 docs/types/Types_Node.ModifyRequest.html delete mode 100644 docs/types/Types_Node.SponsorBlockSegment.html delete mode 100644 docs/types/Types_Player.DestroyReasonsType.html delete mode 100644 docs/types/Types_Player.RepeatMode.html delete mode 100644 docs/types/Types_Player.anyObject.html delete mode 100644 docs/types/Types_Track.LavalinkPlugin_LavaSrc_SourceNames.html delete mode 100644 docs/types/Types_Track.LavalinkSourceNames.html delete mode 100644 docs/types/Types_Track.SourceNames.html delete mode 100644 docs/types/Types_Utils.Base64.html delete mode 100644 docs/types/Types_Utils.ClientCustomSearchPlatformUtils.html delete mode 100644 docs/types/Types_Utils.ClientSearchPlatform.html delete mode 100644 docs/types/Types_Utils.DuncteSearchPlatform.html delete mode 100644 docs/types/Types_Utils.FloatNumber.html delete mode 100644 docs/types/Types_Utils.IntegerNumber.html delete mode 100644 docs/types/Types_Utils.JioSaavnSearchPlatform.html delete mode 100644 docs/types/Types_Utils.LavaSearchQuery.html delete mode 100644 docs/types/Types_Utils.LavaSearchType.html delete mode 100644 docs/types/Types_Utils.LavaSrcSearchPlatform.html delete mode 100644 docs/types/Types_Utils.LavaSrcSearchPlatformBase.html delete mode 100644 docs/types/Types_Utils.LavalinkClientSearchPlatform.html delete mode 100644 docs/types/Types_Utils.LavalinkClientSearchPlatformResolve.html delete mode 100644 docs/types/Types_Utils.LavalinkSearchPlatform.html delete mode 100644 docs/types/Types_Utils.LoadTypes.html delete mode 100644 docs/types/Types_Utils.LyricsEvent.html delete mode 100644 docs/types/Types_Utils.LyricsEventType.html delete mode 100644 docs/types/Types_Utils.Opaque.html delete mode 100644 docs/types/Types_Utils.PlayerEventType.html delete mode 100644 docs/types/Types_Utils.PlayerEvents.html delete mode 100644 docs/types/Types_Utils.RoutePlannerTypes.html delete mode 100644 docs/types/Types_Utils.SearchPlatform.html delete mode 100644 docs/types/Types_Utils.SearchQuery.html delete mode 100644 docs/types/Types_Utils.Severity.html delete mode 100644 docs/types/Types_Utils.SourcesRegex.html delete mode 100644 docs/types/Types_Utils.SponsorBlockSegmentEventType.html delete mode 100644 docs/types/Types_Utils.SponsorBlockSegmentEvents.html delete mode 100644 docs/types/Types_Utils.State.html delete mode 100644 docs/types/Types_Utils.TrackEndReason.html delete mode 100644 docs/variables/Constants.EQList.html delete mode 100644 docs/variables/Constants.audioOutputsData.html delete mode 100644 docs/variables/Constants.validSponsorBlocks.html delete mode 100644 docs/variables/LavalinkManagerStatics.DefaultSources.html delete mode 100644 docs/variables/LavalinkManagerStatics.LavalinkPlugins.html delete mode 100644 docs/variables/LavalinkManagerStatics.SourceLinksRegexes.html delete mode 100644 docs/variables/Utils.NodeSymbol.html delete mode 100644 docs/variables/Utils.QueueSymbol.html delete mode 100644 docs/variables/Utils.TrackSymbol.html delete mode 100644 docs/variables/Utils.UnresolvedTrackSymbol.html diff --git a/.gitignore b/.gitignore index 3569052..f771097 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,5 @@ testBot/package-lock.json bun.lockb yarn.lock package-lock.json +pnpm-lock.yaml dist diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..26a5151 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,26 @@ +# build output +dist/ +# generated types +.astro/ + +# dependencies +node_modules/ + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store + +# lockfiles +package-lock.json +yarn.lock +pnpm-lock.yaml \ No newline at end of file diff --git a/docs/.nojekyll b/docs/.nojekyll deleted file mode 100644 index e2ac661..0000000 --- a/docs/.nojekyll +++ /dev/null @@ -1 +0,0 @@ -TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false. \ No newline at end of file diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..e09bf55 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,55 @@ +# Starlight Starter Kit: Basics + +[![Built with Starlight](https://astro.badg.es/v2/built-with-starlight/tiny.svg)](https://starlight.astro.build) + +``` +npm create astro@latest -- --template starlight +``` + +[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/starlight/tree/main/examples/basics) +[![Open with CodeSandbox](https://assets.codesandbox.io/github/button-edit-lime.svg)](https://codesandbox.io/p/sandbox/github/withastro/starlight/tree/main/examples/basics) +[![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/withastro/starlight&create_from_path=examples/basics) +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fwithastro%2Fstarlight%2Ftree%2Fmain%2Fexamples%2Fbasics&project-name=my-starlight-docs&repository-name=my-starlight-docs) + +> πŸ§‘β€πŸš€ **Seasoned astronaut?** Delete this file. Have fun! + +## πŸš€ Project Structure + +Inside of your Astro + Starlight project, you'll see the following folders and files: + +``` +. +β”œβ”€β”€ public/ +β”œβ”€β”€ src/ +β”‚ β”œβ”€β”€ assets/ +β”‚ β”œβ”€β”€ content/ +β”‚ β”‚ β”œβ”€β”€ docs/ +β”‚ β”‚ └── config.ts +β”‚ └── env.d.ts +β”œβ”€β”€ astro.config.mjs +β”œβ”€β”€ package.json +└── tsconfig.json +``` + +Starlight looks for `.md` or `.mdx` files in the `src/content/docs/` directory. Each file is exposed as a route based on its file name. + +Images can be added to `src/assets/` and embedded in Markdown with a relative link. + +Static assets, like favicons, can be placed in the `public/` directory. + +## 🧞 Commands + +All commands are run from the root of the project, from a terminal: + +| Command | Action | +| :------------------------ | :----------------------------------------------- | +| `npm install` | Installs dependencies | +| `npm run dev` | Starts local dev server at `localhost:4321` | +| `npm run build` | Build your production site to `./dist/` | +| `npm run preview` | Preview your build locally, before deploying | +| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` | +| `npm run astro -- --help` | Get help using the Astro CLI | + +## πŸ‘€ Want to learn more? + +Check out [Starlight’s docs](https://starlight.astro.build/), read [the Astro documentation](https://docs.astro.build), or jump into the [Astro Discord server](https://astro.build/chat). diff --git a/docs/assets/highlight.css b/docs/assets/highlight.css deleted file mode 100644 index a96ae91..0000000 --- a/docs/assets/highlight.css +++ /dev/null @@ -1,99 +0,0 @@ -:root { - --light-hl-0: #795E26; - --dark-hl-0: #DCDCAA; - --light-hl-1: #000000; - --dark-hl-1: #D4D4D4; - --light-hl-2: #A31515; - --dark-hl-2: #CE9178; - --light-hl-3: #0000FF; - --dark-hl-3: #569CD6; - --light-hl-4: #AF00DB; - --dark-hl-4: #C586C0; - --light-hl-5: #001080; - --dark-hl-5: #9CDCFE; - --light-hl-6: #008000; - --dark-hl-6: #6A9955; - --light-hl-7: #0070C1; - --dark-hl-7: #4FC1FF; - --light-hl-8: #267F99; - --dark-hl-8: #4EC9B0; - --light-hl-9: #098658; - --dark-hl-9: #B5CEA8; - --light-hl-10: #000000FF; - --dark-hl-10: #D4D4D4; - --light-code-background: #FFFFFF; - --dark-code-background: #1E1E1E; -} - -@media (prefers-color-scheme: light) { :root { - --hl-0: var(--light-hl-0); - --hl-1: var(--light-hl-1); - --hl-2: var(--light-hl-2); - --hl-3: var(--light-hl-3); - --hl-4: var(--light-hl-4); - --hl-5: var(--light-hl-5); - --hl-6: var(--light-hl-6); - --hl-7: var(--light-hl-7); - --hl-8: var(--light-hl-8); - --hl-9: var(--light-hl-9); - --hl-10: var(--light-hl-10); - --code-background: var(--light-code-background); -} } - -@media (prefers-color-scheme: dark) { :root { - --hl-0: var(--dark-hl-0); - --hl-1: var(--dark-hl-1); - --hl-2: var(--dark-hl-2); - --hl-3: var(--dark-hl-3); - --hl-4: var(--dark-hl-4); - --hl-5: var(--dark-hl-5); - --hl-6: var(--dark-hl-6); - --hl-7: var(--dark-hl-7); - --hl-8: var(--dark-hl-8); - --hl-9: var(--dark-hl-9); - --hl-10: var(--dark-hl-10); - --code-background: var(--dark-code-background); -} } - -:root[data-theme='light'] { - --hl-0: var(--light-hl-0); - --hl-1: var(--light-hl-1); - --hl-2: var(--light-hl-2); - --hl-3: var(--light-hl-3); - --hl-4: var(--light-hl-4); - --hl-5: var(--light-hl-5); - --hl-6: var(--light-hl-6); - --hl-7: var(--light-hl-7); - --hl-8: var(--light-hl-8); - --hl-9: var(--light-hl-9); - --hl-10: var(--light-hl-10); - --code-background: var(--light-code-background); -} - -:root[data-theme='dark'] { - --hl-0: var(--dark-hl-0); - --hl-1: var(--dark-hl-1); - --hl-2: var(--dark-hl-2); - --hl-3: var(--dark-hl-3); - --hl-4: var(--dark-hl-4); - --hl-5: var(--dark-hl-5); - --hl-6: var(--dark-hl-6); - --hl-7: var(--dark-hl-7); - --hl-8: var(--dark-hl-8); - --hl-9: var(--dark-hl-9); - --hl-10: var(--dark-hl-10); - --code-background: var(--dark-code-background); -} - -.hl-0 { color: var(--hl-0); } -.hl-1 { color: var(--hl-1); } -.hl-2 { color: var(--hl-2); } -.hl-3 { color: var(--hl-3); } -.hl-4 { color: var(--hl-4); } -.hl-5 { color: var(--hl-5); } -.hl-6 { color: var(--hl-6); } -.hl-7 { color: var(--hl-7); } -.hl-8 { color: var(--hl-8); } -.hl-9 { color: var(--hl-9); } -.hl-10 { color: var(--hl-10); } -pre, code { background: var(--code-background); } diff --git a/docs/assets/main.js b/docs/assets/main.js deleted file mode 100644 index d0aa8d5..0000000 --- a/docs/assets/main.js +++ /dev/null @@ -1,59 +0,0 @@ -"use strict"; -"use strict";(()=>{var Pe=Object.create;var ne=Object.defineProperty;var Ie=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Fe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!Re.call(t,i)&&i!==n&&ne(t,i,{get:()=>e[i],enumerable:!(r=Ie(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Pe(_e(t)):{},Fe(e||!t||!t.__esModule?ne(n,"default",{value:t,enumerable:!0}):n,t));var ae=Me((se,oe)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),v=s.str.charAt(1),f;v in s.node.edges?f=s.node.edges[v]:(f=new t.TokenSet,s.node.edges[v]=f),s.str.length==1&&(f.final=!0),i.push({node:f,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof se=="object"?oe.exports=n():e.lunr=n()}(this,function(){return t})})()});var re=[];function G(t,e){re.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureActivePageVisible(),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible())}createComponents(e){re.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var de=De(ae());async function le(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=de.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function he(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{le(e,t)}),le(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");let s=!1;i.addEventListener("mousedown",()=>s=!0),i.addEventListener("mouseup",()=>{s=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{s||(s=!1,t.classList.remove("has-focus"))}),Ae(t,i,r,e)}function Ae(t,e,n,r){n.addEventListener("input",ie(()=>{Ne(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ve(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ne(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` - ${ce(l.parent,i)}.${d}`);let v=document.createElement("li");v.classList.value=l.classes??"";let f=document.createElement("a");f.href=r.base+l.url,f.innerHTML=u+d,v.append(f),e.appendChild(v)}}function ue(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ve(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(K(t.substring(s))),i.join("")}var Be={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>Be[e])}var C=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",pe="mousemove",B="mouseup",J={x:0,y:0},fe=!1,ee=!1,He=!1,D=!1,me=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(me?"is-mobile":"not-mobile");me&&"ontouchstart"in document.documentElement&&(He=!0,F="touchstart",pe="touchmove",B="touchend");document.addEventListener(F,t=>{ee=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(pe,t=>{if(ee&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(B,()=>{ee=!1});document.addEventListener("click",t=>{fe&&(t.preventDefault(),t.stopImmediatePropagation(),fe=!1)});var X=class extends C{constructor(n){super(n);this.className=this.el.dataset.toggle||"",this.el.addEventListener(B,r=>this.onPointerUp(r)),this.el.addEventListener("click",r=>r.preventDefault()),document.addEventListener(F,r=>this.onDocumentPointerDown(r)),document.addEventListener(B,r=>this.onDocumentPointerUp(r))}setActive(n){if(this.active==n)return;this.active=n,document.documentElement.classList.toggle("has-"+this.className,n),this.el.classList.toggle("active",n);let r=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(r),setTimeout(()=>document.documentElement.classList.remove(r),500)}onPointerUp(n){D||(this.setActive(!0),n.preventDefault())}onDocumentPointerDown(n){if(this.active){if(n.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(n){if(!D&&this.active&&n.target.closest(".col-sidebar")){let r=n.target.closest("a");if(r){let i=window.location.href;i.indexOf("#")!=-1&&(i=i.substring(0,i.indexOf("#"))),r.href.substring(0,i.length)==i&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ve=document.head.appendChild(document.createElement("style"));ve.dataset.for="filters";var Y=class extends C{constructor(n){super(n);this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ve.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } -`}fromLocalStorage(){let n=Q.getItem(this.key);return n?n==="true":this.el.checked}setLocalStorage(n){Q.setItem(this.key,n.toString()),this.value=n,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),document.querySelectorAll(".tsd-index-section").forEach(n=>{n.style.display="block";let r=Array.from(n.querySelectorAll(".tsd-index-link")).every(i=>i.offsetParent==null);n.style.display=r?"none":"block"})}};var Z=class extends C{constructor(n){super(n);this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let r=Q.getItem(this.key);this.el.open=r?r==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let i=this.summary.querySelector("a");i&&i.addEventListener("click",()=>{location.assign(i.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ge(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ye(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ye(t.value)})}function ye(t){document.documentElement.dataset.theme=t}var Le;function be(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",xe),xe())}async function xe(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();Le=t.dataset.base+"/",t.innerHTML="";for(let s of i)we(s,t,[]);window.app.createComponents(t),window.app.ensureActivePageVisible()}function we(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-index-accordion`:"tsd-index-accordion",s.dataset.key=i.join("$");let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.innerHTML='',Ee(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)we(u,l,i)}else Ee(t,r,t.class)}function Ee(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=Le+t.path,n&&(r.className=n),location.href===r.href&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("tsd-theme");Se&&ge(Se);var je=new U;Object.defineProperty(window,"app",{value:je});he();be();})(); -/*! Bundled license information: - -lunr/lunr.js: - (** - * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 - * Copyright (C) 2020 Oliver Nightingale - * @license MIT - *) - (*! - * lunr.utils - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Set - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.tokenizer - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Pipeline - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Vector - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.stemmer - * Copyright (C) 2020 Oliver Nightingale - * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt - *) - (*! - * lunr.stopWordFilter - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.trimmer - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.TokenSet - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Index - * Copyright (C) 2020 Oliver Nightingale - *) - (*! - * lunr.Builder - * Copyright (C) 2020 Oliver Nightingale - *) -*/ diff --git a/docs/assets/material-style.css b/docs/assets/material-style.css deleted file mode 100644 index b7e1d31..0000000 --- a/docs/assets/material-style.css +++ /dev/null @@ -1,247 +0,0 @@ -@import url("https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&family=Space+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap"); - -:root, -:root[data-theme="light"], -:root[data-theme="dark"] { - --font-sans: "Space Grotesk", sans-serif; - --font-mono: "Space Mono", monospace; - - --color-background: var(--md-sys-color-surface-container); - --color-background-secondary: var(--md-sys-color-surface-container-high); - --color-background-warning: var(--md-sys-color-error-container); - --color-warning-text: var(--md-sys-color-on-error-container); - --color-icon-background: var(--md-sys-color-on-primary); - --color-accent: var(--md-sys-color-secondary-container); - --color-active-menu-item: var(--md-sys-color-surface-container-highest); - --color-text: var(--md-sys-color-on-surface); - --color-text-aside: var(--md-sys-color-on-surface-variant); - --color-link: var(--md-sys-color-primary); - - --color-ts-project: var(--md-sys-color-secondary); - --color-ts-module: var(--color-ts-project); - --color-ts-namespace: var(--color-ts-project); - - --color-ts-enum: var(--md-sys-color-tertiary); - --color-ts-enum-member: var(--color-ts-enum); - - --color-ts-variable: var(--md-sys-color-primary); - --color-ts-function: var(--md-sys-color-secondary); - --color-ts-class: var(--md-sys-color-tertiary); - --color-ts-interface: var(--md-sys-color-tertiary); - - --color-ts-constructor: var(--md-sys-color-inverse-primary); - - --color-ts-property: var(--md-sys-color-on-background); - --color-ts-method: var(--color-ts-function); - - --color-ts-call-signature: var(--color-ts-method); - --color-ts-index-signature: var(--color-ts-property); /* ? */ - --color-ts-constructor-signature: var(--color-ts-function); - --color-ts-parameter: var(--md-sys-color-primary); - - --color-ts-type-parameter: var(--md-sys-color-tertiary); - --color-ts-accessor: var(--color-ts-property); - --color-ts-get-signature: var(--color-ts-accessor); - --color-ts-set-signature: var(--color-ts-accessor); - --color-ts-type-alias: var(--md-sys-color-tertiary); - - /* --external-icon: var(--md-sys-external-icon); - --color-scheme: var(--md-sys-color-scheme); */ - - --top-app-bar-height: 4.5rem; - --footer-height: 3.5rem; -} - -body { - font-family: var(--font-sans); -} -code, -pre { - font-family: var(--font-mono); -} - -img { - max-width: 100%; -} - -*::-webkit-scrollbar { - width: 8px; - height: 8px; -} -*::-webkit-scrollbar-track { - background: none; -} -*::-webkit-scrollbar-thumb { - border: none; -} - -.container-main { - min-height: calc(100vh - var(--top-app-bar-height) - var(--footer-height)); -} -.col-content { - overflow: hidden; - box-sizing: border-box; - padding: 1.75rem; - border-radius: 28px; - background-color: var(--md-sys-color-surface); -} -.page-menu { - height: fit-content; - padding: 0.75rem 1.75rem; - border-radius: 28px; - background-color: var(--md-sys-color-surface); -} -.site-menu > *, -.page-menu > * { - position: relative; -} -.title { - display: block; - max-width: calc(100% - 5rem); - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - font-size: 22px; -} - -.tsd-page-toolbar { - padding: 8px 0; - height: calc(var(--top-app-bar-height) - 16px); - background-color: var(--color-background); - border-bottom: none; -} -.tsd-page-toolbar .tsd-toolbar-contents { - height: 56px; -} -.tsd-page-toolbar .table-cell { - height: 56px; - margin-left: 1.5rem; -} -.tsd-page-toolbar .tsd-toolbar-icon { - padding: 20px 0; -} -#tsd-search { - line-height: 56px; - border-radius: 22px; -} -#tsd-search .results { - z-index: -1; - top: calc(56px - 22px); - padding-top: 22px; - box-shadow: 0px 4px 2px rgba(0, 0, 0, 0.125); - background-color: var(--color-background-secondary); - border-bottom-left-radius: 22px; - border-bottom-right-radius: 22px; - overflow: hidden; -} -#tsd-search .results li { - background: none; -} -#tsd-search .results a { - padding: 1rem 0.25rem; -} -.col-sidebar { - padding-top: 0; - margin-right: 1rem; -} - -.tsd-signature { - padding: 1rem 1.5rem; - border-radius: 24px; - background-color: var(--md-sys-color-surface-container); -} - -.tsd-page-navigation ul { - padding-left: 0.44rem; -} -.tsd-navigation a, -.tsd-navigation summary > span, -.tsd-page-navigation a { - padding: 0.88rem; - border-radius: 24px; -} -.tsd-navigation a:hover, -.tsd-page-navigation a:hover { - text-decoration: none; - background-color: var(--md-sys-color-surface-container-high); -} -.page-menu .tsd-accordion-summary svg { - position: absolute; - right: 0; -} -.site-menu .tsd-navigation .tsd-accordion-summary { - display: flex; - flex-direction: row-reverse; - width: 100%; -} - -.tsd-small-nested-navigation { - margin-left: 1rem; -} -.tsd-nested-navigation { - margin-left: 2.5rem; -} -.tsd-nested-navigation > li > a, -.tsd-nested-navigation > li > span { - width: 100%; -} -.tsd-navigation > a, -.tsd-navigation .tsd-accordion-summary { - width: 100%; -} -.tsd-index-accordion .tsd-accordion-summary > svg { - position: absolute; - right: 1.5rem; - margin-top: 1rem; -} -.tsd-accordion-summary .tsd-kind-icon ~ span { - margin-right: 2.5rem; -} -.tsd-accordion-summary .tsd-nested-navigation > li > a, -.tsd-nested-navigation > li > span { - width: calc(100% - 0.44rem); -} -.tsd-kind-icon ~ span { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} -.tsd-generator { - padding: 0; - border-top: none; - height: var(--footer-height); - line-height: var(--footer-height); -} -.tsd-generator > p { - padding: 0 2rem; -} - -@media (max-width: 769px) { - .container { - padding: 1rem; - } - .col-sidebar { - margin-right: 0; - } -} -@media (min-width: 770px) { - .container-main { - margin: 0 auto; - } - .site-menu { - margin-right: 0.5rem; - } -} -@media (min-width: 1200px) { - .page-menu, - .site-menu { - max-height: calc(100vh - var(--footer-height) - var(--top-app-bar-height)); - top: var(--top-app-bar-height); - } - .page-menu { - margin-left: 1rem; - } - .col-sidebar { - margin-right: 0; - } -} diff --git a/docs/assets/navigation.js b/docs/assets/navigation.js deleted file mode 100644 index c30fcd6..0000000 --- a/docs/assets/navigation.js +++ /dev/null @@ -1 +0,0 @@ -window.navigationData = "data:application/octet-stream;base64,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" \ No newline at end of file diff --git a/docs/assets/search.js b/docs/assets/search.js deleted file mode 100644 index b864821..0000000 --- a/docs/assets/search.js +++ /dev/null @@ -1 +0,0 @@ -window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/docs/assets/style.css b/docs/assets/style.css deleted file mode 100644 index 07a385b..0000000 --- a/docs/assets/style.css +++ /dev/null @@ -1,1394 +0,0 @@ -:root { - /* Light */ - --light-color-background: #f2f4f8; - --light-color-background-secondary: #eff0f1; - --light-color-warning-text: #222; - --light-color-background-warning: #e6e600; - --light-color-icon-background: var(--light-color-background); - --light-color-accent: #c5c7c9; - --light-color-active-menu-item: var(--light-color-accent); - --light-color-text: #222; - --light-color-text-aside: #6e6e6e; - --light-color-link: #1f70c2; - - --light-color-ts-keyword: #056bd6; - --light-color-ts-project: #b111c9; - --light-color-ts-module: var(--light-color-ts-project); - --light-color-ts-namespace: var(--light-color-ts-project); - --light-color-ts-enum: #7e6f15; - --light-color-ts-enum-member: var(--light-color-ts-enum); - --light-color-ts-variable: #4760ec; - --light-color-ts-function: #572be7; - --light-color-ts-class: #1f70c2; - --light-color-ts-interface: #108024; - --light-color-ts-constructor: var(--light-color-ts-class); - --light-color-ts-property: var(--light-color-ts-variable); - --light-color-ts-method: var(--light-color-ts-function); - --light-color-ts-call-signature: var(--light-color-ts-method); - --light-color-ts-index-signature: var(--light-color-ts-property); - --light-color-ts-constructor-signature: var(--light-color-ts-constructor); - --light-color-ts-parameter: var(--light-color-ts-variable); - /* type literal not included as links will never be generated to it */ - --light-color-ts-type-parameter: var(--light-color-ts-type-alias); - --light-color-ts-accessor: var(--light-color-ts-property); - --light-color-ts-get-signature: var(--light-color-ts-accessor); - --light-color-ts-set-signature: var(--light-color-ts-accessor); - --light-color-ts-type-alias: #d51270; - /* reference not included as links will be colored with the kind that it points to */ - - --light-external-icon: url("data:image/svg+xml;utf8,"); - --light-color-scheme: light; - - /* Dark */ - --dark-color-background: #2b2e33; - --dark-color-background-secondary: #1e2024; - --dark-color-background-warning: #bebe00; - --dark-color-warning-text: #222; - --dark-color-icon-background: var(--dark-color-background-secondary); - --dark-color-accent: #9096a2; - --dark-color-active-menu-item: #5d5d6a; - --dark-color-text: #f5f5f5; - --dark-color-text-aside: #dddddd; - --dark-color-link: #00aff4; - - --dark-color-ts-keyword: #3399ff; - --dark-color-ts-project: #e358ff; - --dark-color-ts-module: var(--dark-color-ts-project); - --dark-color-ts-namespace: var(--dark-color-ts-project); - --dark-color-ts-enum: #f4d93e; - --dark-color-ts-enum-member: var(--dark-color-ts-enum); - --dark-color-ts-variable: #798dff; - --dark-color-ts-function: #a280ff; - --dark-color-ts-class: #8ac4ff; - --dark-color-ts-interface: #6cff87; - --dark-color-ts-constructor: var(--dark-color-ts-class); - --dark-color-ts-property: var(--dark-color-ts-variable); - --dark-color-ts-method: var(--dark-color-ts-function); - --dark-color-ts-call-signature: var(--dark-color-ts-method); - --dark-color-ts-index-signature: var(--dark-color-ts-property); - --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); - --dark-color-ts-parameter: var(--dark-color-ts-variable); - /* type literal not included as links will never be generated to it */ - --dark-color-ts-type-parameter: var(--dark-color-ts-type-alias); - --dark-color-ts-accessor: var(--dark-color-ts-property); - --dark-color-ts-get-signature: var(--dark-color-ts-accessor); - --dark-color-ts-set-signature: var(--dark-color-ts-accessor); - --dark-color-ts-type-alias: #ff6492; - /* reference not included as links will be colored with the kind that it points to */ - - --dark-external-icon: url("data:image/svg+xml;utf8,"); - --dark-color-scheme: dark; -} - -@media (prefers-color-scheme: light) { - :root { - --color-background: var(--light-color-background); - --color-background-secondary: var(--light-color-background-secondary); - --color-background-warning: var(--light-color-background-warning); - --color-warning-text: var(--light-color-warning-text); - --color-icon-background: var(--light-color-icon-background); - --color-accent: var(--light-color-accent); - --color-active-menu-item: var(--light-color-active-menu-item); - --color-text: var(--light-color-text); - --color-text-aside: var(--light-color-text-aside); - --color-link: var(--light-color-link); - - --color-ts-keyword: var(--light-color-ts-keyword); - --color-ts-module: var(--light-color-ts-module); - --color-ts-namespace: var(--light-color-ts-namespace); - --color-ts-enum: var(--light-color-ts-enum); - --color-ts-enum-member: var(--light-color-ts-enum-member); - --color-ts-variable: var(--light-color-ts-variable); - --color-ts-function: var(--light-color-ts-function); - --color-ts-class: var(--light-color-ts-class); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-constructor: var(--light-color-ts-constructor); - --color-ts-property: var(--light-color-ts-property); - --color-ts-method: var(--light-color-ts-method); - --color-ts-call-signature: var(--light-color-ts-call-signature); - --color-ts-index-signature: var(--light-color-ts-index-signature); - --color-ts-constructor-signature: var( - --light-color-ts-constructor-signature - ); - --color-ts-parameter: var(--light-color-ts-parameter); - --color-ts-type-parameter: var(--light-color-ts-type-parameter); - --color-ts-accessor: var(--light-color-ts-accessor); - --color-ts-get-signature: var(--light-color-ts-get-signature); - --color-ts-set-signature: var(--light-color-ts-set-signature); - --color-ts-type-alias: var(--light-color-ts-type-alias); - - --external-icon: var(--light-external-icon); - --color-scheme: var(--light-color-scheme); - } -} - -@media (prefers-color-scheme: dark) { - :root { - --color-background: var(--dark-color-background); - --color-background-secondary: var(--dark-color-background-secondary); - --color-background-warning: var(--dark-color-background-warning); - --color-warning-text: var(--dark-color-warning-text); - --color-icon-background: var(--dark-color-icon-background); - --color-accent: var(--dark-color-accent); - --color-active-menu-item: var(--dark-color-active-menu-item); - --color-text: var(--dark-color-text); - --color-text-aside: var(--dark-color-text-aside); - --color-link: var(--dark-color-link); - - --color-ts-keyword: var(--dark-color-ts-keyword); - --color-ts-module: var(--dark-color-ts-module); - --color-ts-namespace: var(--dark-color-ts-namespace); - --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-enum-member: var(--dark-color-ts-enum-member); - --color-ts-variable: var(--dark-color-ts-variable); - --color-ts-function: var(--dark-color-ts-function); - --color-ts-class: var(--dark-color-ts-class); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-constructor: var(--dark-color-ts-constructor); - --color-ts-property: var(--dark-color-ts-property); - --color-ts-method: var(--dark-color-ts-method); - --color-ts-call-signature: var(--dark-color-ts-call-signature); - --color-ts-index-signature: var(--dark-color-ts-index-signature); - --color-ts-constructor-signature: var( - --dark-color-ts-constructor-signature - ); - --color-ts-parameter: var(--dark-color-ts-parameter); - --color-ts-type-parameter: var(--dark-color-ts-type-parameter); - --color-ts-accessor: var(--dark-color-ts-accessor); - --color-ts-get-signature: var(--dark-color-ts-get-signature); - --color-ts-set-signature: var(--dark-color-ts-set-signature); - --color-ts-type-alias: var(--dark-color-ts-type-alias); - - --external-icon: var(--dark-external-icon); - --color-scheme: var(--dark-color-scheme); - } -} - -html { - color-scheme: var(--color-scheme); -} - -body { - margin: 0; -} - -:root[data-theme="light"] { - --color-background: var(--light-color-background); - --color-background-secondary: var(--light-color-background-secondary); - --color-background-warning: var(--light-color-background-warning); - --color-warning-text: var(--light-color-warning-text); - --color-icon-background: var(--light-color-icon-background); - --color-accent: var(--light-color-accent); - --color-active-menu-item: var(--light-color-active-menu-item); - --color-text: var(--light-color-text); - --color-text-aside: var(--light-color-text-aside); - --color-link: var(--light-color-link); - - --color-ts-keyword: var(--light-color-ts-keyword); - --color-ts-module: var(--light-color-ts-module); - --color-ts-namespace: var(--light-color-ts-namespace); - --color-ts-enum: var(--light-color-ts-enum); - --color-ts-enum-member: var(--light-color-ts-enum-member); - --color-ts-variable: var(--light-color-ts-variable); - --color-ts-function: var(--light-color-ts-function); - --color-ts-class: var(--light-color-ts-class); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-constructor: var(--light-color-ts-constructor); - --color-ts-property: var(--light-color-ts-property); - --color-ts-method: var(--light-color-ts-method); - --color-ts-call-signature: var(--light-color-ts-call-signature); - --color-ts-index-signature: var(--light-color-ts-index-signature); - --color-ts-constructor-signature: var( - --light-color-ts-constructor-signature - ); - --color-ts-parameter: var(--light-color-ts-parameter); - --color-ts-type-parameter: var(--light-color-ts-type-parameter); - --color-ts-accessor: var(--light-color-ts-accessor); - --color-ts-get-signature: var(--light-color-ts-get-signature); - --color-ts-set-signature: var(--light-color-ts-set-signature); - --color-ts-type-alias: var(--light-color-ts-type-alias); - - --external-icon: var(--light-external-icon); - --color-scheme: var(--light-color-scheme); -} - -:root[data-theme="dark"] { - --color-background: var(--dark-color-background); - --color-background-secondary: var(--dark-color-background-secondary); - --color-background-warning: var(--dark-color-background-warning); - --color-warning-text: var(--dark-color-warning-text); - --color-icon-background: var(--dark-color-icon-background); - --color-accent: var(--dark-color-accent); - --color-active-menu-item: var(--dark-color-active-menu-item); - --color-text: var(--dark-color-text); - --color-text-aside: var(--dark-color-text-aside); - --color-link: var(--dark-color-link); - - --color-ts-keyword: var(--dark-color-ts-keyword); - --color-ts-module: var(--dark-color-ts-module); - --color-ts-namespace: var(--dark-color-ts-namespace); - --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-enum-member: var(--dark-color-ts-enum-member); - --color-ts-variable: var(--dark-color-ts-variable); - --color-ts-function: var(--dark-color-ts-function); - --color-ts-class: var(--dark-color-ts-class); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-constructor: var(--dark-color-ts-constructor); - --color-ts-property: var(--dark-color-ts-property); - --color-ts-method: var(--dark-color-ts-method); - --color-ts-call-signature: var(--dark-color-ts-call-signature); - --color-ts-index-signature: var(--dark-color-ts-index-signature); - --color-ts-constructor-signature: var( - --dark-color-ts-constructor-signature - ); - --color-ts-parameter: var(--dark-color-ts-parameter); - --color-ts-type-parameter: var(--dark-color-ts-type-parameter); - --color-ts-accessor: var(--dark-color-ts-accessor); - --color-ts-get-signature: var(--dark-color-ts-get-signature); - --color-ts-set-signature: var(--dark-color-ts-set-signature); - --color-ts-type-alias: var(--dark-color-ts-type-alias); - - --external-icon: var(--dark-external-icon); - --color-scheme: var(--dark-color-scheme); -} - -.always-visible, -.always-visible .tsd-signatures { - display: inherit !important; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - line-height: 1.2; -} - -h1 > a, -h2 > a, -h3 > a, -h4 > a, -h5 > a, -h6 > a { - text-decoration: none; - color: var(--color-text); -} - -h1 { - font-size: 1.875rem; - margin: 0.67rem 0; -} - -h2 { - font-size: 1.5rem; - margin: 0.83rem 0; -} - -h3 { - font-size: 1.25rem; - margin: 1rem 0; -} - -h4 { - font-size: 1.05rem; - margin: 1.33rem 0; -} - -h5 { - font-size: 1rem; - margin: 1.5rem 0; -} - -h6 { - font-size: 0.875rem; - margin: 2.33rem 0; -} - -.uppercase { - text-transform: uppercase; -} - -dl, -menu, -ol, -ul { - margin: 1em 0; -} - -dd { - margin: 0 0 0 40px; -} - -.container { - max-width: 1700px; - padding: 0 2rem; -} - -/* Footer */ -.tsd-generator { - border-top: 1px solid var(--color-accent); - padding-top: 1rem; - padding-bottom: 1rem; - max-height: 3.5rem; -} - -.tsd-generator > p { - margin-top: 0; - margin-bottom: 0; - padding: 0 1rem; -} - -.container-main { - margin: 0 auto; - /* toolbar, footer, margin */ - min-height: calc(100vh - 41px - 56px - 4rem); -} - -@keyframes fade-in { - from { - opacity: 0; - } - to { - opacity: 1; - } -} -@keyframes fade-out { - from { - opacity: 1; - visibility: visible; - } - to { - opacity: 0; - } -} -@keyframes fade-in-delayed { - 0% { - opacity: 0; - } - 33% { - opacity: 0; - } - 100% { - opacity: 1; - } -} -@keyframes fade-out-delayed { - 0% { - opacity: 1; - visibility: visible; - } - 66% { - opacity: 0; - } - 100% { - opacity: 0; - } -} -@keyframes pop-in-from-right { - from { - transform: translate(100%, 0); - } - to { - transform: translate(0, 0); - } -} -@keyframes pop-out-to-right { - from { - transform: translate(0, 0); - visibility: visible; - } - to { - transform: translate(100%, 0); - } -} -body { - background: var(--color-background); - font-family: "Segoe UI", sans-serif; - font-size: 16px; - color: var(--color-text); -} - -a { - color: var(--color-link); - text-decoration: none; -} -a:hover { - text-decoration: underline; -} -a.external[target="_blank"] { - background-image: var(--external-icon); - background-position: top 3px right; - background-repeat: no-repeat; - padding-right: 13px; -} - -code, -pre { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; - padding: 0.2em; - margin: 0; - font-size: 0.875rem; - border-radius: 0.8em; -} - -pre { - position: relative; - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; - padding: 10px; - border: 1px solid var(--color-accent); -} -pre code { - padding: 0; - font-size: 100%; -} -pre > button { - position: absolute; - top: 10px; - right: 10px; - opacity: 0; - transition: opacity 0.1s; - box-sizing: border-box; -} -pre:hover > button, -pre > button.visible { - opacity: 1; -} - -blockquote { - margin: 1em 0; - padding-left: 1em; - border-left: 4px solid gray; -} - -.tsd-typography { - line-height: 1.333em; -} -.tsd-typography ul { - list-style: square; - padding: 0 0 0 20px; - margin: 0; -} -.tsd-typography .tsd-index-panel h3, -.tsd-index-panel .tsd-typography h3, -.tsd-typography h4, -.tsd-typography h5, -.tsd-typography h6 { - font-size: 1em; -} -.tsd-typography h5, -.tsd-typography h6 { - font-weight: normal; -} -.tsd-typography p, -.tsd-typography ul, -.tsd-typography ol { - margin: 1em 0; -} -.tsd-typography table { - border-collapse: collapse; - border: none; -} -.tsd-typography td, -.tsd-typography th { - padding: 6px 13px; - border: 1px solid var(--color-accent); -} -.tsd-typography thead, -.tsd-typography tr:nth-child(even) { - background-color: var(--color-background-secondary); -} - -.tsd-breadcrumb { - margin: 0; - padding: 0; - color: var(--color-text-aside); -} -.tsd-breadcrumb a { - color: var(--color-text-aside); - text-decoration: none; -} -.tsd-breadcrumb a:hover { - text-decoration: underline; -} -.tsd-breadcrumb li { - display: inline; -} -.tsd-breadcrumb li:after { - content: " / "; -} - -.tsd-comment-tags { - display: flex; - flex-direction: column; -} -dl.tsd-comment-tag-group { - display: flex; - align-items: center; - overflow: hidden; - margin: 0.5em 0; -} -dl.tsd-comment-tag-group dt { - display: flex; - margin-right: 0.5em; - font-size: 0.875em; - font-weight: normal; -} -dl.tsd-comment-tag-group dd { - margin: 0; -} -code.tsd-tag { - padding: 0.25em 0.4em; - border: 0.1em solid var(--color-accent); - margin-right: 0.25em; - font-size: 70%; -} -h1 code.tsd-tag:first-of-type { - margin-left: 0.25em; -} - -dl.tsd-comment-tag-group dd:before, -dl.tsd-comment-tag-group dd:after { - content: " "; -} -dl.tsd-comment-tag-group dd pre, -dl.tsd-comment-tag-group dd:after { - clear: both; -} -dl.tsd-comment-tag-group p { - margin: 0; -} - -.tsd-panel.tsd-comment .lead { - font-size: 1.1em; - line-height: 1.333em; - margin-bottom: 2em; -} -.tsd-panel.tsd-comment .lead:last-child { - margin-bottom: 0; -} - -.tsd-filter-visibility h4 { - font-size: 1rem; - padding-top: 0.75rem; - padding-bottom: 0.5rem; - margin: 0; -} -.tsd-filter-item:not(:last-child) { - margin-bottom: 0.5rem; -} -.tsd-filter-input { - display: flex; - width: fit-content; - width: -moz-fit-content; - align-items: center; - user-select: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - cursor: pointer; -} -.tsd-filter-input input[type="checkbox"] { - cursor: pointer; - position: absolute; - width: 1.5em; - height: 1.5em; - opacity: 0; -} -.tsd-filter-input input[type="checkbox"]:disabled { - pointer-events: none; -} -.tsd-filter-input svg { - cursor: pointer; - width: 1.5em; - height: 1.5em; - margin-right: 0.5em; - border-radius: 0.33em; - /* Leaving this at full opacity breaks event listeners on Firefox. - Don't remove unless you know what you're doing. */ - opacity: 0.99; -} -.tsd-filter-input input[type="checkbox"]:focus + svg { - transform: scale(0.95); -} -.tsd-filter-input input[type="checkbox"]:focus:not(:focus-visible) + svg { - transform: scale(1); -} -.tsd-checkbox-background { - fill: var(--color-accent); -} -input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { - stroke: var(--color-text); -} -.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-background { - fill: var(--color-background); - stroke: var(--color-accent); - stroke-width: 0.25rem; -} -.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-checkmark { - stroke: var(--color-accent); -} - -.tsd-theme-toggle { - padding-top: 0.75rem; -} -.tsd-theme-toggle > h4 { - display: inline; - vertical-align: middle; - margin-right: 0.75rem; -} - -.tsd-hierarchy { - list-style: square; - margin: 0; -} -.tsd-hierarchy .target { - font-weight: bold; -} - -.tsd-panel-group.tsd-index-group { - margin-bottom: 0; -} -.tsd-index-panel .tsd-index-list { - list-style: none; - line-height: 1.333em; - margin: 0; - padding: 0.25rem 0 0 0; - overflow: hidden; - display: grid; - grid-template-columns: repeat(3, 1fr); - column-gap: 1rem; - grid-template-rows: auto; -} -@media (max-width: 1024px) { - .tsd-index-panel .tsd-index-list { - grid-template-columns: repeat(2, 1fr); - } -} -@media (max-width: 768px) { - .tsd-index-panel .tsd-index-list { - grid-template-columns: repeat(1, 1fr); - } -} -.tsd-index-panel .tsd-index-list li { - -webkit-page-break-inside: avoid; - -moz-page-break-inside: avoid; - -ms-page-break-inside: avoid; - -o-page-break-inside: avoid; - page-break-inside: avoid; -} - -.tsd-flag { - display: inline-block; - padding: 0.25em 0.4em; - border-radius: 4px; - color: var(--color-comment-tag-text); - background-color: var(--color-comment-tag); - text-indent: 0; - font-size: 75%; - line-height: 1; - font-weight: normal; -} - -.tsd-anchor { - position: relative; - top: -100px; -} - -.tsd-member { - position: relative; -} -.tsd-member .tsd-anchor + h3 { - display: flex; - align-items: center; - margin-top: 0; - margin-bottom: 0; - border-bottom: none; -} - -.tsd-navigation.settings { - margin: 1rem 0; -} -.tsd-navigation > a, -.tsd-navigation .tsd-accordion-summary { - width: calc(100% - 0.5rem); -} -.tsd-navigation a, -.tsd-navigation summary > span, -.tsd-page-navigation a { - display: inline-flex; - align-items: center; - padding: 0.25rem; - color: var(--color-text); - text-decoration: none; - box-sizing: border-box; -} -.tsd-navigation a.current, -.tsd-page-navigation a.current { - background: var(--color-active-menu-item); -} -.tsd-navigation a:hover, -.tsd-page-navigation a:hover { - text-decoration: underline; -} -.tsd-navigation ul, -.tsd-page-navigation ul { - margin-top: 0; - margin-bottom: 0; - padding: 0; - list-style: none; -} -.tsd-navigation li, -.tsd-page-navigation li { - padding: 0; - max-width: 100%; -} -.tsd-nested-navigation { - margin-left: 3rem; -} -.tsd-nested-navigation > li > details { - margin-left: -1.5rem; -} -.tsd-small-nested-navigation { - margin-left: 1.5rem; -} -.tsd-small-nested-navigation > li > details { - margin-left: -1.5rem; -} - -.tsd-nested-navigation > li > a, -.tsd-nested-navigation > li > span { - width: calc(100% - 1.75rem - 0.5rem); -} - -.tsd-page-navigation ul { - padding-left: 1.75rem; -} - -#tsd-sidebar-links a { - margin-top: 0; - margin-bottom: 0.5rem; - line-height: 1.25rem; -} -#tsd-sidebar-links a:last-of-type { - margin-bottom: 0; -} - -a.tsd-index-link { - padding: 0.25rem 0 !important; - font-size: 1rem; - line-height: 1.25rem; - display: inline-flex; - align-items: center; - color: var(--color-text); -} -.tsd-accordion-summary { - list-style-type: none; /* hide marker on non-safari */ - outline: none; /* broken on safari, so just hide it */ -} -.tsd-accordion-summary::-webkit-details-marker { - display: none; /* hide marker on safari */ -} -.tsd-accordion-summary, -.tsd-accordion-summary a { - user-select: none; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; - - cursor: pointer; -} -.tsd-accordion-summary a { - width: calc(100% - 1.5rem); -} -.tsd-accordion-summary > * { - margin-top: 0; - margin-bottom: 0; - padding-top: 0; - padding-bottom: 0; -} -.tsd-index-accordion .tsd-accordion-summary > svg { - margin-left: 0.25rem; -} -.tsd-index-content > :not(:first-child) { - margin-top: 0.75rem; -} -.tsd-index-heading { - margin-top: 1.5rem; - margin-bottom: 0.75rem; -} - -.tsd-kind-icon { - margin-right: 0.5rem; - width: 1.25rem; - height: 1.25rem; - min-width: 1.25rem; - min-height: 1.25rem; -} -.tsd-kind-icon path { - transform-origin: center; - transform: scale(1.1); -} -.tsd-signature > .tsd-kind-icon { - margin-right: 0.8rem; -} - -.tsd-panel { - margin-bottom: 2.5rem; -} -.tsd-panel.tsd-member { - margin-bottom: 4rem; -} -.tsd-panel:empty { - display: none; -} -.tsd-panel > h1, -.tsd-panel > h2, -.tsd-panel > h3 { - margin: 1.5rem -1.5rem 0.75rem -1.5rem; - padding: 0 1.5rem 0.75rem 1.5rem; -} -.tsd-panel > h1.tsd-before-signature, -.tsd-panel > h2.tsd-before-signature, -.tsd-panel > h3.tsd-before-signature { - margin-bottom: 0; - border-bottom: none; -} - -.tsd-panel-group { - margin: 4rem 0; -} -.tsd-panel-group.tsd-index-group { - margin: 2rem 0; -} -.tsd-panel-group.tsd-index-group details { - margin: 2rem 0; -} - -#tsd-search { - transition: background-color 0.2s; -} -#tsd-search .title { - position: relative; - z-index: 2; -} -#tsd-search .field { - position: absolute; - left: 0; - top: 0; - right: 2.5rem; - height: 100%; -} -#tsd-search .field input { - box-sizing: border-box; - position: relative; - top: -50px; - z-index: 1; - width: 100%; - padding: 0 10px; - opacity: 0; - outline: 0; - border: 0; - background: transparent; - color: var(--color-text); -} -#tsd-search .field label { - position: absolute; - overflow: hidden; - right: -40px; -} -#tsd-search .field input, -#tsd-search .title, -#tsd-toolbar-links a { - transition: opacity 0.2s; -} -#tsd-search .results { - position: absolute; - visibility: hidden; - top: 40px; - width: 100%; - margin: 0; - padding: 0; - list-style: none; - box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); -} -#tsd-search .results li { - background-color: var(--color-background); - line-height: initial; - padding: 4px; -} -#tsd-search .results li:nth-child(even) { - background-color: var(--color-background-secondary); -} -#tsd-search .results li.state { - display: none; -} -#tsd-search .results li.current:not(.no-results), -#tsd-search .results li:hover:not(.no-results) { - background-color: var(--color-accent); -} -#tsd-search .results a { - display: flex; - align-items: center; - padding: 0.25rem; - box-sizing: border-box; -} -#tsd-search .results a:before { - top: 10px; -} -#tsd-search .results span.parent { - color: var(--color-text-aside); - font-weight: normal; -} -#tsd-search.has-focus { - background-color: var(--color-accent); -} -#tsd-search.has-focus .field input { - top: 0; - opacity: 1; -} -#tsd-search.has-focus .title, -#tsd-search.has-focus #tsd-toolbar-links a { - z-index: 0; - opacity: 0; -} -#tsd-search.has-focus .results { - visibility: visible; -} -#tsd-search.loading .results li.state.loading { - display: block; -} -#tsd-search.failure .results li.state.failure { - display: block; -} - -#tsd-toolbar-links { - position: absolute; - top: 0; - right: 2rem; - height: 100%; - display: flex; - align-items: center; - justify-content: flex-end; -} -#tsd-toolbar-links a { - margin-left: 1.5rem; -} -#tsd-toolbar-links a:hover { - text-decoration: underline; -} - -.tsd-signature { - margin: 0 0 1rem 0; - padding: 1rem 0.5rem; - border: 1px solid var(--color-accent); - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; - font-size: 14px; - overflow-x: auto; -} - -.tsd-signature-keyword { - color: var(--color-ts-keyword); - font-weight: normal; -} - -.tsd-signature-symbol { - color: var(--color-text-aside); - font-weight: normal; -} - -.tsd-signature-type { - font-style: italic; - font-weight: normal; -} - -.tsd-signatures { - padding: 0; - margin: 0 0 1em 0; - list-style-type: none; -} -.tsd-signatures .tsd-signature { - margin: 0; - border-color: var(--color-accent); - border-width: 1px 0; - transition: background-color 0.1s; -} -.tsd-description .tsd-signatures .tsd-signature { - border-width: 1px; -} - -ul.tsd-parameter-list, -ul.tsd-type-parameter-list { - list-style: square; - margin: 0; - padding-left: 20px; -} -ul.tsd-parameter-list > li.tsd-parameter-signature, -ul.tsd-type-parameter-list > li.tsd-parameter-signature { - list-style: none; - margin-left: -20px; -} -ul.tsd-parameter-list h5, -ul.tsd-type-parameter-list h5 { - font-size: 16px; - margin: 1em 0 0.5em 0; -} -.tsd-sources { - margin-top: 1rem; - font-size: 0.875em; -} -.tsd-sources a { - color: var(--color-text-aside); - text-decoration: underline; -} -.tsd-sources ul { - list-style: none; - padding: 0; -} - -.tsd-page-toolbar { - position: sticky; - z-index: 1; - top: 0; - left: 0; - width: 100%; - color: var(--color-text); - background: var(--color-background-secondary); - border-bottom: 1px var(--color-accent) solid; - transition: transform 0.3s ease-in-out; -} -.tsd-page-toolbar a { - color: var(--color-text); - text-decoration: none; -} -.tsd-page-toolbar a.title { - font-weight: bold; -} -.tsd-page-toolbar a.title:hover { - text-decoration: underline; -} -.tsd-page-toolbar .tsd-toolbar-contents { - display: flex; - justify-content: space-between; - height: 2.5rem; - margin: 0 auto; -} -.tsd-page-toolbar .table-cell { - position: relative; - white-space: nowrap; - line-height: 40px; -} -.tsd-page-toolbar .table-cell:first-child { - width: 100%; -} -.tsd-page-toolbar .tsd-toolbar-icon { - box-sizing: border-box; - line-height: 0; - padding: 12px 0; -} - -.tsd-widget { - display: inline-block; - overflow: hidden; - opacity: 0.8; - height: 40px; - transition: - opacity 0.1s, - background-color 0.2s; - vertical-align: bottom; - cursor: pointer; -} -.tsd-widget:hover { - opacity: 0.9; -} -.tsd-widget.active { - opacity: 1; - background-color: var(--color-accent); -} -.tsd-widget.no-caption { - width: 40px; -} -.tsd-widget.no-caption:before { - margin: 0; -} - -.tsd-widget.options, -.tsd-widget.menu { - display: none; -} -input[type="checkbox"] + .tsd-widget:before { - background-position: -120px 0; -} -input[type="checkbox"]:checked + .tsd-widget:before { - background-position: -160px 0; -} - -img { - max-width: 100%; -} - -.tsd-anchor-icon { - display: inline-flex; - align-items: center; - margin-left: 0.5rem; - vertical-align: middle; - color: var(--color-text); -} - -.tsd-anchor-icon svg { - width: 1em; - height: 1em; - visibility: hidden; -} - -.tsd-anchor-link:hover > .tsd-anchor-icon svg { - visibility: visible; -} - -.deprecated { - text-decoration: line-through !important; -} - -.warning { - padding: 1rem; - color: var(--color-warning-text); - background: var(--color-background-warning); -} - -.tsd-kind-project { - color: var(--color-ts-project); -} -.tsd-kind-module { - color: var(--color-ts-module); -} -.tsd-kind-namespace { - color: var(--color-ts-namespace); -} -.tsd-kind-enum { - color: var(--color-ts-enum); -} -.tsd-kind-enum-member { - color: var(--color-ts-enum-member); -} -.tsd-kind-variable { - color: var(--color-ts-variable); -} -.tsd-kind-function { - color: var(--color-ts-function); -} -.tsd-kind-class { - color: var(--color-ts-class); -} -.tsd-kind-interface { - color: var(--color-ts-interface); -} -.tsd-kind-constructor { - color: var(--color-ts-constructor); -} -.tsd-kind-property { - color: var(--color-ts-property); -} -.tsd-kind-method { - color: var(--color-ts-method); -} -.tsd-kind-call-signature { - color: var(--color-ts-call-signature); -} -.tsd-kind-index-signature { - color: var(--color-ts-index-signature); -} -.tsd-kind-constructor-signature { - color: var(--color-ts-constructor-signature); -} -.tsd-kind-parameter { - color: var(--color-ts-parameter); -} -.tsd-kind-type-literal { - color: var(--color-ts-type-literal); -} -.tsd-kind-type-parameter { - color: var(--color-ts-type-parameter); -} -.tsd-kind-accessor { - color: var(--color-ts-accessor); -} -.tsd-kind-get-signature { - color: var(--color-ts-get-signature); -} -.tsd-kind-set-signature { - color: var(--color-ts-set-signature); -} -.tsd-kind-type-alias { - color: var(--color-ts-type-alias); -} - -/* if we have a kind icon, don't color the text by kind */ -.tsd-kind-icon ~ span { - color: var(--color-text); -} - -* { - scrollbar-width: thin; - scrollbar-color: var(--color-accent) var(--color-icon-background); -} - -*::-webkit-scrollbar { - width: 0.75rem; -} - -*::-webkit-scrollbar-track { - background: var(--color-icon-background); -} - -*::-webkit-scrollbar-thumb { - background-color: var(--color-accent); - border-radius: 999rem; - border: 0.25rem solid var(--color-icon-background); -} - -/* mobile */ -@media (max-width: 769px) { - .tsd-widget.options, - .tsd-widget.menu { - display: inline-block; - } - - .container-main { - display: flex; - } - html .col-content { - float: none; - max-width: 100%; - width: 100%; - } - html .col-sidebar { - position: fixed !important; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 1024; - top: 0 !important; - bottom: 0 !important; - left: auto !important; - right: 0 !important; - padding: 1.5rem 1.5rem 0 0; - width: 75vw; - visibility: hidden; - background-color: var(--color-background); - transform: translate(100%, 0); - } - html .col-sidebar > *:last-child { - padding-bottom: 20px; - } - html .overlay { - content: ""; - display: block; - position: fixed; - z-index: 1023; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: rgba(0, 0, 0, 0.75); - visibility: hidden; - } - - .to-has-menu .overlay { - animation: fade-in 0.4s; - } - - .to-has-menu .col-sidebar { - animation: pop-in-from-right 0.4s; - } - - .from-has-menu .overlay { - animation: fade-out 0.4s; - } - - .from-has-menu .col-sidebar { - animation: pop-out-to-right 0.4s; - } - - .has-menu body { - overflow: hidden; - } - .has-menu .overlay { - visibility: visible; - } - .has-menu .col-sidebar { - visibility: visible; - transform: translate(0, 0); - display: flex; - flex-direction: column; - gap: 1.5rem; - max-height: 100vh; - padding: 1rem 2rem; - } - .has-menu .tsd-navigation { - max-height: 100%; - } -} - -/* one sidebar */ -@media (min-width: 770px) { - .container-main { - display: grid; - grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); - grid-template-areas: "sidebar content"; - margin: 2rem auto; - } - - .col-sidebar { - grid-area: sidebar; - } - .col-content { - grid-area: content; - padding: 0 1rem; - } -} -@media (min-width: 770px) and (max-width: 1399px) { - .col-sidebar { - max-height: calc(100vh - 2rem - 42px); - overflow: auto; - position: sticky; - top: 42px; - padding-top: 1rem; - } - .site-menu { - margin-top: 1rem; - } -} - -/* two sidebars */ -@media (min-width: 1200px) { - .container-main { - grid-template-columns: minmax(0, 1fr) minmax(0, 2.5fr) minmax(0, 20rem); - grid-template-areas: "sidebar content toc"; - } - - .col-sidebar { - display: contents; - } - - .page-menu { - grid-area: toc; - padding-left: 1rem; - } - .site-menu { - grid-area: sidebar; - } - - .site-menu { - margin-top: 1rem 0; - } - - .page-menu, - .site-menu { - max-height: calc(100vh - 2rem - 42px); - overflow: auto; - position: sticky; - top: 42px; - } -} diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs new file mode 100644 index 0000000..c0db6c5 --- /dev/null +++ b/docs/astro.config.mjs @@ -0,0 +1,89 @@ +// @ts-check +import { defineConfig } from 'astro/config'; +import starlight from '@astrojs/starlight'; +import starlightTypeDoc, { typeDocSidebarGroup } from 'starlight-typedoc' + +// https://astro.build/config +export default defineConfig({ + integrations: [ + starlight({ + title: 'Lavalink Client', + social: { + github: 'https://github.com/Tomato6966/lavalink-client', + //discord: 'https://discord.gg/', + }, + editLink: { + baseUrl: 'https://github.com/Tomato6966/lavalink-client/tree/main', + }, + plugins: [ + // Generate the documentation. + starlightTypeDoc({ + entryPoints: ['../src/index.ts'], + tsconfig: '../tsconfig.json', + typeDoc: { + useCodeBlocks: true, + parametersFormat: 'table', + propertiesFormat: 'table', + enumMembersFormat: 'table', + typeDeclarationFormat: 'table', + indexFormat: 'table', + expandParameters: true, + name: 'Lavalink Client', + }, + pagination: true, + }), + ], + sidebar: [ + { + label: 'Getting Started', + collapsed: true, + items: [ + { + label: 'installation', + link: '/home/installation', + }, + { + label: 'Features', + link: '/home/features', + }, + { + label: 'Example Guide', + link: '/home/example', + }, + { + label: 'Sample Configuration', + link: '/home/configuration', + } + ], + }, + { + label: 'Extra', + collapsed: true, + items: [ + { + label: 'Manager Events', + link: '/extra/manager-events', + }, + { + label: 'Node Events', + link: '/extra/node-events', + } + ] + }, + typeDocSidebarGroup, + { + label: 'GitHub', + link: 'https://github.com/Tomato6966/lavalink-client', + }, + { + label: 'NPM', + link: 'https://npmjs.com/lavalink-client', + }, + { + label: 'Example Bot', + link: 'https://github.com/Tomato6966/lavalink-client/tree/main/testBot', + }, + ], + }), + ], +}); diff --git a/docs/classes/Filters.FilterManager.html b/docs/classes/Filters.FilterManager.html deleted file mode 100644 index 16d3875..0000000 --- a/docs/classes/Filters.FilterManager.html +++ /dev/null @@ -1,227 +0,0 @@ -FilterManager | lavalink-client

The FilterManager for each player

-

Constructors

Properties

data: FilterData = ...

The Filter Data sent to Lavalink, only if the filter is enabled (ofc.)

-
equalizerBands: EQBand[] = []

The Equalizer bands currently applied to the Lavalink Server

-
filterUpdatedState: boolean = false

Private Util for the instaFix Filters option

-
filters: PlayerFilters = ...

All "Active" / "disabled" Player Filters

-
lavalinkFilterPlugin: {
Β Β Β Β toggleEcho: ((delay?, decay?) => Promise<boolean>);
Β Β Β Β toggleReverb: ((delays?, gains?) => Promise<boolean>);
} = ...

Type declaration

  • toggleEcho: ((delay?, decay?) => Promise<boolean>)
      • (delay?, decay?): Promise<boolean>
      • Enables / Disables the Echo effect, IMPORTANT! Only works with the correct Lavalink Plugin installed. (Optional: provide your Own Data)

        -

        Parameters

        • delay: number = 4
        • decay: number = 0.8

        Returns Promise<boolean>

  • toggleReverb: ((delays?, gains?) => Promise<boolean>)
      • (delays?, gains?): Promise<boolean>
      • Enables / Disables the Echo effect, IMPORTANT! Only works with the correct Lavalink Plugin installed. (Optional: provide your Own Data)

        -

        Parameters

        • delays: number[] = ...
        • gains: number[] = ...

        Returns Promise<boolean>

lavalinkLavaDspxPlugin: {
Β Β Β Β toggleEcho: ((decay?, echoLength?) => Promise<boolean>);
Β Β Β Β toggleHighPass: ((boostFactor?, cutoffFrequency?) => Promise<boolean>);
Β Β Β Β toggleLowPass: ((boostFactor?, cutoffFrequency?) => Promise<boolean>);
Β Β Β Β toggleNormalization: ((maxAmplitude?, adaptive?) => Promise<boolean>);
} = ...

Type declaration

  • toggleEcho: ((decay?, echoLength?) => Promise<boolean>)
      • (decay?, echoLength?): Promise<boolean>
      • Parameters

        • decay: number = 0.5
        • echoLength: number = 0.5

        Returns Promise<boolean>

  • toggleHighPass: ((boostFactor?, cutoffFrequency?) => Promise<boolean>)
      • (boostFactor?, cutoffFrequency?): Promise<boolean>
      • Parameters

        • boostFactor: number = 1.0
        • cutoffFrequency: number = 80

        Returns Promise<boolean>

  • toggleLowPass: ((boostFactor?, cutoffFrequency?) => Promise<boolean>)
      • (boostFactor?, cutoffFrequency?): Promise<boolean>
      • Parameters

        • boostFactor: number = 1.0
        • cutoffFrequency: number = 80

        Returns Promise<boolean>

  • toggleNormalization: ((maxAmplitude?, adaptive?) => Promise<boolean>)
      • (maxAmplitude?, adaptive?): Promise<boolean>
      • Parameters

        • maxAmplitude: number = 0.75
        • adaptive: boolean = true

        Returns Promise<boolean>

player: Player

The Player assigned to this Filter Manager

-

Methods

  • Apply Player filters for lavalink filter sending data, if the filter is enabled / not

    -

    Returns Promise<void>

  • Checks if the filters are correctly stated (active / not-active)

    -

    Parameters

    Returns boolean

  • Function to find out if currently there is a custom timescamle etc. filter applied

    -

    Returns boolean

  • Set custom filter.timescale#pitch . This method disabled both: nightcore & vaporwave. use 1 to reset it to normal

    -

    Parameters

    • pitch: number = 1

    Returns Promise<boolean>

  • Set custom filter.timescale#rate . This method disabled both: nightcore & vaporwave. use 1 to reset it to normal

    -

    Parameters

    • rate: number = 1

    Returns Promise<boolean>

  • Set custom filter.timescale#speed . This method disabled both: nightcore & vaporwave. use 1 to reset it to normal

    -

    Parameters

    • speed: number = 1

    Returns Promise<boolean>

  • Set the Filter Volume

    -

    Parameters

    • volume: number

    Returns Promise<boolean>

  • Enable / Disables a Karaoke like Filter Effect

    -

    Parameters

    • level: number = 1
    • monoLevel: number = 1
    • filterBand: number = 220
    • filterWidth: number = 100

    Returns Promise<boolean>

  • Enables / Disables the LowPass effect, (Optional: provide your Own Data)

    -

    Parameters

    • smoothing: number = 20

    Returns Promise<boolean>

  • Enables / Disables a Nightcore-like filter Effect. Disables/Overrides both: custom and Vaporwave Filter

    -

    Parameters

    • speed: number = 1.289999523162842
    • pitch: number = 1.289999523162842
    • rate: number = 0.9365999523162842

    Returns Promise<boolean>

  • Enables / Disables the rotation effect, (Optional: provide your Own Data)

    -

    Parameters

    • rotationHz: number = 0.2

    Returns Promise<boolean>

  • Enables / Disables the Tremolo effect, (Optional: provide your Own Data)

    -

    Parameters

    • frequency: number = 4
    • depth: number = 0.8

    Returns Promise<boolean>

  • Enables / Disables a Vaporwave-like filter Effect. Disables/Overrides both: custom and nightcore Filter

    -

    Parameters

    • speed: number = 0.8500000238418579
    • pitch: number = 0.800000011920929
    • rate: number = 1

    Returns Promise<boolean>

  • Enables / Disables the Vibrato effect, (Optional: provide your Own Data)

    -

    Parameters

    • frequency: number = 10
    • depth: number = 1

    Returns Promise<boolean>

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/classes/LavalinkManager.LavalinkManager.html b/docs/classes/LavalinkManager.LavalinkManager.html deleted file mode 100644 index 5f0055c..0000000 --- a/docs/classes/LavalinkManager.LavalinkManager.html +++ /dev/null @@ -1,409 +0,0 @@ -LavalinkManager | lavalink-client

Hierarchy

  • EventEmitter
    • LavalinkManager

Constructors

  • Create the Lavalink Manager

    -

    Parameters

    Returns LavalinkManager

    Example

    //const client = new Client({...}); // create your BOT Client (e.g. via discord.js)
    client.lavalink = new LavalinkManager({
    nodes: [
    {
    authorization: "yourverystrongpassword",
    host: "localhost",
    port: 2333,
    id: "testnode"
    },
    sendToShard(guildId, payload) => client.guilds.cache.get(guildId)?.shard?.send(payload),
    client: {
    id: process.env.CLIENT_ID,
    username: "TESTBOT"
    },
    // optional Options:
    autoSkip: true,
    playerOptions: {
    applyVolumeAsFilter: false,
    clientBasedPositionUpdateInterval: 150,
    defaultSearchPlatform: "ytmsearch",
    volumeDecrementer: 0.75,
    //requesterTransformer: YourRequesterTransformerFunction,
    onDisconnect: {
    autoReconnect: true,
    destroyPlayer: false
    },
    onEmptyQueue: {
    destroyAfterMs: 30_000,
    //autoPlayFunction: YourAutoplayFunction,
    },
    useUnresolvedData: true
    },
    queueOptions: {
    maxPreviousTracks: 25,
    //queueStore: yourCustomQueueStoreManagerClass,
    //queueChangesWatcher: yourCustomQueueChangesWatcherClass
    },
    linksBlacklist: [],
    linksWhitelist: [],
    advancedOptions: {
    maxFilterFixDuration: 600_000,
    debugOptions: {
    noAudio: false,
    playerDestroy: {
    dontThrowError: false,
    debugLogs: false
    }
    }
    }
    ]
    }) -
    -

Properties

initiated: boolean = false

Wether the manager was initiated or not

-
nodeManager: NodeManager

LavalinkManager's NodeManager to manage all Nodes

-

The Options of LavalinkManager (changeable)

-
players: MiniMap<string, Player> = ...

All Players stored in a MiniMap

-

LavalinkManager's Utils Class

-
captureRejectionSymbol: typeof captureRejectionSymbol

Value: Symbol.for('nodejs.rejection')

-

See how to write a custom rejection handler.

-

Since

v13.4.0, v12.16.0

-
captureRejections: boolean

Value: boolean

-

Change the default captureRejections option on all new EventEmitter objects.

-

Since

v13.4.0, v12.16.0

-
defaultMaxListeners: number

By default, a maximum of 10 listeners can be registered for any single -event. This limit can be changed for individual EventEmitter instances -using the emitter.setMaxListeners(n) method. To change the default -for allEventEmitter instances, the events.defaultMaxListenersproperty can be used. If this value is not a positive number, a RangeErroris thrown.

-

Take caution when setting the events.defaultMaxListeners because the -change affects allEventEmitter instances, including those created before -the change is made. However, calling emitter.setMaxListeners(n) still has -precedence over events.defaultMaxListeners.

-

This is not a hard limit. The EventEmitter instance will allow -more listeners to be added but will output a trace warning to stderr indicating -that a "possible EventEmitter memory leak" has been detected. For any singleEventEmitter, the emitter.getMaxListeners() and emitter.setMaxListeners()methods can be used to -temporarily avoid this warning:

-
import { EventEmitter } from 'node:events';
const emitter = new EventEmitter();
emitter.setMaxListeners(emitter.getMaxListeners() + 1);
emitter.once('event', () => {
// do stuff
emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0));
}); -
-

The --trace-warnings command-line flag can be used to display the -stack trace for such warnings.

-

The emitted warning can be inspected with process.on('warning') and will -have the additional emitter, type, and count properties, referring to -the event emitter instance, the event's name and the number of attached -listeners, respectively. -Its name property is set to 'MaxListenersExceededWarning'.

-

Since

v0.11.2

-
errorMonitor: typeof errorMonitor

This symbol shall be used to install a listener for only monitoring 'error'events. Listeners installed using this symbol are called before the regular'error' listeners are called.

-

Installing a listener using this symbol does not change the behavior once an'error' event is emitted. Therefore, the process will still crash if no -regular 'error' listener is installed.

-

Since

v13.6.0, v12.17.0

-

Accessors

  • get useable(): boolean
  • Checks wether the the lib is useable based on if any node is connected

    -

    Returns boolean

    Example

    if(!client.lavalink.useable) return console.error("can'T search yet, because there is no useable lavalink node.")
    // continue with code e.g. createing a player and searching -
    -

Methods

  • Alias for emitter.on(eventName, listener).

    -

    Parameters

    • eventName: string | symbol
    • listener: ((...args) => void)
        • (...args): void
        • Parameters

          • Rest ...args: any[]

          Returns void

    Returns LavalinkManager

    Since

    v0.1.26

    -
  • Create a Music-Player. If a player exists, then it returns it before creating a new one

    -

    Parameters

    Returns Player

    Example

    const player = client.lavalink.createPlayer({
    guildId: interaction.guildId,
    voiceChannelId: interaction.member.voice.channelId,
    // everything below is optional
    textChannelId: interaction.channelId,
    volume: 100,
    selfDeaf: true,
    selfMute: false,
    instaUpdateFiltersFix: true,
    applyVolumeAsFilter: false
    //only needed if you want to autopick node by region (configured by you)
    // vcRegion: interaction.member.voice.rtcRegion,
    // provide a specific node
    // node: client.lavalink.nodeManager.leastUsedNodes("memory")[0]
    }); -
    -
  • Delete's a player from the cache without destroying it on lavalink (only works when it's disconnected)

    -

    Parameters

    • guildId: string

    Returns boolean

    Example

    client.lavalink.deletePlayer(interaction.guildId);
    // shouldn't be used except you know what you are doing. -
    -
  • Destroy a player with optional destroy reason and disconnect it from the voice channel

    -

    Parameters

    • guildId: string
    • Optional destroyReason: string

    Returns Promise<Player>

    Example

    client.lavalink.destroyPlayer(interaction.guildId, "forcefully destroyed the player");
    // recommend to do it on the player tho: player.destroy("forcefully destroyed the player"); -
    -
  • Returns an array listing the events for which the emitter has registered -listeners. The values in the array are strings or Symbols.

    -
    import { EventEmitter } from 'node:events';

    const myEE = new EventEmitter();
    myEE.on('foo', () => {});
    myEE.on('bar', () => {});

    const sym = Symbol('symbol');
    myEE.on(sym, () => {});

    console.log(myEE.eventNames());
    // Prints: [ 'foo', 'bar', Symbol(symbol) ] -
    -

    Returns (string | symbol)[]

    Since

    v6.0.0

    -
  • Returns the current max listener value for the EventEmitter which is either -set by emitter.setMaxListeners(n) or defaults to defaultMaxListeners.

    -

    Returns number

    Since

    v1.0.0

    -
  • Get a Player from Lava

    -

    Parameters

    • guildId: string

      The guildId of the player

      -

    Returns Player

    Example

    const player = client.lavalink.getPlayer(interaction.guildId);
    -
    -

    A quicker and easier way than doing:

    -
    const player = client.lavalink.players.get(interaction.guildId);
    -
    -
  • Returns the number of listeners listening for the event named eventName. -If listener is provided, it will return how many times the listener is found -in the list of the listeners of the event.

    -

    Parameters

    • eventName: string | symbol

      The name of the event being listened for

      -
    • Optional listener: Function

      The event handler function

      -

    Returns number

    Since

    v3.2.0

    -
  • Returns a copy of the array of listeners for the event named eventName.

    -
    server.on('connection', (stream) => {
    console.log('someone connected!');
    });
    console.log(util.inspect(server.listeners('connection')));
    // Prints: [ [Function] ] -
    -

    Parameters

    • eventName: string | symbol

    Returns Function[]

    Since

    v0.1.26

    -
  • Adds the listener function to the beginning of the listeners array for the -event named eventName. No checks are made to see if the listener has -already been added. Multiple calls passing the same combination of eventNameand listener will result in the listener being added, and called, multiple -times.

    -
    server.prependListener('connection', (stream) => {
    console.log('someone connected!');
    }); -
    -

    Returns a reference to the EventEmitter, so that calls can be chained.

    -

    Parameters

    • eventName: string | symbol

      The name of the event.

      -
    • listener: ((...args) => void)

      The callback function

      -
        • (...args): void
        • Parameters

          • Rest ...args: any[]

          Returns void

    Returns LavalinkManager

    Since

    v6.0.0

    -
  • Adds a one-timelistener function for the event named eventName to the beginning of the listeners array. The next time eventName is triggered, this -listener is removed, and then invoked.

    -
    server.prependOnceListener('connection', (stream) => {
    console.log('Ah, we have our first user!');
    }); -
    -

    Returns a reference to the EventEmitter, so that calls can be chained.

    -

    Parameters

    • eventName: string | symbol

      The name of the event.

      -
    • listener: ((...args) => void)

      The callback function

      -
        • (...args): void
        • Parameters

          • Rest ...args: any[]

          Returns void

    Returns LavalinkManager

    Since

    v6.0.0

    -
  • Returns a copy of the array of listeners for the event named eventName, -including any wrappers (such as those created by .once()).

    -
    import { EventEmitter } from 'node:events';
    const emitter = new EventEmitter();
    emitter.once('log', () => console.log('log once'));

    // Returns a new Array with a function `onceWrapper` which has a property
    // `listener` which contains the original listener bound above
    const listeners = emitter.rawListeners('log');
    const logFnWrapper = listeners[0];

    // Logs "log once" to the console and does not unbind the `once` event
    logFnWrapper.listener();

    // Logs "log once" to the console and removes the listener
    logFnWrapper();

    emitter.on('log', () => console.log('log persistently'));
    // Will return a new Array with a single function bound by `.on()` above
    const newListeners = emitter.rawListeners('log');

    // Logs "log persistently" twice
    newListeners[0]();
    emitter.emit('log'); -
    -

    Parameters

    • eventName: string | symbol

    Returns Function[]

    Since

    v9.4.0

    -
  • Removes all listeners, or those of the specified eventName.

    -

    It is bad practice to remove listeners added elsewhere in the code, -particularly when the EventEmitter instance was created by some other -component or module (e.g. sockets or file streams).

    -

    Returns a reference to the EventEmitter, so that calls can be chained.

    -

    Parameters

    • Optional event: string | symbol

    Returns LavalinkManager

    Since

    v0.1.26

    -
  • By default EventEmitters will print a warning if more than 10 listeners are -added for a particular event. This is a useful default that helps finding -memory leaks. The emitter.setMaxListeners() method allows the limit to be -modified for this specific EventEmitter instance. The value can be set toInfinity (or 0) to indicate an unlimited number of listeners.

    -

    Returns a reference to the EventEmitter, so that calls can be chained.

    -

    Parameters

    • n: number

    Returns LavalinkManager

    Since

    v0.3.5

    -
  • Returns a copy of the array of listeners for the event named eventName.

    -

    For EventEmitters this behaves exactly the same as calling .listeners on -the emitter.

    -

    For EventTargets this is the only way to get the event listeners for the -event target. This is useful for debugging and diagnostic purposes.

    -
    import { getEventListeners, EventEmitter } from 'node:events';

    {
    const ee = new EventEmitter();
    const listener = () => console.log('Events are fun');
    ee.on('foo', listener);
    console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ]
    }
    {
    const et = new EventTarget();
    const listener = () => console.log('Events are fun');
    et.addEventListener('foo', listener);
    console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ]
    } -
    -

    Parameters

    • emitter: EventEmitter | _DOMEventTarget
    • name: string | symbol

    Returns Function[]

    Since

    v15.2.0, v14.17.0

    -
  • Returns the currently set max amount of listeners.

    -

    For EventEmitters this behaves exactly the same as calling .getMaxListeners on -the emitter.

    -

    For EventTargets this is the only way to get the max event listeners for the -event target. If the number of event handlers on a single EventTarget exceeds -the max set, the EventTarget will print a warning.

    -
    import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';

    {
    const ee = new EventEmitter();
    console.log(getMaxListeners(ee)); // 10
    setMaxListeners(11, ee);
    console.log(getMaxListeners(ee)); // 11
    }
    {
    const et = new EventTarget();
    console.log(getMaxListeners(et)); // 10
    setMaxListeners(11, et);
    console.log(getMaxListeners(et)); // 11
    } -
    -

    Parameters

    • emitter: EventEmitter | _DOMEventTarget

    Returns number

    Since

    v19.9.0

    -
  • A class method that returns the number of listeners for the given eventNameregistered on the given emitter.

    -
    import { EventEmitter, listenerCount } from 'node:events';

    const myEmitter = new EventEmitter();
    myEmitter.on('event', () => {});
    myEmitter.on('event', () => {});
    console.log(listenerCount(myEmitter, 'event'));
    // Prints: 2 -
    -

    Parameters

    • emitter: EventEmitter

      The emitter to query

      -
    • eventName: string | symbol

      The event name

      -

    Returns number

    Since

    v0.9.12

    -

    Deprecated

    Since v3.2.0 - Use listenerCount instead.

    -
  • import { on, EventEmitter } from 'node:events';
    import process from 'node:process';

    const ee = new EventEmitter();

    // Emit later on
    process.nextTick(() => {
    ee.emit('foo', 'bar');
    ee.emit('foo', 42);
    });

    for await (const event of on(ee, 'foo')) {
    // The execution of this inner block is synchronous and it
    // processes one event at a time (even with await). Do not use
    // if concurrent execution is required.
    console.log(event); // prints ['bar'] [42]
    }
    // Unreachable here -
    -

    Returns an AsyncIterator that iterates eventName events. It will throw -if the EventEmitter emits 'error'. It removes all listeners when -exiting the loop. The value returned by each iteration is an array -composed of the emitted event arguments.

    -

    An AbortSignal can be used to cancel waiting on events:

    -
    import { on, EventEmitter } from 'node:events';
    import process from 'node:process';

    const ac = new AbortController();

    (async () => {
    const ee = new EventEmitter();

    // Emit later on
    process.nextTick(() => {
    ee.emit('foo', 'bar');
    ee.emit('foo', 42);
    });

    for await (const event of on(ee, 'foo', { signal: ac.signal })) {
    // The execution of this inner block is synchronous and it
    // processes one event at a time (even with await). Do not use
    // if concurrent execution is required.
    console.log(event); // prints ['bar'] [42]
    }
    // Unreachable here
    })();

    process.nextTick(() => ac.abort()); -
    -

    Parameters

    • emitter: EventEmitter
    • eventName: string

      The name of the event being listened for

      -
    • Optional options: StaticEventEmitterOptions

    Returns AsyncIterableIterator<any>

    that iterates eventName events emitted by the emitter

    -

    Since

    v13.6.0, v12.16.0

    -
  • Creates a Promise that is fulfilled when the EventEmitter emits the given -event or that is rejected if the EventEmitter emits 'error' while waiting. -The Promise will resolve with an array of all the arguments emitted to the -given event.

    -

    This method is intentionally generic and works with the web platform EventTarget interface, which has no special'error' event -semantics and does not listen to the 'error' event.

    -
    import { once, EventEmitter } from 'node:events';
    import process from 'node:process';

    const ee = new EventEmitter();

    process.nextTick(() => {
    ee.emit('myevent', 42);
    });

    const [value] = await once(ee, 'myevent');
    console.log(value);

    const err = new Error('kaboom');
    process.nextTick(() => {
    ee.emit('error', err);
    });

    try {
    await once(ee, 'myevent');
    } catch (err) {
    console.error('error happened', err);
    } -
    -

    The special handling of the 'error' event is only used when events.once()is used to wait for another event. If events.once() is used to wait for the -'error' event itself, then it is treated as any other kind of event without -special handling:

    -
    import { EventEmitter, once } from 'node:events';

    const ee = new EventEmitter();

    once(ee, 'error')
    .then(([err]) => console.log('ok', err.message))
    .catch((err) => console.error('error', err.message));

    ee.emit('error', new Error('boom'));

    // Prints: ok boom -
    -

    An AbortSignal can be used to cancel waiting for the event:

    -
    import { EventEmitter, once } from 'node:events';

    const ee = new EventEmitter();
    const ac = new AbortController();

    async function foo(emitter, event, signal) {
    try {
    await once(emitter, event, { signal });
    console.log('event emitted!');
    } catch (error) {
    if (error.name === 'AbortError') {
    console.error('Waiting for the event was canceled!');
    } else {
    console.error('There was an error', error.message);
    }
    }
    }

    foo(ee, 'foo', ac.signal);
    ac.abort(); // Abort waiting for the event
    ee.emit('foo'); // Prints: Waiting for the event was canceled! -
    -

    Parameters

    • emitter: _NodeEventTarget
    • eventName: string | symbol
    • Optional options: StaticEventEmitterOptions

    Returns Promise<any[]>

    Since

    v11.13.0, v10.16.0

    -
  • Parameters

    • emitter: _DOMEventTarget
    • eventName: string
    • Optional options: StaticEventEmitterOptions

    Returns Promise<any[]>

  • import { setMaxListeners, EventEmitter } from 'node:events';

    const target = new EventTarget();
    const emitter = new EventEmitter();

    setMaxListeners(5, target, emitter); -
    -

    Parameters

    • Optional n: number

      A non-negative number. The maximum number of listeners per EventTarget event.

      -
    • Rest ...eventTargets: (EventEmitter | _DOMEventTarget)[]

    Returns void

    Since

    v15.4.0

    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/classes/Node.LavalinkNode.html b/docs/classes/Node.LavalinkNode.html deleted file mode 100644 index 3efe18a..0000000 --- a/docs/classes/Node.LavalinkNode.html +++ /dev/null @@ -1,604 +0,0 @@ -LavalinkNode | lavalink-client

Lavalink Node creator class

-

Constructors

Properties

NodeManager: NodeManager = null

The Node Manager of this Node

-
calls: number = 0

The amount of rest calls the node has made.

-
decode: {
Β Β Β Β multipleTracks: ((encodeds, requester) => Promise<Track[]>);
Β Β Β Β singleTrack: ((encoded, requester) => Promise<Track>);
} = ...

Decode Track or Tracks

-

Type declaration

  • multipleTracks: ((encodeds, requester) => Promise<Track[]>)
      • (encodeds, requester): Promise<Track[]>
      • Decodes multiple tracks into their info

        -

        Parameters

        • encodeds: string[]

          valid encoded base64 string array from all tracks

          -
        • requester: unknown

          the requesteruser for building the tracks

          -

        Returns Promise<Track[]>

        array of all tracks you decoded

        -

        Example

        const encodedBase64_1 = 'QAACDgMACk5vIERpZ2dpdHkAC0JsYWNrc3RyZWV0AAAAAAAEo4AABjkxNjQ5NgABAB9odHRwczovL2RlZXplci5jb20vdHJhY2svOTE2NDk2AQBpaHR0cHM6Ly9lLWNkbnMtaW1hZ2VzLmR6Y2RuLm5ldC9pbWFnZXMvY292ZXIvZGFlN2EyNjViNzlmYjcxMjc4Y2RlMjUwNDg0OWQ2ZjcvMTAwMHgxMDAwLTAwMDAwMC04MC0wLTAuanBnAQAMVVNJUjE5NjAwOTc4AAZkZWV6ZXIBAChObyBEaWdnaXR5OiBUaGUgVmVyeSBCZXN0IE9mIEJsYWNrc3RyZWV0AQAjaHR0cHM6Ly93d3cuZGVlemVyLmNvbS9hbGJ1bS8xMDMyNTQBACJodHRwczovL3d3dy5kZWV6ZXIuY29tL2FydGlzdC8xODYxAQBqaHR0cHM6Ly9lLWNkbnMtaW1hZ2VzLmR6Y2RuLm5ldC9pbWFnZXMvYXJ0aXN0L2YxNmNhYzM2ZmVjMzkxZjczN2I3ZDQ4MmY1YWM3M2UzLzEwMDB4MTAwMC0wMDAwMDAtODAtMC0wLmpwZwEAT2h0dHBzOi8vY2RuLXByZXZpZXctYS5kemNkbi5uZXQvc3RyZWFtL2MtYTE1Yjg1NzFhYTYyMDBjMDQ0YmY1OWM3NmVkOTEyN2MtNi5tcDMAAAAAAAAAAAA=';
        const encodedBase64_2 = 'QAABJAMAClRhbGsgYSBMb3QACjQwNHZpbmNlbnQAAAAAAAHr1gBxTzpodHRwczovL2FwaS12Mi5zb3VuZGNsb3VkLmNvbS9tZWRpYS9zb3VuZGNsb3VkOnRyYWNrczo4NTE0MjEwNzYvMzUyYTRiOTAtNzYxOS00M2E5LWJiOGItMjIxMzE0YzFjNjNhL3N0cmVhbS9obHMAAQAsaHR0cHM6Ly9zb3VuZGNsb3VkLmNvbS80MDR2aW5jZW50L3RhbGstYS1sb3QBADpodHRwczovL2kxLnNuZGNkbi5jb20vYXJ0d29ya3MtRTN1ek5Gc0Y4QzBXLTAtb3JpZ2luYWwuanBnAQAMUVpITkExOTg1Nzg0AApzb3VuZGNsb3VkAAAAAAAAAAA=';
        const tracks = await player.node.decode.multipleTracks([encodedBase64_1, encodedBase64_2], interaction.user); -
        -
  • singleTrack: ((encoded, requester) => Promise<Track>)
      • (encoded, requester): Promise<Track>
      • Decode a single track into its info

        -

        Parameters

        • encoded: string

          valid encoded base64 string from a track

          -
        • requester: unknown

          the requesteruser for building the track

          -

        Returns Promise<Track>

        decoded track from lavalink

        -

        Example

        const encodedBase64 = 'QAACDgMACk5vIERpZ2dpdHkAC0JsYWNrc3RyZWV0AAAAAAAEo4AABjkxNjQ5NgABAB9odHRwczovL2RlZXplci5jb20vdHJhY2svOTE2NDk2AQBpaHR0cHM6Ly9lLWNkbnMtaW1hZ2VzLmR6Y2RuLm5ldC9pbWFnZXMvY292ZXIvZGFlN2EyNjViNzlmYjcxMjc4Y2RlMjUwNDg0OWQ2ZjcvMTAwMHgxMDAwLTAwMDAwMC04MC0wLTAuanBnAQAMVVNJUjE5NjAwOTc4AAZkZWV6ZXIBAChObyBEaWdnaXR5OiBUaGUgVmVyeSBCZXN0IE9mIEJsYWNrc3RyZWV0AQAjaHR0cHM6Ly93d3cuZGVlemVyLmNvbS9hbGJ1bS8xMDMyNTQBACJodHRwczovL3d3dy5kZWV6ZXIuY29tL2FydGlzdC8xODYxAQBqaHR0cHM6Ly9lLWNkbnMtaW1hZ2VzLmR6Y2RuLm5ldC9pbWFnZXMvYXJ0aXN0L2YxNmNhYzM2ZmVjMzkxZjczN2I3ZDQ4MmY1YWM3M2UzLzEwMDB4MTAwMC0wMDAwMDAtODAtMC0wLmpwZwEAT2h0dHBzOi8vY2RuLXByZXZpZXctYS5kemNkbi5uZXQvc3RyZWFtL2MtYTE1Yjg1NzFhYTYyMDBjMDQ0YmY1OWM3NmVkOTEyN2MtNi5tcDMAAAAAAAAAAAA=';
        const track = await player.node.decode.singleTrack(encodedBase64, interaction.user); -
        -
heartBeatInterval?: Timeout
heartBeatPingTimestamp: number = 0
heartBeatPongTimestamp: number = 0
info: LavalinkInfo = null

Actual Lavalink Information of the Node

-
isAlive: boolean = false
lyrics: {
Β Β Β Β get: ((track, skipTrackSource?) => Promise<LyricsResult>);
Β Β Β Β getCurrent: ((guildId, skipTrackSource?) => Promise<LyricsResult>);
Β Β Β Β subscribe: ((guildId) => Promise<any>);
Β Β Β Β unsubscribe: ((guildId) => Promise<any>);
} = ...

Type declaration

  • get: ((track, skipTrackSource?) => Promise<LyricsResult>)
      • (track, skipTrackSource?): Promise<LyricsResult>
      • Get the lyrics of a track

        -

        Parameters

        • track: Track

          the track to get the lyrics for

          -
        • skipTrackSource: boolean = false

          wether to skip the track source or not

          -

        Returns Promise<LyricsResult>

        the lyrics of the track

        -

        Example

        const lyrics = await player.node.lyrics.get(track, true);
        // use it of player instead:
        // const lyrics = await player.getLyrics(track, true); -
        -
  • getCurrent: ((guildId, skipTrackSource?) => Promise<LyricsResult>)
      • (guildId, skipTrackSource?): Promise<LyricsResult>
      • Get the lyrics of the current playing track

        -

        Parameters

        • guildId: string

          the guild id of the player

          -
        • skipTrackSource: boolean = false

          wether to skip the track source or not

          -

        Returns Promise<LyricsResult>

        the lyrics of the current playing track

        -

        Example

        const lyrics = await player.node.lyrics.getCurrent(guildId);
        // use it of player instead:
        // const lyrics = await player.getCurrentLyrics(); -
        -
  • subscribe: ((guildId) => Promise<any>)
      • (guildId): Promise<any>
      • subscribe to lyrics updates for a guild

        -

        Parameters

        • guildId: string

          the guild id of the player

          -

        Returns Promise<any>

        request data of the request

        -

        Example

        await player.node.lyrics.subscribe(guildId);
        // use it of player instead:
        // const lyrics = await player.subscribeLyrics(); -
        -
  • unsubscribe: ((guildId) => Promise<any>)
      • (guildId): Promise<any>
      • unsubscribe from lyrics updates for a guild

        -

        Parameters

        • guildId: string

          the guild id of the player

          -

        Returns Promise<any>

        request data of the request

        -

        Example

        await player.node.lyrics.unsubscribe(guildId);
        // use it of player instead:
        // const lyrics = await player.unsubscribeLyrics(); -
        -

The provided Options of the Node

-
pingTimeout?: Timeout
reconnectAttempts: number = 1

The Reconnection Attempt counter

-
reconnectTimeout?: Timeout = undefined

The Reconnection Timeout

-
resuming: {
Β Β Β Β enabled: boolean;
Β Β Β Β timeout: number;
} = ...

Wether the node resuming is enabled or not

-

Type declaration

  • enabled: boolean
  • timeout: number
routePlannerApi: {
Β Β Β Β getStatus: (() => Promise<RoutePlanner>);
Β Β Β Β unmarkAllFailedAddresses: (() => Promise<any>);
Β Β Β Β unmarkFailedAddress: ((address) => Promise<void>);
} = ...

Lavalink's Route Planner Api

-

Type declaration

  • getStatus: (() => Promise<RoutePlanner>)
      • (): Promise<RoutePlanner>
      • Get routplanner Info from Lavalink for ip rotation

        -

        Returns Promise<RoutePlanner>

        the status of the routeplanner

        -

        Example

        const routePlannerStatus = await player.node.routePlannerApi.getStatus();
        const usedBlock = routePlannerStatus.details?.ipBlock;
        const currentIp = routePlannerStatus.currentAddress; -
        -
  • unmarkAllFailedAddresses: (() => Promise<any>)
      • (): Promise<any>
      • Release all blacklisted IP addresses into pool of IPs

        -

        Returns Promise<any>

        request data of the request

        -

        Example

        await player.node.routePlannerApi.unmarkAllFailedAddresses();
        -
        -
  • unmarkFailedAddress: ((address) => Promise<void>)
      • (address): Promise<void>
      • Release blacklisted IP address into pool of IPs for ip rotation

        -

        Parameters

        • address: string

          IP address

          -

        Returns Promise<void>

        request data of the request

        -

        Example

        await player.node.routePlannerApi.unmarkFailedAddress("ipv6address");
        -
        -
sessionId?: string = null

The current sessionId, only present when connected

-
socket: WebSocket = null

The Socket of the Lavalink

-
stats: NodeStats = ...

Stats from lavalink, will be updated via an interval by lavalink.

-
version: string = "v4"

Version of what the Lavalink Server should be

-

Accessors

  • get connected(): boolean
  • Returns if connected to the Node.

    -

    Returns boolean

    Example

    const isConnected = player.node.connected;
    console.log("node is connected: ", isConnected ? "yes" : "no") -
    -
  • get connectionStatus(): string
  • Returns the current ConnectionStatus

    -

    Returns string

    Example

    try {
    const statusOfConnection = player.node.connectionStatus;
    console.log("node's connection status is:", statusOfConnection)
    } catch (error) {
    console.error("no socket available?", error)
    } -
    -
  • get id(): string
  • Get the id of the node

    -

    Returns string

    Example

    const nodeId = player.node.id;
    console.log("node id is: ", nodeId) -
    -

Methods

  • Private

    util function for handling closing events from websocket

    -

    Parameters

    • code: number
    • reason: string

    Returns void

  • Connect to the Lavalink Node

    -

    Parameters

    • Optional sessionId: string

      Provide the Session Id of the previous connection, to resume the node and it's player(s)

      -

    Returns void

    void

    -

    Example

    player.node.connect(); // if provided on bootup in managerOptions#nodes, this will be called automatically when doing lavalink.init()

    // or connect from a resuming session:
    player.node.connect("sessionId"); -
    -
  • Delete the sponsorblock plugins

    -

    Parameters

    • player: Player

      passthrough the player

      -

    Returns Promise<void>

    void

    -

    Example

    // use it on the player via player.deleteSponsorBlock();
    const sponsorBlockSegments = await player.node.deleteSponsorBlock(player); -
    -
  • Destroys the Node-Connection (Websocket) and all player's of the node

    -

    Parameters

    • Optional destroyReason: string

      Destroyreason to use when destroying the players

      -
    • deleteNode: boolean = true

      wether to delete the nodte from the nodes list too, if false it will emit a disconnect.

      -

    Returns void

    void

    -

    Default

    true
    -
    -

    Example

    player.node.destroy("custom Player Destroy Reason", true);
    -
    -
  • Destroys the Player on the Lavalink Server

    -

    Parameters

    • guildId: any

    Returns Promise<any>

    request result

    -

    Example

    // use player.destroy() instead
    player.node.destroyPlayer(player.guildId); -
    -
  • Private

    util function for handling error events from websocket

    -

    Parameters

    • error: Error

    Returns void

  • Request Lavalink information.

    -

    Returns Promise<LavalinkInfo>

    lavalink info object

    -

    Example

    const lavalinkInfo = await player.node.fetchInfo();
    const availablePlugins:string[] = lavalinkInfo.plugins.map(plugin => plugin.name);
    const availableSources:string[] = lavalinkInfo.sourceManagers; -
    -
  • Request Lavalink version.

    -

    Returns Promise<string>

    the current used lavalink version

    -

    Example

    const lavalinkVersion = await player.node.fetchVersion();
    -
    -
  • Parse url params correctly for lavalink requests, including support for urls and uris.

    -

    Parameters

    • url: URL

      input url object

      -
    • Optional extraQueryUrlParams: URLSearchParams

      UrlSearchParams to use in a encodedURI, useful for example for flowertts

      -

    Returns string

    the url as a valid string

    -

    Example

    player.node.getRequestingUrl(new URL(`http://localhost:2333/v4/loadtracks?identifier=Never gonna give you up`));
    -
    -
  • Get the current sponsorblocks for the sponsorblock plugin

    -

    Parameters

    • player: Player

      passthrough the player

      -

    Returns Promise<SponsorBlockSegment[]>

    sponsorblock seggment from lavalink

    -

    Example

    // use it on the player via player.getSponsorBlock();
    const sponsorBlockSegments = await player.node.getSponsorBlock(player); -
    -
  • Private

    middleware util function for handling all kind of events from websocket

    -

    Parameters

    • payload: {
      Β Β Β Β guildId: string;
      Β Β Β Β length: number;
      Β Β Β Β op: "event";
      Β Β Β Β type: "SegmentsLoaded" | "SegmentSkipped" | "ChapterStarted" | "ChaptersLoaded" | "TrackStartEvent" | "TrackEndEvent" | "TrackExceptionEvent" | "TrackStuckEvent" | "WebSocketClosedEvent" | "LyricsFoundEvent" | "LyricsNotFoundEvent" | "LyricsLineEvent";
      Β Β Β Β [iterator](): IterableIterator<string>;
      Β Β Β Β anchor(name): string;
      Β Β Β Β at(index): string;
      Β Β Β Β big(): string;
      Β Β Β Β blink(): string;
      Β Β Β Β bold(): string;
      Β Β Β Β charAt(pos): string;
      Β Β Β Β charCodeAt(index): number;
      Β Β Β Β codePointAt(pos): number;
      Β Β Β Β concat(...strings): string;
      Β Β Β Β endsWith(searchString, endPosition?): boolean;
      Β Β Β Β fixed(): string;
      Β Β Β Β fontcolor(color): string;
      Β Β Β Β fontsize(size): string;
      Β Β Β Β fontsize(size): string;
      Β Β Β Β includes(searchString, position?): boolean;
      Β Β Β Β indexOf(searchString, position?): number;
      Β Β Β Β italics(): string;
      Β Β Β Β lastIndexOf(searchString, position?): number;
      Β Β Β Β link(url): string;
      Β Β Β Β localeCompare(that): number;
      Β Β Β Β localeCompare(that, locales?, options?): number;
      Β Β Β Β match(regexp): RegExpMatchArray;
      Β Β Β Β match(matcher): RegExpMatchArray;
      Β Β Β Β matchAll(regexp): IterableIterator<RegExpMatchArray>;
      Β Β Β Β normalize(form): string;
      Β Β Β Β normalize(form?): string;
      Β Β Β Β padEnd(maxLength, fillString?): string;
      Β Β Β Β padStart(maxLength, fillString?): string;
      Β Β Β Β repeat(count): string;
      Β Β Β Β replace(searchValue, replaceValue): string;
      Β Β Β Β replace(searchValue, replacer): string;
      Β Β Β Β replace(searchValue, replaceValue): string;
      Β Β Β Β replace(searchValue, replacer): string;
      Β Β Β Β replaceAll(searchValue, replaceValue): string;
      Β Β Β Β replaceAll(searchValue, replacer): string;
      Β Β Β Β search(regexp): number;
      Β Β Β Β search(searcher): number;
      Β Β Β Β slice(start?, end?): string;
      Β Β Β Β small(): string;
      Β Β Β Β split(separator, limit?): string[];
      Β Β Β Β split(splitter, limit?): string[];
      Β Β Β Β startsWith(searchString, position?): boolean;
      Β Β Β Β strike(): string;
      Β Β Β Β sub(): string;
      Β Β Β Β substr(from, length?): string;
      Β Β Β Β substring(start, end?): string;
      Β Β Β Β sup(): string;
      Β Β Β Β toLocaleLowerCase(locales?): string;
      Β Β Β Β toLocaleUpperCase(locales?): string;
      Β Β Β Β toLowerCase(): string;
      Β Β Β Β toString(): string;
      Β Β Β Β toUpperCase(): string;
      Β Β Β Β trim(): string;
      Β Β Β Β trimEnd(): string;
      Β Β Β Β trimLeft(): string;
      Β Β Β Β trimRight(): string;
      Β Β Β Β trimStart(): string;
      Β Β Β Β valueOf(): string;
      Β Β Β Β valueOf(): Object;
      }
      • guildId: string

        The guildId

        -
      • Readonly length: number

        Returns the length of a String object.

        -
      • op: "event"
      • type: "SegmentsLoaded" | "SegmentSkipped" | "ChapterStarted" | "ChaptersLoaded" | "TrackStartEvent" | "TrackEndEvent" | "TrackExceptionEvent" | "TrackStuckEvent" | "WebSocketClosedEvent" | "LyricsFoundEvent" | "LyricsNotFoundEvent" | "LyricsLineEvent"

        The lyricsline event

        -
      • [iterator]:function
        • Iterator

          -

          Returns IterableIterator<string>

      • anchor:function
        • Returns an <a> HTML anchor element and sets the name attribute to the text value

          -

          Parameters

          • name: string

          Returns string

          Deprecated

          A legacy feature for browser compatibility

          -
      • at:function
        • Returns a new String consisting of the single UTF-16 code unit located at the specified index.

          -

          Parameters

          • index: number

            The zero-based index of the desired code unit. A negative index will count back from the last item.

            -

          Returns string

      • big:function
        • Returns a <big> HTML element

          -

          Returns string

          Deprecated

          A legacy feature for browser compatibility

          -
      • blink:function
        • Returns a <blink> HTML element

          -

          Returns string

          Deprecated

          A legacy feature for browser compatibility

          -
      • bold:function
        • Returns a <b> HTML element

          -

          Returns string

          Deprecated

          A legacy feature for browser compatibility

          -
      • charAt:function
        • Returns the character at the specified index.

          -

          Parameters

          • pos: number

            The zero-based index of the desired character.

            -

          Returns string

      • charCodeAt:function
        • Returns the Unicode value of the character at the specified location.

          -

          Parameters

          • index: number

            The zero-based index of the desired character. If there is no character at the specified index, NaN is returned.

            -

          Returns number

      • codePointAt:function
        • Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point -value of the UTF-16 encoded code point starting at the string element at position pos in -the String resulting from converting this object to a String. -If there is no element at that position, the result is undefined. -If a valid UTF-16 surrogate pair does not begin at pos, the result is the code unit at pos.

          -

          Parameters

          • pos: number

          Returns number

      • concat:function
        • Returns a string that contains the concatenation of two or more strings.

          -

          Parameters

          • Rest ...strings: string[]

            The strings to append to the end of the string.

            -

          Returns string

      • endsWith:function
        • Returns true if the sequence of elements of searchString converted to a String is the -same as the corresponding elements of this object (converted to a String) starting at -endPosition – length(this). Otherwise returns false.

          -

          Parameters

          • searchString: string
          • Optional endPosition: number

          Returns boolean

      • fixed:function
        • Returns a <tt> HTML element

          -

          Returns string

          Deprecated

          A legacy feature for browser compatibility

          -
      • fontcolor:function
        • Returns a <font> HTML element and sets the color attribute value

          -

          Parameters

          • color: string

          Returns string

          Deprecated

          A legacy feature for browser compatibility

          -
      • fontsize:function
        • Returns a <font> HTML element and sets the size attribute value

          -

          Parameters

          • size: number

          Returns string

          Deprecated

          A legacy feature for browser compatibility

          -
        • Returns a <font> HTML element and sets the size attribute value

          -

          Parameters

          • size: string

          Returns string

          Deprecated

          A legacy feature for browser compatibility

          -
      • includes:function
        • Returns true if searchString appears as a substring of the result of converting this -object to a String, at one or more positions that are -greater than or equal to position; otherwise, returns false.

          -

          Parameters

          • searchString: string

            search string

            -
          • Optional position: number

            If position is undefined, 0 is assumed, so as to search all of the String.

            -

          Returns boolean

      • indexOf:function
        • Returns the position of the first occurrence of a substring.

          -

          Parameters

          • searchString: string

            The substring to search for in the string

            -
          • Optional position: number

            The index at which to begin searching the String object. If omitted, search starts at the beginning of the string.

            -

          Returns number

      • italics:function
        • Returns an <i> HTML element

          -

          Returns string

          Deprecated

          A legacy feature for browser compatibility

          -
      • lastIndexOf:function
        • Returns the last occurrence of a substring in the string.

          -

          Parameters

          • searchString: string

            The substring to search for.

            -
          • Optional position: number

            The index at which to begin searching. If omitted, the search begins at the end of the string.

            -

          Returns number

      • link:function
        • Returns an <a> HTML element and sets the href attribute value

          -

          Parameters

          • url: string

          Returns string

          Deprecated

          A legacy feature for browser compatibility

          -
      • localeCompare:function
        • Determines whether two strings are equivalent in the current locale.

          -

          Parameters

          • that: string

            String to compare to target string

            -

          Returns number

        • Determines whether two strings are equivalent in the current or specified locale.

          -

          Parameters

          • that: string

            String to compare to target string

            -
          • Optional locales: string | string[]

            A locale string or array of locale strings that contain one or more language or locale tags. If you include more than one locale string, list them in descending order of priority so that the first entry is the preferred locale. If you omit this parameter, the default locale of the JavaScript runtime is used. This parameter must conform to BCP 47 standards; see the Intl.Collator object for details.

            -
          • Optional options: CollatorOptions

            An object that contains one or more properties that specify comparison options. see the Intl.Collator object for details.

            -

          Returns number

      • match:function
        • Matches a string with a regular expression, and returns an array containing the results of that search.

          -

          Parameters

          • regexp: string | RegExp

            A variable name or string literal containing the regular expression pattern and flags.

            -

          Returns RegExpMatchArray

        • Matches a string or an object that supports being matched against, and returns an array -containing the results of that search, or null if no matches are found.

          -

          Parameters

          • matcher: {
            Β Β Β Β [match](string): RegExpMatchArray;
            }

            An object that supports being matched against.

            -
            • [match]:function
              • Parameters

                • string: string

                Returns RegExpMatchArray

          Returns RegExpMatchArray

      • matchAll:function
        • Matches a string with a regular expression, and returns an iterable of matches -containing the results of that search.

          -

          Parameters

          • regexp: RegExp

            A variable name or string literal containing the regular expression pattern and flags.

            -

          Returns IterableIterator<RegExpMatchArray>

      • normalize:function
        • Returns the String value result of normalizing the string into the normalization form -named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms.

          -

          Parameters

          • form: "NFC" | "NFD" | "NFKC" | "NFKD"

            Applicable values: "NFC", "NFD", "NFKC", or "NFKD", If not specified default -is "NFC"

            -

          Returns string

        • Returns the String value result of normalizing the string into the normalization form -named by form as specified in Unicode Standard Annex #15, Unicode Normalization Forms.

          -

          Parameters

          • Optional form: string

            Applicable values: "NFC", "NFD", "NFKC", or "NFKD", If not specified default -is "NFC"

            -

          Returns string

      • padEnd:function
        • Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length. -The padding is applied from the end (right) of the current string.

          -

          Parameters

          • maxLength: number

            The length of the resulting string once the current string has been padded. - If this parameter is smaller than the current string's length, the current string will be returned as it is.

            -
          • Optional fillString: string

            The string to pad the current string with. - If this string is too long, it will be truncated and the left-most part will be applied. - The default value for this parameter is " " (U+0020).

            -

          Returns string

      • padStart:function
        • Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length. -The padding is applied from the start (left) of the current string.

          -

          Parameters

          • maxLength: number

            The length of the resulting string once the current string has been padded. - If this parameter is smaller than the current string's length, the current string will be returned as it is.

            -
          • Optional fillString: string

            The string to pad the current string with. - If this string is too long, it will be truncated and the left-most part will be applied. - The default value for this parameter is " " (U+0020).

            -

          Returns string

      • repeat:function
        • Returns a String value that is made from count copies appended together. If count is 0, -the empty string is returned.

          -

          Parameters

          • count: number

            number of copies to append

            -

          Returns string

      • replace:function
        • Replaces text in a string, using a regular expression or search string.

          -

          Parameters

          • searchValue: string | RegExp

            A string or regular expression to search for.

            -
          • replaceValue: string

            A string containing the text to replace. When the searchValue is a RegExp, all matches are replaced if the g flag is set (or only those matches at the beginning, if the y flag is also present). Otherwise, only the first match of searchValue is replaced.

            -

          Returns string

        • Replaces text in a string, using a regular expression or search string.

          -

          Parameters

          • searchValue: string | RegExp

            A string to search for.

            -
          • replacer: ((substring, ...args) => string)

            A function that returns the replacement text.

            -
              • (substring, ...args): string
              • Parameters

                • substring: string
                • Rest ...args: any[]

                Returns string

          Returns string

        • Passes a string and replaceValue to the [Symbol.replace] method on searchValue. This method is expected to implement its own replacement algorithm.

          -

          Parameters

          • searchValue: {
            Β Β Β Β [replace](string, replaceValue): string;
            }

            An object that supports searching for and replacing matches within a string.

            -
            • [replace]:function
              • Parameters

                • string: string
                • replaceValue: string

                Returns string

          • replaceValue: string

            The replacement text.

            -

          Returns string

        • Replaces text in a string, using an object that supports replacement within a string.

          -

          Parameters

          • searchValue: {
            Β Β Β Β [replace](string, replacer): string;
            }

            A object can search for and replace matches within a string.

            -
            • [replace]:function
              • Parameters

                • string: string
                • replacer: ((substring, ...args) => string)
                    • (substring, ...args): string
                    • Parameters

                      • substring: string
                      • Rest ...args: any[]

                      Returns string

                Returns string

          • replacer: ((substring, ...args) => string)

            A function that returns the replacement text.

            -
              • (substring, ...args): string
              • Parameters

                • substring: string
                • Rest ...args: any[]

                Returns string

          Returns string

      • replaceAll:function
        • Replace all instances of a substring in a string, using a regular expression or search string.

          -

          Parameters

          • searchValue: string | RegExp

            A string to search for.

            -
          • replaceValue: string

            A string containing the text to replace for every successful match of searchValue in this string.

            -

          Returns string

        • Replace all instances of a substring in a string, using a regular expression or search string.

          -

          Parameters

          • searchValue: string | RegExp

            A string to search for.

            -
          • replacer: ((substring, ...args) => string)

            A function that returns the replacement text.

            -
              • (substring, ...args): string
              • Parameters

                • substring: string
                • Rest ...args: any[]

                Returns string

          Returns string

      • search:function
        • Finds the first substring match in a regular expression search.

          -

          Parameters

          • regexp: string | RegExp

            The regular expression pattern and applicable flags.

            -

          Returns number

        • Finds the first substring match in a regular expression search.

          -

          Parameters

          • searcher: {
            Β Β Β Β [search](string): number;
            }

            An object which supports searching within a string.

            -
            • [search]:function
              • Parameters

                • string: string

                Returns number

          Returns number

      • slice:function
        • Returns a section of a string.

          -

          Parameters

          • Optional start: number

            The index to the beginning of the specified portion of stringObj.

            -
          • Optional end: number

            The index to the end of the specified portion of stringObj. The substring includes the characters up to, but not including, the character indicated by end. -If this value is not specified, the substring continues to the end of stringObj.

            -

          Returns string

      • small:function
        • Returns a <small> HTML element

          -

          Returns string

          Deprecated

          A legacy feature for browser compatibility

          -
      • split:function
        • Split a string into substrings using the specified separator and return them as an array.

          -

          Parameters

          • separator: string | RegExp

            A string that identifies character or characters to use in separating the string. If omitted, a single-element array containing the entire string is returned.

            -
          • Optional limit: number

            A value used to limit the number of elements returned in the array.

            -

          Returns string[]

        • Split a string into substrings using the specified separator and return them as an array.

          -

          Parameters

          • splitter: {
            Β Β Β Β [split](string, limit?): string[];
            }

            An object that can split a string.

            -
            • [split]:function
              • Parameters

                • string: string
                • Optional limit: number

                Returns string[]

          • Optional limit: number

            A value used to limit the number of elements returned in the array.

            -

          Returns string[]

      • startsWith:function
        • Returns true if the sequence of elements of searchString converted to a String is the -same as the corresponding elements of this object (converted to a String) starting at -position. Otherwise returns false.

          -

          Parameters

          • searchString: string
          • Optional position: number

          Returns boolean

      • strike:function
        • Returns a <strike> HTML element

          -

          Returns string

          Deprecated

          A legacy feature for browser compatibility

          -
      • sub:function
        • Returns a <sub> HTML element

          -

          Returns string

          Deprecated

          A legacy feature for browser compatibility

          -
      • substr:function
        • Gets a substring beginning at the specified location and having the specified length.

          -

          Parameters

          • from: number

            The starting position of the desired substring. The index of the first character in the string is zero.

            -
          • Optional length: number

            The number of characters to include in the returned substring.

            -

          Returns string

          Deprecated

          A legacy feature for browser compatibility

          -
      • substring:function
        • Returns the substring at the specified location within a String object.

          -

          Parameters

          • start: number

            The zero-based index number indicating the beginning of the substring.

            -
          • Optional end: number

            Zero-based index number indicating the end of the substring. The substring includes the characters up to, but not including, the character indicated by end. -If end is omitted, the characters from start through the end of the original string are returned.

            -

          Returns string

      • sup:function
        • Returns a <sup> HTML element

          -

          Returns string

          Deprecated

          A legacy feature for browser compatibility

          -
      • toLocaleLowerCase:function
        • Converts all alphabetic characters to lowercase, taking into account the host environment's current locale.

          -

          Parameters

          • Optional locales: string | string[]

          Returns string

      • toLocaleUpperCase:function
        • Returns a string where all alphabetic characters have been converted to uppercase, taking into account the host environment's current locale.

          -

          Parameters

          • Optional locales: string | string[]

          Returns string

      • toLowerCase:function
        • Converts all the alphabetic characters in a string to lowercase.

          -

          Returns string

      • toString:function
        • Returns a string representation of a string.

          -

          Returns string

      • toUpperCase:function
        • Converts all the alphabetic characters in a string to uppercase.

          -

          Returns string

      • trim:function
        • Removes the leading and trailing white space and line terminator characters from a string.

          -

          Returns string

      • trimEnd:function
        • Removes the trailing white space and line terminator characters from a string.

          -

          Returns string

      • trimLeft:function
        • Removes the leading white space and line terminator characters from a string.

          -

          Returns string

          Deprecated

          A legacy feature for browser compatibility. Use trimStart instead

          -
      • trimRight:function
        • Removes the trailing white space and line terminator characters from a string.

          -

          Returns string

          Deprecated

          A legacy feature for browser compatibility. Use trimEnd instead

          -
      • trimStart:function
        • Removes the leading white space and line terminator characters from a string.

          -

          Returns string

      • valueOf:function
        • Returns the primitive value of the specified object.

          -

          Returns string

        • Returns the primitive value of the specified object.

          -

          Returns Object

    Returns Promise<void>

  • Search something using the lavaSearchPlugin (filtered searches by types)

    -

    Parameters

    • query: LavaSearchQuery

      LavaSearchQuery Object

      -
    • requestUser: unknown

      Request User for creating the player(s)

      -
    • throwOnEmpty: boolean = false

      Wether to throw on an empty result or not

      -

    Returns Promise<SearchResult | LavaSearchResponse>

    LavaSearchresult

    -

    Example

    // use player.search() instead
    player.node.lavaSearch({ types: ["playlist", "album"], query: "Rick Astley", source: "spotify" }, interaction.user); -
    -
  • Private

    util function for handling message events from websocket

    -

    Parameters

    • d: string | Buffer

    Returns Promise<void>

  • Private

    util function for handling opening events from websocket

    -

    Returns Promise<void>

  • Raw Request util function

    -

    Parameters

    • endpoint: string

      endpoint string

      -
    • Optional modify: ModifyRequest

      modify the request

      -

    Returns Promise<{
    Β Β Β Β options: RequestInit & {
    Β Β Β Β Β Β Β Β extraQueryUrlParams?: URLSearchParams;
    Β Β Β Β Β Β Β Β path: string;
    Β Β Β Β };
    Β Β Β Β request: Response;
    }>

    object containing request and option information

    -

    Example

    player.node.rawRequest(`/loadtracks?identifier=Never gonna give you up`, (options) => options.method = "GET");
    -
    -
  • Reconnect to the lavalink node

    -

    Parameters

    • instaReconnect: boolean = false

    Returns void

    void

    -

    Default

    false wether to instantly try to reconnect
    -
    -

    Example

    await player.node.reconnect();
    -
    -
  • Makes an API call to the Node. Should only be used for manual parsing like for not supported plugins

    -

    Parameters

    • endpoint: string

      The endpoint that we will make the call to

      -
    • Optional modify: ModifyRequest

      Used to modify the request before being sent

      -
    • parseAsText: boolean = false

    Returns Promise<any>

    The returned data

    -

    Example

    player.node.request(`/loadtracks?identifier=Never gonna give you up`, (options) => options.method = "GET", false);
    -
    -
  • Search something raw on the node, please note only add tracks to players of that node

    -

    Parameters

    • query: SearchQuery

      SearchQuery Object

      -
    • requestUser: unknown

      Request User for creating the player(s)

      -
    • throwOnEmpty: boolean = false

      Wether to throw on an empty result or not

      -

    Returns Promise<SearchResult>

    Searchresult

    -

    Example

    // use player.search() instead
    player.node.search({ query: "Never gonna give you up by Rick Astley", source: "soundcloud" }, interaction.user);
    player.node.search({ query: "https://deezer.com/track/123456789" }, interaction.user); -
    -
  • Set the current sponsorblocks for the sponsorblock plugin

    -

    Parameters

    Returns Promise<void>

    void

    -

    Example

    // use it on the player via player.setSponsorBlock();
    const sponsorBlockSegments = await player.node.setSponsorBlock(player, ["sponsor", "selfpromo"]); -
    -
  • Sync the data of the player you make an action to lavalink to

    -

    Parameters

    Returns true | Promise<Player>

    boolean

    -
  • Update the Player State on the Lavalink Server

    -

    Parameters

    Returns Promise<LavalinkPlayer>

    result from lavalink

    -

    Example

    // use player.search() instead
    player.node.updatePlayer({ guildId: player.guildId, playerOptions: { paused: true } }); // example to pause it -
    -
  • Updates the session with and enables/disables resuming and timeout

    -

    Parameters

    • Optional resuming: boolean

      Whether resuming is enabled for this session or not

      -
    • Optional timeout: number

      The timeout in seconds (default is 60s)

      -

    Returns Promise<InvalidLavalinkRestRequest | Session>

    the result of the request

    -

    Example

    const node = player.node || lavalink.nodes.get("NODEID");
    await node?.updateSession(true, 180e3); // will enable resuming for 180seconds -
    -

Events

  • Emitted whenever the lyrics for a track got found

    -

    Parameters

    • player: Player

      The player that emitted the event

      -
    • track: Track

      The track that emitted the event

      -
    • payload: LyricsFoundEvent

      The payload of the event

      -

    Returns boolean

  • Emitted whenever a line of lyrics gets emitted

    -

    Parameters

    • player: Player

      The player that emitted the event

      -
    • track: Track

      The track that emitted the event

      -
    • payload: LyricsLineEvent

      The payload of the event

      -

    Returns boolean

  • Emitted whenever the lyrics for a track got not found

    -

    Parameters

    Returns boolean

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/classes/NodeManager.NodeManager.html b/docs/classes/NodeManager.NodeManager.html deleted file mode 100644 index 3548f31..0000000 --- a/docs/classes/NodeManager.NodeManager.html +++ /dev/null @@ -1,384 +0,0 @@ -NodeManager | lavalink-client

Hierarchy

  • EventEmitter
    • NodeManager

Constructors

Properties

LavalinkManager: LavalinkManager

The LavalinkManager that created this NodeManager

-
nodes: MiniMap<string, LavalinkNode> = ...

A map of all nodes in the nodeManager

-
captureRejectionSymbol: typeof captureRejectionSymbol

Value: Symbol.for('nodejs.rejection')

-

See how to write a custom rejection handler.

-

Since

v13.4.0, v12.16.0

-
captureRejections: boolean

Value: boolean

-

Change the default captureRejections option on all new EventEmitter objects.

-

Since

v13.4.0, v12.16.0

-
defaultMaxListeners: number

By default, a maximum of 10 listeners can be registered for any single -event. This limit can be changed for individual EventEmitter instances -using the emitter.setMaxListeners(n) method. To change the default -for allEventEmitter instances, the events.defaultMaxListenersproperty can be used. If this value is not a positive number, a RangeErroris thrown.

-

Take caution when setting the events.defaultMaxListeners because the -change affects allEventEmitter instances, including those created before -the change is made. However, calling emitter.setMaxListeners(n) still has -precedence over events.defaultMaxListeners.

-

This is not a hard limit. The EventEmitter instance will allow -more listeners to be added but will output a trace warning to stderr indicating -that a "possible EventEmitter memory leak" has been detected. For any singleEventEmitter, the emitter.getMaxListeners() and emitter.setMaxListeners()methods can be used to -temporarily avoid this warning:

-
import { EventEmitter } from 'node:events';
const emitter = new EventEmitter();
emitter.setMaxListeners(emitter.getMaxListeners() + 1);
emitter.once('event', () => {
// do stuff
emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0));
}); -
-

The --trace-warnings command-line flag can be used to display the -stack trace for such warnings.

-

The emitted warning can be inspected with process.on('warning') and will -have the additional emitter, type, and count properties, referring to -the event emitter instance, the event's name and the number of attached -listeners, respectively. -Its name property is set to 'MaxListenersExceededWarning'.

-

Since

v0.11.2

-
errorMonitor: typeof errorMonitor

This symbol shall be used to install a listener for only monitoring 'error'events. Listeners installed using this symbol are called before the regular'error' listeners are called.

-

Installing a listener using this symbol does not change the behavior once an'error' event is emitted. Therefore, the process will still crash if no -regular 'error' listener is installed.

-

Since

v13.6.0, v12.17.0

-

Methods

  • Alias for emitter.on(eventName, listener).

    -

    Parameters

    • eventName: string | symbol
    • listener: ((...args) => void)
        • (...args): void
        • Parameters

          • Rest ...args: any[]

          Returns void

    Returns NodeManager

    Since

    v0.1.26

    -
  • Disconnects all Nodes from lavalink ws sockets

    -

    Parameters

    • deleteAllNodes: boolean = false

      if the nodes should also be deleted from nodeManager.nodes

      -

    Returns Promise<number>

    amount of disconnected Nodes

    -
  • Returns an array listing the events for which the emitter has registered -listeners. The values in the array are strings or Symbols.

    -
    import { EventEmitter } from 'node:events';

    const myEE = new EventEmitter();
    myEE.on('foo', () => {});
    myEE.on('bar', () => {});

    const sym = Symbol('symbol');
    myEE.on(sym, () => {});

    console.log(myEE.eventNames());
    // Prints: [ 'foo', 'bar', Symbol(symbol) ] -
    -

    Returns (string | symbol)[]

    Since

    v6.0.0

    -
  • Returns the current max listener value for the EventEmitter which is either -set by emitter.setMaxListeners(n) or defaults to defaultMaxListeners.

    -

    Returns number

    Since

    v1.0.0

    -
  • Get the nodes sorted for the least usage, by a sorttype

    -

    Parameters

    • sortType: "memory" | "cpuLavalink" | "cpuSystem" | "calls" | "playingPlayers" | "players" = "players"

      The type of sorting to use

      -

    Returns LavalinkNode[]

  • Returns the number of listeners listening for the event named eventName. -If listener is provided, it will return how many times the listener is found -in the list of the listeners of the event.

    -

    Parameters

    • eventName: string | symbol

      The name of the event being listened for

      -
    • Optional listener: Function

      The event handler function

      -

    Returns number

    Since

    v3.2.0

    -
  • Returns a copy of the array of listeners for the event named eventName.

    -
    server.on('connection', (stream) => {
    console.log('someone connected!');
    });
    console.log(util.inspect(server.listeners('connection')));
    // Prints: [ [Function] ] -
    -

    Parameters

    • eventName: string | symbol

    Returns Function[]

    Since

    v0.1.26

    -
  • Adds the listener function to the beginning of the listeners array for the -event named eventName. No checks are made to see if the listener has -already been added. Multiple calls passing the same combination of eventNameand listener will result in the listener being added, and called, multiple -times.

    -
    server.prependListener('connection', (stream) => {
    console.log('someone connected!');
    }); -
    -

    Returns a reference to the EventEmitter, so that calls can be chained.

    -

    Parameters

    • eventName: string | symbol

      The name of the event.

      -
    • listener: ((...args) => void)

      The callback function

      -
        • (...args): void
        • Parameters

          • Rest ...args: any[]

          Returns void

    Returns NodeManager

    Since

    v6.0.0

    -
  • Adds a one-timelistener function for the event named eventName to the beginning of the listeners array. The next time eventName is triggered, this -listener is removed, and then invoked.

    -
    server.prependOnceListener('connection', (stream) => {
    console.log('Ah, we have our first user!');
    }); -
    -

    Returns a reference to the EventEmitter, so that calls can be chained.

    -

    Parameters

    • eventName: string | symbol

      The name of the event.

      -
    • listener: ((...args) => void)

      The callback function

      -
        • (...args): void
        • Parameters

          • Rest ...args: any[]

          Returns void

    Returns NodeManager

    Since

    v6.0.0

    -
  • Returns a copy of the array of listeners for the event named eventName, -including any wrappers (such as those created by .once()).

    -
    import { EventEmitter } from 'node:events';
    const emitter = new EventEmitter();
    emitter.once('log', () => console.log('log once'));

    // Returns a new Array with a function `onceWrapper` which has a property
    // `listener` which contains the original listener bound above
    const listeners = emitter.rawListeners('log');
    const logFnWrapper = listeners[0];

    // Logs "log once" to the console and does not unbind the `once` event
    logFnWrapper.listener();

    // Logs "log once" to the console and removes the listener
    logFnWrapper();

    emitter.on('log', () => console.log('log persistently'));
    // Will return a new Array with a single function bound by `.on()` above
    const newListeners = emitter.rawListeners('log');

    // Logs "log persistently" twice
    newListeners[0]();
    emitter.emit('log'); -
    -

    Parameters

    • eventName: string | symbol

    Returns Function[]

    Since

    v9.4.0

    -
  • Removes all listeners, or those of the specified eventName.

    -

    It is bad practice to remove listeners added elsewhere in the code, -particularly when the EventEmitter instance was created by some other -component or module (e.g. sockets or file streams).

    -

    Returns a reference to the EventEmitter, so that calls can be chained.

    -

    Parameters

    • Optional event: string | symbol

    Returns NodeManager

    Since

    v0.1.26

    -
  • By default EventEmitters will print a warning if more than 10 listeners are -added for a particular event. This is a useful default that helps finding -memory leaks. The emitter.setMaxListeners() method allows the limit to be -modified for this specific EventEmitter instance. The value can be set toInfinity (or 0) to indicate an unlimited number of listeners.

    -

    Returns a reference to the EventEmitter, so that calls can be chained.

    -

    Parameters

    • n: number

    Returns NodeManager

    Since

    v0.3.5

    -
  • Returns a copy of the array of listeners for the event named eventName.

    -

    For EventEmitters this behaves exactly the same as calling .listeners on -the emitter.

    -

    For EventTargets this is the only way to get the event listeners for the -event target. This is useful for debugging and diagnostic purposes.

    -
    import { getEventListeners, EventEmitter } from 'node:events';

    {
    const ee = new EventEmitter();
    const listener = () => console.log('Events are fun');
    ee.on('foo', listener);
    console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ]
    }
    {
    const et = new EventTarget();
    const listener = () => console.log('Events are fun');
    et.addEventListener('foo', listener);
    console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ]
    } -
    -

    Parameters

    • emitter: EventEmitter | _DOMEventTarget
    • name: string | symbol

    Returns Function[]

    Since

    v15.2.0, v14.17.0

    -
  • Returns the currently set max amount of listeners.

    -

    For EventEmitters this behaves exactly the same as calling .getMaxListeners on -the emitter.

    -

    For EventTargets this is the only way to get the max event listeners for the -event target. If the number of event handlers on a single EventTarget exceeds -the max set, the EventTarget will print a warning.

    -
    import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events';

    {
    const ee = new EventEmitter();
    console.log(getMaxListeners(ee)); // 10
    setMaxListeners(11, ee);
    console.log(getMaxListeners(ee)); // 11
    }
    {
    const et = new EventTarget();
    console.log(getMaxListeners(et)); // 10
    setMaxListeners(11, et);
    console.log(getMaxListeners(et)); // 11
    } -
    -

    Parameters

    • emitter: EventEmitter | _DOMEventTarget

    Returns number

    Since

    v19.9.0

    -
  • A class method that returns the number of listeners for the given eventNameregistered on the given emitter.

    -
    import { EventEmitter, listenerCount } from 'node:events';

    const myEmitter = new EventEmitter();
    myEmitter.on('event', () => {});
    myEmitter.on('event', () => {});
    console.log(listenerCount(myEmitter, 'event'));
    // Prints: 2 -
    -

    Parameters

    • emitter: EventEmitter

      The emitter to query

      -
    • eventName: string | symbol

      The event name

      -

    Returns number

    Since

    v0.9.12

    -

    Deprecated

    Since v3.2.0 - Use listenerCount instead.

    -
  • import { on, EventEmitter } from 'node:events';
    import process from 'node:process';

    const ee = new EventEmitter();

    // Emit later on
    process.nextTick(() => {
    ee.emit('foo', 'bar');
    ee.emit('foo', 42);
    });

    for await (const event of on(ee, 'foo')) {
    // The execution of this inner block is synchronous and it
    // processes one event at a time (even with await). Do not use
    // if concurrent execution is required.
    console.log(event); // prints ['bar'] [42]
    }
    // Unreachable here -
    -

    Returns an AsyncIterator that iterates eventName events. It will throw -if the EventEmitter emits 'error'. It removes all listeners when -exiting the loop. The value returned by each iteration is an array -composed of the emitted event arguments.

    -

    An AbortSignal can be used to cancel waiting on events:

    -
    import { on, EventEmitter } from 'node:events';
    import process from 'node:process';

    const ac = new AbortController();

    (async () => {
    const ee = new EventEmitter();

    // Emit later on
    process.nextTick(() => {
    ee.emit('foo', 'bar');
    ee.emit('foo', 42);
    });

    for await (const event of on(ee, 'foo', { signal: ac.signal })) {
    // The execution of this inner block is synchronous and it
    // processes one event at a time (even with await). Do not use
    // if concurrent execution is required.
    console.log(event); // prints ['bar'] [42]
    }
    // Unreachable here
    })();

    process.nextTick(() => ac.abort()); -
    -

    Parameters

    • emitter: EventEmitter
    • eventName: string

      The name of the event being listened for

      -
    • Optional options: StaticEventEmitterOptions

    Returns AsyncIterableIterator<any>

    that iterates eventName events emitted by the emitter

    -

    Since

    v13.6.0, v12.16.0

    -
  • Creates a Promise that is fulfilled when the EventEmitter emits the given -event or that is rejected if the EventEmitter emits 'error' while waiting. -The Promise will resolve with an array of all the arguments emitted to the -given event.

    -

    This method is intentionally generic and works with the web platform EventTarget interface, which has no special'error' event -semantics and does not listen to the 'error' event.

    -
    import { once, EventEmitter } from 'node:events';
    import process from 'node:process';

    const ee = new EventEmitter();

    process.nextTick(() => {
    ee.emit('myevent', 42);
    });

    const [value] = await once(ee, 'myevent');
    console.log(value);

    const err = new Error('kaboom');
    process.nextTick(() => {
    ee.emit('error', err);
    });

    try {
    await once(ee, 'myevent');
    } catch (err) {
    console.error('error happened', err);
    } -
    -

    The special handling of the 'error' event is only used when events.once()is used to wait for another event. If events.once() is used to wait for the -'error' event itself, then it is treated as any other kind of event without -special handling:

    -
    import { EventEmitter, once } from 'node:events';

    const ee = new EventEmitter();

    once(ee, 'error')
    .then(([err]) => console.log('ok', err.message))
    .catch((err) => console.error('error', err.message));

    ee.emit('error', new Error('boom'));

    // Prints: ok boom -
    -

    An AbortSignal can be used to cancel waiting for the event:

    -
    import { EventEmitter, once } from 'node:events';

    const ee = new EventEmitter();
    const ac = new AbortController();

    async function foo(emitter, event, signal) {
    try {
    await once(emitter, event, { signal });
    console.log('event emitted!');
    } catch (error) {
    if (error.name === 'AbortError') {
    console.error('Waiting for the event was canceled!');
    } else {
    console.error('There was an error', error.message);
    }
    }
    }

    foo(ee, 'foo', ac.signal);
    ac.abort(); // Abort waiting for the event
    ee.emit('foo'); // Prints: Waiting for the event was canceled! -
    -

    Parameters

    • emitter: _NodeEventTarget
    • eventName: string | symbol
    • Optional options: StaticEventEmitterOptions

    Returns Promise<any[]>

    Since

    v11.13.0, v10.16.0

    -
  • Parameters

    • emitter: _DOMEventTarget
    • eventName: string
    • Optional options: StaticEventEmitterOptions

    Returns Promise<any[]>

  • import { setMaxListeners, EventEmitter } from 'node:events';

    const target = new EventTarget();
    const emitter = new EventEmitter();

    setMaxListeners(5, target, emitter); -
    -

    Parameters

    • Optional n: number

      A non-negative number. The maximum number of listeners per EventTarget event.

      -
    • Rest ...eventTargets: (EventEmitter | _DOMEventTarget)[]

    Returns void

    Since

    v15.4.0

    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/classes/Player.Player.html b/docs/classes/Player.Player.html deleted file mode 100644 index 306663c..0000000 --- a/docs/classes/Player.Player.html +++ /dev/null @@ -1,297 +0,0 @@ -Player | lavalink-client

Constructors

Properties

LavalinkManager: LavalinkManager

circular reference to the lavalink Manager from the Player for easier use

-
connected: boolean = false

The Player Connection's State (from Lavalink)

-
createdTimeStamp: number

When the player was created [Timestamp in Ms] (from lavalink)

-
data: Record<string, unknown> = {}

Custom data for the player

-
filterManager: FilterManager

Filter Manager per player

-
guildId: string

The Guild Id of the Player

-
lastPosition: number = 0

The current Positin of the player (from Lavalink)

-
lastPositionChange: number = null

The timestamp when the last position change update happened

-
lastSavedPosition: number = 0
lavalinkVolume: number = 100

The Volume Lavalink actually is outputting

-

The lavalink node assigned the the player, don't change it manually

-
options: PlayerOptions

Player options currently used, mutation doesn't affect player's state

-
paused: boolean = false

States if the Bot is paused or not

-
ping: {
Β Β Β Β lavalink: number;
Β Β Β Β ws: number;
} = ...

Player's ping

-

Type declaration

  • lavalink: number
  • ws: number
playing: boolean = false

States if the Bot is supposed to be outputting audio

-
queue: Queue

The queue from the player

-
repeatMode: RepeatMode = "off"

Repeat Mode of the Player

-
textChannelId: string = null

The Text Channel Id of the Player

-

Voice Server Data (from Lavalink)

-
voiceChannelId: string = null

The Voice Channel Id of the Player

-
volume: number = 100

The Display Volume

-

Accessors

Methods

  • Move the player on a different Audio-Node

    -

    Parameters

    Returns Promise<string>

  • Parameters

    • data: {
      Β Β Β Β selfDeaf?: boolean;
      Β Β Β Β selfMute?: boolean;
      Β Β Β Β voiceChannelId?: string;
      }
      • Optional selfDeaf?: boolean
      • Optional selfMute?: boolean
      • Optional voiceChannelId?: string

    Returns Promise<Player>

  • Destroy the player and disconnect from the voice channel

    -

    Parameters

    • Optional reason: string
    • disconnect: boolean = true

    Returns Promise<Player>

  • Disconnects the Player from the Voice Channel, but keeps the player in the cache

    -

    Parameters

    • force: boolean = false

      If false it throws an error, if player thinks it's already disconnected

      -

    Returns Promise<Player>

  • Get the current lyrics of the track currently playing on the guild

    -

    Parameters

    • Optional skipTrackSource: boolean

      If true, it will not try to get the lyrics from the track source

      -

    Returns Promise<LyricsResult>

    The current lyrics

    -

    Example

    const lyrics = await player.getCurrentLyrics();
    -
    -
  • Get the lyrics of a specific track

    -

    Parameters

    • track: Track

      The track to get the lyrics for

      -
    • Optional skipTrackSource: boolean

      If true, it will not try to get the lyrics from the track source

      -

    Returns Promise<LyricsResult>

    The lyrics of the track

    -

    Example

    const lyrics = await player.getLyrics(player.queue.tracks[0], true);
    -
    -
  • Play the next track from the queue / a specific track, with playoptions for Lavalink

    -

    Parameters

    Returns any

  • Set the Volume for the Player

    -

    Parameters

    • volume: number

      The Volume in percent

      -
    • ignoreVolumeDecrementer: boolean = false

      If it should ignore the volumedecrementer option

      -

    Returns Promise<Player>

  • Skip the current song, or a specific amount of songs

    -

    Parameters

    • skipTo: number = 0
    • throwError: boolean = true

    Returns Promise<Player>

  • Clears the queue and stops playing. Does not destroy the Player and not leave the channel

    -

    Parameters

    • clearQueue: boolean = true
    • executeAutoplay: boolean = false

    Returns Promise<Player>

  • Subscribe to the lyrics event on a specific guild to active live lyrics events

    -

    Returns Promise<any>

    The unsubscribe function

    -

    Example

    const lyrics = await player.subscribeLyrics();
    -
    -
  • Unsubscribe from the lyrics event on a specific guild to disable live lyrics events

    -

    Parameters

    • guildId: string

      The guild id to unsubscribe from

      -

    Returns Promise<any>

    The unsubscribe function

    -

    Example

    const lyrics = await player.unsubscribeLyrics();
    -
    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/classes/Queue.DefaultQueueStore.html b/docs/classes/Queue.DefaultQueueStore.html deleted file mode 100644 index d0971ba..0000000 --- a/docs/classes/Queue.DefaultQueueStore.html +++ /dev/null @@ -1,197 +0,0 @@ -DefaultQueueStore | lavalink-client

Implements

Constructors

Properties

Methods

Constructors

Properties

data: MiniMap<unknown, unknown> = ...

Methods

  • Set the queue for a guild

    -

    Parameters

    • guildId: any

      The guild ID

      -
    • valueToStringify: any

      The queue to set

      -

    Returns Promise<MiniMap<unknown, unknown>>

    The queue for the guild

    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/classes/Queue.Queue.html b/docs/classes/Queue.Queue.html deleted file mode 100644 index 3a28910..0000000 --- a/docs/classes/Queue.Queue.html +++ /dev/null @@ -1,220 +0,0 @@ -Queue | lavalink-client

Constructors

Properties

QueueSaver: QueueSaver = null
current: Track = null
guildId: string = ""
managerUtils: ManagerUtils = ...
options: {
Β Β Β Β maxPreviousTracks: number;
} = ...

Type declaration

  • maxPreviousTracks: number
previous: Track[] = []
queueChanges: QueueChangesWatcher
tracks: (UnresolvedTrack | Track)[] = []
utils: {
Β Β Β Β destroy: (() => Promise<unknown>);
Β Β Β Β save: (() => Promise<unknown>);
Β Β Β Β sync: ((override?, dontSyncCurrent?) => Promise<void>);
Β Β Β Β toJSON: (() => StoredQueue);
Β Β Β Β totalDuration: (() => number);
} = ...

Utils for a Queue

-

Type declaration

  • destroy: (() => Promise<unknown>)
      • (): Promise<unknown>
      • Returns Promise<unknown>

  • save: (() => Promise<unknown>)
      • (): Promise<unknown>
      • Save the current cached Queue on the database/server (overides the server)

        -

        Returns Promise<unknown>

  • sync: ((override?, dontSyncCurrent?) => Promise<void>)
      • (override?, dontSyncCurrent?): Promise<void>
      • Sync the current queue database/server with the cached one

        -

        Parameters

        • override: boolean = true
        • dontSyncCurrent: boolean = true

        Returns Promise<void>

  • toJSON: (() => StoredQueue)
      • (): StoredQueue
      • Returns StoredQueue

        The Queue, but in a raw State, which allows easier handling for the QueueStoreManager

        -
  • totalDuration: (() => number)
      • (): number
      • Get the Total Duration of the Queue-Songs summed up

        -

        Returns number

Methods

  • Add a Track to the Queue, and after saved in the "db" it returns the amount of the Tracks

    -

    Parameters

    Returns any

    Queue-Size (for the next Tracks)

    -
  • Remove stuff from the queue.tracks array

    -
      -
    • single Track | UnresolvedTrack
    • -
    • multiple Track | UnresovedTrack
    • -
    • at the index or multiple indexes
    • -
    -

    Type Parameters

    Parameters

    • removeQueryTrack: T

    Returns Promise<{
    Β Β Β Β removed: (UnresolvedTrack | Track)[];
    }>

    null (if nothing was removed) / { removed } where removed is an array with all removed elements

    -

    Example

    // remove single track

    const track = player.queue.tracks[4];
    await player.queue.remove(track);

    // if you already have the index you can straight up pass it too
    await player.queue.remove(4);


    // if you want to remove multiple tracks, e.g. from position 4 to position 10 you can do smt like this
    await player.queue.remove(player.queue.tracks.slice(4, 10)) // get's the tracks from 4 - 10, which then get's found in the remove function to be removed

    // I still highly suggest to use .splice!

    await player.queue.splice(4, 10); // removes at index 4, 10 tracks

    await player.queue.splice(1, 1); // removes at index 1, 1 track

    await player.queue.splice(4, 0, ...tracks) // removes 0 tracks at position 4, and then inserts all tracks after position 4. -
    -
  • Shifts the previous array, to return the last previous track & thus remove it from the previous queue

    -

    Returns Promise<Track>

    Example

    // example on how to play the previous track again
    const previous = await player.queue.shiftPrevious(); // get the previous track and remove it from the previous queue array!!
    if(!previous) return console.error("No previous track found");
    await player.play({ clientTrack: previous }); // play it again -
    -
  • Shuffles the current Queue, then saves it

    -

    Returns Promise<number>

    Amount of Tracks in the Queue

    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/classes/Queue.QueueSaver.html b/docs/classes/Queue.QueueSaver.html deleted file mode 100644 index fd3cc26..0000000 --- a/docs/classes/Queue.QueueSaver.html +++ /dev/null @@ -1,196 +0,0 @@ -QueueSaver | lavalink-client

Constructors

Properties

Methods

Constructors

Properties

The queue store manager

-
options: {
Β Β Β Β maxPreviousTracks: number;
}

The options for the queue saver

-

Type declaration

  • maxPreviousTracks: number

Methods

  • Delete the queue for a guild

    -

    Parameters

    • guildId: string

      The guild ID

      -

    Returns Promise<unknown>

    The queue for the guild

    -
  • Set the queue for a guild

    -

    Parameters

    • guildId: string

      The guild ID

      -
    • valueToStringify: StoredQueue

      The queue to set

      -

    Returns Promise<unknown>

    The queue for the guild

    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/classes/Utils.ManagerUtils.html b/docs/classes/Utils.ManagerUtils.html deleted file mode 100644 index 9c623d2..0000000 --- a/docs/classes/Utils.ManagerUtils.html +++ /dev/null @@ -1,197 +0,0 @@ -ManagerUtils | lavalink-client

Constructors

Properties

LavalinkManager: LavalinkManager = null

Methods

  • Parameters

    Returns {
    Β Β Β Β query: string;
    Β Β Β Β source: any;
    Β Β Β Β types: string[];
    }

    • query: string
    • source: any
    • types: string[]
  • Parameters

    Returns {
    Β Β Β Β extraQueryUrlParams: URLSearchParams;
    Β Β Β Β query: string;
    Β Β Β Β source: any;
    }

    • extraQueryUrlParams: URLSearchParams
    • query: string
    • source: any

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/classes/Utils.MiniMap.html b/docs/classes/Utils.MiniMap.html deleted file mode 100644 index e3a94a2..0000000 --- a/docs/classes/Utils.MiniMap.html +++ /dev/null @@ -1,214 +0,0 @@ -MiniMap | lavalink-client

Class MiniMap<K, V>

Type Parameters

  • K

  • V

Hierarchy

  • Map<K, V>
    • MiniMap

Constructors

Properties

[toStringTag]: string
constructor: MiniMapConstructor
size: number

Returns

the number of elements in the Map.

-
[species]: MapConstructor

Methods

  • Returns an iterable of entries in the map.

    -

    Returns IterableIterator<[K, V]>

  • Returns void

  • Parameters

    • key: K

    Returns boolean

    true if an element in the Map existed and has been removed, or false if the element does not exist.

    -
  • Returns an iterable of key, value pairs for every entry in the map.

    -

    Returns IterableIterator<[K, V]>

  • Identical to -Array.filter(), -but returns a MiniMap instead of an Array.

    -

    Type Parameters

    • K2

    Parameters

    • fn: ((value, key, miniMap) => key is K2)

      The function to test with (should return boolean)

      -
        • (value, key, miniMap): key is K2
        • Parameters

          • value: V
          • key: K
          • miniMap: MiniMap<K, V>

          Returns key is K2

    Returns MiniMap<K2, V>

    Example

    miniMap.filter(user => user.username === 'Bob');
    -
    -
  • Type Parameters

    • V2

    Parameters

    • fn: ((value, key, miniMap) => value is V2)
        • (value, key, miniMap): value is V2
        • Parameters

          • value: V
          • key: K
          • miniMap: MiniMap<K, V>

          Returns value is V2

    Returns MiniMap<K, V2>

  • Parameters

    • fn: ((value, key, miniMap) => boolean)
        • (value, key, miniMap): boolean
        • Parameters

          • value: V
          • key: K
          • miniMap: MiniMap<K, V>

          Returns boolean

    Returns MiniMap<K, V>

  • Type Parameters

    • This

    • K2

    Parameters

    • fn: ((this, value, key, miniMap) => key is K2)
        • (this, value, key, miniMap): key is K2
        • Parameters

          • this: This
          • value: V
          • key: K
          • miniMap: MiniMap<K, V>

          Returns key is K2

    • thisArg: This

    Returns MiniMap<K2, V>

  • Type Parameters

    • This

    • V2

    Parameters

    • fn: ((this, value, key, miniMap) => value is V2)
        • (this, value, key, miniMap): value is V2
        • Parameters

          • this: This
          • value: V
          • key: K
          • miniMap: MiniMap<K, V>

          Returns value is V2

    • thisArg: This

    Returns MiniMap<K, V2>

  • Type Parameters

    • This

    Parameters

    • fn: ((this, value, key, miniMap) => boolean)
        • (this, value, key, miniMap): boolean
        • Parameters

          • this: This
          • value: V
          • key: K
          • miniMap: MiniMap<K, V>

          Returns boolean

    • thisArg: This

    Returns MiniMap<K, V>

  • Executes a provided function once per each key/value pair in the Map, in insertion order.

    -

    Parameters

    • callbackfn: ((value, key, map) => void)
        • (value, key, map): void
        • Parameters

          • value: V
          • key: K
          • map: Map<K, V>

          Returns void

    • Optional thisArg: any

    Returns void

  • Returns a specified element from the Map object. If the value that is associated to the provided key is an object, then you will get a reference to that object and any change made to that object will effectively modify it inside the Map.

    -

    Parameters

    • key: K

    Returns V

    Returns the element associated with the specified key. If no element is associated with the specified key, undefined is returned.

    -
  • Parameters

    • key: K

    Returns boolean

    boolean indicating whether an element with the specified key exists or not.

    -
  • Returns an iterable of keys in the map

    -

    Returns IterableIterator<K>

  • Maps each item to another value into an array. Identical in behavior to -Array.map().

    -

    Type Parameters

    • T

    Parameters

    • fn: ((value, key, miniMap) => T)

      Function that produces an element of the new array, taking three arguments

      -
        • (value, key, miniMap): T
        • Parameters

          • value: V
          • key: K
          • miniMap: MiniMap<K, V>

          Returns T

    Returns T[]

    Example

    miniMap.map(user => user.tag);
    -
    -
  • Type Parameters

    • This

    • T

    Parameters

    • fn: ((this, value, key, miniMap) => T)
        • (this, value, key, miniMap): T
        • Parameters

          • this: This
          • value: V
          • key: K
          • miniMap: MiniMap<K, V>

          Returns T

    • thisArg: This

    Returns T[]

  • Adds a new element with a specified key and value to the Map. If an element with the same key already exists, the element will be updated.

    -

    Parameters

    • key: K
    • value: V

    Returns MiniMap<K, V>

  • Returns an iterable of values in the map

    -

    Returns IterableIterator<V>

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/Constants.DebugEvents.html b/docs/enums/Constants.DebugEvents.html deleted file mode 100644 index 4c374e9..0000000 --- a/docs/enums/Constants.DebugEvents.html +++ /dev/null @@ -1,214 +0,0 @@ -DebugEvents | lavalink-client

Enumeration Members

AutoplayExecution: "AutoplayExecution"
AutoplayNoSongsAdded: "AutoplayNoSongsAdded"
AutoplayThresholdSpamLimiter: "AutoplayThresholdSpamLimiter"
BandcampSearchLokalEngine: "BandcampSearchLokalEngine"
BuildTrackError: "BuildTrackError"
DeleteSponsorBlock: "DeleteSponsorBlock"
FailedToConnectToNodes: "FailedToConnectToNodes"
GetClosestTrackFailed: "GetClosestTrackFailed"
HeartBeatTriggered: "HeartBeatTriggered"
LavaSearchNothingFound: "LavaSearchNothingFound"
NoAudioDebug: "NoAudioDebug"
NoSocketOnDestroy: "NoSocketOnDestroy"
PlayerAutoReconnect: "PlayerAutoReconnect"
PlayerChangeNode: "PlayerChangeNode"
PlayerCreateNodeNotFound: "PlayerCreateNodeNotFound"
PlayerDeleteInsteadOfDestroy: "PlayerDeleteInsteadOfDestroy"
PlayerDestroyingSomewhereElse: "PlayerDestroyingSomewhereElse"
PlayerPlayQueueEmptyTimeoutClear: "PlayerPlayQueueEmptyTimeoutClear"
PlayerPlayUnresolvedTrack: "PlayerPlayUnresolvedTrack"
PlayerPlayUnresolvedTrackFailed: "PlayerPlayUnresolvedTrackFailed"
PlayerPlayWithTrackReplace: "PlayerPlayWithTrackReplace"
PlayerUpdateFilterFixApply: "PlayerUpdateFilterFixApply"
PlayerUpdateNoPlayer: "PlayerUpdateNoPlayer"
PlayerUpdateSuccess: "PlayerUpdateSuccess"
PlayerVolumeAsFilter: "PlayerVolumeAsFilter"
QueueEnded: "QueueEnded"
ResumingFetchingError: "ResumingFetchingError"
SearchNothingFound: "SearchNothingFound"
SetSponsorBlock: "SetSponsorBlock"
SocketTerminateHeartBeatTimeout: "SocketTerminateHeartBeatTimeout"
TrackEndReplaced: "TrackEndReplaced"
TrackErrorMaxTracksErroredPerTime: "TrackErrorMaxTracksErroredPerTime"
TrackStartNewSongsOnly: "TrackStartNewSongsOnly"
TrackStartNoTrack: "TrackStartNoTrack"
TrackStuckMaxTracksErroredPerTime: "TrackStuckMaxTracksErroredPerTime"
TransformRequesterFunctionFailed: "TransformRequesterFunctionFailed"
TriggerQueueEmptyInterval: "TriggerQueueEmptyInterval"
TryingConnectWhileConnected: "TryingConnectWhileConnected"
ValidatingBlacklistLinks: "ValidatingBlacklistLinks"
ValidatingWhitelistLinks: "ValidatingWhitelistLinks"

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/enums/Constants.DestroyReasons.html b/docs/enums/Constants.DestroyReasons.html deleted file mode 100644 index 913c834..0000000 --- a/docs/enums/Constants.DestroyReasons.html +++ /dev/null @@ -1,186 +0,0 @@ -DestroyReasons | lavalink-client

Enumeration DestroyReasons

Enumeration Members

ChannelDeleted: "ChannelDeleted"
DisconnectAllNodes: "DisconnectAllNodes"
Disconnected: "Disconnected"
LavalinkNoVoice: "LavalinkNoVoice"
NodeDeleted: "NodeDeleted"
NodeDestroy: "NodeDestroy"
NodeReconnectFail: "NodeReconnectFail"
PlayerReconnectFail: "PlayerReconnectFail"
QueueEmpty: "QueueEmpty"
ReconnectAllNodes: "ReconnectAllNodes"
TrackErrorMaxTracksErroredPerTime: "TrackErrorMaxTracksErroredPerTime"
TrackStuckMaxTracksErroredPerTime: "TrackStuckMaxTracksErroredPerTime"

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/functions/CustomSearches_BandCampSearch.bandCampSearch.html b/docs/functions/CustomSearches_BandCampSearch.bandCampSearch.html deleted file mode 100644 index 49d8a2e..0000000 --- a/docs/functions/CustomSearches_BandCampSearch.bandCampSearch.html +++ /dev/null @@ -1,174 +0,0 @@ -bandCampSearch | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/functions/Utils.parseLavalinkConnUrl.html b/docs/functions/Utils.parseLavalinkConnUrl.html deleted file mode 100644 index 1141a02..0000000 --- a/docs/functions/Utils.parseLavalinkConnUrl.html +++ /dev/null @@ -1,175 +0,0 @@ -parseLavalinkConnUrl | lavalink-client

Function parseLavalinkConnUrl

  • Parses Node Connection Url: "lavalink://:<nodeAuthorization(Password)>@:"

    -

    Parameters

    • connectionUrl: string

    Returns {
    Β Β Β Β authorization: string;
    Β Β Β Β host: string;
    Β Β Β Β id: string;
    Β Β Β Β port: number;
    }

    • authorization: string
    • host: string
    • id: string
    • port: number

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/functions/Utils.queueTrackEnd.html b/docs/functions/Utils.queueTrackEnd.html deleted file mode 100644 index e5ec605..0000000 --- a/docs/functions/Utils.queueTrackEnd.html +++ /dev/null @@ -1,174 +0,0 @@ -queueTrackEnd | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 78cf2e8..0000000 --- a/docs/index.html +++ /dev/null @@ -1,619 +0,0 @@ -lavalink-client

lavalink-client

Lavalink Client

Easy, flexible and feature-rich lavalink@v4 Client. Both for Beginners and Proficients.

-
-

- Made with love in Austria - Made with TypeScript -

-

- - NPM version - - - NPM downloads - - - Get Started Now - -

-

- npm install lavalink-client -

-
- -

Install

Latest stable Version: v2.1.3

-
πŸ‘‰ via NPM - -
npm install --save lavalink-client
-
-

Dev Version: (Current)

-
npm install tomato6966/lavalink-client
-
-
- -
πŸ‘‰ via YARN - -
yarn add lavalink-client
-
-

Dev Version: (Current)

-
yarn add tomato6966/lavalink-client
-
-
- -

Documentation

Check out the Documentation | or the TSDocumentation for Examples, and detailled Docs, and to figure out how to get started. note: it's not fully done yet (see the docs)

- -

Used in:

-

Features

    -
  • πŸ’― Lavalink v4 Supported only (with Lavalink Plugins)

    -
  • -
  • βœ… Player-Destroy Reasons like:

    -
      -
    • Channel got deleted, Player got disconnected...
    • -
    -
  • -
  • ✨ Choose able queue stores (maps, collections, redis, databases, ...)

    -
      -
    • You can create your own queueStore, thus make it easy to sync queues accross multiple connections (e.g. dashboard-bot)
    • -
    • Automated Queue Sync methods
    • -
    • Automated unresolveable Tracks (save the queries as Partial Track Objects -> Fetch the tracks only once they are gonna play)
    • -
    -
  • -
  • 😍 Included Filter & Equalizer Management

    -
  • -
  • πŸ‘ Multiple Player Options for easier use

    -
      -
    • onDisconnect -> Player Destroy / auto Reconnect
    • -
    • onEmptyQueue -> Player Destroy / leave After x Time
    • -
    • instaFixFilter -> seek the player after applying a filter, to instantly apply it's effect (only works for little-durational-songs)
    • -
    • applyVolumeAsFilter -> instead of using lavalink.volume, it uses lavalink.filters.volume which is much different!
    • -
    -
  • -
  • πŸ›‘οΈ Lavalink Validations

    -
      -
    • It only let's you use the filters / plugins / sources, if Lavalink actually has it enabled
    • -
    -
  • -
  • πŸ›‘οΈ Client Validations

    -
      -
    • Allows you to whitelist links and even blacklist links / words / domain names, so that it doesn't allow requests you don't want!
    • -
    • Checks almost all Lavalink Requests for out of bound errors, right before the request is made to prevent process breaking errors.
    • -
    -
  • -
  • πŸ§‘β€πŸ’» Memory friendly and easy style

    -
      -
    • Only the required data is displayed, and the store-way & types match Lavalink#IMPLEMENTATION.md
    • -
    -
  • -
  • 😘 Automated Handlings

    -
      -
    • Skips the songs, on TrackEnd, TrackStuck, TrackError,
    • -
    • Destroys the player on channeldelete
    • -
    • Pauses / resumes the player if it get's muted / unmuted (server-wide) [soon]
    • -
    • ...
    • -
    -
  • -
  • 😁 Much much more!

    -
  • -
-
-

Sample Configuration

Complete Configuration Example, with all available options - -
import { LavalinkManager, QueueChangesWatcher, QueueStoreManager } from "lavalink-client";
import { RedisClientType } from "redis"; // example for custom queue store
import { Client, GatewayIntentBits } from "discord.js"; // example for a discord bot

// you might want to extend the types of the client, to bind lavalink to it.
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildVoiceStates,
]
});

const previouslyUsedSessions = new Map<string, string>(); //nodeManager.on("connect", node => previouslyUsedSessions.set(node.id, node.sessionId))

client.lavalink = new LavalinkManager({
nodes: [
{
authorization: "localhoist",
host: "localhost",
port: 2333,
id: "testnode",
// get the previously used session, to restart with "resuming" enabled
sessionId: previouslyUsedSessions.get("testnode"),
requestSignalTimeoutMS: 3000,
closeOnError: true,
heartBeatInterval: 30_000,
enablePingOnStatsCheck: true,
retryDelay: 10e3,
secure: false,
retryAmount: 5,
}
],
sendToShard: (guildId, payload) => client.guilds.cache.get(guildId)?.shard?.send(payload),
autoSkip: true,
client: { // client: client.user
id: envConfig.clientId, // REQUIRED! (at least after the .init)
username: "TESTBOT",
},
autoSkipOnResolveError: true, // skip song, if resolving an unresolved song fails
emitNewSongsOnly: true, // don't emit "looping songs"
playerOptions: {
// These are the default prevention methods
maxErrorsPerTime: {
threshold: 10_000,
maxAmount: 3,
},
// only allow an autoplay function to execute, if the previous function was longer ago than this number.
minAutoPlayMs: 10_000,

applyVolumeAsFilter: false,
clientBasedPositionUpdateInterval: 50, // in ms to up-calc player.position
defaultSearchPlatform: "ytmsearch",
volumeDecrementer: 0.75, // on client 100% == on lavalink 75%
requesterTransformer: requesterTransformer,
onDisconnect: {
autoReconnect: true, // automatically attempts a reconnect, if the bot disconnects from the voice channel, if it fails, it get's destroyed
destroyPlayer: false // overrides autoReconnect and directly destroys the player if the bot disconnects from the vc
},
onEmptyQueue: {
destroyAfterMs: 30_000, // 0 === instantly destroy | don't provide the option, to don't destroy the player
autoPlayFunction: autoPlayFunction,
},
useUnresolvedData: true,
},
queueOptions: {
maxPreviousTracks: 10,
// only needed if you want and need external storage, don't provide if you don't need to
queueStore: new myCustomStore(client.redis), // client.redis = new redis()
// only needed, if you want to watch changes in the queue via a custom class,
queueChangesWatcher: new myCustomWatcher(client)
},
linksAllowed: true,
// example: don't allow p*rn / youtube links., you can also use a regex pattern if you want.
// linksBlacklist: ["porn", "youtube.com", "youtu.be"],
linksBlacklist: [],
linksWhitelist: [],
advancedOptions: {
enableDebugEvents: true,
maxFilterFixDuration: 600_000, // only allow instafixfilterupdate for tracks sub 10mins
debugOptions: {
noAudio: false,
playerDestroy: {
dontThrowError: false,
debugLog: false,
},
logCustomSearches: false,
}
}
});


client.on("raw", d => client.lavalink.sendRawData(d)); // send raw data to lavalink-client to handle stuff

client.on("ready", () => {
client.lavalink.init(client.user); // init lavalink
});

// for the custom queue Store create a redis instance
client.redis = createClient({ url: "redis://localhost:6379", password: "securepass" });
client.redis.connect();


// Custom external queue Store
export class myCustomStore implements QueueStoreManager {
private redis:RedisClientType;
constructor(redisClient:RedisClientType) {
this.redis = redisClient;
}
async get(guildId): Promise<any> {
return await this.redis.get(this.id(guildId));
}
async set(guildId, stringifiedQueueData): Promise<any> {
return await this.redis.set(this.id(guildId), stringifiedQueueData);
}
async delete(guildId): Promise<any> {
return await this.redis.del(this.id(guildId));
}
async parse(stringifiedQueueData): Promise<Partial<StoredQueue>> {
return JSON.parse(stringifiedQueueData);
}
async stringify(parsedQueueData): Promise<any> {
return JSON.stringify(parsedQueueData);
}
private id(guildId) {
return `lavalinkqueue_${guildId}`; // transform the id to your belikings
}
}

// Custom Queue Watcher Functions
export class myCustomWatcher implements QueueChangesWatcher {
constructor() {
}
shuffled(guildId, oldStoredQueue, newStoredQueue) {
console.log(`${this.client.guilds.cache.get(guildId)?.name || guildId}: Queue got shuffled`)
}
tracksAdd(guildId, tracks, position, oldStoredQueue, newStoredQueue) {
console.log(`${this.client.guilds.cache.get(guildId)?.name || guildId}: ${tracks.length} Tracks got added into the Queue at position #${position}`);
}
tracksRemoved(guildId, tracks, position, oldStoredQueue, newStoredQueue) {
console.log(`${this.client.guilds.cache.get(guildId)?.name || guildId}: ${tracks.length} Tracks got removed from the Queue at position #${position}`);
}
} -
-
- - - -
import { LavalinkManager } from "lavalink-client";
import { Client, GatewayIntentBits } from "discord.js"; // example for a discord bot

// you might want to extend the types of the client, to bind lavalink to it.
const client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildVoiceStates,
]
});

// create instance
client.lavalink = new LavalinkManager({
nodes: [
{
authorization: "localhoist",
host: "localhost",
port: 2333,
id: "testnode",
}
],
sendToShard: (guildId, payload) => client.guilds.cache.get(guildId)?.shard?.send(payload),
autoSkip: true,
client: {
id: envConfig.clientId,
username: "TESTBOT",
},
});

client.on("raw", d => client.lavalink.sendRawData(d)); // send raw data to lavalink-client to handle stuff

client.on("ready", () => {
client.lavalink.init(client.user); // init lavalink
});
-
-

All Events:

On Lavalink-Manager:

-

Player related logs

-
-
    -
  • playerCreate ➑️ (player) => {}
  • -
  • playerDestroy ➑️ (player, reason) => {}
  • -
  • playerDisconnect ➑️ (player, voiceChannelId) => {}
  • -
  • playerMove ➑️ (player, oldChannelId, newChannelId) => {}
      -
    • Updating the voice channel is handled by the client automatically
    • -
    -
  • -
  • playerSocketClosed ➑️ (player, payload) => {}
  • -
-
-

Track / Manager related logs

-
-
    -
  • trackStart ➑️ (player, track, payload) => {}
  • -
  • trackStuck ➑️ (player, track, payload) => {}
  • -
  • trackError ➑️ (player, track, payload) => {}
  • -
  • trackEnd ➑️ (player, track, payload) => {}
  • -
  • queueEnd ➑️ (player, track, payload) => {}
  • -
  • playerUpdate ➑️ (player) => {}
  • -
-
client.lavalink.on("create", (node, payload) => {
console.log(`The Lavalink Node #${node.id} connected`);
});
// for all node based errors:
client.lavalink.on("error", (node, error, payload) => {
console.error(`The Lavalink Node #${node.id} errored: `, error);
console.error(`Error-Payload: `, payload)
}); -
-

On Node-Manager:

    -
  • raw ➑️ (node, payload) => {}
  • -
  • disconnect ➑️ (node, reason) => {}
  • -
  • connect ➑️ (node) => {}
  • -
  • reconnecting ➑️ (node) => {}
  • -
  • create ➑️ (node) => {}
  • -
  • destroy ➑️ (node) => {}
  • -
  • error ➑️ (node, error, payload) => {}
  • -
  • resumed ➑️ (node, payload, players) => {}
      -
    • Resuming needs to be handled manually by you (aka add the players to the manager)
    • -
    -
  • -
  • e.g. of listening to node events:
  • -
-
client.lavalink.nodeManager.on("create", (node, payload) => {
console.log(`The Lavalink Node #${node.id} connected`);
});
// for all node based errors:
client.lavalink.nodeManager.on("error", (node, error, payload) => {
console.error(`The Lavalink Node #${node.id} errored: `, error);
console.error(`Error-Payload: `, payload)
}); -
-

How to log queue logs?

-

When creating the manager, add the option: queueOptions.queueChangesWatcher: new myCustomWatcher(botClient) -E.g:

-
-
import { QueueChangesWatcher, LavalinkManager } from "lavalink-client";

class myCustomWatcher implements QueueChangesWatcher {
constructor(client) {
this.client = client;
}
shuffled(guildId, oldStoredQueue, newStoredQueue) {
console.log(`${this.client.guilds.cache.get(guildId)?.name || guildId}: Queue got shuffled`)
}
tracksAdd(guildId, tracks, position, oldStoredQueue, newStoredQueue) {
console.log(`${this.client.guilds.cache.get(guildId)?.name || guildId}: ${tracks.length} Tracks got added into the Queue at position #${position}`);
}
tracksRemoved(guildId, tracks, position, oldStoredQueue, newStoredQueue) {
console.log(`${this.client.guilds.cache.get(guildId)?.name || guildId}: ${tracks.length} Tracks got removed from the Queue at position #${position}`);
}
}

client.lavalink = new LavalinkManager({
// ... other options
queueOptions: {
queueChangesWatcher: new myCustomWatcher(client)
}
}) -
-

How to do resuming

    -
  1. You need to enable resuming on a connected Lavalink node : node.updateSession(true, 360e3)
  2. -
  3. The NodeManager#resumed event will emit when the node resumes, you retrieves all fetchedPlayers (fetched by the client), and thus all you need to do is re-create all player instances (and possibly the queues too)
  4. -
-
    -
  • For that is the queuestore useful
  • -
  • To save the playerData you can utilize smt like playerUpdate event.
  • -
-

Resuming full Example

Full code sample: can be found on the Testbot in here

-
// but here is the schema:
client.lavalink.nodeManager.on("connect", (node) => node.updateSession(true, 360e3));
client.lavalink.nodeManager.on("resumed", (node, payload, fetchedPlayers) => {
// create players:
for(const fetchedPlayer of fetchedPlayers) {
// fetchedPlayer is the live data from lavalink
// saved Player data is the config you should save in a database / file or smt
const savedPlayerData = await getSavedPlayerData(fetchedPlayer.guildId);
const player = client.lavalink.createPlayer({
guildId: fetchedPlayer.guildId,
});
// if lavalink says the bot got disconnected, we can skip the resuming, or force reconnect whatever you want!, here we choose to not do anything and thus delete the saved player data
if(!data.state.connected) {
console.log("skipping resuming player, because it already disconnected");
await deletedSavedPlayerData(data.guildId);
continue;
}
// now you can create the player based on the live and saved data
const player = client.lavalink.createPlayer({
guildId: data.guildId,
node: node.id,
// you need to update the volume of the player by the volume of lavalink which might got decremented by the volume decrementer
volume: client.lavalink.options.playerOptions?.volumeDecrementer
? Math.round(data.volume / client.lavalink.options.playerOptions.volumeDecrementer)
: data.volume,
// all of the following options are needed to be provided by some sort of player saving
voiceChannelId: dataOfSaving.voiceChannelId,
textChannelId: dataOfSaving.textChannelId,
// all of the following options can either be saved too, or you can use pre-defined defaults
selfDeaf: dataOfSaving.options?.selfDeaf || true,
selfMute: dataOfSaving.options?.selfMute || false,

applyVolumeAsFilter: dataOfSaving.options.applyVolumeAsFilter,
instaUpdateFiltersFix: dataOfSaving.options.instaUpdateFiltersFix,
vcRegion: dataOfSaving.options.vcRegion,
});

// player.voice = data.voice;
// normally just player.voice is enough, but if you restart the entire bot, you need to create a new connection, thus call player.connect();
await player.connect();

player.filterManager.data = data.filters; // override the filters data
await player.queue.utils.sync(true, false); // get the queue data including the current track (for the requester)
// override the current track with the data from lavalink
if(data.track) player.queue.current = client.lavalink.utils.buildTrack(data.track, player.queue.current?.requester || client.user);
// override the position of the player
player.lastPosition = data.state.position;
player.lastPositionChange = Date.now();
// you can also override the ping of the player, or wait about 30s till it's done automatically
player.ping.lavalink = data.state.ping;
// important to have skipping work correctly later
player.paused = data.paused;
player.playing = !data.paused && !!data.track;
// That's about it
}
})
client.lavalink.on("playerUpdate", (oldPlayer, newPlayer) => { // automatically sync player data on updates. if you don'T want to save everything you can instead also just save the data on playerCreate
setSavedPlayerData(newPlayer.toJSON());
});
// delete the player again
client.lavalink.on("playerDestroy", (player) => {
deleteSavedPlayerData(player.guildId);
}) -
-
-

How to use flowertts with custom options

    -
  • First enable flowertts within the lava-src plugin
  • -
  • Then make sure to pass through the extraQueryUrlParams object
  • -
-
const query = interaction.options.getString("text");
const voice = interaction.options.getString("voice");

const extraParams = new URLSearchParams();
if(voice) extraParams.append(`voice`, voice);

// all params for flowertts can be found here: https://flowery.pw/docs
const response = await player.search({
query: `${query}`,
extraQueryUrlParams: extraParams, // as of my knowledge this is currently only used for flowertts, adjusting the playback url dynamically mid-request
source: "ftts"
}, interaction.user); -
-
-

UpdateLog

Version 1.2.0

    -
  • Added player.stopPlaying(): When executed it clears the Queue and stops playing, without destroying the Player
  • -
  • Adjusted Player.skip()
      -
    • Added throwError Property to: player.skip(skipTo?:number = 0, throwError?:boolean = true).
        -
      • If throwError = false, and no more tracks are in the queue, it won't throw an error and "ignore it". same thing as stopPlaying.
      • -
      -
    • -
    -
  • -
  • Added all Events and Methods from the SponsorBlock Plugin.
      -
    • It also validates if the plugin is in the bot, in order so that you can use the functions:
    • -
    • player.getSponsorBlock() / node.getSponsorBlock()
    • -
    • player.setSponsorBlock(segments:SponsorBlockSegment[]) / node.setSponsorBlock(segments:SponsorBlockSegment[])
    • -
    • player.deleteSponsorBlock() / node.deleteSponsorBlock()
        -
      • That Plugin adds following Events to the Manager: "SegmentsLoaded", "SegmentSkipped", "ChapterStarted", "ChaptersLoaded"
      • -
      -
    • -
    -
  • -
  • Example Bot show example in autoplayFunction how to "disable" / "enable" Autoplay with bot data variables.
  • -
  • Added ManagerOptions#emitNewSongsOnly. If set to true, it won't emit "trackStart" Event, when track.loop is active, or the new current track == the previous (current) track.
  • -
  • Added ManagerOptions#linksBlacklist which allows user to specify an array of regExp / strings to match query strings (for links / words) and if a match happens it doesn't allow the request (blacklist)
  • -
  • Added ManagerOptions#linksWhitelist which allows user to specify an array of regExp / strings to match query strings (for links only) and if a match does NOT HAPPEN it doesn't allow the request (whitelist)
  • -
  • Added ManagerOptions#linksAllowed if set to false, it does not allow requests which are links
  • -
  • Moved ManaagerOptions#debugOptions to ManaagerOptions#advancedOptions.debugOptions
  • -
-

Version 1.2.1

    -
  • Adjusted player.stopPlaying()
      -
    • There are now following parameters. stopPlaying(clearQueue:boolean = true, executeAutoplay:boolean = false).
        -
      • On Default it now clears the queue and stops playing. Also it does not execute Autoplay on default. IF you want the function to behave differently, you can use the 2 states for that.
      • -
      -
    • -
    • Fixed that it looped the current track if repeatmode === "track" / "queue". (it stops playing and loop stays)
    • -
    -
  • -
  • Implemented a parseLavalinkConnUrl(connectionUrl:string) Util Function.
      -
    • It allows you to parse Lavalink Connection Data of a Lavalink Connection Url. -Pattern: lavalink://<nodeId>:<nodeAuthorization(Password)>@<NodeHost>:<NodePort>
    • -
    • Note that the nodeId and NodeAuthorization must be encoded via encodeURIComponents before you provide it into the function.
    • -
    • The function will return the following: { id: string, authorization: string, host: string, port: number }
    • -
    • Example: parseLavalinkConnUrl("lavalink://LavalinkNode_1:strong%23password1@localhost:2345") will give you: -{ id: "LavalinkNode_1", authorization: "strong#password1", host: "localhost", port: 2345 }
        -
      • Note that the password "strong#password1" when encoded turns into "strong%23password1". For more information check the example bot
      • -
      -
    • -
    -
  • -
-

Version 2.0.0

    -
  • Lavalink v4 released, adjusted all features from the stable release, to support it in this client!
  • -
-

# How to load tracks / stop playing has changed for the node.updatePlayer rest endpoint the Client handles it automatically
- await player.node.updatePlayer({ encodedTrack?: Base64|null, track?: Track|UnresolvedTrack, identifer?: string });
+ await player.node.updatePlayer({ track: { encoded?: Base64|null, identifier?: string }, clientTrack?: Track|UnresolvedTrack });

# To satisfy the changes from lavalink updatePlayer endpoint, player play also got adjusted for that (Most users won't need this feature!)
- await player.play({ encodedTrack?: Base64|null, track?: Track|UnresolvedTrack, identifer?: string });
+ await player.play({ track: { encoded?: Base64|null, identifier?: string }, clientTrack?: Track|UnresolvedTrack });
# However it' still recommended to do it like that:
# first add tracks to the queue
+ await player.queue.add(Track: Track|UnresolvedTrack|(Track|UnresolvedTrack)[]);
# then play the next track from the queue
+ await player.play();

# Node Resuming got supported
# First enable it by doing:
+ await player.node.updateSession(true, 360_000);
# then when reconnecting to the node add to the node.createeOptions the sessionId: "" of the previous session
# and after connecting the nodeManager.on("resumed", (node, payload, players) => {}) will be executed, where you can sync the players!

# Node Options got adjusted # It's a property not a method should be treated readonly
+ node.resuming: { enabled: boolean, timeout: number | null };

# Player function got added to stop playing without disconnecting
+ player.stopPlaying(clearQueue:boolean = true, executeAutoplay:boolean = false);

# Node functions for sponsorBlock Plugin (https://github.com/topi314/Sponsorblock-Plugin) got added
+ deleteSponsorBlock(player:Player)
+ setSponsorBlock(player:Player, segments: ["sponsor", "selfpromo", "interaction", "intro", "outro", "preview", "music_offtopic", "filler"])
# only works if you ever set the sponsor blocks once before
+ getSponsorBlock(player:Player)
# Corresponding nodeManager events got added:
+ nodeManager.on("ChapterStarted");
+ nodeManager.on("ChaptersLoaded");
+ nodeManager.on("SegmentsLoaded");
+ nodeManager.on("SegmentSkipped");
# Filters sending got supported for filters.pluginFilters key from lavalink api: https://lavalink.dev/api/rest.html#plugin-filters
# Native implementation for lavaSearch plugin officially updated https://github.com/topi314/LavaSearch
# Native implementation for lavaSrc plugin officially updated https://github.com/topi314/LavaSrc including floweryTTS
# couple other changes, which aren't noticeable by you.

# Lavalink track.userData got added (basically same feature as my custom pluginInfo.clientData system)
# You only get the track.userData data through playerUpdate object -
-

In one of the next updates, there will be more queueWatcher options and more custom nodeevents to trace

-

Most features of this update got tested, but if you encounter any bugs feel free to open an issue!

-

Version 2.1.0

    -
  • Fixed that, if you skip and have trackloop enabled, it doesn't skip the track
      -
    • I fixed that in the past, but for some reason i removed the fix on accident ig.
    • -
    -
  • -
  • Reworked the Filter Manager for custom filters via LavalinkFilterPlugin / LavalinkLavaDSPX-Plugin
  • -
  • Note that the LavalinkLavaDSPX-Plugin is by a Community Member of Lavalink and UNOFFICIAL
      -
    • They now have individual state-variabels (booleans): player.filterManager.filters.lavalinkLavaDspxPlugin
        -
      • player.filterManager.filters.lavalinkLavaDspxPlugin.echo
      • -
      • player.filterManager.filters.lavalinkLavaDspxPlugin.normalization
      • -
      • player.filterManager.filters.lavalinkLavaDspxPlugin.highPass
      • -
      • player.filterManager.filters.lavalinkLavaDspxPlugin.lowPass
      • -
      -
    • -
    • and for: player.filterManager.filters.lavalinkFilterPlugin (this plugins seems to not work on v4 at the moment)
        -
      • player.filterManager.filters.lavalinkLavaDspxPlugin.echo
      • -
      • player.filterManager.filters.lavalinkLavaDspxPlugin.reverb
      • -
      -
    • -
    • They also now have individual state-changing-methods: player.filterManager.lavalinkLavaDspxPlugin
        -
      • player.filterManager.lavalinkLavaDspxPlugin.toggleEcho(decay:number, echoLength:number)
      • -
      • player.filterManager.lavalinkLavaDspxPlugin.toggleNormalization(maxAmplitude:number, adaptive:boolean)
      • -
      • player.filterManager.lavalinkLavaDspxPlugin.toggleHighPass(boostFactor:number, cutoffFrequency:number)
      • -
      • player.filterManager.lavalinkLavaDspxPlugin.toggleLowPass(boostFactor:number, cutoffFrequency:number)
      • -
      -
    • -
    • and for: player.filterManager.lavalinkFilterPlugin
        -
      • player.filterManager.lavalinkFilterPlugin.toggleEcho(delay:number, decay:number)
      • -
      • player.filterManager.lavalinkFilterPlugin.toggleReverb(delays:number[], gains:number[])
      • -
      -
    • -
    -
  • -
-

Version 2.1.1

    -
  • Enforce link searches for users with following searchPlatform Options: "http" | "https" | "link" | "uri"
      -
    • Additionally strongend the code behind that
    • -
    -
  • -
  • Added searchPlatform for local tracks (aka files on the lavalink server...): "local"
  • -
-

Version 2.2.0

    -
  • Changed console.error to throw error on queue.utils.sync if no data was provided/found
  • -
  • Changed undici.fetch to native fetch, but requires nodejs v18+ to support other runtimes, e.g. bun
  • -
  • Added sourceNames for bandcamp (from native lavalink) if it's supported it will use lavalink'S search, else the client search on player.search({ source: "bandcamp" }) (you can also use bcsearch or bc)
  • -
  • Added sourceName for phsearch from the dunktebot plugin, released in v.1.7.0
  • -
  • Support for youtube still going via the youtube-source plugin (disable youtube for lavalink, and use the plugin instead)
  • -
  • Exporting events
  • -
  • Added new debugOption: logCustomSearches
  • -
  • (Next version update i will remove the internal interval for position update, to calculations)
  • -
-

Version 2.2.1

    -
  • Player position is now calculated instead of using intervals

    -
  • -
  • Instaplayer fix update now requires quite good internet connection on the lavalink server due to removal of intervals for updating player.position (everything above 300mbps should be good)

    -
  • -
  • Internal updates for handling query params and url-requests (url-parsing) to fix quite few bugs and make the code more readable, now you don't have to ever provide stuff encoded via encodeURIComponent anymore.

    -
  • -
  • Added a bunch of jsdoc information, to make the autogenerated docs more accurate!

    -
  • -
  • Because of the adjustments from the encoding, you now need to pass url params for stuff like flowery tts like this:

    -
  • -
-
const query = interaction.options.getString("text");
const voice = interaction.options.getString("voice");

const extraParams = new URLSearchParams();
if(voice) extraParams.append(`voice`, voice);

// all params for flowertts can be found here: https://flowery.pw/docs
const response = await player.search({
query: `${query}`,
extraQueryUrlParams: extraParams, // as of my knowledge this is currently only used for flowertts, adjusting the playback url dynamically mid-request
source: "ftts"
}, interaction.user); -
-

Version 2.2.2

    -
  • Fixed a bug in player.pause() where when you pause the track longer than the left over currentTrack.info.duration is, then it would auto skip the track on resume.
  • -
  • Fixed the handling of the previous track array ( sometimes it adds "null", due to lavalink errors )
  • -
  • Added new functions for the queue, to make migrations and coding easier for beginners,
      -
    • const previousTrack = await player.queue.shiftPrevious() -> removes the previously played track from the player.queue.previous array, and returns it, so you can use it for something like "play previous"
        -
      • Neat 1-liner: await player.queue.shiftPrevious().then(clientTrack => player.play({ clientTrack }))
      • -
      -
    • -
    • await player.queue.remove(removeQuery) -> Remove function to remove stuff from the queue.tracks array., following params are valid:
        -
      • Array of Tracks / UnresolvedTracks, e.g. await player.queue.remove( player.queue.tracks.slice(4, 10) ) (would remove tracks from #4 (incl.) to #10 (excl.) aka those indexes: 4, 5, 6, 7, 8, 9 - this is how array.slice works)
      • -
      • Single Track / UnresolveTrack, e.g. await player.queue.remove(player.queue.tracks[player.queue.tracks.length - 1]); (would remove the last track)
      • -
      • Array of track-indexes, e.g. await player.queue.remove([1, 4, 5]) (Would remove track #1, #4 and #5)
      • -
      • Single track index, e.g. await player.queue.remove(5) (would remove the #5 track from the queue)
      • -
      • NOTE: I still highly recommend, to use the player.queue.splice() function for mutating the queue:
          -
        • it is possible to remove single tracks, multiple tracks and insert tracks at specific positions!
        • -
        -
      • -
      • the remove function haven't been fully tested yet
      • -
      -
    • -
    • Added track.pluginInfo.clientData?.previousTrack handling:
        -
      • If a track has this property in the pluginInfo in the clientData object set to "true" then it won't get added to the previous track array. Example:
      • -
      -
    • -
    -
  • -
-
const previousTrack = await player.queue.shiftPrevious();
if(previousTrack) {
const previousClientData = previousTrack.pluginInfo.clientData || {};
previousTrack.pluginInfo.clientData = { previousTrack: true, ...previousClientData }
await player.play({ clientTrack: previousTrack });
} -
-

Version 2.3.0

    -
  • Added a heartbeat + ping-pong system to check wether the client is still connected to the node, if the node doesn't receive a ping in time, it will destroy the node and thus cause a reconnect.

    -
  • -
  • For that following new nodeOptions got added:

    -
      -
    • enablePingOnStatsCheck: boolean (default: true)
    • -
    • heartBeatInterval: number (default: 30_000)
    • -
    • Added new Property on a node:
        -
      • isAlive: boolean (if it's false, then it's not connected to the node anymore, and will AUTOMATICALLY Cause a reconnect within the heartBeatInterval)
      • -
      • heartBeatPing: number (the ping it takes lavalink to respond to the acknowledge of heartbeat)
      • -
      -
    • -
    • Added new NodeManager Events:
        -
      • reconnectinprogress (when the client internal reconnect system is triggered, the actual reconnect gets triggered by the node after your retryDelay)
      • -
      -
    • -
    -
  • -
  • Refactored internal code for better readability and maintainability

    -
  • -
  • Removed several intermediate promises

    -
  • -
  • Added new types for better type safety

    -
  • -
  • Updated types for better type safety

    -
  • -
  • Reduced default retryDelay from 30s to 10s

    -
  • -
  • Added example on the testbot how to store player data easily and how to use the resume feature, and updated the Resuming Example in the README jump by adding a full example

    -
  • -
  • "Breaking Change" for providing track / clientTrack for player.play()

    -
      -
    • Instead of adding the track to the queue and skipping to it, they get directly played by lavalink through replacing the track.
    • -
    • To make this work, we need to pass the transformed requester object to the userData of the track. (all handled by the client)
    • -
    • This is technically better than skipping to a track but i wanted to point it out.
        -
      • You can play with clientTrack like this: player.play({ clientTrack: searchResult.tracks[0] })
      • -
      • You can play with just track like this: player.play({ track: { encoded: "base64string..." }, requester: interaction.user })
      • -
      -
    • -
    -
  • -
-

Version 2.3.1

    -
  • Fixed Export, where types of Manager weren't exported correctly
  • -
  • Fixed Dist Folder containing old, left over not needed files
  • -
-

Version 2.3.2 / Version 2.3.3

    -
  • Added Missing function calls for the QueueWatcher of tracksRemoved within the queue.remove() function:
  • -
  • Added new DestroyReasons:
      -
    • TrackStuckMaxTracksErroredPerTime
    • -
    • TrackErrorMaxTracksErroredPerTime
    • -
    -
  • -
  • Added new Prevention Systems for CrashbackLoop recognitions:
      -
    • this.NodeManager.LavalinkManager.options.playerOptions.maxErrorsPerTime:
        -
      • object: { threshold: number, maxAmount: number } (set threshold to 0 or maxAmount to -1 to disable)
      • -
      • Default: { threshold: 10_000, maxAmount: 3 }
      • -
      • If there are trackError or trackStuck Events > maxAmount within the given treshhold, the player will be destroyed prevent more errors and thus potential ratelimits.
      • -
      -
    • -
    • this.NodeManager.LavalinkManager.options.playerOptions.minAutoPlayMs:
        -
      • number: 10_000 (default)
      • -
      • If there is an AutoplayFunction, and it get's executed before that threshold, than it won't trigger the autoplay function again. (this is ignored for when the player is skipped)
      • -
      • This prevents autoplays from happeneing on a crashbackloop
      • -
      • Set to 0 to disable
      • -
      -
    • -
    -
  • -
  • Added new Event "debug":
      -
    • LavalinkManager#debug(event:DebugEvents, data:{ state: "log" | "warn" | "error", message:string, functionLayer:string, error?:Error })
    • -
    • This function Event will emit, when the following option is set to true: LavalinkManager.options.advancedOptions.enableDebugEvents
    • -
    • You can use the DebugEvents Enum to listen to specific events and only show those you care
    • -
    • You can filter for the data.state to only show the certain log-level state
    • -
    • The functionLayer string will show you where the debug event was triggered from
    • -
    • The message string will show what is debugged
    • -
    • The error object will show you the error that happened, if there was one.
    • -
    • *This took quite some time to code, and i am sure there are still many logs you might want, feel free to open an issue
    • -
    -
  • -
-

Version 2.3.4

    -
  • Improved the package bundling with tsc-alias, to export files with file types
  • -
  • Added package.json to exported dist, for easier parsing ability and compatibility with older and newer node versions
  • -
  • Added error handling for resolving unresolved tracks on trackend
  • -
-

Version 2.3.5

    -
  • FIXED not able to import :: Accidentally removed tsc-alias configuration, which made importing not work
  • -
  • FIXED autoplay not working :: Accidentally added an invalid if statement, which made autoplay not working anymore (during the if statement to not prevent autoplay spam)
  • -
  • Added a new AutoplayExecution Debug Log
  • -
  • Added more samples to the Testbot related configuration
  • -
-

Version 2.3.6

    -
  • Added Lyrics Support:
      -
    • New Player Functions:
        -
      • const lyrics = await player.getCurrentLyrics(false); -> Get lyrics of current playing track
      • -
      • const lyrics = await player.getLyrics(track, true); -> Get lyrics of a specific track with ignoring it's sources
      • -
      • player.subscribeLyrics(); -> *Subscribe this guild to retrieve "live lyrics" as the song is *playing
      • -
      • player.unsubscribeLyrics(); -> *Unsubscribe from lyrics
      • -
      -
    • -
    • New Node Functions ( same as from player, just so you can access it without player too ):*
        -
      • const lyrics = await player.node.lyrics.getCurrent(player.guildId, false);
      • -
      • const lyrics = await player.node.lyrics.get(track, true);
      • -
      • player.node.lyrics.subscribe(player.guildId);
      • -
      • player.node.lyrics.unsubscribe(player.guildId);
      • -
      -
    • -
    • New Manager Event sfor Lyrics:
        -
      • lavalink.on("LyricsLine", (player, track, lyricsLine) => {});
      • -
      • lavalink.on("LyricsFound", (player, track, data) => {});
      • -
      • lavalink.on("LyricsNotFound", (player, track, lyricsLine) => {});
      • -
      -
    • -
    -
  • -
-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Filters.ChannelMixFilter.html b/docs/interfaces/Types_Filters.ChannelMixFilter.html deleted file mode 100644 index 8da1a9a..0000000 --- a/docs/interfaces/Types_Filters.ChannelMixFilter.html +++ /dev/null @@ -1,185 +0,0 @@ -ChannelMixFilter | lavalink-client

Mixes both channels (left and right), with a configurable factor on how much each channel affects the other. -With the defaults, both channels are kept independent of each other. -Setting all factors to 0.5 means both channels get the same audio.

-
interface ChannelMixFilter {
Β Β Β Β leftToLeft?: number;
Β Β Β Β leftToRight?: number;
Β Β Β Β rightToLeft?: number;
Β Β Β Β rightToRight?: number;
}

Properties

leftToLeft?: number

The left to left channel mix factor (0.0 ≀ x ≀ 1.0)

-
leftToRight?: number

The left to right channel mix factor (0.0 ≀ x ≀ 1.0)

-
rightToLeft?: number

The right to left channel mix factor (0.0 ≀ x ≀ 1.0)

-
rightToRight?: number

The right to right channel mix factor (0.0 ≀ x ≀ 1.0)

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Filters.DistortionFilter.html b/docs/interfaces/Types_Filters.DistortionFilter.html deleted file mode 100644 index acda541..0000000 --- a/docs/interfaces/Types_Filters.DistortionFilter.html +++ /dev/null @@ -1,183 +0,0 @@ -DistortionFilter | lavalink-client

Distortion effect. It can generate some pretty unique audio effects.

-
interface DistortionFilter {
Β Β Β Β cosOffset?: number;
Β Β Β Β cosScale?: number;
Β Β Β Β offset?: number;
Β Β Β Β scale?: number;
Β Β Β Β sinOffset?: number;
Β Β Β Β sinScale?: number;
Β Β Β Β tanOffset?: number;
Β Β Β Β tanScale?: number;
}

Properties

cosOffset?: number
cosScale?: number
offset?: number
scale?: number
sinOffset?: number
sinScale?: number
tanOffset?: number
tanScale?: number

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Filters.EQBand.html b/docs/interfaces/Types_Filters.EQBand.html deleted file mode 100644 index 26b84d9..0000000 --- a/docs/interfaces/Types_Filters.EQBand.html +++ /dev/null @@ -1,183 +0,0 @@ -EQBand | lavalink-client

There are 15 bands (0-14) that can be changed. -"gain" is the multiplier for the given band. -The default value is 0. - Valid values range from -0.25 to 1.0, where -0.25 means the given band is completely muted, and 0.25 means it is doubled. -Modifying the gain could also change the volume of the output.

-
interface EQBand {
Β Β Β Β band: number | IntegerNumber;
Β Β Β Β gain: number | FloatNumber;
}

Properties

Properties

band: number | IntegerNumber

On what band position (0-14) it should work

-
gain: number | FloatNumber

The gain (-0.25 to 1.0)

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Filters.FilterData.html b/docs/interfaces/Types_Filters.FilterData.html deleted file mode 100644 index 8a37feb..0000000 --- a/docs/interfaces/Types_Filters.FilterData.html +++ /dev/null @@ -1,185 +0,0 @@ -FilterData | lavalink-client

Filter Data stored in the Client and partially sent to Lavalink

-
interface FilterData {
Β Β Β Β channelMix?: ChannelMixFilter;
Β Β Β Β distortion?: DistortionFilter;
Β Β Β Β karaoke?: KaraokeFilter;
Β Β Β Β lowPass?: LowPassFilter;
Β Β Β Β pluginFilters?: {
Β Β Β Β Β Β Β Β echo?: {
Β Β Β Β Β Β Β Β Β Β Β Β decay?: number;
Β Β Β Β Β Β Β Β Β Β Β Β echoLength?: number;
Β Β Β Β Β Β Β Β };
Β Β Β Β Β Β Β Β high-pass?: {
Β Β Β Β Β Β Β Β Β Β Β Β boostFactor?: number;
Β Β Β Β Β Β Β Β Β Β Β Β cutoffFrequency?: number;
Β Β Β Β Β Β Β Β };
Β Β Β Β Β Β Β Β lavalink-filter-plugin?: {
Β Β Β Β Β Β Β Β Β Β Β Β echo?: {
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β decay?: number;
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β delay?: number;
Β Β Β Β Β Β Β Β Β Β Β Β };
Β Β Β Β Β Β Β Β Β Β Β Β reverb?: {
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β delays?: number[];
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β gains?: number[];
Β Β Β Β Β Β Β Β Β Β Β Β };
Β Β Β Β Β Β Β Β };
Β Β Β Β Β Β Β Β low-pass?: {
Β Β Β Β Β Β Β Β Β Β Β Β boostFactor?: number;
Β Β Β Β Β Β Β Β Β Β Β Β cutoffFrequency?: number;
Β Β Β Β Β Β Β Β };
Β Β Β Β Β Β Β Β normalization?: {
Β Β Β Β Β Β Β Β Β Β Β Β adaptive?: boolean;
Β Β Β Β Β Β Β Β Β Β Β Β maxAmplitude?: number;
Β Β Β Β Β Β Β Β };
Β Β Β Β };
Β Β Β Β rotation?: RotationFilter;
Β Β Β Β timescale?: TimescaleFilter;
Β Β Β Β tremolo?: TremoloFilter;
Β Β Β Β vibrato?: VibratoFilter;
Β Β Β Β volume?: number;
}

Hierarchy

Properties

channelMix?: ChannelMixFilter
distortion?: DistortionFilter
karaoke?: KaraokeFilter
lowPass?: LowPassFilter
pluginFilters?: {
Β Β Β Β echo?: {
Β Β Β Β Β Β Β Β decay?: number;
Β Β Β Β Β Β Β Β echoLength?: number;
Β Β Β Β };
Β Β Β Β high-pass?: {
Β Β Β Β Β Β Β Β boostFactor?: number;
Β Β Β Β Β Β Β Β cutoffFrequency?: number;
Β Β Β Β };
Β Β Β Β lavalink-filter-plugin?: {
Β Β Β Β Β Β Β Β echo?: {
Β Β Β Β Β Β Β Β Β Β Β Β decay?: number;
Β Β Β Β Β Β Β Β Β Β Β Β delay?: number;
Β Β Β Β Β Β Β Β };
Β Β Β Β Β Β Β Β reverb?: {
Β Β Β Β Β Β Β Β Β Β Β Β delays?: number[];
Β Β Β Β Β Β Β Β Β Β Β Β gains?: number[];
Β Β Β Β Β Β Β Β };
Β Β Β Β };
Β Β Β Β low-pass?: {
Β Β Β Β Β Β Β Β boostFactor?: number;
Β Β Β Β Β Β Β Β cutoffFrequency?: number;
Β Β Β Β };
Β Β Β Β normalization?: {
Β Β Β Β Β Β Β Β adaptive?: boolean;
Β Β Β Β Β Β Β Β maxAmplitude?: number;
Β Β Β Β };
}

Type declaration

  • Optional echo?: {
    Β Β Β Β decay?: number;
    Β Β Β Β echoLength?: number;
    }
    • Optional decay?: number
    • Optional echoLength?: number
  • Optional high-pass?: {
    Β Β Β Β boostFactor?: number;
    Β Β Β Β cutoffFrequency?: number;
    }
    • Optional boostFactor?: number
    • Optional cutoffFrequency?: number
  • Optional lavalink-filter-plugin?: {
    Β Β Β Β echo?: {
    Β Β Β Β Β Β Β Β decay?: number;
    Β Β Β Β Β Β Β Β delay?: number;
    Β Β Β Β };
    Β Β Β Β reverb?: {
    Β Β Β Β Β Β Β Β delays?: number[];
    Β Β Β Β Β Β Β Β gains?: number[];
    Β Β Β Β };
    }
    • Optional echo?: {
      Β Β Β Β decay?: number;
      Β Β Β Β delay?: number;
      }
      • Optional decay?: number
      • Optional delay?: number
    • Optional reverb?: {
      Β Β Β Β delays?: number[];
      Β Β Β Β gains?: number[];
      }
      • Optional delays?: number[]
      • Optional gains?: number[]
  • Optional low-pass?: {
    Β Β Β Β boostFactor?: number;
    Β Β Β Β cutoffFrequency?: number;
    }
    • Optional boostFactor?: number
    • Optional cutoffFrequency?: number
  • Optional normalization?: {
    Β Β Β Β adaptive?: boolean;
    Β Β Β Β maxAmplitude?: number;
    }
    • Optional adaptive?: boolean
    • Optional maxAmplitude?: number
rotation?: RotationFilter
timescale?: TimescaleFilter
tremolo?: TremoloFilter
vibrato?: VibratoFilter
volume?: number

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Filters.KaraokeFilter.html b/docs/interfaces/Types_Filters.KaraokeFilter.html deleted file mode 100644 index 393df77..0000000 --- a/docs/interfaces/Types_Filters.KaraokeFilter.html +++ /dev/null @@ -1,183 +0,0 @@ -KaraokeFilter | lavalink-client

Uses equalization to eliminate part of a band, usually targeting vocals.

-
interface KaraokeFilter {
Β Β Β Β filterBand?: number;
Β Β Β Β filterWidth?: number;
Β Β Β Β level?: number;
Β Β Β Β monoLevel?: number;
}

Properties

filterBand?: number

The filter band (in Hz)

-
filterWidth?: number

The filter width

-
level?: number

The level (0 to 1.0 where 0.0 is no effect and 1.0 is full effect)

-
monoLevel?: number

The mono level (0 to 1.0 where 0.0 is no effect and 1.0 is full effect)

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Filters.LavalinkFilterData.html b/docs/interfaces/Types_Filters.LavalinkFilterData.html deleted file mode 100644 index 0e176bc..0000000 --- a/docs/interfaces/Types_Filters.LavalinkFilterData.html +++ /dev/null @@ -1,186 +0,0 @@ -LavalinkFilterData | lavalink-client

Actual Filter Data sent to Lavalink

-
interface LavalinkFilterData {
Β Β Β Β channelMix?: ChannelMixFilter;
Β Β Β Β distortion?: DistortionFilter;
Β Β Β Β equalizer?: EQBand[];
Β Β Β Β karaoke?: KaraokeFilter;
Β Β Β Β lowPass?: LowPassFilter;
Β Β Β Β pluginFilters?: {
Β Β Β Β Β Β Β Β echo?: {
Β Β Β Β Β Β Β Β Β Β Β Β decay?: number;
Β Β Β Β Β Β Β Β Β Β Β Β echoLength?: number;
Β Β Β Β Β Β Β Β };
Β Β Β Β Β Β Β Β high-pass?: {
Β Β Β Β Β Β Β Β Β Β Β Β boostFactor?: number;
Β Β Β Β Β Β Β Β Β Β Β Β cutoffFrequency?: number;
Β Β Β Β Β Β Β Β };
Β Β Β Β Β Β Β Β lavalink-filter-plugin?: {
Β Β Β Β Β Β Β Β Β Β Β Β echo?: {
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β decay?: number;
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β delay?: number;
Β Β Β Β Β Β Β Β Β Β Β Β };
Β Β Β Β Β Β Β Β Β Β Β Β reverb?: {
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β delays?: number[];
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β gains?: number[];
Β Β Β Β Β Β Β Β Β Β Β Β };
Β Β Β Β Β Β Β Β };
Β Β Β Β Β Β Β Β low-pass?: {
Β Β Β Β Β Β Β Β Β Β Β Β boostFactor?: number;
Β Β Β Β Β Β Β Β Β Β Β Β cutoffFrequency?: number;
Β Β Β Β Β Β Β Β };
Β Β Β Β Β Β Β Β normalization?: {
Β Β Β Β Β Β Β Β Β Β Β Β adaptive?: boolean;
Β Β Β Β Β Β Β Β Β Β Β Β maxAmplitude?: number;
Β Β Β Β Β Β Β Β };
Β Β Β Β };
Β Β Β Β rotation?: RotationFilter;
Β Β Β Β timescale?: TimescaleFilter;
Β Β Β Β tremolo?: TremoloFilter;
Β Β Β Β vibrato?: VibratoFilter;
Β Β Β Β volume?: number;
}

Hierarchy

Properties

channelMix?: ChannelMixFilter
distortion?: DistortionFilter
equalizer?: EQBand[]
karaoke?: KaraokeFilter
lowPass?: LowPassFilter
pluginFilters?: {
Β Β Β Β echo?: {
Β Β Β Β Β Β Β Β decay?: number;
Β Β Β Β Β Β Β Β echoLength?: number;
Β Β Β Β };
Β Β Β Β high-pass?: {
Β Β Β Β Β Β Β Β boostFactor?: number;
Β Β Β Β Β Β Β Β cutoffFrequency?: number;
Β Β Β Β };
Β Β Β Β lavalink-filter-plugin?: {
Β Β Β Β Β Β Β Β echo?: {
Β Β Β Β Β Β Β Β Β Β Β Β decay?: number;
Β Β Β Β Β Β Β Β Β Β Β Β delay?: number;
Β Β Β Β Β Β Β Β };
Β Β Β Β Β Β Β Β reverb?: {
Β Β Β Β Β Β Β Β Β Β Β Β delays?: number[];
Β Β Β Β Β Β Β Β Β Β Β Β gains?: number[];
Β Β Β Β Β Β Β Β };
Β Β Β Β };
Β Β Β Β low-pass?: {
Β Β Β Β Β Β Β Β boostFactor?: number;
Β Β Β Β Β Β Β Β cutoffFrequency?: number;
Β Β Β Β };
Β Β Β Β normalization?: {
Β Β Β Β Β Β Β Β adaptive?: boolean;
Β Β Β Β Β Β Β Β maxAmplitude?: number;
Β Β Β Β };
}

Type declaration

  • Optional echo?: {
    Β Β Β Β decay?: number;
    Β Β Β Β echoLength?: number;
    }
    • Optional decay?: number
    • Optional echoLength?: number
  • Optional high-pass?: {
    Β Β Β Β boostFactor?: number;
    Β Β Β Β cutoffFrequency?: number;
    }
    • Optional boostFactor?: number
    • Optional cutoffFrequency?: number
  • Optional lavalink-filter-plugin?: {
    Β Β Β Β echo?: {
    Β Β Β Β Β Β Β Β decay?: number;
    Β Β Β Β Β Β Β Β delay?: number;
    Β Β Β Β };
    Β Β Β Β reverb?: {
    Β Β Β Β Β Β Β Β delays?: number[];
    Β Β Β Β Β Β Β Β gains?: number[];
    Β Β Β Β };
    }
    • Optional echo?: {
      Β Β Β Β decay?: number;
      Β Β Β Β delay?: number;
      }
      • Optional decay?: number
      • Optional delay?: number
    • Optional reverb?: {
      Β Β Β Β delays?: number[];
      Β Β Β Β gains?: number[];
      }
      • Optional delays?: number[]
      • Optional gains?: number[]
  • Optional low-pass?: {
    Β Β Β Β boostFactor?: number;
    Β Β Β Β cutoffFrequency?: number;
    }
    • Optional boostFactor?: number
    • Optional cutoffFrequency?: number
  • Optional normalization?: {
    Β Β Β Β adaptive?: boolean;
    Β Β Β Β maxAmplitude?: number;
    }
    • Optional adaptive?: boolean
    • Optional maxAmplitude?: number
rotation?: RotationFilter
timescale?: TimescaleFilter
tremolo?: TremoloFilter
vibrato?: VibratoFilter
volume?: number

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Filters.LowPassFilter.html b/docs/interfaces/Types_Filters.LowPassFilter.html deleted file mode 100644 index b99d320..0000000 --- a/docs/interfaces/Types_Filters.LowPassFilter.html +++ /dev/null @@ -1,178 +0,0 @@ -LowPassFilter | lavalink-client

Higher frequencies get suppressed, while lower frequencies pass through this filter, thus the name low pass. -Any smoothing values equal to or less than 1.0 will disable the filter.

-
interface LowPassFilter {
Β Β Β Β smoothing?: number;
}

Properties

Properties

smoothing?: number

The smoothing factor (1.0 < x)

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Filters.PlayerFilters.html b/docs/interfaces/Types_Filters.PlayerFilters.html deleted file mode 100644 index d093ca8..0000000 --- a/docs/interfaces/Types_Filters.PlayerFilters.html +++ /dev/null @@ -1,203 +0,0 @@ -PlayerFilters | lavalink-client

The "active" / "disabled" Player Filters

-
interface PlayerFilters {
Β Β Β Β audioOutput: AudioOutputs;
Β Β Β Β custom: boolean;
Β Β Β Β karaoke: boolean;
Β Β Β Β lavalinkFilterPlugin: {
Β Β Β Β Β Β Β Β echo: boolean;
Β Β Β Β Β Β Β Β reverb: boolean;
Β Β Β Β };
Β Β Β Β lavalinkLavaDspxPlugin: {
Β Β Β Β Β Β Β Β echo: boolean;
Β Β Β Β Β Β Β Β highPass: boolean;
Β Β Β Β Β Β Β Β lowPass: boolean;
Β Β Β Β Β Β Β Β normalization: boolean;
Β Β Β Β };
Β Β Β Β lowPass: boolean;
Β Β Β Β nightcore: boolean;
Β Β Β Β rotation: boolean;
Β Β Β Β tremolo: boolean;
Β Β Β Β vaporwave: boolean;
Β Β Β Β vibrato: boolean;
Β Β Β Β volume: boolean;
}

Properties

audioOutput: AudioOutputs

audio Output (default stereo, mono sounds the fullest and best for not-stereo tracks)

-
custom: boolean

Sets nightcore to false, and vaporwave to false

-
karaoke: boolean

if karaoke filter is enabled / not

-
lavalinkFilterPlugin: {
Β Β Β Β echo: boolean;
Β Β Β Β reverb: boolean;
}

Filters for the Lavalink Filter Plugin

-

Type declaration

  • echo: boolean

    if echo filter is enabled / not

    -
  • reverb: boolean

    if reverb filter is enabled / not

    -
lavalinkLavaDspxPlugin: {
Β Β Β Β echo: boolean;
Β Β Β Β highPass: boolean;
Β Β Β Β lowPass: boolean;
Β Β Β Β normalization: boolean;
}

Type declaration

  • echo: boolean

    if echo filter is enabled / not

    -
  • highPass: boolean

    if highPass filter is enabled / not

    -
  • lowPass: boolean

    if lowPass filter is enabled / not

    -
  • normalization: boolean

    if normalization filter is enabled / not

    -
lowPass: boolean
nightcore: boolean

Sets custom to false, and vaporwave to false

-
rotation: boolean

If rotation filter is enabled / not

-
tremolo: boolean

if tremolo filter is enabled / not

-
vaporwave: boolean

Sets custom to false, and nightcore to false

-
vibrato: boolean

if vibrato filter is enabled / not

-
volume: boolean

Lavalink Volume FILTER (not player Volume, think of it as a gain booster)

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Filters.RotationFilter.html b/docs/interfaces/Types_Filters.RotationFilter.html deleted file mode 100644 index 1248a3b..0000000 --- a/docs/interfaces/Types_Filters.RotationFilter.html +++ /dev/null @@ -1,178 +0,0 @@ -RotationFilter | lavalink-client

Rotates the sound around the stereo channels/user headphones (aka Audio Panning). -It can produce an effect similar to https://youtu.be/QB9EB8mTKcc (without the reverb).

-
interface RotationFilter {
Β Β Β Β rotationHz?: number;
}

Properties

Properties

rotationHz?: number

The frequency of the audio rotating around the listener in Hz. 0.2 is similar to the example video above

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Filters.TimescaleFilter.html b/docs/interfaces/Types_Filters.TimescaleFilter.html deleted file mode 100644 index 3f05cb3..0000000 --- a/docs/interfaces/Types_Filters.TimescaleFilter.html +++ /dev/null @@ -1,181 +0,0 @@ -TimescaleFilter | lavalink-client

Changes the speed, pitch, and rate

-
interface TimescaleFilter {
Β Β Β Β pitch?: number;
Β Β Β Β rate?: number;
Β Β Β Β speed?: number;
}

Properties

Properties

pitch?: number

The pitch 0.0 ≀ x

-
rate?: number

The rate 0.0 ≀ x

-
speed?: number

The playback speed 0.0 ≀ x

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Filters.TremoloFilter.html b/docs/interfaces/Types_Filters.TremoloFilter.html deleted file mode 100644 index 82d3990..0000000 --- a/docs/interfaces/Types_Filters.TremoloFilter.html +++ /dev/null @@ -1,180 +0,0 @@ -TremoloFilter | lavalink-client

Uses amplification to create a shuddering effect, where the volume quickly oscillates. -Demo: https://en.wikipedia.org/wiki/File:Fuse_Electronics_Tremolo_MK-III_Quick_Demo.ogv

-
interface TremoloFilter {
Β Β Β Β depth?: number;
Β Β Β Β frequency?: number;
}

Properties

Properties

depth?: number

The tremolo depth 0.0 < x ≀ 1.0

-
frequency?: number

The frequency 0.0 < x

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Filters.VibratoFilter.html b/docs/interfaces/Types_Filters.VibratoFilter.html deleted file mode 100644 index 32fe611..0000000 --- a/docs/interfaces/Types_Filters.VibratoFilter.html +++ /dev/null @@ -1,179 +0,0 @@ -VibratoFilter | lavalink-client

Similar to tremolo. While tremolo oscillates the volume, vibrato oscillates the pitch.

-
interface VibratoFilter {
Β Β Β Β depth?: number;
Β Β Β Β frequency?: number;
}

Properties

Properties

depth?: number

The vibrato depth 0.0 < x ≀ 1.0

-
frequency?: number

The frequency 0.0 < x ≀ 14.0

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Manager.BotClientOptions.html b/docs/interfaces/Types_Manager.BotClientOptions.html deleted file mode 100644 index 05bc5bd..0000000 --- a/docs/interfaces/Types_Manager.BotClientOptions.html +++ /dev/null @@ -1,180 +0,0 @@ -BotClientOptions | lavalink-client

The Bot client Options needed for the manager

-
interface BotClientOptions {
Β Β Β Β id: string;
Β Β Β Β username?: string;
Β Β Β Β [x: string | number | symbol]: unknown;
}

Indexable

[x: string | number | symbol]: unknown

So users can pass entire objects / classes

-

Properties

Properties

id: string

Bot Client Id

-
username?: string

Bot Client Username

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Manager.LavalinkManagerEvents.html b/docs/interfaces/Types_Manager.LavalinkManagerEvents.html deleted file mode 100644 index fbb05fa..0000000 --- a/docs/interfaces/Types_Manager.LavalinkManagerEvents.html +++ /dev/null @@ -1,251 +0,0 @@ -LavalinkManagerEvents | lavalink-client

The events from the lavalink Manager

-
interface LavalinkManagerEvents {
Β Β Β Β ChapterStarted: ((player, track, payload) => void);
Β Β Β Β ChaptersLoaded: ((player, track, payload) => void);
Β Β Β Β LyricsFound: ((player, track, payload) => void);
Β Β Β Β LyricsLine: ((player, track, payload) => void);
Β Β Β Β LyricsNotFound: ((player, track, payload) => void);
Β Β Β Β SegmentSkipped: ((player, track, payload) => void);
Β Β Β Β SegmentsLoaded: ((player, track, payload) => void);
Β Β Β Β debug: ((eventKey, eventData) => void);
Β Β Β Β playerCreate: ((player) => void);
Β Β Β Β playerDestroy: ((player, destroyReason?) => void);
Β Β Β Β playerDisconnect: ((player, voiceChannelId) => void);
Β Β Β Β playerMove: ((player, oldVoiceChannelId, newVoiceChannelId) => void);
Β Β Β Β playerSocketClosed: ((player, payload) => void);
Β Β Β Β playerUpdate: ((oldPlayerJson, newPlayer) => void);
Β Β Β Β queueEnd: ((player, track, payload) => void);
Β Β Β Β trackEnd: ((player, track, payload) => void);
Β Β Β Β trackError: ((player, track, payload) => void);
Β Β Β Β trackStart: ((player, track, payload) => void);
Β Β Β Β trackStuck: ((player, track, payload) => void);
}

Events

ChapterStarted: ((player, track, payload) => void)

Type declaration

ChaptersLoaded: ((player, track, payload) => void)

Type declaration

LyricsFound: ((player, track, payload) => void)

Type declaration

LyricsLine: ((player, track, payload) => void)

Type declaration

LyricsNotFound: ((player, track, payload) => void)

Type declaration

SegmentSkipped: ((player, track, payload) => void)

Type declaration

SegmentsLoaded: ((player, track, payload) => void)

Type declaration

debug: ((eventKey, eventData) => void)

Type declaration

    • (eventKey, eventData): void
    • Lavalink-Client Debug Event -Emitted for several erros, and logs within lavalink-client, if managerOptions.advancedOptions.enableDebugEvents is true -Useful for debugging the lavalink-client

      -

      Manager#debug

      -

      Parameters

      • eventKey: DebugEvents
      • eventData: {
        Β Β Β Β error?: string | Error;
        Β Β Β Β functionLayer: string;
        Β Β Β Β message: string;
        Β Β Β Β state: "error" | "log" | "warn";
        }
        • Optional error?: string | Error
        • functionLayer: string
        • message: string
        • state: "error" | "log" | "warn"

      Returns void

playerCreate: ((player) => void)

Type declaration

    • (player): void
    • Emitted when a Player is created. - Manager#playerCreate

      -

      Parameters

      Returns void

playerDestroy: ((player, destroyReason?) => void)

Type declaration

    • (player, destroyReason?): void
    • Emitted when a Player get's destroyed - Manager#playerDestroy

      -

      Parameters

      • player: Player
      • Optional destroyReason: string

      Returns void

playerDisconnect: ((player, voiceChannelId) => void)

Type declaration

    • (player, voiceChannelId): void
    • Emitted when a Player is disconnected from a channel. - Manager#playerDisconnect

      -

      Parameters

      • player: Player
      • voiceChannelId: string

      Returns void

playerMove: ((player, oldVoiceChannelId, newVoiceChannelId) => void)

Type declaration

    • (player, oldVoiceChannelId, newVoiceChannelId): void
    • Emitted when a Player is moved within the channel. - Manager#playerMove

      -

      Parameters

      • player: Player
      • oldVoiceChannelId: string
      • newVoiceChannelId: string

      Returns void

playerSocketClosed: ((player, payload) => void)

Type declaration

playerUpdate: ((oldPlayerJson, newPlayer) => void)

Type declaration

    • (oldPlayerJson, newPlayer): void
    • Always emits when the player (on lavalink side) got updated - Manager#playerUpdate

      -

      Parameters

      Returns void

queueEnd: ((player, track, payload) => void)

Type declaration

trackEnd: ((player, track, payload) => void)

Type declaration

    • (player, track, payload): void
    • Emitted when a Track finished. - Manager#trackEnd

      -

      Parameters

      Returns void

trackError: ((player, track, payload) => void)

Type declaration

trackStart: ((player, track, payload) => void)

Type declaration

    • (player, track, payload): void
    • Emitted when a Track started playing. - Manager#trackStart

      -

      Parameters

      Returns void

trackStuck: ((player, track, payload) => void)

Type declaration

    • (player, track, payload): void
    • Emitted when a Track got stuck while playing. - Manager#trackStuck

      -

      Parameters

      Returns void

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Manager.ManagerOptions.html b/docs/interfaces/Types_Manager.ManagerOptions.html deleted file mode 100644 index a3f80c1..0000000 --- a/docs/interfaces/Types_Manager.ManagerOptions.html +++ /dev/null @@ -1,207 +0,0 @@ -ManagerOptions | lavalink-client

Manager Options used to create the manager

-
interface ManagerOptions {
Β Β Β Β advancedOptions?: {
Β Β Β Β Β Β Β Β debugOptions?: {
Β Β Β Β Β Β Β Β Β Β Β Β logCustomSearches?: boolean;
Β Β Β Β Β Β Β Β Β Β Β Β noAudio?: boolean;
Β Β Β Β Β Β Β Β Β Β Β Β playerDestroy?: {
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β debugLog?: boolean;
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β dontThrowError?: boolean;
Β Β Β Β Β Β Β Β Β Β Β Β };
Β Β Β Β Β Β Β Β };
Β Β Β Β Β Β Β Β enableDebugEvents?: boolean;
Β Β Β Β Β Β Β Β maxFilterFixDuration?: number;
Β Β Β Β };
Β Β Β Β autoSkip?: boolean;
Β Β Β Β autoSkipOnResolveError?: boolean;
Β Β Β Β client?: BotClientOptions;
Β Β Β Β emitNewSongsOnly?: boolean;
Β Β Β Β linksAllowed?: boolean;
Β Β Β Β linksBlacklist?: (string | RegExp)[];
Β Β Β Β linksWhitelist?: (string | RegExp)[];
Β Β Β Β nodes: LavalinkNodeOptions[];
Β Β Β Β playerOptions?: ManagerPlayerOptions;
Β Β Β Β queueOptions?: ManagerQueueOptions;
Β Β Β Β sendToShard: ((guildId, payload) => void);
}

Properties

advancedOptions?: {
Β Β Β Β debugOptions?: {
Β Β Β Β Β Β Β Β logCustomSearches?: boolean;
Β Β Β Β Β Β Β Β noAudio?: boolean;
Β Β Β Β Β Β Β Β playerDestroy?: {
Β Β Β Β Β Β Β Β Β Β Β Β debugLog?: boolean;
Β Β Β Β Β Β Β Β Β Β Β Β dontThrowError?: boolean;
Β Β Β Β Β Β Β Β };
Β Β Β Β };
Β Β Β Β enableDebugEvents?: boolean;
Β Β Β Β maxFilterFixDuration?: number;
}

Advanced Options for the Library, which may or may not be "library breaking"

-

Type declaration

  • Optional debugOptions?: {
    Β Β Β Β logCustomSearches?: boolean;
    Β Β Β Β noAudio?: boolean;
    Β Β Β Β playerDestroy?: {
    Β Β Β Β Β Β Β Β debugLog?: boolean;
    Β Β Β Β Β Β Β Β dontThrowError?: boolean;
    Β Β Β Β };
    }

    optional

    -
    • Optional logCustomSearches?: boolean

      For logging custom searches

      -
    • Optional noAudio?: boolean

      logs for debugging the "no-Audio" playing error

      -
    • Optional playerDestroy?: {
      Β Β Β Β debugLog?: boolean;
      Β Β Β Β dontThrowError?: boolean;
      }

      For Logging the Destroy function

      -
      • Optional debugLog?: boolean

        To show the debug reason at all times.

        -
      • Optional dontThrowError?: boolean

        If you get 'Error: Use Player#destroy("reason") not LavalinkManager#deletePlayer() to stop the Player' put it on true

        -
  • Optional enableDebugEvents?: boolean

    Enable Debug event

    -
  • Optional maxFilterFixDuration?: number

    Max duration for that the filter fix duration works (in ms) - default is 8mins

    -
autoSkip?: boolean

If it should skip to the next Track on TrackEnd / TrackError etc. events

-
autoSkipOnResolveError?: boolean

If it should skip to the next Track if track.resolve errors while trying to play a track.

-

The Bot Client's Data for Authorization

-
emitNewSongsOnly?: boolean

If it should emit only new (unique) songs and not when a looping track (or similar) is plaid, default false

-
linksAllowed?: boolean

If links should be allowed or not. If set to false, it will throw an error if a link was provided.

-
linksBlacklist?: (string | RegExp)[]

Never allow link requests with links either matching some of that regExp or including some of that string (doesn't even allow if it's whitelisted)

-
linksWhitelist?: (string | RegExp)[]

Only allow link requests with links either matching some of that regExp or including some of that string

-

The Node Options, for all Nodes! (on init)

-
playerOptions?: ManagerPlayerOptions

PlayerOptions for all Players

-
queueOptions?: ManagerQueueOptions

QueueOptions for all Queues

-
sendToShard: ((guildId, payload) => void)

Type declaration

    • (guildId, payload): void
    • Parameters

      Returns void

      Async

      The Function to send the voice connection changes from Lavalink to Discord

      -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Manager.ManagerPlayerOptions.html b/docs/interfaces/Types_Manager.ManagerPlayerOptions.html deleted file mode 100644 index bdc428e..0000000 --- a/docs/interfaces/Types_Manager.ManagerPlayerOptions.html +++ /dev/null @@ -1,202 +0,0 @@ -ManagerPlayerOptions | lavalink-client

Sub Manager Options, for player specific things

-
interface ManagerPlayerOptions {
Β Β Β Β applyVolumeAsFilter?: boolean;
Β Β Β Β clientBasedPositionUpdateInterval?: number;
Β Β Β Β defaultSearchPlatform?: SearchPlatform;
Β Β Β Β maxErrorsPerTime?: {
Β Β Β Β Β Β Β Β maxAmount: number;
Β Β Β Β Β Β Β Β threshold: number;
Β Β Β Β };
Β Β Β Β minAutoPlayMs?: number;
Β Β Β Β onDisconnect?: {
Β Β Β Β Β Β Β Β autoReconnect?: boolean;
Β Β Β Β Β Β Β Β destroyPlayer?: boolean;
Β Β Β Β };
Β Β Β Β onEmptyQueue?: {
Β Β Β Β Β Β Β Β autoPlayFunction?: ((player, lastPlayedTrack) => Promise<void>);
Β Β Β Β Β Β Β Β destroyAfterMs?: number;
Β Β Β Β };
Β Β Β Β requesterTransformer?: ((requester) => unknown);
Β Β Β Β useUnresolvedData?: boolean;
Β Β Β Β volumeDecrementer?: number;
}

Properties

applyVolumeAsFilter?: boolean

Applies the volume via a filter, not via the lavalink volume transformer

-
clientBasedPositionUpdateInterval?: number

How often it should update the the player Position

-
defaultSearchPlatform?: SearchPlatform

What should be used as a searchPlatform, if no source was provided during the query

-
maxErrorsPerTime?: {
Β Β Β Β maxAmount: number;
Β Β Β Β threshold: number;
}

Allows you to declare how many tracks are allowed to error/stuck within a time-frame before player is destroyed

-

Type declaration

  • maxAmount: number

    The max amount of errors within the threshold time which are allowed before destroying the player (when errors > maxAmount -> player.destroy())

    -
  • threshold: number

    The threshold time to count errors (recommended is 35s)

    -

Default

"{threshold: 35000, maxAmount: 3 }"
-
-
minAutoPlayMs?: number

Minimum time to play the song before autoPlayFunction is executed (prevents error spamming) Set to 0 to disable it

-

Default

10000
-
-
onDisconnect?: {
Β Β Β Β autoReconnect?: boolean;
Β Β Β Β destroyPlayer?: boolean;
}

What lavalink-client should do when the player reconnects

-

Type declaration

  • Optional autoReconnect?: boolean

    Try to reconnect? -> If fails -> Destroy

    -
  • Optional destroyPlayer?: boolean

    Instantly destroy player (overrides autoReconnect) | Don't provide == disable feature

    -
onEmptyQueue?: {
Β Β Β Β autoPlayFunction?: ((player, lastPlayedTrack) => Promise<void>);
Β Β Β Β destroyAfterMs?: number;
}

Type declaration

  • Optional autoPlayFunction?: ((player, lastPlayedTrack) => Promise<void>)
      • (player, lastPlayedTrack): Promise<void>
      • Get's executed onEmptyQueue -> You can do any track queue previous transformations, if you add a track to the queue -> it will play it, if not queueEnd will execute!

        -

        Parameters

        Returns Promise<void>

  • Optional destroyAfterMs?: number
requesterTransformer?: ((requester) => unknown)

Type declaration

    • (requester): unknown
    • Transforms the saved data of a requested user

      -

      Parameters

      • requester: unknown

      Returns unknown

useUnresolvedData?: boolean
volumeDecrementer?: number

If the Lavalink Volume should be decremented by x number

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Node.BaseNodeStats.html b/docs/interfaces/Types_Node.BaseNodeStats.html deleted file mode 100644 index 5faf070..0000000 --- a/docs/interfaces/Types_Node.BaseNodeStats.html +++ /dev/null @@ -1,187 +0,0 @@ -BaseNodeStats | lavalink-client

BaseNodeStats object from Lavalink

-
interface BaseNodeStats {
Β Β Β Β cpu: CPUStats;
Β Β Β Β frameStats: FrameStats;
Β Β Β Β memory: MemoryStats;
Β Β Β Β players: number;
Β Β Β Β playingPlayers: number;
Β Β Β Β uptime: number;
}

Hierarchy

Properties

The cpu stats for the node.

-
frameStats: FrameStats

The frame stats for the node.

-
memory: MemoryStats

The memory stats for the node.

-
players: number

The amount of players on the node.

-
playingPlayers: number

The amount of playing players on the node.

-
uptime: number

The uptime for the node.

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Node.CPUStats.html b/docs/interfaces/Types_Node.CPUStats.html deleted file mode 100644 index 02bbb28..0000000 --- a/docs/interfaces/Types_Node.CPUStats.html +++ /dev/null @@ -1,181 +0,0 @@ -CPUStats | lavalink-client

CPU Stats object from lavalink

-
interface CPUStats {
Β Β Β Β cores: number;
Β Β Β Β lavalinkLoad: number;
Β Β Β Β systemLoad: number;
}

Properties

cores: number

The core amount the host machine has.

-
lavalinkLoad: number

The lavalink load.

-
systemLoad: number

The system load.

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Node.FrameStats.html b/docs/interfaces/Types_Node.FrameStats.html deleted file mode 100644 index 8425fac..0000000 --- a/docs/interfaces/Types_Node.FrameStats.html +++ /dev/null @@ -1,181 +0,0 @@ -FrameStats | lavalink-client

FrameStats Object from lavalink

-
interface FrameStats {
Β Β Β Β deficit?: number;
Β Β Β Β nulled?: number;
Β Β Β Β sent?: number;
}

Properties

Properties

deficit?: number

The amount of deficit frames.

-
nulled?: number

The amount of nulled frames.

-
sent?: number

The amount of sent frames.

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Node.GitObject.html b/docs/interfaces/Types_Node.GitObject.html deleted file mode 100644 index 36cfa38..0000000 --- a/docs/interfaces/Types_Node.GitObject.html +++ /dev/null @@ -1,181 +0,0 @@ -GitObject | lavalink-client

Git information object from lavalink

-
interface GitObject {
Β Β Β Β branch: string;
Β Β Β Β commit: string;
Β Β Β Β commitTime: string;
}

Properties

Properties

branch: string

The branch this Lavalink server was built on

-
commit: string

The commit this Lavalink server was built on

-
commitTime: string

The millisecond unix timestamp for when the commit was created

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Node.LavalinkInfo.html b/docs/interfaces/Types_Node.LavalinkInfo.html deleted file mode 100644 index c41549f..0000000 --- a/docs/interfaces/Types_Node.LavalinkInfo.html +++ /dev/null @@ -1,191 +0,0 @@ -LavalinkInfo | lavalink-client

Entire lavalink information object from lavalink

-
interface LavalinkInfo {
Β Β Β Β buildTime: number;
Β Β Β Β filters: string[];
Β Β Β Β git: GitObject;
Β Β Β Β jvm: string;
Β Β Β Β lavaplayer: string;
Β Β Β Β plugins: PluginObject[];
Β Β Β Β sourceManagers: string[];
Β Β Β Β version: VersionObject;
}

Properties

buildTime: number

The millisecond unix timestamp when this Lavalink jar was built

-
filters: string[]

The enabled filters for this server

-

The git information of this Lavalink server

-
jvm: string

The JVM version this Lavalink server runs on

-
lavaplayer: string

The Lavaplayer version being used by this server

-
plugins: PluginObject[]

The enabled plugins for this server

-
sourceManagers: string[]

The enabled source managers for this server

-
version: VersionObject

The version of this Lavalink server

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Node.LavalinkNodeOptions.html b/docs/interfaces/Types_Node.LavalinkNodeOptions.html deleted file mode 100644 index ef35579..0000000 --- a/docs/interfaces/Types_Node.LavalinkNodeOptions.html +++ /dev/null @@ -1,201 +0,0 @@ -LavalinkNodeOptions | lavalink-client

Node Options for creating a lavalink node

-
interface LavalinkNodeOptions {
Β Β Β Β authorization: string;
Β Β Β Β closeOnError?: boolean;
Β Β Β Β enablePingOnStatsCheck?: boolean;
Β Β Β Β heartBeatInterval?: 30000;
Β Β Β Β host: string;
Β Β Β Β id?: string;
Β Β Β Β port: number;
Β Β Β Β regions?: string[];
Β Β Β Β requestSignalTimeoutMS?: number;
Β Β Β Β retryAmount?: number;
Β Β Β Β retryDelay?: number;
Β Β Β Β secure?: boolean;
Β Β Β Β sessionId?: string;
}

Properties

authorization: string

The Lavalink Password / Authorization-Key

-
closeOnError?: boolean

Close on error

-
enablePingOnStatsCheck?: boolean

Recommended, to check wether the client is still connected or not on the stats endpoint

-
heartBeatInterval?: 30000

Heartbeat interval , set to <= 0 to disable heartbeat system

-
host: string

The Lavalink Server-Ip / Domain-URL

-
id?: string

Add a Custom ID to the node, for later use

-
port: number

The Lavalink Connection Port

-
regions?: string[]

Voice Regions of this Node

-
requestSignalTimeoutMS?: number

signal for cancelling requests - default: AbortSignal.timeout(options.requestSignalTimeoutMS || 10000) - put <= 0 to disable

-
retryAmount?: number

The retryAmount for the node.

-
retryDelay?: number

The retryDelay for the node.

-
secure?: boolean

Does the Server use ssl (https)

-
sessionId?: string

RESUME THE PLAYER? by providing a sessionid on the node-creation

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Node.LyricsLine.html b/docs/interfaces/Types_Node.LyricsLine.html deleted file mode 100644 index 3c69004..0000000 --- a/docs/interfaces/Types_Node.LyricsLine.html +++ /dev/null @@ -1,182 +0,0 @@ -LyricsLine | lavalink-client
interface LyricsLine {
Β Β Β Β duration: number;
Β Β Β Β line: string;
Β Β Β Β plugin: PluginInfo;
Β Β Β Β timestamp: number;
}

Properties

Properties

duration: number

The line duration in milliseconds

-
line: string

The line text

-
plugin: PluginInfo

Information about the plugin

-
timestamp: number

The millisecond timestamp

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Node.LyricsResult.html b/docs/interfaces/Types_Node.LyricsResult.html deleted file mode 100644 index 12bee4f..0000000 --- a/docs/interfaces/Types_Node.LyricsResult.html +++ /dev/null @@ -1,184 +0,0 @@ -LyricsResult | lavalink-client
interface LyricsResult {
Β Β Β Β lines: LyricsLine[];
Β Β Β Β plugin: PluginInfo;
Β Β Β Β provider: string;
Β Β Β Β sourceName: string;
Β Β Β Β text: string;
}

Properties

lines: LyricsLine[]

The lyrics lines

-
plugin: PluginInfo

Information about the plugin

-
provider: string

The name of the provider

-
sourceName: string

The name of the source

-
text: string

The result text

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Node.MemoryStats.html b/docs/interfaces/Types_Node.MemoryStats.html deleted file mode 100644 index 0ca9cae..0000000 --- a/docs/interfaces/Types_Node.MemoryStats.html +++ /dev/null @@ -1,183 +0,0 @@ -MemoryStats | lavalink-client

Memory Stats object from lavalink

-
interface MemoryStats {
Β Β Β Β allocated: number;
Β Β Β Β free: number;
Β Β Β Β reservable: number;
Β Β Β Β used: number;
}

Properties

Properties

allocated: number

The total allocated memory.

-
free: number

The free memory of the allocated amount.

-
reservable: number

The reservable memory.

-
used: number

The used memory of the allocated amount.

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Node.NodeManagerEvents.html b/docs/interfaces/Types_Node.NodeManagerEvents.html deleted file mode 100644 index 30e8d91..0000000 --- a/docs/interfaces/Types_Node.NodeManagerEvents.html +++ /dev/null @@ -1,203 +0,0 @@ -NodeManagerEvents | lavalink-client
interface NodeManagerEvents {
Β Β Β Β connect: ((node) => void);
Β Β Β Β create: ((node) => void);
Β Β Β Β destroy: ((node, destroyReason?) => void);
Β Β Β Β disconnect: ((node, reason) => void);
Β Β Β Β error: ((node, error, payload?) => void);
Β Β Β Β raw: ((node, payload) => void);
Β Β Β Β reconnecting: ((node) => void);
Β Β Β Β reconnectinprogress: ((node) => void);
Β Β Β Β resumed: ((node, paylaod, players) => void);
}

Events

connect: ((node) => void)

Type declaration

    • (node): void
    • Emitted when a Node is connected. - Manager.nodeManager#connect

      -

      Parameters

      Returns void

create: ((node) => void)

Type declaration

    • (node): void
    • Emitted when a Node is created. - Manager.nodeManager#create

      -

      Parameters

      Returns void

destroy: ((node, destroyReason?) => void)

Type declaration

    • (node, destroyReason?): void
    • Emitted when a Node is destroyed. - Manager.nodeManager#destroy

      -

      Parameters

      Returns void

disconnect: ((node, reason) => void)

Type declaration

    • (node, reason): void
    • Emitted when a Node is disconnects. - Manager.nodeManager#disconnect

      -

      Parameters

      • node: LavalinkNode
      • reason: {
        Β Β Β Β code?: number;
        Β Β Β Β reason?: string;
        }
        • Optional code?: number
        • Optional reason?: string

      Returns void

error: ((node, error, payload?) => void)

Type declaration

    • (node, error, payload?): void
    • Emitted when a Node is error. - Manager.nodeManager#error

      -

      Parameters

      Returns void

raw: ((node, payload) => void)

Type declaration

    • (node, payload): void
    • Emits every single Node event. - Manager.nodeManager#raw

      -

      Parameters

      Returns void

reconnecting: ((node) => void)

Type declaration

    • (node): void
    • Emitted when a Node is reconnecting. - Manager.nodeManager#reconnecting

      -

      Parameters

      Returns void

reconnectinprogress: ((node) => void)

Type declaration

    • (node): void
    • Emitted When a node starts to reconnect (if you have a reconnection delay, the reconnecting event will be emitted after the retryDelay.) -Useful to check wether the internal node reconnect system works or not - Manager.nodeManager#reconnectinprogress

      -

      Parameters

      Returns void

resumed: ((node, paylaod, players) => void)

Type declaration

    • (node, paylaod, players): void
    • Emits when the node connects resumed. You then need to create all players within this event for your usecase. -Aka for that you need to be able to save player data like vc channel + text channel in a db and then sync it again - Manager.nodeManager#nodeResumed

      -

      Parameters

      Returns void

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Node.NodeStats.html b/docs/interfaces/Types_Node.NodeStats.html deleted file mode 100644 index 2e4c0cd..0000000 --- a/docs/interfaces/Types_Node.NodeStats.html +++ /dev/null @@ -1,187 +0,0 @@ -NodeStats | lavalink-client

Interface for nodeStats from lavalink

-
interface NodeStats {
Β Β Β Β cpu: CPUStats;
Β Β Β Β frameStats: FrameStats;
Β Β Β Β memory: MemoryStats;
Β Β Β Β players: number;
Β Β Β Β playingPlayers: number;
Β Β Β Β uptime: number;
}

Hierarchy

Properties

The cpu stats for the node.

-
frameStats: FrameStats

The frame stats for the node.

-
memory: MemoryStats

The memory stats for the node.

-
players: number

The amount of players on the node.

-
playingPlayers: number

The amount of playing players on the node.

-
uptime: number

The uptime for the node.

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Node.PluginObject.html b/docs/interfaces/Types_Node.PluginObject.html deleted file mode 100644 index fc7021d..0000000 --- a/docs/interfaces/Types_Node.PluginObject.html +++ /dev/null @@ -1,179 +0,0 @@ -PluginObject | lavalink-client

Lavalink's plugins object from lavalink's plugin

-
interface PluginObject {
Β Β Β Β name: string;
Β Β Β Β version: string;
}

Properties

Properties

name: string

The name of the plugin

-
version: string

The version of the plugin

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Node.VersionObject.html b/docs/interfaces/Types_Node.VersionObject.html deleted file mode 100644 index dfcc6f2..0000000 --- a/docs/interfaces/Types_Node.VersionObject.html +++ /dev/null @@ -1,187 +0,0 @@ -VersionObject | lavalink-client

Lavalink's version object from lavalink

-
interface VersionObject {
Β Β Β Β build?: string;
Β Β Β Β major: number;
Β Β Β Β minor: number;
Β Β Β Β patch: internal;
Β Β Β Β preRelease?: string;
Β Β Β Β semver: string;
}

Properties

build?: string

The build metadata according to semver as a . separated list of identifiers

-
major: number

The major version of this Lavalink server

-
minor: number

The minor version of this Lavalink server

-
patch: internal

The patch version of this Lavalink server

-
preRelease?: string

The pre-release version according to semver as a . separated list of identifiers

-
semver: string

The full version string of this Lavalink server

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Player.BasePlayOptions.html b/docs/interfaces/Types_Player.BasePlayOptions.html deleted file mode 100644 index 8adb42b..0000000 --- a/docs/interfaces/Types_Player.BasePlayOptions.html +++ /dev/null @@ -1,186 +0,0 @@ -BasePlayOptions | lavalink-client
interface BasePlayOptions {
Β Β Β Β endTime?: number;
Β Β Β Β filters?: Partial<LavalinkFilterData>;
Β Β Β Β paused?: boolean;
Β Β Β Β position?: number;
Β Β Β Β voice?: LavalinkPlayerVoiceOptions;
Β Β Β Β volume?: number;
}

Hierarchy

Properties

endTime?: number

The position to end the track.

-
filters?: Partial<LavalinkFilterData>

The Lavalink Filters to use | only with the new REST API

-
paused?: boolean

If to start "paused"

-
position?: number

The position to start the track.

-

Voice Update for Lavalink

-
volume?: number

The Volume to start with

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Player.LavalinkPlayOptions.html b/docs/interfaces/Types_Player.LavalinkPlayOptions.html deleted file mode 100644 index 791e7ea..0000000 --- a/docs/interfaces/Types_Player.LavalinkPlayOptions.html +++ /dev/null @@ -1,192 +0,0 @@ -LavalinkPlayOptions | lavalink-client
interface LavalinkPlayOptions {
Β Β Β Β endTime?: number;
Β Β Β Β filters?: Partial<LavalinkFilterData>;
Β Β Β Β paused?: boolean;
Β Β Β Β position?: number;
Β Β Β Β track?: {
Β Β Β Β Β Β Β Β encoded?: string;
Β Β Β Β Β Β Β Β identifier?: string;
Β Β Β Β Β Β Β Β requester?: unknown;
Β Β Β Β Β Β Β Β userData?: anyObject;
Β Β Β Β };
Β Β Β Β voice?: LavalinkPlayerVoiceOptions;
Β Β Β Β volume?: number;
}

Hierarchy

Properties

endTime?: number

The position to end the track.

-
filters?: Partial<LavalinkFilterData>

The Lavalink Filters to use | only with the new REST API

-
paused?: boolean

If to start "paused"

-
position?: number

The position to start the track.

-
track?: {
Β Β Β Β encoded?: string;
Β Β Β Β identifier?: string;
Β Β Β Β requester?: unknown;
Β Β Β Β userData?: anyObject;
}

Which Track to play | don't provide, if it should pick from the Queue

-

Type declaration

  • Optional encoded?: string

    The track encoded base64 string to use instead of the one from the queue system

    -
  • Optional identifier?: string

    The identifier of the track to use

    -
  • Optional requester?: unknown

    The Track requester for when u provide encodedTrack / identifer

    -
  • Optional userData?: anyObject

    Custom User Data for the track to provide, will then be on the userData object from the track

    -

Voice Update for Lavalink

-
volume?: number

The Volume to start with

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Player.PlayOptions.html b/docs/interfaces/Types_Player.PlayOptions.html deleted file mode 100644 index 663e14d..0000000 --- a/docs/interfaces/Types_Player.PlayOptions.html +++ /dev/null @@ -1,196 +0,0 @@ -PlayOptions | lavalink-client
interface PlayOptions {
Β Β Β Β clientTrack?: UnresolvedTrack | Track;
Β Β Β Β endTime?: number;
Β Β Β Β filters?: Partial<LavalinkFilterData>;
Β Β Β Β noReplace?: boolean;
Β Β Β Β paused?: boolean;
Β Β Β Β position?: number;
Β Β Β Β track?: {
Β Β Β Β Β Β Β Β encoded?: string;
Β Β Β Β Β Β Β Β identifier?: string;
Β Β Β Β Β Β Β Β requester?: unknown;
Β Β Β Β Β Β Β Β userData?: anyObject;
Β Β Β Β };
Β Β Β Β voice?: LavalinkPlayerVoiceOptions;
Β Β Β Β volume?: number;
}

Hierarchy

Properties

clientTrack?: UnresolvedTrack | Track

Adds track on queue and skips to it

-
endTime?: number

The position to end the track.

-
filters?: Partial<LavalinkFilterData>

The Lavalink Filters to use | only with the new REST API

-
noReplace?: boolean

Whether to not replace the track if a play payload is sent.

-
paused?: boolean

If to start "paused"

-
position?: number

The position to start the track.

-
track?: {
Β Β Β Β encoded?: string;
Β Β Β Β identifier?: string;
Β Β Β Β requester?: unknown;
Β Β Β Β userData?: anyObject;
}

Which Track to play | don't provide, if it should pick from the Queue

-

Type declaration

  • Optional encoded?: string

    The track encoded base64 string to use instead of the one from the queue system

    -
  • Optional identifier?: string

    The identifier of the track to use

    -
  • Optional requester?: unknown

    The Track requester for when u provide encodedTrack / identifer

    -
  • Optional userData?: anyObject

    Custom User Data for the track to provide, will then be on the userData object from the track

    -

Voice Update for Lavalink

-
volume?: number

The Volume to start with

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Player.PlayerJson.html b/docs/interfaces/Types_Player.PlayerJson.html deleted file mode 100644 index 1c06142..0000000 --- a/docs/interfaces/Types_Player.PlayerJson.html +++ /dev/null @@ -1,212 +0,0 @@ -PlayerJson | lavalink-client
interface PlayerJson {
Β Β Β Β createdTimeStamp?: number;
Β Β Β Β equalizer: EQBand[];
Β Β Β Β filters: FilterData;
Β Β Β Β guildId: string;
Β Β Β Β lastPosition: number;
Β Β Β Β lastPositionChange: number;
Β Β Β Β lavalinkVolume: number;
Β Β Β Β nodeId?: string;
Β Β Β Β nodeSessionId?: string;
Β Β Β Β options: PlayerOptions;
Β Β Β Β paused: boolean;
Β Β Β Β ping: {
Β Β Β Β Β Β Β Β lavalink: number;
Β Β Β Β Β Β Β Β ws: number;
Β Β Β Β };
Β Β Β Β playing: boolean;
Β Β Β Β position: number;
Β Β Β Β repeatMode: RepeatMode;
Β Β Β Β textChannelId?: string;
Β Β Β Β voiceChannelId: string;
Β Β Β Β volume: number;
}

Properties

createdTimeStamp?: number

When the player was created

-
equalizer: EQBand[]

Equalizer Bands used in lavalink

-
filters: FilterData

All current used fitlers Data

-
guildId: string

Guild Id where the player was playing in

-
lastPosition: number

Lavalink's position the player was at

-
lastPositionChange: number

Last time the position was sent from lavalink

-
lavalinkVolume: number

Real Volume used in lavalink (with the volumeDecrementer)

-
nodeId?: string

The Id of the last used node

-
nodeSessionId?: string

The SessionId of the node

-
options: PlayerOptions

Options provided to the player

-
paused: boolean

Pause state

-
ping: {
Β Β Β Β lavalink: number;
Β Β Β Β ws: number;
}

The player's ping object

-

Type declaration

  • lavalink: number

    Avg. calc. Ping to the lavalink server

    -
  • ws: number

    Ping to the voice websocket server

    -
playing: boolean

Wether the player was playing or not

-
position: number

Position the player was at

-
repeatMode: RepeatMode

The repeatmode from the player

-
textChannelId?: string

Text Channel Id the player was synced to

-
voiceChannelId: string

Voice Channel Id the player was playing in

-
volume: number

Volume in % from the player (without volumeDecrementer)

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Player.PlayerOptions.html b/docs/interfaces/Types_Player.PlayerOptions.html deleted file mode 100644 index 51301e9..0000000 --- a/docs/interfaces/Types_Player.PlayerOptions.html +++ /dev/null @@ -1,194 +0,0 @@ -PlayerOptions | lavalink-client
interface PlayerOptions {
Β Β Β Β applyVolumeAsFilter?: boolean;
Β Β Β Β guildId: string;
Β Β Β Β instaUpdateFiltersFix?: boolean;
Β Β Β Β node?: string | LavalinkNode;
Β Β Β Β selfDeaf?: boolean;
Β Β Β Β selfMute?: boolean;
Β Β Β Β textChannelId?: string;
Β Β Β Β vcRegion?: string;
Β Β Β Β voiceChannelId: string;
Β Β Β Β volume?: number;
}

Properties

applyVolumeAsFilter?: boolean

If a volume should be applied via filters instead of lavalink-volume

-
guildId: string

Guild id of the player

-
instaUpdateFiltersFix?: boolean

If when applying filters, it should use the insta apply filters fix

-
node?: string | LavalinkNode

If it should use a specific lavalink node

-
selfDeaf?: boolean

if it should join deafened

-
selfMute?: boolean

If it should join muted

-
textChannelId?: string

The Text Channel Id of the Player

-
vcRegion?: string

VC Region for node selections

-
voiceChannelId: string

The Voice Channel Id

-
volume?: number

instantly change volume with the one play request

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Queue.ManagerQueueOptions.html b/docs/interfaces/Types_Queue.ManagerQueueOptions.html deleted file mode 100644 index 5919cfb..0000000 --- a/docs/interfaces/Types_Queue.ManagerQueueOptions.html +++ /dev/null @@ -1,180 +0,0 @@ -ManagerQueueOptions | lavalink-client
interface ManagerQueueOptions {
Β Β Β Β maxPreviousTracks?: number;
Β Β Β Β queueChangesWatcher?: QueueChangesWatcher;
Β Β Β Β queueStore?: QueueStoreManager;
}

Properties

maxPreviousTracks?: number

Maximum Amount of tracks for the queue.previous array. Set to 0 to not save previous songs. Defaults to 25 Tracks

-
queueChangesWatcher?: QueueChangesWatcher

Custom Queue Watcher class

-
queueStore?: QueueStoreManager

Custom Queue Store option

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Queue.QueueChangesWatcher.html b/docs/interfaces/Types_Queue.QueueChangesWatcher.html deleted file mode 100644 index 280b233..0000000 --- a/docs/interfaces/Types_Queue.QueueChangesWatcher.html +++ /dev/null @@ -1,180 +0,0 @@ -QueueChangesWatcher | lavalink-client
interface QueueChangesWatcher {
Β Β Β Β shuffled: ((guildId, oldStoredQueue, newStoredQueue) => void);
Β Β Β Β tracksAdd: ((guildId, tracks, position, oldStoredQueue, newStoredQueue) => void);
Β Β Β Β tracksRemoved: ((guildId, tracks, position, oldStoredQueue, newStoredQueue) => void);
}

Properties

shuffled: ((guildId, oldStoredQueue, newStoredQueue) => void)

Type declaration

    • (guildId, oldStoredQueue, newStoredQueue): void
    • Set a value inside a guildId (MUST BE UNPARSED)

      -

      Parameters

      Returns void

tracksAdd: ((guildId, tracks, position, oldStoredQueue, newStoredQueue) => void)

Type declaration

    • (guildId, tracks, position, oldStoredQueue, newStoredQueue): void
    • get a Value (MUST RETURN UNPARSED!)

      -

      Parameters

      Returns void

tracksRemoved: ((guildId, tracks, position, oldStoredQueue, newStoredQueue) => void)

Type declaration

    • (guildId, tracks, position, oldStoredQueue, newStoredQueue): void
    • Set a value inside a guildId (MUST BE UNPARSED)

      -

      Parameters

      Returns void

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Queue.QueueStoreManager.html b/docs/interfaces/Types_Queue.QueueStoreManager.html deleted file mode 100644 index a705bbf..0000000 --- a/docs/interfaces/Types_Queue.QueueStoreManager.html +++ /dev/null @@ -1,184 +0,0 @@ -QueueStoreManager | lavalink-client
interface QueueStoreManager {
Β Β Β Β delete: ((guildId) => Promise<unknown>);
Β Β Β Β get: ((guildId) => Promise<unknown>);
Β Β Β Β parse: ((value) => Promise<Partial<StoredQueue>>);
Β Β Β Β set: ((guildId, value) => Promise<unknown>);
Β Β Β Β stringify: ((value) => Promise<unknown>);
}

Hierarchy

  • Record<string, any>
    • QueueStoreManager

Implemented by

Properties

Properties

delete: ((guildId) => Promise<unknown>)

Type declaration

    • (guildId): Promise<unknown>
    • Parameters

      • guildId: unknown

      Returns Promise<unknown>

      Async

      Delete a Database Value based of it's guildId

      -
get: ((guildId) => Promise<unknown>)

Type declaration

    • (guildId): Promise<unknown>
    • Parameters

      • guildId: unknown

      Returns Promise<unknown>

      Async

      get a Value (MUST RETURN UNPARSED!)

      -
parse: ((value) => Promise<Partial<StoredQueue>>)

Type declaration

    • (value): Promise<Partial<StoredQueue>>
    • Parameters

      • value: unknown

      Returns Promise<Partial<StoredQueue>>

      Async

      Parse the saved value back to the Queue (IF YOU DON'T NEED PARSING/STRINGIFY, then just return the value)

      -
set: ((guildId, value) => Promise<unknown>)

Type declaration

    • (guildId, value): Promise<unknown>
    • Parameters

      • guildId: unknown
      • value: unknown

      Returns Promise<unknown>

      Async

      Set a value inside a guildId (MUST BE UNPARSED)

      -
stringify: ((value) => Promise<unknown>)

Type declaration

    • (value): Promise<unknown>
    • Parameters

      • value: unknown

      Returns Promise<unknown>

      Async

      Transform the value(s) inside of the QueueStoreManager (IF YOU DON'T NEED PARSING/STRINGIFY, then just return the value)

      -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Queue.StoredQueue.html b/docs/interfaces/Types_Queue.StoredQueue.html deleted file mode 100644 index 1f18c37..0000000 --- a/docs/interfaces/Types_Queue.StoredQueue.html +++ /dev/null @@ -1,177 +0,0 @@ -StoredQueue | lavalink-client
interface StoredQueue {
Β Β Β Β current: Track;
Β Β Β Β previous: Track[];
Β Β Β Β tracks: (UnresolvedTrack | Track)[];
}

Properties

Properties

current: Track
previous: Track[]
tracks: (UnresolvedTrack | Track)[]

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Track.LavalinkTrack.html b/docs/interfaces/Types_Track.LavalinkTrack.html deleted file mode 100644 index 6bcee03..0000000 --- a/docs/interfaces/Types_Track.LavalinkTrack.html +++ /dev/null @@ -1,182 +0,0 @@ -LavalinkTrack | lavalink-client
interface LavalinkTrack {
Β Β Β Β encoded?: string;
Β Β Β Β info: LavalinkTrackInfo;
Β Β Β Β pluginInfo: Partial<PluginInfo>;
Β Β Β Β userData?: anyObject;
}

Properties

encoded?: string

The Base 64 encoded String

-

Track Information

-
pluginInfo: Partial<PluginInfo>

Plugin Information from Lavalink

-
userData?: anyObject

The userData Object from when you provide to the lavalink request

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Track.LavalinkTrackInfo.html b/docs/interfaces/Types_Track.LavalinkTrackInfo.html deleted file mode 100644 index 452f9bd..0000000 --- a/docs/interfaces/Types_Track.LavalinkTrackInfo.html +++ /dev/null @@ -1,194 +0,0 @@ -LavalinkTrackInfo | lavalink-client
interface LavalinkTrackInfo {
Β Β Β Β artworkUrl: string;
Β Β Β Β author: string;
Β Β Β Β identifier: string;
Β Β Β Β isSeekable: boolean;
Β Β Β Β isStream: boolean;
Β Β Β Β isrc: string;
Β Β Β Β length: number;
Β Β Β Β sourceName: SourceNames;
Β Β Β Β title: string;
Β Β Β Β uri: string;
}

Properties

artworkUrl: string

The URL of the artwork if available

-
author: string

The Name of the Author

-
identifier: string

The Identifier of the Track

-
isSeekable: boolean

Wether the audio is seekable

-
isStream: boolean

Wether the audio is of a live stream

-
isrc: string

If isrc code is available, it's provided

-
length: number

The duration of the Track

-
sourceName: SourceNames

The Source name of the Track, e.g. soundcloud, youtube, spotify

-
title: string

The Track Title / Name

-
uri: string

The URL (aka Link) of the Track called URI

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Track.PluginInfo.html b/docs/interfaces/Types_Track.PluginInfo.html deleted file mode 100644 index 4184dc7..0000000 --- a/docs/interfaces/Types_Track.PluginInfo.html +++ /dev/null @@ -1,204 +0,0 @@ -PluginInfo | lavalink-client
interface PluginInfo {
Β Β Β Β albumArtUrl?: string;
Β Β Β Β albumName?: string;
Β Β Β Β albumUrl?: string;
Β Β Β Β artistArtworkUrl?: string;
Β Β Β Β artistUrl?: string;
Β Β Β Β artworkUrl?: string;
Β Β Β Β author?: string;
Β Β Β Β clientData?: {
Β Β Β Β Β Β Β Β previousTrack?: boolean;
Β Β Β Β Β Β Β Β [key: string]: any;
Β Β Β Β };
Β Β Β Β identifier?: string;
Β Β Β Β isPreview?: boolean;
Β Β Β Β previewUrl?: string;
Β Β Β Β totalTracks?: number;
Β Β Β Β type?: string;
Β Β Β Β uri?: string;
Β Β Β Β url?: string;
}

Properties

albumArtUrl?: string

The url of the album art

-
albumName?: string

The Identifier provided by a plugin

-
albumUrl?: string

The url of the album

-
artistArtworkUrl?: string

The url of the artist artwork

-
artistUrl?: string

The url of the artist

-
artworkUrl?: string

The ArtworkUrl provided by a plugin

-
author?: string

The Author Information provided by a plugin

-
clientData?: {
Β Β Β Β previousTrack?: boolean;
Β Β Β Β [key: string]: any;
}

You can put specific track information here, to transform the tracks...

-

Type declaration

  • [key: string]: any
  • Optional previousTrack?: boolean
identifier?: string

The Identifier provided by a plugin

-
isPreview?: boolean

Whether the track is a preview

-
previewUrl?: string

The url of the preview

-
totalTracks?: number

The total number of tracks in the playlist

-
type?: string

The Type provided by a plugin

-
uri?: string

The Url provided by a Plugin

-
url?: string

The Url provided by a Plugin

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Track.Track.html b/docs/interfaces/Types_Track.Track.html deleted file mode 100644 index f464c28..0000000 --- a/docs/interfaces/Types_Track.Track.html +++ /dev/null @@ -1,184 +0,0 @@ -Track | lavalink-client
interface Track {
Β Β Β Β encoded?: string;
Β Β Β Β info: TrackInfo;
Β Β Β Β pluginInfo: Partial<PluginInfo>;
Β Β Β Β requester?: unknown;
Β Β Β Β userData?: anyObject;
}

Properties

encoded?: string

The Base 64 encoded String

-
info: TrackInfo

Track Information

-
pluginInfo: Partial<PluginInfo>

Plugin Information from Lavalink

-
requester?: unknown

The Track's Requester

-
userData?: anyObject

The userData Object from when you provide to the lavalink request

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Track.TrackInfo.html b/docs/interfaces/Types_Track.TrackInfo.html deleted file mode 100644 index 62c71cc..0000000 --- a/docs/interfaces/Types_Track.TrackInfo.html +++ /dev/null @@ -1,194 +0,0 @@ -TrackInfo | lavalink-client
interface TrackInfo {
Β Β Β Β artworkUrl: string;
Β Β Β Β author: string;
Β Β Β Β duration: number;
Β Β Β Β identifier: string;
Β Β Β Β isSeekable: boolean;
Β Β Β Β isStream: boolean;
Β Β Β Β isrc: string;
Β Β Β Β sourceName: SourceNames;
Β Β Β Β title: string;
Β Β Β Β uri: string;
}

Properties

artworkUrl: string

The URL of the artwork if available

-
author: string

The Name of the Author

-
duration: number

The duration of the Track

-
identifier: string

The Identifier of the Track

-
isSeekable: boolean

Wether the audio is seekable

-
isStream: boolean

Wether the audio is of a live stream

-
isrc: string

If isrc code is available, it's provided

-
sourceName: SourceNames

The Source name of the Track, e.g. soundcloud, youtube, spotify

-
title: string

The Track Title / Name

-
uri: string

The URL (aka Link) of the Track called URI

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Track.UnresolvedQuery.html b/docs/interfaces/Types_Track.UnresolvedQuery.html deleted file mode 100644 index 699e00d..0000000 --- a/docs/interfaces/Types_Track.UnresolvedQuery.html +++ /dev/null @@ -1,196 +0,0 @@ -UnresolvedQuery | lavalink-client
interface UnresolvedQuery {
Β Β Β Β artworkUrl?: string;
Β Β Β Β author?: string;
Β Β Β Β duration?: number;
Β Β Β Β encoded?: string;
Β Β Β Β identifier?: string;
Β Β Β Β isSeekable?: boolean;
Β Β Β Β isStream?: boolean;
Β Β Β Β isrc?: string;
Β Β Β Β sourceName?: SourceNames;
Β Β Β Β title: string;
Β Β Β Β uri?: string;
}

Hierarchy

Properties

artworkUrl?: string

The URL of the artwork if available

-
author?: string

The Name of the Author

-
duration?: number

The duration of the Track

-
encoded?: string

The base64 of the unresolved track to "encode"

-
identifier?: string

The Identifier of the Track

-
isSeekable?: boolean

Wether the audio is seekable

-
isStream?: boolean

Wether the audio is of a live stream

-
isrc?: string

If isrc code is available, it's provided

-
sourceName?: SourceNames

The Source name of the Track, e.g. soundcloud, youtube, spotify

-
title: string

Required

-
uri?: string

The URL (aka Link) of the Track called URI

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Track.UnresolvedTrack.html b/docs/interfaces/Types_Track.UnresolvedTrack.html deleted file mode 100644 index 668544c..0000000 --- a/docs/interfaces/Types_Track.UnresolvedTrack.html +++ /dev/null @@ -1,186 +0,0 @@ -UnresolvedTrack | lavalink-client
interface UnresolvedTrack {
Β Β Β Β encoded?: string;
Β Β Β Β info: UnresolvedTrackInfo;
Β Β Β Β pluginInfo: Partial<PluginInfo>;
Β Β Β Β requester?: unknown;
Β Β Β Β resolve: ((player) => Promise<void>);
Β Β Β Β userData?: anyObject;
}

Properties

encoded?: string

The Base 64 encoded String

-

Track Information

-
pluginInfo: Partial<PluginInfo>

Plugin Information from Lavalink

-
requester?: unknown

The Track's Requester

-
resolve: ((player) => Promise<void>)

Type declaration

    • (player): Promise<void>
    • Required

      -

      Parameters

      Returns Promise<void>

userData?: anyObject

The userData Object from when you provide to the lavalink request

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Track.UnresolvedTrackInfo.html b/docs/interfaces/Types_Track.UnresolvedTrackInfo.html deleted file mode 100644 index faf7b2b..0000000 --- a/docs/interfaces/Types_Track.UnresolvedTrackInfo.html +++ /dev/null @@ -1,194 +0,0 @@ -UnresolvedTrackInfo | lavalink-client
interface UnresolvedTrackInfo {
Β Β Β Β artworkUrl?: string;
Β Β Β Β author?: string;
Β Β Β Β duration?: number;
Β Β Β Β identifier?: string;
Β Β Β Β isSeekable?: boolean;
Β Β Β Β isStream?: boolean;
Β Β Β Β isrc?: string;
Β Β Β Β sourceName?: SourceNames;
Β Β Β Β title: string;
Β Β Β Β uri?: string;
}

Hierarchy

Properties

artworkUrl?: string

The URL of the artwork if available

-
author?: string

The Name of the Author

-
duration?: number

The duration of the Track

-
identifier?: string

The Identifier of the Track

-
isSeekable?: boolean

Wether the audio is seekable

-
isStream?: boolean

Wether the audio is of a live stream

-
isrc?: string

If isrc code is available, it's provided

-
sourceName?: SourceNames

The Source name of the Track, e.g. soundcloud, youtube, spotify

-
title: string

Required

-
uri?: string

The URL (aka Link) of the Track called URI

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.ChannelDeletePacket.html b/docs/interfaces/Types_Utils.ChannelDeletePacket.html deleted file mode 100644 index 6844691..0000000 --- a/docs/interfaces/Types_Utils.ChannelDeletePacket.html +++ /dev/null @@ -1,180 +0,0 @@ -ChannelDeletePacket | lavalink-client
interface ChannelDeletePacket {
Β Β Β Β d: {
Β Β Β Β Β Β Β Β guild_id: string;
Β Β Β Β Β Β Β Β id: string;
Β Β Β Β };
Β Β Β Β t: "CHANNEL_DELETE";
}

Properties

d -t -

Properties

d: {
Β Β Β Β guild_id: string;
Β Β Β Β id: string;
}

data which is sent and relevant

-

Type declaration

  • guild_id: string

    guild id

    -
  • id: string

    Channel id

    -
t: "CHANNEL_DELETE"

Packet key for channel delete

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.Exception.html b/docs/interfaces/Types_Utils.Exception.html deleted file mode 100644 index 597ca8e..0000000 --- a/docs/interfaces/Types_Utils.Exception.html +++ /dev/null @@ -1,182 +0,0 @@ -Exception | lavalink-client
interface Exception {
Β Β Β Β cause: string;
Β Β Β Β error?: Error;
Β Β Β Β message: string;
Β Β Β Β severity: Severity;
}

Properties

Properties

cause: string

Cause by lavalink

-
error?: Error

Nodejs Error

-
message: string

Message by lavalink

-
severity: Severity

Severity of the error

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.FailingAddress.html b/docs/interfaces/Types_Utils.FailingAddress.html deleted file mode 100644 index 4109ec7..0000000 --- a/docs/interfaces/Types_Utils.FailingAddress.html +++ /dev/null @@ -1,180 +0,0 @@ -FailingAddress | lavalink-client
interface FailingAddress {
Β Β Β Β failingAddress: string;
Β Β Β Β failingTime: string;
Β Β Β Β failingTimestamp: number;
}

Properties

failingAddress: string

The failing address

-
failingTime: string

The timestamp when the address failed as a pretty string

-
failingTimestamp: number

The timestamp when the address failed

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.GuildShardPayload.html b/docs/interfaces/Types_Utils.GuildShardPayload.html deleted file mode 100644 index cfaff65..0000000 --- a/docs/interfaces/Types_Utils.GuildShardPayload.html +++ /dev/null @@ -1,182 +0,0 @@ -GuildShardPayload | lavalink-client
interface GuildShardPayload {
Β Β Β Β d: {
Β Β Β Β Β Β Β Β channel_id: string;
Β Β Β Β Β Β Β Β guild_id: string;
Β Β Β Β Β Β Β Β self_deaf: boolean;
Β Β Β Β Β Β Β Β self_mute: boolean;
Β Β Β Β };
Β Β Β Β op: number;
}

Properties

d -op -

Properties

d: {
Β Β Β Β channel_id: string;
Β Β Β Β guild_id: string;
Β Β Β Β self_deaf: boolean;
Β Β Β Β self_mute: boolean;
}

Data to send

-

Type declaration

  • channel_id: string

    channel to move/connect to, or null to leave it

    -
  • guild_id: string

    Guild id to apply voice settings

    -
  • self_deaf: boolean

    wether or not deafen yourself

    -
  • self_mute: boolean

    wether or not mute yourself

    -
op: number

The OP code

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.InvalidLavalinkRestRequest.html b/docs/interfaces/Types_Utils.InvalidLavalinkRestRequest.html deleted file mode 100644 index 03465f1..0000000 --- a/docs/interfaces/Types_Utils.InvalidLavalinkRestRequest.html +++ /dev/null @@ -1,186 +0,0 @@ -InvalidLavalinkRestRequest | lavalink-client

Interface InvalidLavalinkRestRequest

interface InvalidLavalinkRestRequest {
Β Β Β Β error: string;
Β Β Β Β message?: string;
Β Β Β Β path: string;
Β Β Β Β status: number;
Β Β Β Β timestamp: number;
Β Β Β Β trace?: unknown;
}

Properties

error: string

Specific Errro which was sent

-
message?: string

Specific Message which was created

-
path: string

Path of where it's from

-
status: number

Status of the request

-
timestamp: number

Rest Request Data for when it was made

-
trace?: unknown

The specific error trace from the request

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.LavaSearchFilteredResponse.html b/docs/interfaces/Types_Utils.LavaSearchFilteredResponse.html deleted file mode 100644 index 61f1f6c..0000000 --- a/docs/interfaces/Types_Utils.LavaSearchFilteredResponse.html +++ /dev/null @@ -1,180 +0,0 @@ -LavaSearchFilteredResponse | lavalink-client

Interface LavaSearchFilteredResponse

interface LavaSearchFilteredResponse {
Β Β Β Β info: PlaylistInfo;
Β Β Β Β pluginInfo: PluginInfo;
Β Β Β Β tracks: Track[];
}

Properties

Properties

The Information of a playlist provided by lavasearch

-
pluginInfo: PluginInfo

additional plugin information

-
tracks: Track[]

List of tracks

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.LavaSearchResponse.html b/docs/interfaces/Types_Utils.LavaSearchResponse.html deleted file mode 100644 index 8e7231d..0000000 --- a/docs/interfaces/Types_Utils.LavaSearchResponse.html +++ /dev/null @@ -1,186 +0,0 @@ -LavaSearchResponse | lavalink-client
interface LavaSearchResponse {
Β Β Β Β albums: LavaSearchFilteredResponse[];
Β Β Β Β artists: LavaSearchFilteredResponse[];
Β Β Β Β playlists: LavaSearchFilteredResponse[];
Β Β Β Β pluginInfo: PluginInfo;
Β Β Β Β texts: {
Β Β Β Β Β Β Β Β pluginInfo: PluginInfo;
Β Β Β Β Β Β Β Β text: string;
Β Β Β Β }[];
Β Β Β Β tracks: Track[];
}

Properties

An array of albums, only present if album is in types

-

An array of artists, only present if artist is in types

-

An array of playlists, only present if playlist is in types

-
pluginInfo: PluginInfo

Addition result data provided by plugins

-
texts: {
Β Β Β Β pluginInfo: PluginInfo;
Β Β Β Β text: string;
}[]

An array of text results, only present if text is in types

-

Type declaration

tracks: Track[]

An array of tracks, only present if track is in types

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.LavalinkPlayer.html b/docs/interfaces/Types_Utils.LavalinkPlayer.html deleted file mode 100644 index 7c96b1e..0000000 --- a/docs/interfaces/Types_Utils.LavalinkPlayer.html +++ /dev/null @@ -1,192 +0,0 @@ -LavalinkPlayer | lavalink-client
interface LavalinkPlayer {
Β Β Β Β filters: Partial<LavalinkFilterData>;
Β Β Β Β guildId: string;
Β Β Β Β paused: boolean;
Β Β Β Β state: {
Β Β Β Β Β Β Β Β connected: boolean;
Β Β Β Β Β Β Β Β ping: number;
Β Β Β Β Β Β Β Β position: number;
Β Β Β Β Β Β Β Β time: number;
Β Β Β Β };
Β Β Β Β track?: LavalinkTrack;
Β Β Β Β voice: LavalinkPlayerVoice;
Β Β Β Β volume: number;
}

Properties

filters: Partial<LavalinkFilterData>

All Audio Filters

-
guildId: string

Guild Id of the player

-
paused: boolean

Wether it's paused or not

-
state: {
Β Β Β Β connected: boolean;
Β Β Β Β ping: number;
Β Β Β Β position: number;
Β Β Β Β time: number;
}

Lavalink-Voice-State Variables

-

Type declaration

  • connected: boolean

    COnnected or not

    -
  • ping: number

    Ping to voice server

    -
  • position: number

    Position of the track

    -
  • time: number

    Time since connection established

    -

IF playing a track, all of the track information

-

Voice Endpoint data

-
volume: number

Lavalink volume (mind volumedecrementer)

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.LavalinkPlayerVoice.html b/docs/interfaces/Types_Utils.LavalinkPlayerVoice.html deleted file mode 100644 index 4782273..0000000 --- a/docs/interfaces/Types_Utils.LavalinkPlayerVoice.html +++ /dev/null @@ -1,184 +0,0 @@ -LavalinkPlayerVoice | lavalink-client
interface LavalinkPlayerVoice {
Β Β Β Β connected?: boolean;
Β Β Β Β endpoint: string;
Β Β Β Β ping?: number;
Β Β Β Β sessionId: string;
Β Β Β Β token: string;
}

Properties

connected?: boolean

Wether or not the player is connected

-
endpoint: string

The Voice Server Endpoint

-
ping?: number

The Ping to the voice server

-
sessionId: string

The Voice SessionId

-
token: string

The Voice Token

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.LavalinkPlayerVoiceOptions.html b/docs/interfaces/Types_Utils.LavalinkPlayerVoiceOptions.html deleted file mode 100644 index 31c1017..0000000 --- a/docs/interfaces/Types_Utils.LavalinkPlayerVoiceOptions.html +++ /dev/null @@ -1,180 +0,0 @@ -LavalinkPlayerVoiceOptions | lavalink-client

Interface LavalinkPlayerVoiceOptions

interface LavalinkPlayerVoiceOptions {
Β Β Β Β endpoint: string;
Β Β Β Β sessionId: string;
Β Β Β Β token: string;
}

Hierarchy

Properties

Properties

endpoint: string

The Voice Server Endpoint

-
sessionId: string

The Voice SessionId

-
token: string

The Voice Token

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.LyricsFoundEvent.html b/docs/interfaces/Types_Utils.LyricsFoundEvent.html deleted file mode 100644 index ac3e43f..0000000 --- a/docs/interfaces/Types_Utils.LyricsFoundEvent.html +++ /dev/null @@ -1,181 +0,0 @@ -LyricsFoundEvent | lavalink-client
interface LyricsFoundEvent {
Β Β Β Β guildId: string;
Β Β Β Β lyrics: LyricsResult;
Β Β Β Β op: "event";
Β Β Β Β type: "LyricsFoundEvent";
}

Hierarchy

Properties

Properties

guildId: string

The guildId

-
lyrics: LyricsResult

The lyrics

-
op: "event"
type: "LyricsFoundEvent"

The lyricsfound event

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.LyricsLineEvent.html b/docs/interfaces/Types_Utils.LyricsLineEvent.html deleted file mode 100644 index 1826276..0000000 --- a/docs/interfaces/Types_Utils.LyricsLineEvent.html +++ /dev/null @@ -1,185 +0,0 @@ -LyricsLineEvent | lavalink-client
interface LyricsLineEvent {
Β Β Β Β guildId: string;
Β Β Β Β line: LyricsLine;
Β Β Β Β lineIndex: number;
Β Β Β Β op: "event";
Β Β Β Β skipped: boolean;
Β Β Β Β type: "LyricsLineEvent";
}

Hierarchy

Properties

Properties

guildId: string

The guildId

-

The line

-
lineIndex: number

The line number

-
op: "event"
skipped: boolean

skipped is true if the line was skipped

-
type: "LyricsLineEvent"

The lyricsline event

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.LyricsNotFoundEvent.html b/docs/interfaces/Types_Utils.LyricsNotFoundEvent.html deleted file mode 100644 index 6a0ee6e..0000000 --- a/docs/interfaces/Types_Utils.LyricsNotFoundEvent.html +++ /dev/null @@ -1,179 +0,0 @@ -LyricsNotFoundEvent | lavalink-client
interface LyricsNotFoundEvent {
Β Β Β Β guildId: string;
Β Β Β Β op: "event";
Β Β Β Β type: "LyricsNotFoundEvent";
}

Hierarchy

Properties

Properties

guildId: string

The guildId

-
op: "event"
type: "LyricsNotFoundEvent"

The lyricsnotfound event

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.MiniMapConstructor.html b/docs/interfaces/Types_Utils.MiniMapConstructor.html deleted file mode 100644 index 6e5e378..0000000 --- a/docs/interfaces/Types_Utils.MiniMapConstructor.html +++ /dev/null @@ -1,177 +0,0 @@ -MiniMapConstructor | lavalink-client

Interface MiniMapConstructorInternal

interface MiniMapConstructor {
Β Β Β Β new MiniMapConstructornew (): MiniMap<unknown, unknown>;
Β Β Β Β new MiniMapConstructornew <K, V>(entries?): MiniMap<K, V>;
Β Β Β Β new MiniMapConstructornew <K, V>(iterable): MiniMap<K, V>;
Β Β Β Β [species]: MiniMapConstructor;
Β Β Β Β prototype: MiniMap<unknown, unknown>;
}

Constructors

Properties

Constructors

Properties

prototype: MiniMap<unknown, unknown>

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.NodeMessage.html b/docs/interfaces/Types_Utils.NodeMessage.html deleted file mode 100644 index 8477c88..0000000 --- a/docs/interfaces/Types_Utils.NodeMessage.html +++ /dev/null @@ -1,193 +0,0 @@ -NodeMessage | lavalink-client

Interface for nodeStats from lavalink

-
interface NodeMessage {
Β Β Β Β cpu: CPUStats;
Β Β Β Β frameStats: FrameStats;
Β Β Β Β guildId: string;
Β Β Β Β memory: MemoryStats;
Β Β Β Β op: "playerUpdate" | "stats" | "event";
Β Β Β Β players: number;
Β Β Β Β playingPlayers: number;
Β Β Β Β type: PlayerEventType;
Β Β Β Β uptime: number;
}

Hierarchy

Properties

The cpu stats for the node.

-
frameStats: FrameStats

The frame stats for the node.

-
guildId: string

The specific guild id for that message

-
memory: MemoryStats

The memory stats for the node.

-
op: "playerUpdate" | "stats" | "event"

what ops are applying to that event

-
players: number

The amount of players on the node.

-
playingPlayers: number

The amount of playing players on the node.

-

The type of the event

-
uptime: number

The uptime for the node.

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.PlayerEvent.html b/docs/interfaces/Types_Utils.PlayerEvent.html deleted file mode 100644 index 0b68ccc..0000000 --- a/docs/interfaces/Types_Utils.PlayerEvent.html +++ /dev/null @@ -1,177 +0,0 @@ -PlayerEvent | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.PlayerUpdateInfo.html b/docs/interfaces/Types_Utils.PlayerUpdateInfo.html deleted file mode 100644 index 3173c5e..0000000 --- a/docs/interfaces/Types_Utils.PlayerUpdateInfo.html +++ /dev/null @@ -1,180 +0,0 @@ -PlayerUpdateInfo | lavalink-client
interface PlayerUpdateInfo {
Β Β Β Β guildId: string;
Β Β Β Β noReplace?: boolean;
Β Β Β Β playerOptions: LavalinkPlayOptions;
}

Properties

guildId: string

guild id of the player

-
noReplace?: boolean

Whether or not replace the current track with the new one (true is recommended)

-
playerOptions: LavalinkPlayOptions

Player options to provide to lavalink

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.PlaylistInfo.html b/docs/interfaces/Types_Utils.PlaylistInfo.html deleted file mode 100644 index 2f08270..0000000 --- a/docs/interfaces/Types_Utils.PlaylistInfo.html +++ /dev/null @@ -1,188 +0,0 @@ -PlaylistInfo | lavalink-client
interface PlaylistInfo {
Β Β Β Β author?: string;
Β Β Β Β duration: number;
Β Β Β Β name: string;
Β Β Β Β selectedTrack: Track;
Β Β Β Β thumbnail?: string;
Β Β Β Β title: string;
Β Β Β Β uri?: string;
}

Properties

author?: string

The playlist Author

-
duration: number

The duration of the entire playlist. (calcualted)

-
name: string

The playlist name

-
selectedTrack: Track

The playlist selected track.

-
thumbnail?: string

The playlist Thumbnail

-
title: string

The playlist title (same as name)

-
uri?: string

A Uri to the playlist

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.RoutePlanner.html b/docs/interfaces/Types_Utils.RoutePlanner.html deleted file mode 100644 index 019c82a..0000000 --- a/docs/interfaces/Types_Utils.RoutePlanner.html +++ /dev/null @@ -1,185 +0,0 @@ -RoutePlanner | lavalink-client
interface RoutePlanner {
Β Β Β Β class?: RoutePlannerTypes;
Β Β Β Β details?: {
Β Β Β Β Β Β Β Β blockIndex?: string;
Β Β Β Β Β Β Β Β currentAddress?: string;
Β Β Β Β Β Β Β Β currentAddressIndex?: string;
Β Β Β Β Β Β Β Β failingAddresses: FailingAddress[];
Β Β Β Β Β Β Β Β ipBlock: {
Β Β Β Β Β Β Β Β Β Β Β Β size: string;
Β Β Β Β Β Β Β Β Β Β Β Β type: "Inet4Address" | "Inet6Address";
Β Β Β Β Β Β Β Β };
Β Β Β Β Β Β Β Β ipIndex?: string;
Β Β Β Β Β Β Β Β rotateIndex?: string;
Β Β Β Β };
}

Properties

Properties

details?: {
Β Β Β Β blockIndex?: string;
Β Β Β Β currentAddress?: string;
Β Β Β Β currentAddressIndex?: string;
Β Β Β Β failingAddresses: FailingAddress[];
Β Β Β Β ipBlock: {
Β Β Β Β Β Β Β Β size: string;
Β Β Β Β Β Β Β Β type: "Inet4Address" | "Inet6Address";
Β Β Β Β };
Β Β Β Β ipIndex?: string;
Β Β Β Β rotateIndex?: string;
}

Type declaration

  • Optional blockIndex?: string

    The information in which /64 block ips are chosen. This number increases on each ban.

    -
  • Optional currentAddress?: string

    The current address being used

    -
  • Optional currentAddressIndex?: string

    The current offset in the ip block

    -
  • failingAddresses: FailingAddress[]

    The failing addresses

    -
  • ipBlock: {
    Β Β Β Β size: string;
    Β Β Β Β type: "Inet4Address" | "Inet6Address";
    }

    The ip block being used

    -
    • size: string

      The size of the ip block

      -
    • type: "Inet4Address" | "Inet6Address"

      The type of the ip block

      -
  • Optional ipIndex?: string

    The current offset in the block

    -
  • Optional rotateIndex?: string

    The number of rotations

    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.SearchResult.html b/docs/interfaces/Types_Utils.SearchResult.html deleted file mode 100644 index 406a14f..0000000 --- a/docs/interfaces/Types_Utils.SearchResult.html +++ /dev/null @@ -1,179 +0,0 @@ -SearchResult | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.Session.html b/docs/interfaces/Types_Utils.Session.html deleted file mode 100644 index 9c36a29..0000000 --- a/docs/interfaces/Types_Utils.Session.html +++ /dev/null @@ -1,178 +0,0 @@ -Session | lavalink-client
interface Session {
Β Β Β Β resuming: boolean;
Β Β Β Β timeout: number;
}

Properties

Properties

resuming: boolean

Wether or not session is resuming or not

-
timeout: number

For how long a session is lasting while not connected

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.SponsorBlockChapterStarted.html b/docs/interfaces/Types_Utils.SponsorBlockChapterStarted.html deleted file mode 100644 index f487ca5..0000000 --- a/docs/interfaces/Types_Utils.SponsorBlockChapterStarted.html +++ /dev/null @@ -1,180 +0,0 @@ -SponsorBlockChapterStarted | lavalink-client

Interface SponsorBlockChapterStarted

interface SponsorBlockChapterStarted {
Β Β Β Β chapter: {
Β Β Β Β Β Β Β Β duration: number;
Β Β Β Β Β Β Β Β end: number;
Β Β Β Β Β Β Β Β name: string;
Β Β Β Β Β Β Β Β start: number;
Β Β Β Β };
Β Β Β Β guildId: string;
Β Β Β Β op: "event";
Β Β Β Β type: "ChapterStarted";
}

Hierarchy

Properties

Properties

chapter: {
Β Β Β Β duration: number;
Β Β Β Β end: number;
Β Β Β Β name: string;
Β Β Β Β start: number;
}

The Chapter which started

-

Type declaration

  • duration: number
  • end: number
  • name: string

    The Name of the Chapter

    -
  • start: number
guildId: string
op: "event"
type: "ChapterStarted"

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.SponsorBlockChaptersLoaded.html b/docs/interfaces/Types_Utils.SponsorBlockChaptersLoaded.html deleted file mode 100644 index ae6dd1a..0000000 --- a/docs/interfaces/Types_Utils.SponsorBlockChaptersLoaded.html +++ /dev/null @@ -1,180 +0,0 @@ -SponsorBlockChaptersLoaded | lavalink-client

Interface SponsorBlockChaptersLoaded

interface SponsorBlockChaptersLoaded {
Β Β Β Β chapters: {
Β Β Β Β Β Β Β Β duration: number;
Β Β Β Β Β Β Β Β end: number;
Β Β Β Β Β Β Β Β name: string;
Β Β Β Β Β Β Β Β start: number;
Β Β Β Β }[];
Β Β Β Β guildId: string;
Β Β Β Β op: "event";
Β Β Β Β type: "ChaptersLoaded";
}

Hierarchy

Properties

Properties

chapters: {
Β Β Β Β duration: number;
Β Β Β Β end: number;
Β Β Β Β name: string;
Β Β Β Β start: number;
}[]

All Chapters loaded

-

Type declaration

  • duration: number
  • end: number
  • name: string

    The Name of the Chapter

    -
  • start: number
guildId: string
op: "event"
type: "ChaptersLoaded"

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.SponsorBlockSegmentSkipped.html b/docs/interfaces/Types_Utils.SponsorBlockSegmentSkipped.html deleted file mode 100644 index 4cfd234..0000000 --- a/docs/interfaces/Types_Utils.SponsorBlockSegmentSkipped.html +++ /dev/null @@ -1,178 +0,0 @@ -SponsorBlockSegmentSkipped | lavalink-client

Interface SponsorBlockSegmentSkipped

interface SponsorBlockSegmentSkipped {
Β Β Β Β guildId: string;
Β Β Β Β op: "event";
Β Β Β Β segment: {
Β Β Β Β Β Β Β Β category: string;
Β Β Β Β Β Β Β Β end: number;
Β Β Β Β Β Β Β Β start: number;
Β Β Β Β };
Β Β Β Β type: "SegmentSkipped";
}

Hierarchy

Properties

Properties

guildId: string
op: "event"
segment: {
Β Β Β Β category: string;
Β Β Β Β end: number;
Β Β Β Β start: number;
}

Type declaration

  • category: string
  • end: number
  • start: number
type: "SegmentSkipped"

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.SponsorBlockSegmentsLoaded.html b/docs/interfaces/Types_Utils.SponsorBlockSegmentsLoaded.html deleted file mode 100644 index a771083..0000000 --- a/docs/interfaces/Types_Utils.SponsorBlockSegmentsLoaded.html +++ /dev/null @@ -1,178 +0,0 @@ -SponsorBlockSegmentsLoaded | lavalink-client

Interface SponsorBlockSegmentsLoaded

interface SponsorBlockSegmentsLoaded {
Β Β Β Β guildId: string;
Β Β Β Β op: "event";
Β Β Β Β segments: {
Β Β Β Β Β Β Β Β category: string;
Β Β Β Β Β Β Β Β end: number;
Β Β Β Β Β Β Β Β start: number;
Β Β Β Β }[];
Β Β Β Β type: "SegmentsLoaded";
}

Hierarchy

Properties

Properties

guildId: string
op: "event"
segments: {
Β Β Β Β category: string;
Β Β Β Β end: number;
Β Β Β Β start: number;
}[]

Type declaration

  • category: string
  • end: number
  • start: number
type: "SegmentsLoaded"

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.TrackEndEvent.html b/docs/interfaces/Types_Utils.TrackEndEvent.html deleted file mode 100644 index 000eda3..0000000 --- a/docs/interfaces/Types_Utils.TrackEndEvent.html +++ /dev/null @@ -1,179 +0,0 @@ -TrackEndEvent | lavalink-client
interface TrackEndEvent {
Β Β Β Β guildId: string;
Β Β Β Β op: "event";
Β Β Β Β reason: TrackEndReason;
Β Β Β Β track: LavalinkTrack;
Β Β Β Β type: "TrackEndEvent";
}

Hierarchy

Properties

Properties

guildId: string
op: "event"
type: "TrackEndEvent"

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.TrackExceptionEvent.html b/docs/interfaces/Types_Utils.TrackExceptionEvent.html deleted file mode 100644 index 1ebc636..0000000 --- a/docs/interfaces/Types_Utils.TrackExceptionEvent.html +++ /dev/null @@ -1,180 +0,0 @@ -TrackExceptionEvent | lavalink-client
interface TrackExceptionEvent {
Β Β Β Β error: string;
Β Β Β Β exception?: Exception;
Β Β Β Β guildId: string;
Β Β Β Β op: "event";
Β Β Β Β tracK: LavalinkTrack;
Β Β Β Β type: "TrackExceptionEvent";
}

Hierarchy

Properties

Properties

error: string
exception?: Exception
guildId: string
op: "event"
type: "TrackExceptionEvent"

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.TrackStartEvent.html b/docs/interfaces/Types_Utils.TrackStartEvent.html deleted file mode 100644 index db9cf75..0000000 --- a/docs/interfaces/Types_Utils.TrackStartEvent.html +++ /dev/null @@ -1,178 +0,0 @@ -TrackStartEvent | lavalink-client
interface TrackStartEvent {
Β Β Β Β guildId: string;
Β Β Β Β op: "event";
Β Β Β Β track: LavalinkTrack;
Β Β Β Β type: "TrackStartEvent";
}

Hierarchy

Properties

Properties

guildId: string
op: "event"
type: "TrackStartEvent"

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.TrackStuckEvent.html b/docs/interfaces/Types_Utils.TrackStuckEvent.html deleted file mode 100644 index d849df0..0000000 --- a/docs/interfaces/Types_Utils.TrackStuckEvent.html +++ /dev/null @@ -1,179 +0,0 @@ -TrackStuckEvent | lavalink-client
interface TrackStuckEvent {
Β Β Β Β guildId: string;
Β Β Β Β op: "event";
Β Β Β Β thresholdMs: number;
Β Β Β Β tracK: LavalinkTrack;
Β Β Β Β type: "TrackStuckEvent";
}

Hierarchy

Properties

Properties

guildId: string
op: "event"
thresholdMs: number
type: "TrackStuckEvent"

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.UnresolvedSearchResult.html b/docs/interfaces/Types_Utils.UnresolvedSearchResult.html deleted file mode 100644 index 21f9175..0000000 --- a/docs/interfaces/Types_Utils.UnresolvedSearchResult.html +++ /dev/null @@ -1,179 +0,0 @@ -UnresolvedSearchResult | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.VoicePacket.html b/docs/interfaces/Types_Utils.VoicePacket.html deleted file mode 100644 index dad8ecc..0000000 --- a/docs/interfaces/Types_Utils.VoicePacket.html +++ /dev/null @@ -1,178 +0,0 @@ -VoicePacket | lavalink-client
interface VoicePacket {
Β Β Β Β d: VoiceState | VoiceServer;
Β Β Β Β t?: "VOICE_SERVER_UPDATE" | "VOICE_STATE_UPDATE";
}

Properties

d -t? -

Properties

Voice Packets to send

-
t?: "VOICE_SERVER_UPDATE" | "VOICE_STATE_UPDATE"

Voice Packet Keys to send

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.VoiceServer.html b/docs/interfaces/Types_Utils.VoiceServer.html deleted file mode 100644 index 2f1fdc4..0000000 --- a/docs/interfaces/Types_Utils.VoiceServer.html +++ /dev/null @@ -1,180 +0,0 @@ -VoiceServer | lavalink-client
interface VoiceServer {
Β Β Β Β endpoint: string;
Β Β Β Β guild_id: string;
Β Β Β Β token: string;
}

Properties

Properties

endpoint: string

Server Endpoint

-
guild_id: string

Guild Id of the voice server connection

-
token: string

Voice Token

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.VoiceState.html b/docs/interfaces/Types_Utils.VoiceState.html deleted file mode 100644 index db65fdd..0000000 --- a/docs/interfaces/Types_Utils.VoiceState.html +++ /dev/null @@ -1,190 +0,0 @@ -VoiceState | lavalink-client
interface VoiceState {
Β Β Β Β channel_id: string;
Β Β Β Β event: VoiceServer;
Β Β Β Β guildId: string;
Β Β Β Β guild_id: string;
Β Β Β Β op: "voiceUpdate";
Β Β Β Β sessionId?: string;
Β Β Β Β session_id: string;
Β Β Β Β user_id: string;
}

Properties

channel_id: string

Voice Channel Id

-

Event data

-
guildId: string

GuildId provided by lavalink

-
guild_id: string

guild id of the voice channel

-
op: "voiceUpdate"

OP key from lavalink

-
sessionId?: string

Session Id of the voice connection

-
session_id: string

Session Id of the voice connection

-
user_id: string

user id from the voice connection

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/interfaces/Types_Utils.WebSocketClosedEvent.html b/docs/interfaces/Types_Utils.WebSocketClosedEvent.html deleted file mode 100644 index d8884c3..0000000 --- a/docs/interfaces/Types_Utils.WebSocketClosedEvent.html +++ /dev/null @@ -1,180 +0,0 @@ -WebSocketClosedEvent | lavalink-client
interface WebSocketClosedEvent {
Β Β Β Β byRemote: boolean;
Β Β Β Β code: number;
Β Β Β Β guildId: string;
Β Β Β Β op: "event";
Β Β Β Β reason: string;
Β Β Β Β type: "WebSocketClosedEvent";
}

Hierarchy

Properties

Properties

byRemote: boolean
code: number
guildId: string
op: "event"
reason: string
type: "WebSocketClosedEvent"

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/Constants.html b/docs/modules/Constants.html deleted file mode 100644 index 847b303..0000000 --- a/docs/modules/Constants.html +++ /dev/null @@ -1,179 +0,0 @@ -Constants | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/CustomSearches_BandCampSearch.html b/docs/modules/CustomSearches_BandCampSearch.html deleted file mode 100644 index b003d4b..0000000 --- a/docs/modules/CustomSearches_BandCampSearch.html +++ /dev/null @@ -1,175 +0,0 @@ -CustomSearches/BandCampSearch | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/Filters.html b/docs/modules/Filters.html deleted file mode 100644 index 1f2d352..0000000 --- a/docs/modules/Filters.html +++ /dev/null @@ -1,175 +0,0 @@ -Filters | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/LavalinkManager.html b/docs/modules/LavalinkManager.html deleted file mode 100644 index 2780750..0000000 --- a/docs/modules/LavalinkManager.html +++ /dev/null @@ -1,175 +0,0 @@ -LavalinkManager | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/LavalinkManagerStatics.html b/docs/modules/LavalinkManagerStatics.html deleted file mode 100644 index cff8c3d..0000000 --- a/docs/modules/LavalinkManagerStatics.html +++ /dev/null @@ -1,177 +0,0 @@ -LavalinkManagerStatics | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/Node.html b/docs/modules/Node.html deleted file mode 100644 index 08384fe..0000000 --- a/docs/modules/Node.html +++ /dev/null @@ -1,175 +0,0 @@ -Node | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/NodeManager.html b/docs/modules/NodeManager.html deleted file mode 100644 index 392ed28..0000000 --- a/docs/modules/NodeManager.html +++ /dev/null @@ -1,175 +0,0 @@ -NodeManager | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/Player.html b/docs/modules/Player.html deleted file mode 100644 index ad99cf3..0000000 --- a/docs/modules/Player.html +++ /dev/null @@ -1,175 +0,0 @@ -Player | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/Queue.html b/docs/modules/Queue.html deleted file mode 100644 index 3f005f8..0000000 --- a/docs/modules/Queue.html +++ /dev/null @@ -1,177 +0,0 @@ -Queue | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/Types_Filters.html b/docs/modules/Types_Filters.html deleted file mode 100644 index 273bb13..0000000 --- a/docs/modules/Types_Filters.html +++ /dev/null @@ -1,187 +0,0 @@ -Types/Filters | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/Types_Manager.html b/docs/modules/Types_Manager.html deleted file mode 100644 index 4bb2aba..0000000 --- a/docs/modules/Types_Manager.html +++ /dev/null @@ -1,178 +0,0 @@ -Types/Manager | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/Types_Node.html b/docs/modules/Types_Node.html deleted file mode 100644 index ffb4ce4..0000000 --- a/docs/modules/Types_Node.html +++ /dev/null @@ -1,190 +0,0 @@ -Types/Node | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/Types_Player.html b/docs/modules/Types_Player.html deleted file mode 100644 index fd83c83..0000000 --- a/docs/modules/Types_Player.html +++ /dev/null @@ -1,182 +0,0 @@ -Types/Player | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/Types_Queue.html b/docs/modules/Types_Queue.html deleted file mode 100644 index fda9a40..0000000 --- a/docs/modules/Types_Queue.html +++ /dev/null @@ -1,178 +0,0 @@ -Types/Queue | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/Types_Track.html b/docs/modules/Types_Track.html deleted file mode 100644 index ddc3867..0000000 --- a/docs/modules/Types_Track.html +++ /dev/null @@ -1,185 +0,0 @@ -Types/Track | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/Types_Utils.html b/docs/modules/Types_Utils.html deleted file mode 100644 index 37204e3..0000000 --- a/docs/modules/Types_Utils.html +++ /dev/null @@ -1,237 +0,0 @@ -Types/Utils | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/modules/Utils.html b/docs/modules/Utils.html deleted file mode 100644 index 8716dab..0000000 --- a/docs/modules/Utils.html +++ /dev/null @@ -1,182 +0,0 @@ -Utils | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 0000000..b59c3c0 --- /dev/null +++ b/docs/package.json @@ -0,0 +1,22 @@ +{ + "name": "docs", + "type": "module", + "version": "0.0.1", + "scripts": { + "dev": "astro dev", + "start": "astro dev", + "build": "astro check && astro build", + "preview": "astro preview", + "astro": "astro" + }, + "dependencies": { + "@astrojs/check": "^0.9.3", + "@astrojs/starlight": "^0.28.2", + "astro": "^4.15.3", + "sharp": "^0.32.5", + "starlight-typedoc": "^0.16.0", + "typedoc": "^0.26.7", + "typedoc-plugin-markdown": "^4.2.7", + "typescript": "^5.6.2" + } +} \ No newline at end of file diff --git a/docs/public/favicon.svg b/docs/public/favicon.svg new file mode 100644 index 0000000..cba5ac1 --- /dev/null +++ b/docs/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/src/assets/houston.webp b/docs/src/assets/houston.webp new file mode 100644 index 0000000000000000000000000000000000000000..930c164974ad8eb528878f15a98016249b8cf546 GIT binary patch literal 98506 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 b6~t;_wBcJ3AWgga7~Sz~izoKbpAY~5r|m$8 literal 0 HcmV?d00001 diff --git a/docs/src/components/version.astro b/docs/src/components/version.astro new file mode 100644 index 0000000..2c60231 --- /dev/null +++ b/docs/src/components/version.astro @@ -0,0 +1,6 @@ +--- +import { version } from '../../../package.json'; + +--- + +v{version} \ No newline at end of file diff --git a/docs/src/content/config.ts b/docs/src/content/config.ts new file mode 100644 index 0000000..45f60b0 --- /dev/null +++ b/docs/src/content/config.ts @@ -0,0 +1,6 @@ +import { defineCollection } from 'astro:content'; +import { docsSchema } from '@astrojs/starlight/schema'; + +export const collections = { + docs: defineCollection({ schema: docsSchema() }), +}; diff --git a/docs/src/content/docs/api/README.md b/docs/src/content/docs/api/README.md new file mode 100644 index 0000000..ea85dde --- /dev/null +++ b/docs/src/content/docs/api/README.md @@ -0,0 +1,178 @@ +--- +editUrl: false +next: true +prev: true +title: "Lavalink Client" +--- + +## Enumerations + +| Enumeration | Description | +| ------ | ------ | +| [DebugEvents](/api/enumerations/debugevents/) | - | +| [DestroyReasons](/api/enumerations/destroyreasons/) | - | + +## Classes + +| Class | Description | +| ------ | ------ | +| [DefaultQueueStore](/api/classes/defaultqueuestore/) | - | +| [FilterManager](/api/classes/filtermanager/) | The FilterManager for each player | +| [LavalinkManager](/api/classes/lavalinkmanager/) | - | +| [LavalinkNode](/api/classes/lavalinknode/) | Lavalink Node creator class | +| [ManagerUtils](/api/classes/managerutils/) | - | +| [MiniMap](/api/classes/minimap/) | - | +| [NodeManager](/api/classes/nodemanager/) | - | +| [Player](/api/classes/player/) | - | +| [Queue](/api/classes/queue/) | - | +| [QueueSaver](/api/classes/queuesaver/) | - | + +## Interfaces + +| Interface | Description | +| ------ | ------ | +| [BaseNodeStats](/api/interfaces/basenodestats/) | BaseNodeStats object from Lavalink | +| [BasePlayOptions](/api/interfaces/baseplayoptions/) | - | +| [BotClientOptions](/api/interfaces/botclientoptions/) | The Bot client Options needed for the manager | +| [ChannelDeletePacket](/api/interfaces/channeldeletepacket/) | - | +| [ChannelMixFilter](/api/interfaces/channelmixfilter/) | Mixes both channels (left and right), with a configurable factor on how much each channel affects the other. With the defaults, both channels are kept independent of each other. Setting all factors to 0.5 means both channels get the same audio. | +| [CPUStats](/api/interfaces/cpustats/) | CPU Stats object from lavalink | +| [DistortionFilter](/api/interfaces/distortionfilter/) | Distortion effect. It can generate some pretty unique audio effects. | +| [EQBand](/api/interfaces/eqband/) | There are 15 bands (0-14) that can be changed. "gain" is the multiplier for the given band. The default value is 0. Valid values range from -0.25 to 1.0, where -0.25 means the given band is completely muted, and 0.25 means it is doubled. Modifying the gain could also change the volume of the output. | +| [Exception](/api/interfaces/exception/) | - | +| [FailingAddress](/api/interfaces/failingaddress/) | - | +| [FilterData](/api/interfaces/filterdata/) | Filter Data stored in the Client and partially sent to Lavalink | +| [FrameStats](/api/interfaces/framestats/) | FrameStats Object from lavalink | +| [GitObject](/api/interfaces/gitobject/) | Git information object from lavalink | +| [GuildShardPayload](/api/interfaces/guildshardpayload/) | - | +| [InvalidLavalinkRestRequest](/api/interfaces/invalidlavalinkrestrequest/) | - | +| [KaraokeFilter](/api/interfaces/karaokefilter/) | Uses equalization to eliminate part of a band, usually targeting vocals. | +| [LavalinkFilterData](/api/interfaces/lavalinkfilterdata/) | Actual Filter Data sent to Lavalink | +| [LavalinkInfo](/api/interfaces/lavalinkinfo/) | Entire lavalink information object from lavalink | +| [LavalinkManagerEvents](/api/interfaces/lavalinkmanagerevents/) | The events from the lavalink Manager | +| [LavalinkNodeOptions](/api/interfaces/lavalinknodeoptions/) | Node Options for creating a lavalink node | +| [LavalinkPlayer](/api/interfaces/lavalinkplayer/) | - | +| [LavalinkPlayerVoice](/api/interfaces/lavalinkplayervoice/) | - | +| [LavalinkPlayOptions](/api/interfaces/lavalinkplayoptions/) | - | +| [LavalinkTrack](/api/interfaces/lavalinktrack/) | - | +| [LavalinkTrackInfo](/api/interfaces/lavalinktrackinfo/) | - | +| [LavaSearchFilteredResponse](/api/interfaces/lavasearchfilteredresponse/) | - | +| [LavaSearchResponse](/api/interfaces/lavasearchresponse/) | - | +| [LowPassFilter](/api/interfaces/lowpassfilter/) | Higher frequencies get suppressed, while lower frequencies pass through this filter, thus the name low pass. Any smoothing values equal to or less than 1.0 will disable the filter. | +| [LyricsFoundEvent](/api/interfaces/lyricsfoundevent/) | - | +| [LyricsLine](/api/interfaces/lyricsline/) | - | +| [LyricsLineEvent](/api/interfaces/lyricslineevent/) | - | +| [LyricsNotFoundEvent](/api/interfaces/lyricsnotfoundevent/) | - | +| [LyricsResult](/api/interfaces/lyricsresult/) | - | +| [ManagerOptions](/api/interfaces/manageroptions/) | Manager Options used to create the manager | +| [ManagerPlayerOptions](/api/interfaces/managerplayeroptions/) | Sub Manager Options, for player specific things | +| [ManagerQueueOptions](/api/interfaces/managerqueueoptions/) | - | +| [MemoryStats](/api/interfaces/memorystats/) | Memory Stats object from lavalink | +| [NodeManagerEvents](/api/interfaces/nodemanagerevents/) | - | +| [NodeMessage](/api/interfaces/nodemessage/) | Interface for nodeStats from lavalink | +| [NodeStats](/api/interfaces/nodestats/) | Interface for nodeStats from lavalink | +| [PlayerEvent](/api/interfaces/playerevent/) | - | +| [PlayerFilters](/api/interfaces/playerfilters/) | The "active" / "disabled" Player Filters | +| [PlayerJson](/api/interfaces/playerjson/) | - | +| [PlayerOptions](/api/interfaces/playeroptions/) | - | +| [PlayerUpdateInfo](/api/interfaces/playerupdateinfo/) | - | +| [PlaylistInfo](/api/interfaces/playlistinfo/) | - | +| [PlayOptions](/api/interfaces/playoptions/) | - | +| [PluginInfo](/api/interfaces/plugininfo/) | - | +| [PluginObject](/api/interfaces/pluginobject/) | Lavalink's plugins object from lavalink's plugin | +| [QueueChangesWatcher](/api/interfaces/queuechangeswatcher/) | - | +| [QueueStoreManager](/api/interfaces/queuestoremanager/) | - | +| [RotationFilter](/api/interfaces/rotationfilter/) | Rotates the sound around the stereo channels/user headphones (aka Audio Panning). It can produce an effect similar to https://youtu.be/QB9EB8mTKcc (without the reverb). | +| [RoutePlanner](/api/interfaces/routeplanner/) | - | +| [SearchResult](/api/interfaces/searchresult/) | - | +| [Session](/api/interfaces/session/) | - | +| [SponsorBlockChaptersLoaded](/api/interfaces/sponsorblockchaptersloaded/) | - | +| [SponsorBlockChapterStarted](/api/interfaces/sponsorblockchapterstarted/) | - | +| [SponsorBlockSegmentSkipped](/api/interfaces/sponsorblocksegmentskipped/) | - | +| [SponsorBlockSegmentsLoaded](/api/interfaces/sponsorblocksegmentsloaded/) | - | +| [StoredQueue](/api/interfaces/storedqueue/) | - | +| [TimescaleFilter](/api/interfaces/timescalefilter/) | Changes the speed, pitch, and rate | +| [Track](/api/interfaces/track/) | - | +| [TrackEndEvent](/api/interfaces/trackendevent/) | - | +| [TrackExceptionEvent](/api/interfaces/trackexceptionevent/) | - | +| [TrackInfo](/api/interfaces/trackinfo/) | - | +| [TrackStartEvent](/api/interfaces/trackstartevent/) | - | +| [TrackStuckEvent](/api/interfaces/trackstuckevent/) | - | +| [TremoloFilter](/api/interfaces/tremolofilter/) | Uses amplification to create a shuddering effect, where the volume quickly oscillates. Demo: https://en.wikipedia.org/wiki/File:Fuse_Electronics_Tremolo_MK-III_Quick_Demo.ogv | +| [UnresolvedQuery](/api/interfaces/unresolvedquery/) | - | +| [UnresolvedSearchResult](/api/interfaces/unresolvedsearchresult/) | - | +| [UnresolvedTrack](/api/interfaces/unresolvedtrack/) | - | +| [UnresolvedTrackInfo](/api/interfaces/unresolvedtrackinfo/) | - | +| [VersionObject](/api/interfaces/versionobject/) | Lavalink's version object from lavalink | +| [VibratoFilter](/api/interfaces/vibratofilter/) | Similar to tremolo. While tremolo oscillates the volume, vibrato oscillates the pitch. | +| [VoicePacket](/api/interfaces/voicepacket/) | - | +| [VoiceServer](/api/interfaces/voiceserver/) | - | +| [VoiceState](/api/interfaces/voicestate/) | - | +| [WebSocketClosedEvent](/api/interfaces/websocketclosedevent/) | - | + +## Type Aliases + +| Type alias | Description | +| ------ | ------ | +| [anyObject](/api/type-aliases/anyobject/) | - | +| [AudioOutputs](/api/type-aliases/audiooutputs/) | The Audio Outputs type | +| [Base64](/api/type-aliases/base64/) | The Base64 decodes tring by lavalink | +| [ClientCustomSearchPlatformUtils](/api/type-aliases/clientcustomsearchplatformutils/) | - | +| [ClientSearchPlatform](/api/type-aliases/clientsearchplatform/) | - | +| [DestroyReasonsType](/api/type-aliases/destroyreasonstype/) | - | +| [DuncteSearchPlatform](/api/type-aliases/dunctesearchplatform/) | - | +| [FloatNumber](/api/type-aliases/floatnumber/) | Opqaue tyep for floatnumber | +| [IntegerNumber](/api/type-aliases/integernumber/) | Opqaue tyep for integernumber | +| [JioSaavnSearchPlatform](/api/type-aliases/jiosaavnsearchplatform/) | - | +| [LavalinkClientSearchPlatform](/api/type-aliases/lavalinkclientsearchplatform/) | - | +| [LavalinkClientSearchPlatformResolve](/api/type-aliases/lavalinkclientsearchplatformresolve/) | - | +| [LavalinkNodeIdentifier](/api/type-aliases/lavalinknodeidentifier/) | - | +| [LavalinkPlayerVoiceOptions](/api/type-aliases/lavalinkplayervoiceoptions/) | - | +| [LavalinkPlugin\_LavaSrc\_SourceNames](/api/type-aliases/lavalinkplugin_lavasrc_sourcenames/) | Source Names provided by lava src plugin | +| [LavalinkSearchPlatform](/api/type-aliases/lavalinksearchplatform/) | - | +| [LavalinkSourceNames](/api/type-aliases/lavalinksourcenames/) | Sourcenames provided by lavalink server | +| [LavaSearchQuery](/api/type-aliases/lavasearchquery/) | SearchQuery Object for Lavalink LavaSearch Plugin requests | +| [LavaSearchType](/api/type-aliases/lavasearchtype/) | Specific types to filter for lavasearch, will be filtered to correct types | +| [LavaSrcSearchPlatform](/api/type-aliases/lavasrcsearchplatform/) | - | +| [LavaSrcSearchPlatformBase](/api/type-aliases/lavasrcsearchplatformbase/) | - | +| [LoadTypes](/api/type-aliases/loadtypes/) | - | +| [LyricsEvent](/api/type-aliases/lyricsevent/) | Types & Events for Lyrics plugin from Lavalink: https://github.com/topi314/LavaLyrics | +| [LyricsEventType](/api/type-aliases/lyricseventtype/) | - | +| [ModifyRequest](/api/type-aliases/modifyrequest/) | Ability to manipulate fetch requests | +| [Opaque](/api/type-aliases/opaque/) | Helper for generating Opaque types. | +| [PlayerEvents](/api/type-aliases/playerevents/) | - | +| [PlayerEventType](/api/type-aliases/playereventtype/) | - | +| [RepeatMode](/api/type-aliases/repeatmode/) | - | +| [RoutePlannerTypes](/api/type-aliases/routeplannertypes/) | - | +| [SearchPlatform](/api/type-aliases/searchplatform/) | - | +| [SearchQuery](/api/type-aliases/searchquery/) | SearchQuery Object for raw lavalink requests | +| [Severity](/api/type-aliases/severity/) | - | +| [SourceNames](/api/type-aliases/sourcenames/) | The SourceNames provided by lavalink | +| [SourcesRegex](/api/type-aliases/sourcesregex/) | - | +| [SponsorBlockSegment](/api/type-aliases/sponsorblocksegment/) | - | +| [SponsorBlockSegmentEvents](/api/type-aliases/sponsorblocksegmentevents/) | Types & Events for Sponsorblock-plugin from Lavalink: https://github.com/topi314/Sponsorblock-Plugin#segmentsloaded | +| [SponsorBlockSegmentEventType](/api/type-aliases/sponsorblocksegmenteventtype/) | - | +| [State](/api/type-aliases/state/) | - | +| [TrackEndReason](/api/type-aliases/trackendreason/) | - | + +## Variables + +| Variable | Description | +| ------ | ------ | +| [audioOutputsData](/api/variables/audiooutputsdata/) | The audio Outputs Data map declaration | +| [DefaultSources](/api/variables/defaultsources/) | Default Sources Record, to allow source parsing with multiple inputs. | +| [EQList](/api/variables/eqlist/) | - | +| [LavalinkPlugins](/api/variables/lavalinkplugins/) | Lavalink Plugins definiton | +| [NodeSymbol](/api/variables/nodesymbol/) | - | +| [QueueSymbol](/api/variables/queuesymbol/) | - | +| [SourceLinksRegexes](/api/variables/sourcelinksregexes/) | Lavalink Sources regexes for url validations | +| [TrackSymbol](/api/variables/tracksymbol/) | - | +| [UnresolvedTrackSymbol](/api/variables/unresolvedtracksymbol/) | - | +| [validSponsorBlocks](/api/variables/validsponsorblocks/) | - | + +## Functions + +| Function | Description | +| ------ | ------ | +| [parseLavalinkConnUrl](/api/functions/parselavalinkconnurl/) | Parses Node Connection Url: "lavalink://:@:" | +| [queueTrackEnd](/api/functions/queuetrackend/) | - | diff --git a/docs/src/content/docs/api/classes/DefaultQueueStore.md b/docs/src/content/docs/api/classes/DefaultQueueStore.md new file mode 100644 index 0000000..f32cf19 --- /dev/null +++ b/docs/src/content/docs/api/classes/DefaultQueueStore.md @@ -0,0 +1,187 @@ +--- +editUrl: false +next: true +prev: true +title: "DefaultQueueStore" +--- + +## Implements + +- [`QueueStoreManager`](/api/interfaces/queuestoremanager/) + +## Constructors + +### new DefaultQueueStore() + +```ts +new DefaultQueueStore(): DefaultQueueStore +``` + +#### Returns + +[`DefaultQueueStore`](/api/classes/defaultqueuestore/) + +#### Defined in + +[src/structures/Queue.ts:66](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L66) + +## Methods + +### delete() + +```ts +delete(guildId: any): Promise +``` + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `guildId` | `any` | The guild ID | + +#### Returns + +`Promise`\<`boolean`\> + +The queue for the guild + +#### Async + +Delete a Database Value based of it's guildId + +#### Implementation of + +[`QueueStoreManager`](/api/interfaces/queuestoremanager/).`delete` + +#### Defined in + +[src/structures/Queue.ts:92](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L92) + +*** + +### get() + +```ts +get(guildId: any): Promise +``` + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `guildId` | `any` | The guild ID | + +#### Returns + +`Promise`\<`unknown`\> + +The queue for the guild + +#### Async + +get a Value (MUST RETURN UNPARSED!) + +#### Implementation of + +[`QueueStoreManager`](/api/interfaces/queuestoremanager/).`get` + +#### Defined in + +[src/structures/Queue.ts:73](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L73) + +*** + +### parse() + +```ts +parse(value: any): Promise> +``` + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `value` | `any` | The queue to parse | + +#### Returns + +`Promise`\<`Partial`\<[`StoredQueue`](/api/interfaces/storedqueue/)\>\> + +The parsed queue + +#### Async + +Parse the saved value back to the Queue (IF YOU DON'T NEED PARSING/STRINGIFY, then just return the value) + +#### Implementation of + +[`QueueStoreManager`](/api/interfaces/queuestoremanager/).`parse` + +#### Defined in + +[src/structures/Queue.ts:110](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L110) + +*** + +### set() + +```ts +set(guildId: any, valueToStringify: any): Promise> +``` + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `guildId` | `any` | The guild ID | +| `valueToStringify` | `any` | The queue to set | + +#### Returns + +`Promise`\<[`MiniMap`](/api/classes/minimap/)\<`unknown`, `unknown`\>\> + +The queue for the guild + +#### Async + +Set a value inside a guildId (MUST BE UNPARSED) + +#### Implementation of + +[`QueueStoreManager`](/api/interfaces/queuestoremanager/).`set` + +#### Defined in + +[src/structures/Queue.ts:83](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L83) + +*** + +### stringify() + +```ts +stringify(value: any): Promise +``` + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `value` | `any` | The queue to stringify | + +#### Returns + +`Promise`\<`any`\> + +The stringified queue + +#### Async + +Transform the value(s) inside of the QueueStoreManager (IF YOU DON'T NEED PARSING/STRINGIFY, then just return the value) + +#### Implementation of + +[`QueueStoreManager`](/api/interfaces/queuestoremanager/).`stringify` + +#### Defined in + +[src/structures/Queue.ts:101](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L101) diff --git a/docs/src/content/docs/api/classes/FilterManager.md b/docs/src/content/docs/api/classes/FilterManager.md new file mode 100644 index 0000000..c68ba4b --- /dev/null +++ b/docs/src/content/docs/api/classes/FilterManager.md @@ -0,0 +1,477 @@ +--- +editUrl: false +next: true +prev: true +title: "FilterManager" +--- + +The FilterManager for each player + +## Constructors + +### new FilterManager() + +```ts +new FilterManager(player: Player): FilterManager +``` + +The Constructor for the FilterManager + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `player` | [`Player`](/api/classes/player/) | + +#### Returns + +[`FilterManager`](/api/classes/filtermanager/) + +#### Defined in + +[src/structures/Filters.ts:108](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L108) + +## Properties + +| Property | Modifier | Type | Default value | Description | Defined in | +| ------ | ------ | ------ | ------ | ------ | ------ | +| `data` | `public` | [`FilterData`](/api/interfaces/filterdata/) | `undefined` | The Filter Data sent to Lavalink, only if the filter is enabled (ofc.) | [src/structures/Filters.ts:39](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L39) | +| `equalizerBands` | `public` | [`EQBand`](/api/interfaces/eqband/)[] | `[]` | The Equalizer bands currently applied to the Lavalink Server | [src/structures/Filters.ts:12](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L12) | +| `filters` | `public` | [`PlayerFilters`](/api/interfaces/playerfilters/) | `undefined` | All "Active" / "disabled" Player Filters | [src/structures/Filters.ts:16](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L16) | +| `filterUpdatedState` | `public` | `boolean` | `false` | Private Util for the instaFix Filters option | [src/structures/Filters.ts:14](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L14) | +| `lavalinkFilterPlugin` | `public` | `object` | `undefined` | - | [src/structures/Filters.ts:549](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L549) | +| `lavalinkFilterPlugin.toggleEcho` | `public` | (`delay`: `number`, `decay`: `number`) => `Promise`\<`boolean`\> | `undefined` | Enables / Disables the Echo effect, IMPORTANT! Only works with the correct Lavalink Plugin installed. (Optional: provide your Own Data) | [src/structures/Filters.ts:556](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L556) | +| `lavalinkFilterPlugin.toggleReverb` | `public` | (`delays`: `number`[], `gains`: `number`[]) => `Promise`\<`boolean`\> | `undefined` | Enables / Disables the Echo effect, IMPORTANT! Only works with the correct Lavalink Plugin installed. (Optional: provide your Own Data) | [src/structures/Filters.ts:580](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L580) | +| `lavalinkLavaDspxPlugin` | `public` | `object` | `undefined` | - | [src/structures/Filters.ts:443](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L443) | +| `lavalinkLavaDspxPlugin.toggleEcho` | `public` | (`decay`?: `number`, `echoLength`?: `number`) => `Promise`\<`boolean`\> | `undefined` | Enables / Disables the Echo effect, IMPORTANT! Only works with the correct Lavalink Plugin installed. (Optional: provide your Own Data) | [src/structures/Filters.ts:529](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L529) | +| `lavalinkLavaDspxPlugin.toggleHighPass` | `public` | (`boostFactor`: `number`, `cutoffFrequency`: `number`) => `Promise`\<`boolean`\> | `undefined` | Enables / Disables the HighPass effect, (Optional: provide your Own Data) | [src/structures/Filters.ts:477](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L477) | +| `lavalinkLavaDspxPlugin.toggleLowPass` | `public` | (`boostFactor`: `number`, `cutoffFrequency`: `number`) => `Promise`\<`boolean`\> | `undefined` | Enables / Disables the LowPass effect, (Optional: provide your Own Data) | [src/structures/Filters.ts:451](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L451) | +| `lavalinkLavaDspxPlugin.toggleNormalization` | `public` | (`maxAmplitude`?: `number`, `adaptive`?: `boolean`) => `Promise`\<`boolean`\> | `undefined` | Enables / Disables the Normalization effect. | [src/structures/Filters.ts:503](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L503) | +| `player` | `public` | [`Player`](/api/classes/player/) | `undefined` | The Player assigned to this Filter Manager | [src/structures/Filters.ts:106](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L106) | + +## Methods + +### applyPlayerFilters() + +```ts +applyPlayerFilters(): Promise +``` + +Apply Player filters for lavalink filter sending data, if the filter is enabled / not + +#### Returns + +`Promise`\<`void`\> + +#### Defined in + +[src/structures/Filters.ts:116](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L116) + +*** + +### checkFiltersState() + +```ts +checkFiltersState(oldFilterTimescale?: Partial): boolean +``` + +Checks if the filters are correctly stated (active / not-active) + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `oldFilterTimescale`? | `Partial`\<[`TimescaleFilter`](/api/interfaces/timescalefilter/)\> | | + +#### Returns + +`boolean` + +#### Defined in + +[src/structures/Filters.ts:175](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L175) + +*** + +### clearEQ() + +```ts +clearEQ(): Promise +``` + +Clears the equalizer bands. + +#### Returns + +`Promise`\<[`FilterManager`](/api/classes/filtermanager/)\> + +#### Defined in + +[src/structures/Filters.ts:689](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L689) + +*** + +### isCustomFilterActive() + +```ts +isCustomFilterActive(): boolean +``` + +Function to find out if currently there is a custom timescamle etc. filter applied + +#### Returns + +`boolean` + +#### Defined in + +[src/structures/Filters.ts:655](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L655) + +*** + +### resetFilters() + +```ts +resetFilters(): Promise +``` + +Reset all Filters + +#### Returns + +`Promise`\<[`PlayerFilters`](/api/interfaces/playerfilters/)\> + +#### Defined in + +[src/structures/Filters.ts:203](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L203) + +*** + +### setAudioOutput() + +```ts +setAudioOutput(type: AudioOutputs): Promise +``` + +Set the AudioOutput Filter + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `type` | [`AudioOutputs`](/api/type-aliases/audiooutputs/) | | + +#### Returns + +`Promise`\<[`AudioOutputs`](/api/type-aliases/audiooutputs/)\> + +#### Defined in + +[src/structures/Filters.ts:303](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L303) + +*** + +### setEQ() + +```ts +setEQ(bands: EQBand | EQBand[]): Promise +``` + +Sets the players equalizer band on-top of the existing ones. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `bands` | [`EQBand`](/api/interfaces/eqband/) \| [`EQBand`](/api/interfaces/eqband/)[] | | + +#### Returns + +`Promise`\<[`FilterManager`](/api/classes/filtermanager/)\> + +#### Defined in + +[src/structures/Filters.ts:663](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L663) + +*** + +### setPitch() + +```ts +setPitch(pitch: number): Promise +``` + +Set custom filter.timescale#pitch . This method disabled both: nightcore & vaporwave. use 1 to reset it to normal + +#### Parameters + +| Parameter | Type | Default value | +| ------ | ------ | ------ | +| `pitch` | `number` | `1` | + +#### Returns + +`Promise`\<`boolean`\> + +#### Defined in + +[src/structures/Filters.ts:340](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L340) + +*** + +### setRate() + +```ts +setRate(rate: number): Promise +``` + +Set custom filter.timescale#rate . This method disabled both: nightcore & vaporwave. use 1 to reset it to normal + +#### Parameters + +| Parameter | Type | Default value | +| ------ | ------ | ------ | +| `rate` | `number` | `1` | + +#### Returns + +`Promise`\<`boolean`\> + +#### Defined in + +[src/structures/Filters.ts:365](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L365) + +*** + +### setSpeed() + +```ts +setSpeed(speed: number): Promise +``` + +Set custom filter.timescale#speed . This method disabled both: nightcore & vaporwave. use 1 to reset it to normal + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `speed` | `number` | `1` | | + +#### Returns + +`Promise`\<`boolean`\> + +#### Defined in + +[src/structures/Filters.ts:316](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L316) + +*** + +### setVolume() + +```ts +setVolume(volume: number): Promise +``` + +Set the Filter Volume + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `volume` | `number` | | + +#### Returns + +`Promise`\<`boolean`\> + +#### Defined in + +[src/structures/Filters.ts:288](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L288) + +*** + +### toggleKaraoke() + +```ts +toggleKaraoke( + level: number, + monoLevel: number, + filterBand: number, +filterWidth: number): Promise +``` + +Enable / Disables a Karaoke like Filter Effect + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `level` | `number` | `1` | | +| `monoLevel` | `number` | `1` | | +| `filterBand` | `number` | `220` | | +| `filterWidth` | `number` | `100` | | + +#### Returns + +`Promise`\<`boolean`\> + +#### Defined in + +[src/structures/Filters.ts:641](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L641) + +*** + +### toggleLowPass() + +```ts +toggleLowPass(smoothing: number): Promise +``` + +Enables / Disables the LowPass effect, (Optional: provide your Own Data) + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `smoothing` | `number` | `20` | | + +#### Returns + +`Promise`\<`boolean`\> + +#### Defined in + +[src/structures/Filters.ts:434](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L434) + +*** + +### toggleNightcore() + +```ts +toggleNightcore( + speed: number, + pitch: number, +rate: number): Promise +``` + +Enables / Disables a Nightcore-like filter Effect. Disables/Overrides both: custom and Vaporwave Filter + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `speed` | `number` | `1.289999523162842` | | +| `pitch` | `number` | `1.289999523162842` | | +| `rate` | `number` | `0.9365999523162842` | | + +#### Returns + +`Promise`\<`boolean`\> + +#### Defined in + +[src/structures/Filters.ts:602](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L602) + +*** + +### toggleRotation() + +```ts +toggleRotation(rotationHz: number): Promise +``` + +Enables / Disables the rotation effect, (Optional: provide your Own Data) + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `rotationHz` | `number` | `0.2` | | + +#### Returns + +`Promise`\<`boolean`\> + +#### Defined in + +[src/structures/Filters.ts:388](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L388) + +*** + +### toggleTremolo() + +```ts +toggleTremolo(frequency: number, depth: number): Promise +``` + +Enables / Disables the Tremolo effect, (Optional: provide your Own Data) + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `frequency` | `number` | `4` | | +| `depth` | `number` | `0.8` | | + +#### Returns + +`Promise`\<`boolean`\> + +#### Defined in + +[src/structures/Filters.ts:420](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L420) + +*** + +### toggleVaporwave() + +```ts +toggleVaporwave( + speed: number, + pitch: number, +rate: number): Promise +``` + +Enables / Disables a Vaporwave-like filter Effect. Disables/Overrides both: custom and nightcore Filter + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `speed` | `number` | `0.8500000238418579` | | +| `pitch` | `number` | `0.800000011920929` | | +| `rate` | `number` | `1` | | + +#### Returns + +`Promise`\<`boolean`\> + +#### Defined in + +[src/structures/Filters.ts:621](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L621) + +*** + +### toggleVibrato() + +```ts +toggleVibrato(frequency: number, depth: number): Promise +``` + +Enables / Disables the Vibrato effect, (Optional: provide your Own Data) + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `frequency` | `number` | `10` | | +| `depth` | `number` | `1` | | + +#### Returns + +`Promise`\<`boolean`\> + +#### Defined in + +[src/structures/Filters.ts:405](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Filters.ts#L405) diff --git a/docs/src/content/docs/api/classes/LavalinkManager.md b/docs/src/content/docs/api/classes/LavalinkManager.md new file mode 100644 index 0000000..391d6a3 --- /dev/null +++ b/docs/src/content/docs/api/classes/LavalinkManager.md @@ -0,0 +1,1542 @@ +--- +editUrl: false +next: true +prev: true +title: "LavalinkManager" +--- + +## Extends + +- `EventEmitter` + +## Constructors + +### new LavalinkManager() + +```ts +new LavalinkManager(options: ManagerOptions): LavalinkManager +``` + +Create the Lavalink Manager + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `options` | [`ManagerOptions`](/api/interfaces/manageroptions/) | | + +#### Returns + +[`LavalinkManager`](/api/classes/lavalinkmanager/) + +#### Example + +```ts +//const client = new Client({...}); // create your BOT Client (e.g. via discord.js) +client.lavalink = new LavalinkManager({ + nodes: [ + { + authorization: "yourverystrongpassword", + host: "localhost", + port: 2333, + id: "testnode" + }, + sendToShard(guildId, payload) => client.guilds.cache.get(guildId)?.shard?.send(payload), + client: { + id: process.env.CLIENT_ID, + username: "TESTBOT" + }, + // optional Options: + autoSkip: true, + playerOptions: { + applyVolumeAsFilter: false, + clientBasedPositionUpdateInterval: 150, + defaultSearchPlatform: "ytmsearch", + volumeDecrementer: 0.75, + //requesterTransformer: YourRequesterTransformerFunction, + onDisconnect: { + autoReconnect: true, + destroyPlayer: false + }, + onEmptyQueue: { + destroyAfterMs: 30_000, + //autoPlayFunction: YourAutoplayFunction, + }, + useUnresolvedData: true + }, + queueOptions: { + maxPreviousTracks: 25, + //queueStore: yourCustomQueueStoreManagerClass, + //queueChangesWatcher: yourCustomQueueChangesWatcherClass + }, + linksBlacklist: [], + linksWhitelist: [], + advancedOptions: { + maxFilterFixDuration: 600_000, + debugOptions: { + noAudio: false, + playerDestroy: { + dontThrowError: false, + debugLogs: false + } + } + } + ] +}) +``` + +#### Overrides + +`EventEmitter.constructor` + +#### Defined in + +[src/structures/LavalinkManager.ts:235](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManager.ts#L235) + +## Properties + +| Property | Modifier | Type | Default value | Description | Inherited from | Defined in | +| ------ | ------ | ------ | ------ | ------ | ------ | ------ | +| `initiated` | `public` | `boolean` | `false` | Wether the manager was initiated or not | - | [src/structures/LavalinkManager.ts:74](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManager.ts#L74) | +| `nodeManager` | `public` | [`NodeManager`](/api/classes/nodemanager/) | `undefined` | LavalinkManager's NodeManager to manage all Nodes | - | [src/structures/LavalinkManager.ts:70](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManager.ts#L70) | +| `options` | `public` | [`ManagerOptions`](/api/interfaces/manageroptions/) | `undefined` | The Options of LavalinkManager (changeable) | - | [src/structures/LavalinkManager.ts:68](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManager.ts#L68) | +| `players` | `readonly` | [`MiniMap`](/api/classes/minimap/)\<`string`, [`Player`](/api/classes/player/)\> | `undefined` | All Players stored in a MiniMap | - | [src/structures/LavalinkManager.ts:76](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManager.ts#L76) | +| `utils` | `public` | [`ManagerUtils`](/api/classes/managerutils/) | `undefined` | LavalinkManager's Utils Class | - | [src/structures/LavalinkManager.ts:72](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManager.ts#L72) | +| `captureRejections` | `static` | `boolean` | `undefined` | Value: [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type) Change the default `captureRejections` option on all new `EventEmitter` objects. **Since** v13.4.0, v12.16.0 | `EventEmitter.captureRejections` | node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:459 | +| `captureRejectionSymbol` | `readonly` | *typeof* `captureRejectionSymbol` | `undefined` | Value: `Symbol.for('nodejs.rejection')` See how to write a custom `rejection handler`. **Since** v13.4.0, v12.16.0 | `EventEmitter.captureRejectionSymbol` | node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:452 | +| `defaultMaxListeners` | `static` | `number` | `undefined` | By default, a maximum of `10` listeners can be registered for any single event. This limit can be changed for individual `EventEmitter` instances using the `emitter.setMaxListeners(n)` method. To change the default for _all_`EventEmitter` instances, the `events.defaultMaxListeners` property can be used. If this value is not a positive number, a `RangeError` is thrown. Take caution when setting the `events.defaultMaxListeners` because the change affects _all_ `EventEmitter` instances, including those created before the change is made. However, calling `emitter.setMaxListeners(n)` still has precedence over `events.defaultMaxListeners`. This is not a hard limit. The `EventEmitter` instance will allow more listeners to be added but will output a trace warning to stderr indicating that a "possible EventEmitter memory leak" has been detected. For any single `EventEmitter`, the `emitter.getMaxListeners()` and `emitter.setMaxListeners()` methods can be used to temporarily avoid this warning: `import { EventEmitter } from 'node:events'; const emitter = new EventEmitter(); emitter.setMaxListeners(emitter.getMaxListeners() + 1); emitter.once('event', () => { // do stuff emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0)); });` The `--trace-warnings` command-line flag can be used to display the stack trace for such warnings. The emitted warning can be inspected with `process.on('warning')` and will have the additional `emitter`, `type`, and `count` properties, referring to the event emitter instance, the event's name and the number of attached listeners, respectively. Its `name` property is set to `'MaxListenersExceededWarning'`. **Since** v0.11.2 | `EventEmitter.defaultMaxListeners` | node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:498 | +| `errorMonitor` | `readonly` | *typeof* `errorMonitor` | `undefined` | This symbol shall be used to install a listener for only monitoring `'error'` events. Listeners installed using this symbol are called before the regular `'error'` listeners are called. Installing a listener using this symbol does not change the behavior once an `'error'` event is emitted. Therefore, the process will still crash if no regular `'error'` listener is installed. **Since** v13.6.0, v12.17.0 | `EventEmitter.errorMonitor` | node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:445 | + +## Accessors + +### useable + +```ts +get useable(): boolean +``` + +Checks wether the the lib is useable based on if any node is connected + +#### Example + +```ts +if(!client.lavalink.useable) return console.error("can'T search yet, because there is no useable lavalink node.") +// continue with code e.g. createing a player and searching +``` + +#### Returns + +`boolean` + +#### Defined in + +[src/structures/LavalinkManager.ts:357](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManager.ts#L357) + +## Methods + +### \[captureRejectionSymbol\]()? + +```ts +optional [captureRejectionSymbol]( + error: Error, + event: string | symbol, ... + args: AnyRest): void +``` + +#### Type Parameters + +| Type Parameter | +| ------ | +| `K` | + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `error` | `Error` | +| `event` | `string` \| `symbol` | +| ...`args` | `AnyRest` | + +#### Returns + +`void` + +#### Inherited from + +`EventEmitter.[captureRejectionSymbol]` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:136 + +*** + +### addListener() + +```ts +addListener(eventName: string | symbol, listener: (...args: any[]) => void): this +``` + +Alias for `emitter.on(eventName, listener)`. + +#### Type Parameters + +| Type Parameter | +| ------ | +| `K` | + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `eventName` | `string` \| `symbol` | +| `listener` | (...`args`: `any`[]) => `void` | + +#### Returns + +`this` + +#### Since + +v0.1.26 + +#### Inherited from + +`EventEmitter.addListener` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:597 + +*** + +### createPlayer() + +```ts +createPlayer(options: PlayerOptions): Player +``` + +Create a Music-Player. If a player exists, then it returns it before creating a new one + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `options` | [`PlayerOptions`](/api/interfaces/playeroptions/) | | + +#### Returns + +[`Player`](/api/classes/player/) + +#### Example + +```ts +const player = client.lavalink.createPlayer({ + guildId: interaction.guildId, + voiceChannelId: interaction.member.voice.channelId, + // everything below is optional + textChannelId: interaction.channelId, + volume: 100, + selfDeaf: true, + selfMute: false, + instaUpdateFiltersFix: true, + applyVolumeAsFilter: false + //only needed if you want to autopick node by region (configured by you) + // vcRegion: interaction.member.voice.rtcRegion, + // provide a specific node + // node: client.lavalink.nodeManager.leastUsedNodes("memory")[0] +}); +``` + +#### Defined in + +[src/structures/LavalinkManager.ts:292](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManager.ts#L292) + +*** + +### deletePlayer() + +```ts +deletePlayer(guildId: string): boolean +``` + +Delete's a player from the cache without destroying it on lavalink (only works when it's disconnected) + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `guildId` | `string` | | + +#### Returns + +`boolean` + +#### Example + +```ts +client.lavalink.deletePlayer(interaction.guildId); +// shouldn't be used except you know what you are doing. +``` + +#### Defined in + +[src/structures/LavalinkManager.ts:331](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManager.ts#L331) + +*** + +### destroyPlayer() + +```ts +destroyPlayer(guildId: string, destroyReason?: string): Promise +``` + +Destroy a player with optional destroy reason and disconnect it from the voice channel + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `guildId` | `string` | | +| `destroyReason`? | `string` | | + +#### Returns + +`Promise`\<[`Player`](/api/classes/player/)\> + +#### Example + +```ts +client.lavalink.destroyPlayer(interaction.guildId, "forcefully destroyed the player"); +// recommend to do it on the player tho: player.destroy("forcefully destroyed the player"); +``` + +#### Defined in + +[src/structures/LavalinkManager.ts:314](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManager.ts#L314) + +*** + +### emit() + +```ts +emit(event: Event, ...args: Parameters): boolean +``` + +Emit an event + +#### Type Parameters + +| Type Parameter | +| ------ | +| `Event` *extends* keyof [`LavalinkManagerEvents`](/api/interfaces/lavalinkmanagerevents/) | + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `event` | `Event` | The event to emit | +| ...`args` | `Parameters`\<[`LavalinkManagerEvents`](/api/interfaces/lavalinkmanagerevents/)\[`Event`\]\> | The arguments to pass to the event | + +#### Returns + +`boolean` + +#### Overrides + +`EventEmitter.emit` + +#### Defined in + +[src/structures/LavalinkManager.ts:23](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManager.ts#L23) + +*** + +### eventNames() + +```ts +eventNames(): (string | symbol)[] +``` + +Returns an array listing the events for which the emitter has registered +listeners. The values in the array are strings or `Symbol`s. + +```js +import { EventEmitter } from 'node:events'; + +const myEE = new EventEmitter(); +myEE.on('foo', () => {}); +myEE.on('bar', () => {}); + +const sym = Symbol('symbol'); +myEE.on(sym, () => {}); + +console.log(myEE.eventNames()); +// Prints: [ 'foo', 'bar', Symbol(symbol) ] +``` + +#### Returns + +(`string` \| `symbol`)[] + +#### Since + +v6.0.0 + +#### Inherited from + +`EventEmitter.eventNames` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:922 + +*** + +### getMaxListeners() + +```ts +getMaxListeners(): number +``` + +Returns the current max listener value for the `EventEmitter` which is either +set by `emitter.setMaxListeners(n)` or defaults to [defaultMaxListeners](LavalinkManager.md). + +#### Returns + +`number` + +#### Since + +v1.0.0 + +#### Inherited from + +`EventEmitter.getMaxListeners` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:774 + +*** + +### getPlayer() + +```ts +getPlayer(guildId: string): Player +``` + +Get a Player from Lava + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `guildId` | `string` | The guildId of the player | + +#### Returns + +[`Player`](/api/classes/player/) + +#### Example + +```ts +const player = client.lavalink.getPlayer(interaction.guildId); +``` +A quicker and easier way than doing: +```ts +const player = client.lavalink.players.get(interaction.guildId); +``` + +#### Defined in + +[src/structures/LavalinkManager.ts:264](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManager.ts#L264) + +*** + +### init() + +```ts +init(clientData: BotClientOptions): Promise +``` + +Initiates the Manager, creates all nodes and connects all of them + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `clientData` | [`BotClientOptions`](/api/interfaces/botclientoptions/) | | + +#### Returns + +`Promise`\<[`LavalinkManager`](/api/classes/lavalinkmanager/)\> + +#### Example + +```ts +// on the bot ready event +client.on("ready", () => { + client.lavalink.init({ + id: client.user.id, + username: client.user.username + }); +}); +``` + +#### Defined in + +[src/structures/LavalinkManager.ts:376](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManager.ts#L376) + +*** + +### listenerCount() + +```ts +listenerCount(eventName: string | symbol, listener?: Function): number +``` + +Returns the number of listeners listening for the event named `eventName`. +If `listener` is provided, it will return how many times the listener is found +in the list of the listeners of the event. + +#### Type Parameters + +| Type Parameter | +| ------ | +| `K` | + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `eventName` | `string` \| `symbol` | The name of the event being listened for | +| `listener`? | `Function` | The event handler function | + +#### Returns + +`number` + +#### Since + +v3.2.0 + +#### Inherited from + +`EventEmitter.listenerCount` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:868 + +*** + +### listeners() + +```ts +listeners(eventName: string | symbol): Function[] +``` + +Returns a copy of the array of listeners for the event named `eventName`. + +```js +server.on('connection', (stream) => { + console.log('someone connected!'); +}); +console.log(util.inspect(server.listeners('connection'))); +// Prints: [ [Function] ] +``` + +#### Type Parameters + +| Type Parameter | +| ------ | +| `K` | + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `eventName` | `string` \| `symbol` | + +#### Returns + +`Function`[] + +#### Since + +v0.1.26 + +#### Inherited from + +`EventEmitter.listeners` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:787 + +*** + +### off() + +```ts +off(event: Event, listener: LavalinkManagerEvents[Event]): this +``` + +Remove an event listener + +#### Type Parameters + +| Type Parameter | +| ------ | +| `Event` *extends* keyof [`LavalinkManagerEvents`](/api/interfaces/lavalinkmanagerevents/) | + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `event` | `Event` | The event to remove the listener from | +| `listener` | [`LavalinkManagerEvents`](/api/interfaces/lavalinkmanagerevents/)\[`Event`\] | The listener to remove | + +#### Returns + +`this` + +#### Overrides + +`EventEmitter.off` + +#### Defined in + +[src/structures/LavalinkManager.ts:53](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManager.ts#L53) + +*** + +### on() + +```ts +on(event: Event, listener: LavalinkManagerEvents[Event]): this +``` + +Add an event listener + +#### Type Parameters + +| Type Parameter | +| ------ | +| `Event` *extends* keyof [`LavalinkManagerEvents`](/api/interfaces/lavalinkmanagerevents/) | + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `event` | `Event` | The event to listen to | +| `listener` | [`LavalinkManagerEvents`](/api/interfaces/lavalinkmanagerevents/)\[`Event`\] | The listener to add | + +#### Returns + +`this` + +#### Overrides + +`EventEmitter.on` + +#### Defined in + +[src/structures/LavalinkManager.ts:33](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManager.ts#L33) + +*** + +### once() + +```ts +once(event: Event, listener: LavalinkManagerEvents[Event]): this +``` + +Add an event listener that only fires once + +#### Type Parameters + +| Type Parameter | +| ------ | +| `Event` *extends* keyof [`LavalinkManagerEvents`](/api/interfaces/lavalinkmanagerevents/) | + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `event` | `Event` | The event to listen to | +| `listener` | [`LavalinkManagerEvents`](/api/interfaces/lavalinkmanagerevents/)\[`Event`\] | The listener to add | + +#### Returns + +`this` + +#### Overrides + +`EventEmitter.once` + +#### Defined in + +[src/structures/LavalinkManager.ts:43](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManager.ts#L43) + +*** + +### prependListener() + +```ts +prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this +``` + +Adds the `listener` function to the _beginning_ of the listeners array for the +event named `eventName`. No checks are made to see if the `listener` has +already been added. Multiple calls passing the same combination of `eventName` +and `listener` will result in the `listener` being added, and called, multiple times. + +```js +server.prependListener('connection', (stream) => { + console.log('someone connected!'); +}); +``` + +Returns a reference to the `EventEmitter`, so that calls can be chained. + +#### Type Parameters + +| Type Parameter | +| ------ | +| `K` | + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `eventName` | `string` \| `symbol` | The name of the event. | +| `listener` | (...`args`: `any`[]) => `void` | The callback function | + +#### Returns + +`this` + +#### Since + +v6.0.0 + +#### Inherited from + +`EventEmitter.prependListener` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:886 + +*** + +### prependOnceListener() + +```ts +prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this +``` + +Adds a **one-time**`listener` function for the event named `eventName` to the _beginning_ of the listeners array. The next time `eventName` is triggered, this +listener is removed, and then invoked. + +```js +server.prependOnceListener('connection', (stream) => { + console.log('Ah, we have our first user!'); +}); +``` + +Returns a reference to the `EventEmitter`, so that calls can be chained. + +#### Type Parameters + +| Type Parameter | +| ------ | +| `K` | + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `eventName` | `string` \| `symbol` | The name of the event. | +| `listener` | (...`args`: `any`[]) => `void` | The callback function | + +#### Returns + +`this` + +#### Since + +v6.0.0 + +#### Inherited from + +`EventEmitter.prependOnceListener` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:902 + +*** + +### rawListeners() + +```ts +rawListeners(eventName: string | symbol): Function[] +``` + +Returns a copy of the array of listeners for the event named `eventName`, +including any wrappers (such as those created by `.once()`). + +```js +import { EventEmitter } from 'node:events'; +const emitter = new EventEmitter(); +emitter.once('log', () => console.log('log once')); + +// Returns a new Array with a function `onceWrapper` which has a property +// `listener` which contains the original listener bound above +const listeners = emitter.rawListeners('log'); +const logFnWrapper = listeners[0]; + +// Logs "log once" to the console and does not unbind the `once` event +logFnWrapper.listener(); + +// Logs "log once" to the console and removes the listener +logFnWrapper(); + +emitter.on('log', () => console.log('log persistently')); +// Will return a new Array with a single function bound by `.on()` above +const newListeners = emitter.rawListeners('log'); + +// Logs "log persistently" twice +newListeners[0](); +emitter.emit('log'); +``` + +#### Type Parameters + +| Type Parameter | +| ------ | +| `K` | + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `eventName` | `string` \| `symbol` | + +#### Returns + +`Function`[] + +#### Since + +v9.4.0 + +#### Inherited from + +`EventEmitter.rawListeners` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:818 + +*** + +### removeAllListeners() + +```ts +removeAllListeners(eventName?: string | symbol): this +``` + +Removes all listeners, or those of the specified `eventName`. + +It is bad practice to remove listeners added elsewhere in the code, +particularly when the `EventEmitter` instance was created by some other +component or module (e.g. sockets or file streams). + +Returns a reference to the `EventEmitter`, so that calls can be chained. + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `eventName`? | `string` \| `symbol` | + +#### Returns + +`this` + +#### Since + +v0.1.26 + +#### Inherited from + +`EventEmitter.removeAllListeners` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:758 + +*** + +### removeListener() + +```ts +removeListener(event: Event, listener: LavalinkManagerEvents[Event]): this +``` + +Remove an event listener + +#### Type Parameters + +| Type Parameter | +| ------ | +| `Event` *extends* keyof [`LavalinkManagerEvents`](/api/interfaces/lavalinkmanagerevents/) | + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `event` | `Event` | The event to remove the listener from | +| `listener` | [`LavalinkManagerEvents`](/api/interfaces/lavalinkmanagerevents/)\[`Event`\] | The listener to remove | + +#### Returns + +`this` + +#### Overrides + +`EventEmitter.removeListener` + +#### Defined in + +[src/structures/LavalinkManager.ts:63](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManager.ts#L63) + +*** + +### sendRawData() + +```ts +sendRawData(data: ChannelDeletePacket | VoiceState | VoiceServer | VoicePacket): Promise +``` + +Sends voice data to the Lavalink server. +! Without this the library won't work + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `data` | [`ChannelDeletePacket`](/api/interfaces/channeldeletepacket/) \| [`VoiceState`](/api/interfaces/voicestate/) \| [`VoiceServer`](/api/interfaces/voiceserver/) \| [`VoicePacket`](/api/interfaces/voicepacket/) | | + +#### Returns + +`Promise`\<`void`\> + +#### Example + +```ts +// on the bot "raw" event +client.on("raw", (d) => { + // required in order to send audio updates and register channel deletion etc. + client.lavalink.sendRawData(d) +}) +``` + +#### Defined in + +[src/structures/LavalinkManager.ts:421](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManager.ts#L421) + +*** + +### setMaxListeners() + +```ts +setMaxListeners(n: number): this +``` + +By default `EventEmitter`s will print a warning if more than `10` listeners are +added for a particular event. This is a useful default that helps finding +memory leaks. The `emitter.setMaxListeners()` method allows the limit to be +modified for this specific `EventEmitter` instance. The value can be set to `Infinity` (or `0`) to indicate an unlimited number of listeners. + +Returns a reference to the `EventEmitter`, so that calls can be chained. + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `n` | `number` | + +#### Returns + +`this` + +#### Since + +v0.3.5 + +#### Inherited from + +`EventEmitter.setMaxListeners` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:768 + +*** + +### addAbortListener() + +```ts +static addAbortListener(signal: AbortSignal, resource: (event: Event) => void): Disposable +``` + +Listens once to the `abort` event on the provided `signal`. + +Listening to the `abort` event on abort signals is unsafe and may +lead to resource leaks since another third party with the signal can +call `e.stopImmediatePropagation()`. Unfortunately Node.js cannot change +this since it would violate the web standard. Additionally, the original +API makes it easy to forget to remove listeners. + +This API allows safely using `AbortSignal`s in Node.js APIs by solving these +two issues by listening to the event such that `stopImmediatePropagation` does +not prevent the listener from running. + +Returns a disposable so that it may be unsubscribed from more easily. + +```js +import { addAbortListener } from 'node:events'; + +function example(signal) { + let disposable; + try { + signal.addEventListener('abort', (e) => e.stopImmediatePropagation()); + disposable = addAbortListener(signal, (e) => { + // Do something when signal is aborted. + }); + } finally { + disposable?.[Symbol.dispose](); + } +} +``` + +:::caution[Experimental] +This API should not be used in production and may be trimmed from a public release. +::: + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `signal` | `AbortSignal` | +| `resource` | (`event`: `Event`) => `void` | + +#### Returns + +`Disposable` + +Disposable that removes the `abort` listener. + +#### Since + +v20.5.0 + +#### Inherited from + +`EventEmitter.addAbortListener` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:437 + +*** + +### getEventListeners() + +```ts +static getEventListeners(emitter: EventEmitter | EventTarget, name: string | symbol): Function[] +``` + +Returns a copy of the array of listeners for the event named `eventName`. + +For `EventEmitter`s this behaves exactly the same as calling `.listeners` on +the emitter. + +For `EventTarget`s this is the only way to get the event listeners for the +event target. This is useful for debugging and diagnostic purposes. + +```js +import { getEventListeners, EventEmitter } from 'node:events'; + +{ + const ee = new EventEmitter(); + const listener = () => console.log('Events are fun'); + ee.on('foo', listener); + console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ] +} +{ + const et = new EventTarget(); + const listener = () => console.log('Events are fun'); + et.addEventListener('foo', listener); + console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ] +} +``` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `emitter` | `EventEmitter`\<`DefaultEventMap`\> \| `EventTarget` | +| `name` | `string` \| `symbol` | + +#### Returns + +`Function`[] + +#### Since + +v15.2.0, v14.17.0 + +#### Inherited from + +`EventEmitter.getEventListeners` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:358 + +*** + +### getMaxListeners() + +```ts +static getMaxListeners(emitter: EventEmitter | EventTarget): number +``` + +Returns the currently set max amount of listeners. + +For `EventEmitter`s this behaves exactly the same as calling `.getMaxListeners` on +the emitter. + +For `EventTarget`s this is the only way to get the max event listeners for the +event target. If the number of event handlers on a single EventTarget exceeds +the max set, the EventTarget will print a warning. + +```js +import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events'; + +{ + const ee = new EventEmitter(); + console.log(getMaxListeners(ee)); // 10 + setMaxListeners(11, ee); + console.log(getMaxListeners(ee)); // 11 +} +{ + const et = new EventTarget(); + console.log(getMaxListeners(et)); // 10 + setMaxListeners(11, et); + console.log(getMaxListeners(et)); // 11 +} +``` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `emitter` | `EventEmitter`\<`DefaultEventMap`\> \| `EventTarget` | + +#### Returns + +`number` + +#### Since + +v19.9.0 + +#### Inherited from + +`EventEmitter.getMaxListeners` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:387 + +*** + +### ~~listenerCount()~~ + +```ts +static listenerCount(emitter: EventEmitter, eventName: string | symbol): number +``` + +A class method that returns the number of listeners for the given `eventName` registered on the given `emitter`. + +```js +import { EventEmitter, listenerCount } from 'node:events'; + +const myEmitter = new EventEmitter(); +myEmitter.on('event', () => {}); +myEmitter.on('event', () => {}); +console.log(listenerCount(myEmitter, 'event')); +// Prints: 2 +``` + +:::caution[Deprecated] +Since v3.2.0 - Use `listenerCount` instead. +::: + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `emitter` | `EventEmitter`\<`DefaultEventMap`\> | The emitter to query | +| `eventName` | `string` \| `symbol` | The event name | + +#### Returns + +`number` + +#### Since + +v0.9.12 + +#### Inherited from + +`EventEmitter.listenerCount` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:330 + +*** + +### on() + +#### on(emitter, eventName, options) + +```ts +static on( + emitter: EventEmitter, + eventName: string | symbol, +options?: StaticEventEmitterIteratorOptions): AsyncIterableIterator +``` + +```js +import { on, EventEmitter } from 'node:events'; +import process from 'node:process'; + +const ee = new EventEmitter(); + +// Emit later on +process.nextTick(() => { + ee.emit('foo', 'bar'); + ee.emit('foo', 42); +}); + +for await (const event of on(ee, 'foo')) { + // The execution of this inner block is synchronous and it + // processes one event at a time (even with await). Do not use + // if concurrent execution is required. + console.log(event); // prints ['bar'] [42] +} +// Unreachable here +``` + +Returns an `AsyncIterator` that iterates `eventName` events. It will throw +if the `EventEmitter` emits `'error'`. It removes all listeners when +exiting the loop. The `value` returned by each iteration is an array +composed of the emitted event arguments. + +An `AbortSignal` can be used to cancel waiting on events: + +```js +import { on, EventEmitter } from 'node:events'; +import process from 'node:process'; + +const ac = new AbortController(); + +(async () => { + const ee = new EventEmitter(); + + // Emit later on + process.nextTick(() => { + ee.emit('foo', 'bar'); + ee.emit('foo', 42); + }); + + for await (const event of on(ee, 'foo', { signal: ac.signal })) { + // The execution of this inner block is synchronous and it + // processes one event at a time (even with await). Do not use + // if concurrent execution is required. + console.log(event); // prints ['bar'] [42] + } + // Unreachable here +})(); + +process.nextTick(() => ac.abort()); +``` + +Use the `close` option to specify an array of event names that will end the iteration: + +```js +import { on, EventEmitter } from 'node:events'; +import process from 'node:process'; + +const ee = new EventEmitter(); + +// Emit later on +process.nextTick(() => { + ee.emit('foo', 'bar'); + ee.emit('foo', 42); + ee.emit('close'); +}); + +for await (const event of on(ee, 'foo', { close: ['close'] })) { + console.log(event); // prints ['bar'] [42] +} +// the loop will exit after 'close' is emitted +console.log('done'); // prints 'done' +``` + +##### Parameters + +| Parameter | Type | +| ------ | ------ | +| `emitter` | `EventEmitter`\<`DefaultEventMap`\> | +| `eventName` | `string` \| `symbol` | +| `options`? | `StaticEventEmitterIteratorOptions` | + +##### Returns + +`AsyncIterableIterator`\<`any`[], `any`, `any`\> + +An `AsyncIterator` that iterates `eventName` events emitted by the `emitter` + +##### Since + +v13.6.0, v12.16.0 + +##### Inherited from + +`EventEmitter.on` + +##### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:303 + +#### on(emitter, eventName, options) + +```ts +static on( + emitter: EventTarget, + eventName: string, +options?: StaticEventEmitterIteratorOptions): AsyncIterableIterator +``` + +##### Parameters + +| Parameter | Type | +| ------ | ------ | +| `emitter` | `EventTarget` | +| `eventName` | `string` | +| `options`? | `StaticEventEmitterIteratorOptions` | + +##### Returns + +`AsyncIterableIterator`\<`any`[], `any`, `any`\> + +##### Inherited from + +`EventEmitter.on` + +##### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:308 + +*** + +### once() + +#### once(emitter, eventName, options) + +```ts +static once( + emitter: EventEmitter, + eventName: string | symbol, +options?: StaticEventEmitterOptions): Promise +``` + +Creates a `Promise` that is fulfilled when the `EventEmitter` emits the given +event or that is rejected if the `EventEmitter` emits `'error'` while waiting. +The `Promise` will resolve with an array of all the arguments emitted to the +given event. + +This method is intentionally generic and works with the web platform [EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) interface, which has no special`'error'` event +semantics and does not listen to the `'error'` event. + +```js +import { once, EventEmitter } from 'node:events'; +import process from 'node:process'; + +const ee = new EventEmitter(); + +process.nextTick(() => { + ee.emit('myevent', 42); +}); + +const [value] = await once(ee, 'myevent'); +console.log(value); + +const err = new Error('kaboom'); +process.nextTick(() => { + ee.emit('error', err); +}); + +try { + await once(ee, 'myevent'); +} catch (err) { + console.error('error happened', err); +} +``` + +The special handling of the `'error'` event is only used when `events.once()` is used to wait for another event. If `events.once()` is used to wait for the +'`error'` event itself, then it is treated as any other kind of event without +special handling: + +```js +import { EventEmitter, once } from 'node:events'; + +const ee = new EventEmitter(); + +once(ee, 'error') + .then(([err]) => console.log('ok', err.message)) + .catch((err) => console.error('error', err.message)); + +ee.emit('error', new Error('boom')); + +// Prints: ok boom +``` + +An `AbortSignal` can be used to cancel waiting for the event: + +```js +import { EventEmitter, once } from 'node:events'; + +const ee = new EventEmitter(); +const ac = new AbortController(); + +async function foo(emitter, event, signal) { + try { + await once(emitter, event, { signal }); + console.log('event emitted!'); + } catch (error) { + if (error.name === 'AbortError') { + console.error('Waiting for the event was canceled!'); + } else { + console.error('There was an error', error.message); + } + } +} + +foo(ee, 'foo', ac.signal); +ac.abort(); // Abort waiting for the event +ee.emit('foo'); // Prints: Waiting for the event was canceled! +``` + +##### Parameters + +| Parameter | Type | +| ------ | ------ | +| `emitter` | `EventEmitter`\<`DefaultEventMap`\> | +| `eventName` | `string` \| `symbol` | +| `options`? | `StaticEventEmitterOptions` | + +##### Returns + +`Promise`\<`any`[]\> + +##### Since + +v11.13.0, v10.16.0 + +##### Inherited from + +`EventEmitter.once` + +##### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:217 + +#### once(emitter, eventName, options) + +```ts +static once( + emitter: EventTarget, + eventName: string, +options?: StaticEventEmitterOptions): Promise +``` + +##### Parameters + +| Parameter | Type | +| ------ | ------ | +| `emitter` | `EventTarget` | +| `eventName` | `string` | +| `options`? | `StaticEventEmitterOptions` | + +##### Returns + +`Promise`\<`any`[]\> + +##### Inherited from + +`EventEmitter.once` + +##### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:222 + +*** + +### setMaxListeners() + +```ts +static setMaxListeners(n?: number, ...eventTargets?: (EventEmitter | EventTarget)[]): void +``` + +```js +import { setMaxListeners, EventEmitter } from 'node:events'; + +const target = new EventTarget(); +const emitter = new EventEmitter(); + +setMaxListeners(5, target, emitter); +``` + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `n`? | `number` | A non-negative number. The maximum number of listeners per `EventTarget` event. | +| ...`eventTargets`? | (`EventEmitter`\<`DefaultEventMap`\> \| `EventTarget`)[] | - | + +#### Returns + +`void` + +#### Since + +v15.4.0 + +#### Inherited from + +`EventEmitter.setMaxListeners` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:402 diff --git a/docs/src/content/docs/api/classes/LavalinkNode.md b/docs/src/content/docs/api/classes/LavalinkNode.md new file mode 100644 index 0000000..4fe1d0e --- /dev/null +++ b/docs/src/content/docs/api/classes/LavalinkNode.md @@ -0,0 +1,690 @@ +--- +editUrl: false +next: true +prev: true +title: "LavalinkNode" +--- + +Lavalink Node creator class + +## Constructors + +### new LavalinkNode() + +```ts +new LavalinkNode(options: LavalinkNodeOptions, manager: NodeManager): LavalinkNode +``` + +Create a new Node + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `options` | [`LavalinkNodeOptions`](/api/interfaces/lavalinknodeoptions/) | Lavalink Node Options | +| `manager` | [`NodeManager`](/api/classes/nodemanager/) | Node Manager | + +#### Returns + +[`LavalinkNode`](/api/classes/lavalinknode/) + +#### Example + +```ts +// don't create a node manually, instead use: + +client.lavalink.nodeManager.createNode(options) +``` + +#### Defined in + +[src/structures/Node.ts:85](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L85) + +## Properties + +| Property | Modifier | Type | Default value | Description | Defined in | +| ------ | ------ | ------ | ------ | ------ | ------ | +| `calls` | `public` | `number` | `0` | The amount of rest calls the node has made. | [src/structures/Node.ts:30](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L30) | +| `decode` | `public` | `object` | `undefined` | Decode Track or Tracks | [src/structures/Node.ts:596](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L596) | +| `decode.multipleTracks` | `public` | (`encodeds`: `string`[], `requester`: `unknown`) => `Promise`\<[`Track`](/api/interfaces/track/)[]\> | `undefined` | Decodes multiple tracks into their info **Example** `const encodedBase64_1 = 'QAACDgMACk5vIERpZ2dpdHkAC0JsYWNrc3RyZWV0AAAAAAAEo4AABjkxNjQ5NgABAB9odHRwczovL2RlZXplci5jb20vdHJhY2svOTE2NDk2AQBpaHR0cHM6Ly9lLWNkbnMtaW1hZ2VzLmR6Y2RuLm5ldC9pbWFnZXMvY292ZXIvZGFlN2EyNjViNzlmYjcxMjc4Y2RlMjUwNDg0OWQ2ZjcvMTAwMHgxMDAwLTAwMDAwMC04MC0wLTAuanBnAQAMVVNJUjE5NjAwOTc4AAZkZWV6ZXIBAChObyBEaWdnaXR5OiBUaGUgVmVyeSBCZXN0IE9mIEJsYWNrc3RyZWV0AQAjaHR0cHM6Ly93d3cuZGVlemVyLmNvbS9hbGJ1bS8xMDMyNTQBACJodHRwczovL3d3dy5kZWV6ZXIuY29tL2FydGlzdC8xODYxAQBqaHR0cHM6Ly9lLWNkbnMtaW1hZ2VzLmR6Y2RuLm5ldC9pbWFnZXMvYXJ0aXN0L2YxNmNhYzM2ZmVjMzkxZjczN2I3ZDQ4MmY1YWM3M2UzLzEwMDB4MTAwMC0wMDAwMDAtODAtMC0wLmpwZwEAT2h0dHBzOi8vY2RuLXByZXZpZXctYS5kemNkbi5uZXQvc3RyZWFtL2MtYTE1Yjg1NzFhYTYyMDBjMDQ0YmY1OWM3NmVkOTEyN2MtNi5tcDMAAAAAAAAAAAA='; const encodedBase64_2 = 'QAABJAMAClRhbGsgYSBMb3QACjQwNHZpbmNlbnQAAAAAAAHr1gBxTzpodHRwczovL2FwaS12Mi5zb3VuZGNsb3VkLmNvbS9tZWRpYS9zb3VuZGNsb3VkOnRyYWNrczo4NTE0MjEwNzYvMzUyYTRiOTAtNzYxOS00M2E5LWJiOGItMjIxMzE0YzFjNjNhL3N0cmVhbS9obHMAAQAsaHR0cHM6Ly9zb3VuZGNsb3VkLmNvbS80MDR2aW5jZW50L3RhbGstYS1sb3QBADpodHRwczovL2kxLnNuZGNkbi5jb20vYXJ0d29ya3MtRTN1ek5Gc0Y4QzBXLTAtb3JpZ2luYWwuanBnAQAMUVpITkExOTg1Nzg0AApzb3VuZGNsb3VkAAAAAAAAAAA='; const tracks = await player.node.decode.multipleTracks([encodedBase64_1, encodedBase64_2], interaction.user);` | [src/structures/Node.ts:628](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L628) | +| `decode.singleTrack` | `public` | (`encoded`: `string`, `requester`: `unknown`) => `Promise`\<[`Track`](/api/interfaces/track/)\> | `undefined` | Decode a single track into its info **Example** `const encodedBase64 = 'QAACDgMACk5vIERpZ2dpdHkAC0JsYWNrc3RyZWV0AAAAAAAEo4AABjkxNjQ5NgABAB9odHRwczovL2RlZXplci5jb20vdHJhY2svOTE2NDk2AQBpaHR0cHM6Ly9lLWNkbnMtaW1hZ2VzLmR6Y2RuLm5ldC9pbWFnZXMvY292ZXIvZGFlN2EyNjViNzlmYjcxMjc4Y2RlMjUwNDg0OWQ2ZjcvMTAwMHgxMDAwLTAwMDAwMC04MC0wLTAuanBnAQAMVVNJUjE5NjAwOTc4AAZkZWV6ZXIBAChObyBEaWdnaXR5OiBUaGUgVmVyeSBCZXN0IE9mIEJsYWNrc3RyZWV0AQAjaHR0cHM6Ly93d3cuZGVlemVyLmNvbS9hbGJ1bS8xMDMyNTQBACJodHRwczovL3d3dy5kZWV6ZXIuY29tL2FydGlzdC8xODYxAQBqaHR0cHM6Ly9lLWNkbnMtaW1hZ2VzLmR6Y2RuLm5ldC9pbWFnZXMvYXJ0aXN0L2YxNmNhYzM2ZmVjMzkxZjczN2I3ZDQ4MmY1YWM3M2UzLzEwMDB4MTAwMC0wMDAwMDAtODAtMC0wLmpwZwEAT2h0dHBzOi8vY2RuLXByZXZpZXctYS5kemNkbi5uZXQvc3RyZWFtL2MtYTE1Yjg1NzFhYTYyMDBjMDQ0YmY1OWM3NmVkOTEyN2MtNi5tcDMAAAAAAAAAAAA='; const track = await player.node.decode.singleTrack(encodedBase64, interaction.user);` | [src/structures/Node.ts:609](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L609) | +| `info` | `public` | [`LavalinkInfo`](/api/interfaces/lavalinkinfo/) | `null` | Actual Lavalink Information of the Node | [src/structures/Node.ts:58](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L58) | +| `isAlive` | `public` | `boolean` | `false` | - | [src/structures/Node.ts:514](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L514) | +| `lyrics` | `public` | `object` | `undefined` | - | [src/structures/Node.ts:640](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L640) | +| `lyrics.get` | `public` | (`track`: [`Track`](/api/interfaces/track/), `skipTrackSource`: `boolean`) => `Promise`\<[`LyricsResult`](/api/interfaces/lyricsresult/)\> | `undefined` | Get the lyrics of a track **Example** `const lyrics = await player.node.lyrics.get(track, true); // use it of player instead: // const lyrics = await player.getLyrics(track, true);` | [src/structures/Node.ts:654](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L654) | +| `lyrics.getCurrent` | `public` | (`guildId`: `string`, `skipTrackSource`: `boolean`) => `Promise`\<[`LyricsResult`](/api/interfaces/lyricsresult/)\> | `undefined` | Get the lyrics of the current playing track **Example** `const lyrics = await player.node.lyrics.getCurrent(guildId); // use it of player instead: // const lyrics = await player.getCurrentLyrics();` | [src/structures/Node.ts:683](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L683) | +| `lyrics.subscribe` | `public` | (`guildId`: `string`) => `Promise`\<`any`\> | `undefined` | subscribe to lyrics updates for a guild **Example** `await player.node.lyrics.subscribe(guildId); // use it of player instead: // const lyrics = await player.subscribeLyrics();` | [src/structures/Node.ts:712](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L712) | +| `lyrics.unsubscribe` | `public` | (`guildId`: `string`) => `Promise`\<`any`\> | `undefined` | unsubscribe from lyrics updates for a guild **Example** `await player.node.lyrics.unsubscribe(guildId); // use it of player instead: // const lyrics = await player.unsubscribeLyrics();` | [src/structures/Node.ts:740](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L740) | +| `options` | `public` | [`LavalinkNodeOptions`](/api/interfaces/lavalinknodeoptions/) | `undefined` | The provided Options of the Node | [src/structures/Node.ts:28](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L28) | +| `resuming` | `public` | `object` | `undefined` | Wether the node resuming is enabled or not | [src/structures/Node.ts:56](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L56) | +| `resuming.enabled` | `public` | `boolean` | `undefined` | - | [src/structures/Node.ts:56](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L56) | +| `resuming.timeout` | `public` | `number` | `undefined` | - | [src/structures/Node.ts:56](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L56) | +| `routePlannerApi` | `public` | `object` | `undefined` | Lavalink's Route Planner Api | [src/structures/Node.ts:803](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L803) | +| `routePlannerApi.getStatus` | `public` | () => `Promise`\<[`RoutePlanner`](/api/interfaces/routeplanner/)\> | `undefined` | Get routplanner Info from Lavalink for ip rotation **Example** `const routePlannerStatus = await player.node.routePlannerApi.getStatus(); const usedBlock = routePlannerStatus.details?.ipBlock; const currentIp = routePlannerStatus.currentAddress;` | [src/structures/Node.ts:815](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L815) | +| `routePlannerApi.unmarkAllFailedAddresses` | `public` | () => `Promise`\<`any`\> | `undefined` | Release all blacklisted IP addresses into pool of IPs **Example** `await player.node.routePlannerApi.unmarkAllFailedAddresses();` | [src/structures/Node.ts:849](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L849) | +| `routePlannerApi.unmarkFailedAddress` | `public` | (`address`: `string`) => `Promise`\<`void`\> | `undefined` | Release blacklisted IP address into pool of IPs for ip rotation **Example** `await player.node.routePlannerApi.unmarkFailedAddress("ipv6address");` | [src/structures/Node.ts:830](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L830) | +| `sessionId?` | `public` | `string` | `null` | The current sessionId, only present when connected | [src/structures/Node.ts:54](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L54) | +| `stats` | `public` | [`NodeStats`](/api/interfaces/nodestats/) | `undefined` | Stats from lavalink, will be updated via an interval by lavalink. | [src/structures/Node.ts:32](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L32) | + +## Accessors + +### connected + +```ts +get connected(): boolean +``` + +Returns if connected to the Node. + +#### Example + +```ts +const isConnected = player.node.connected; +console.log("node is connected: ", isConnected ? "yes" : "no") +``` + +#### Returns + +`boolean` + +#### Defined in + +[src/structures/Node.ts:509](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L509) + +*** + +### connectionStatus + +```ts +get connectionStatus(): string +``` + +Returns the current ConnectionStatus + +#### Example + +```ts +try { + const statusOfConnection = player.node.connectionStatus; + console.log("node's connection status is:", statusOfConnection) +} catch (error) { + console.error("no socket available?", error) +} +``` + +#### Returns + +`string` + +#### Defined in + +[src/structures/Node.ts:529](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L529) + +*** + +### heartBeatPing + +```ts +get heartBeatPing(): number +``` + +#### Returns + +`number` + +#### Defined in + +[src/structures/Node.ts:22](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L22) + +*** + +### id + +```ts +get id(): string +``` + +Get the id of the node + +#### Example + +```ts +const nodeId = player.node.id; +console.log("node id is: ", nodeId) +``` + +#### Returns + +`string` + +#### Defined in + +[src/structures/Node.ts:462](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L462) + +## Methods + +### connect() + +```ts +connect(sessionId?: string): void +``` + +Connect to the Lavalink Node + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `sessionId`? | `string` | Provide the Session Id of the previous connection, to resume the node and it's player(s) | + +#### Returns + +`void` + +void + +#### Example + +```ts +player.node.connect(); // if provided on bootup in managerOptions#nodes, this will be called automatically when doing lavalink.init() + +// or connect from a resuming session: +player.node.connect("sessionId"); +``` + +#### Defined in + +[src/structures/Node.ts:389](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L389) + +*** + +### deleteSponsorBlock() + +```ts +deleteSponsorBlock(player: Player): Promise +``` + +Delete the sponsorblock plugins + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `player` | [`Player`](/api/classes/player/) | passthrough the player | + +#### Returns + +`Promise`\<`void`\> + +void + +#### Example + +```ts +// use it on the player via player.deleteSponsorBlock(); +const sponsorBlockSegments = await player.node.deleteSponsorBlock(player); +``` + +#### Defined in + +[src/structures/Node.ts:1388](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L1388) + +*** + +### destroy() + +```ts +destroy(destroyReason?: string, deleteNode?: boolean): void +``` + +Destroys the Node-Connection (Websocket) and all player's of the node + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `destroyReason`? | `string` | `undefined` | Destroyreason to use when destroying the players | +| `deleteNode`? | `boolean` | `true` | wether to delete the nodte from the nodes list too, if false it will emit a disconnect. | + +#### Returns + +`void` + +void + +#### Default + +```ts +true +``` + +#### Example + +```ts +player.node.destroy("custom Player Destroy Reason", true); +``` + +#### Defined in + +[src/structures/Node.ts:477](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L477) + +*** + +### destroyPlayer() + +```ts +destroyPlayer(guildId: any): Promise +``` + +Destroys the Player on the Lavalink Server + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `guildId` | `any` | | + +#### Returns + +`Promise`\<`any`\> + +request result + +#### Example + +```ts +// use player.destroy() instead +player.node.destroyPlayer(player.guildId); +``` + +#### Defined in + +[src/structures/Node.ts:370](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L370) + +*** + +### fetchAllPlayers() + +```ts +fetchAllPlayers(): Promise +``` + +Gets all Players of a Node + +#### Returns + +`Promise`\<[`LavalinkPlayer`](/api/interfaces/lavalinkplayer/)[] \| [`InvalidLavalinkRestRequest`](/api/interfaces/invalidlavalinkrestrequest/)\> + +array of players inside of lavalink + +#### Example + +```ts +const node = lavalink.nodes.get("NODEID"); +const playersOfLavalink = await node?.fetchAllPlayers(); +``` + +#### Defined in + +[src/structures/Node.ts:544](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L544) + +*** + +### fetchInfo() + +```ts +fetchInfo(): Promise +``` + +Request Lavalink information. + +#### Returns + +`Promise`\<[`LavalinkInfo`](/api/interfaces/lavalinkinfo/)\> + +lavalink info object + +#### Example + +```ts +const lavalinkInfo = await player.node.fetchInfo(); +const availablePlugins:string[] = lavalinkInfo.plugins.map(plugin => plugin.name); +const availableSources:string[] = lavalinkInfo.sourceManagers; +``` + +#### Defined in + +[src/structures/Node.ts:796](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L796) + +*** + +### fetchPlayer() + +```ts +fetchPlayer(guildId: string): Promise +``` + +Gets specific Player Information + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `guildId` | `string` | + +#### Returns + +`Promise`\<[`LavalinkPlayer`](/api/interfaces/lavalinkplayer/) \| [`InvalidLavalinkRestRequest`](/api/interfaces/invalidlavalinkrestrequest/)\> + +lavalink player object if player exists on lavalink + +#### Example + +```ts +const node = lavalink.nodes.get("NODEID"); +const playerInformation = await node?.fetchPlayer("guildId"); +``` + +#### Defined in + +[src/structures/Node.ts:559](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L559) + +*** + +### fetchStats() + +```ts +fetchStats(): Promise +``` + +Request Lavalink statistics. + +#### Returns + +`Promise`\<[`BaseNodeStats`](/api/interfaces/basenodestats/)\> + +the lavalink node stats + +#### Example + +```ts +const lavalinkStats = await player.node.fetchStats(); +``` + +#### Defined in + +[src/structures/Node.ts:767](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L767) + +*** + +### fetchVersion() + +```ts +fetchVersion(): Promise +``` + +Request Lavalink version. + +#### Returns + +`Promise`\<`string`\> + +the current used lavalink version + +#### Example + +```ts +const lavalinkVersion = await player.node.fetchVersion(); +``` + +#### Defined in + +[src/structures/Node.ts:780](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L780) + +*** + +### getSponsorBlock() + +```ts +getSponsorBlock(player: Player): Promise +``` + +Get the current sponsorblocks for the sponsorblock plugin + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `player` | [`Player`](/api/classes/player/) | passthrough the player | + +#### Returns + +`Promise`\<[`SponsorBlockSegment`](/api/type-aliases/sponsorblocksegment/)[]\> + +sponsorblock seggment from lavalink + +#### Example + +```ts +// use it on the player via player.getSponsorBlock(); +const sponsorBlockSegments = await player.node.getSponsorBlock(player); +``` + +#### Defined in + +[src/structures/Node.ts:1334](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L1334) + +*** + +### lavaSearch() + +```ts +lavaSearch( + query: LavaSearchQuery, + requestUser: unknown, +throwOnEmpty: boolean): Promise +``` + +Search something using the lavaSearchPlugin (filtered searches by types) + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `query` | [`LavaSearchQuery`](/api/type-aliases/lavasearchquery/) | `undefined` | LavaSearchQuery Object | +| `requestUser` | `unknown` | `undefined` | Request User for creating the player(s) | +| `throwOnEmpty` | `boolean` | `false` | Wether to throw on an empty result or not | + +#### Returns + +`Promise`\<[`SearchResult`](/api/interfaces/searchresult/) \| [`LavaSearchResponse`](/api/interfaces/lavasearchresponse/)\> + +LavaSearchresult + +#### Example + +```ts +// use player.search() instead +player.node.lavaSearch({ types: ["playlist", "album"], query: "Rick Astley", source: "spotify" }, interaction.user); +``` + +#### Defined in + +[src/structures/Node.ts:283](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L283) + +*** + +### request() + +```ts +request( + endpoint: string, + modify?: ModifyRequest, +parseAsText?: boolean): Promise +``` + +Makes an API call to the Node. Should only be used for manual parsing like for not supported plugins + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `endpoint` | `string` | `undefined` | The endpoint that we will make the call to | +| `modify`? | [`ModifyRequest`](/api/type-aliases/modifyrequest/) | `undefined` | Used to modify the request before being sent | +| `parseAsText`? | `boolean` | `false` | - | + +#### Returns + +`Promise`\<`any`\> + +The returned data + +#### Example + +```ts +player.node.request(`/loadtracks?identifier=Never gonna give you up`, (options) => options.method = "GET", false); +``` + +#### Defined in + +[src/structures/Node.ts:183](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L183) + +*** + +### search() + +```ts +search( + query: SearchQuery, + requestUser: unknown, +throwOnEmpty: boolean): Promise +``` + +Search something raw on the node, please note only add tracks to players of that node + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `query` | [`SearchQuery`](/api/type-aliases/searchquery/) | `undefined` | SearchQuery Object | +| `requestUser` | `unknown` | `undefined` | Request User for creating the player(s) | +| `throwOnEmpty` | `boolean` | `false` | Wether to throw on an empty result or not | + +#### Returns + +`Promise`\<[`SearchResult`](/api/interfaces/searchresult/)\> + +Searchresult + +#### Example + +```ts +// use player.search() instead +player.node.search({ query: "Never gonna give you up by Rick Astley", source: "soundcloud" }, interaction.user); +player.node.search({ query: "https://deezer.com/track/123456789" }, interaction.user); +``` + +#### Defined in + +[src/structures/Node.ts:209](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L209) + +*** + +### setSponsorBlock() + +```ts +setSponsorBlock(player: Player, segments: SponsorBlockSegment[]): Promise +``` + +Set the current sponsorblocks for the sponsorblock plugin + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `player` | [`Player`](/api/classes/player/) | passthrough the player | +| `segments` | [`SponsorBlockSegment`](/api/type-aliases/sponsorblocksegment/)[] | - | + +#### Returns + +`Promise`\<`void`\> + +void + +#### Example + +```ts +// use it on the player via player.setSponsorBlock(); +const sponsorBlockSegments = await player.node.setSponsorBlock(player, ["sponsor", "selfpromo"]); +``` + +#### Defined in + +[src/structures/Node.ts:1352](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L1352) + +*** + +### updatePlayer() + +```ts +updatePlayer(data: PlayerUpdateInfo): Promise +``` + +Update the Player State on the Lavalink Server + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `data` | [`PlayerUpdateInfo`](/api/interfaces/playerupdateinfo/) | data to send to lavalink and sync locally | + +#### Returns + +`Promise`\<[`LavalinkPlayer`](/api/interfaces/lavalinkplayer/)\> + +result from lavalink + +#### Example + +```ts +// use player.search() instead +player.node.updatePlayer({ guildId: player.guildId, playerOptions: { paused: true } }); // example to pause it +``` + +#### Defined in + +[src/structures/Node.ts:330](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L330) + +*** + +### updateSession() + +```ts +updateSession(resuming?: boolean, timeout?: number): Promise +``` + +Updates the session with and enables/disables resuming and timeout + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `resuming`? | `boolean` | Whether resuming is enabled for this session or not | +| `timeout`? | `number` | The timeout in seconds (default is 60s) | + +#### Returns + +`Promise`\<[`InvalidLavalinkRestRequest`](/api/interfaces/invalidlavalinkrestrequest/) \| [`Session`](/api/interfaces/session/)\> + +the result of the request + +#### Example + +```ts +const node = player.node || lavalink.nodes.get("NODEID"); +await node?.updateSession(true, 180e3); // will enable resuming for 180seconds +``` + +#### Defined in + +[src/structures/Node.ts:576](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Node.ts#L576) diff --git a/docs/src/content/docs/api/classes/ManagerUtils.md b/docs/src/content/docs/api/classes/ManagerUtils.md new file mode 100644 index 0000000..31ff490 --- /dev/null +++ b/docs/src/content/docs/api/classes/ManagerUtils.md @@ -0,0 +1,376 @@ +--- +editUrl: false +next: true +prev: true +title: "ManagerUtils" +--- + +## Constructors + +### new ManagerUtils() + +```ts +new ManagerUtils(LavalinkManager?: LavalinkManager): ManagerUtils +``` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `LavalinkManager`? | [`LavalinkManager`](/api/classes/lavalinkmanager/) | + +#### Returns + +[`ManagerUtils`](/api/classes/managerutils/) + +#### Defined in + +[src/structures/Utils.ts:46](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L46) + +## Properties + +| Property | Modifier | Type | Default value | Defined in | +| ------ | ------ | ------ | ------ | ------ | +| `LavalinkManager` | `public` | [`LavalinkManager`](/api/classes/lavalinkmanager/) | `null` | [src/structures/Utils.ts:45](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L45) | + +## Methods + +### buildPluginInfo() + +```ts +buildPluginInfo(data: any, clientData: any): any +``` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `data` | `any` | +| `clientData` | `any` | + +#### Returns + +`any` + +#### Defined in + +[src/structures/Utils.ts:50](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L50) + +*** + +### buildTrack() + +```ts +buildTrack(data: Track | LavalinkTrack, requester: unknown): Track +``` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `data` | [`Track`](/api/interfaces/track/) \| [`LavalinkTrack`](/api/interfaces/lavalinktrack/) | +| `requester` | `unknown` | + +#### Returns + +[`Track`](/api/interfaces/track/) + +#### Defined in + +[src/structures/Utils.ts:57](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L57) + +*** + +### buildUnresolvedTrack() + +```ts +buildUnresolvedTrack(query: UnresolvedTrack | UnresolvedQuery, requester: unknown): UnresolvedTrack +``` + +Builds a UnresolvedTrack to be resolved before being played . + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `query` | [`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`UnresolvedQuery`](/api/interfaces/unresolvedquery/) | | +| `requester` | `unknown` | | + +#### Returns + +[`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) + +#### Defined in + +[src/structures/Utils.ts:111](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L111) + +*** + +### getClosestTrack() + +```ts +getClosestTrack(data: UnresolvedTrack, player: Player): Promise +``` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `data` | [`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) | +| `player` | [`Player`](/api/classes/player/) | + +#### Returns + +`Promise`\<[`Track`](/api/interfaces/track/)\> + +#### Defined in + +[src/structures/Utils.ts:219](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L219) + +*** + +### getTransformedRequester() + +```ts +getTransformedRequester(requester: unknown): unknown +``` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `requester` | `unknown` | + +#### Returns + +`unknown` + +#### Defined in + +[src/structures/Utils.ts:154](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L154) + +*** + +### isNode() + +```ts +isNode(data: LavalinkNode): boolean +``` + +Validate if a data is equal to a node + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `data` | [`LavalinkNode`](/api/classes/lavalinknode/) | | + +#### Returns + +`boolean` + +#### Defined in + +[src/structures/Utils.ts:144](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L144) + +*** + +### isNodeOptions() + +```ts +isNodeOptions(data: LavalinkNodeOptions): boolean +``` + +Validate if a data is equal to node options + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `data` | [`LavalinkNodeOptions`](/api/interfaces/lavalinknodeoptions/) | | + +#### Returns + +`boolean` + +#### Defined in + +[src/structures/Utils.ts:175](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L175) + +*** + +### isTrack() + +```ts +isTrack(data: UnresolvedTrack | Track): data is Track +``` + +Validate if a data is equal to a track + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `data` | [`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`Track`](/api/interfaces/track/) | the Track to validate | + +#### Returns + +`data is Track` + +#### Defined in + +[src/structures/Utils.ts:195](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L195) + +*** + +### isUnresolvedTrack() + +```ts +isUnresolvedTrack(data: UnresolvedTrack | Track): data is UnresolvedTrack +``` + +Checks if the provided argument is a valid UnresolvedTrack. + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `data` | [`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`Track`](/api/interfaces/track/) | + +#### Returns + +`data is UnresolvedTrack` + +#### Defined in + +[src/structures/Utils.ts:205](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L205) + +*** + +### isUnresolvedTrackQuery() + +```ts +isUnresolvedTrackQuery(data: UnresolvedQuery): boolean +``` + +Checks if the provided argument is a valid UnresolvedTrack. + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `data` | [`UnresolvedQuery`](/api/interfaces/unresolvedquery/) | + +#### Returns + +`boolean` + +#### Defined in + +[src/structures/Utils.ts:215](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L215) + +*** + +### transformLavaSearchQuery() + +```ts +transformLavaSearchQuery(query: LavaSearchQuery): object +``` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `query` | [`LavaSearchQuery`](/api/type-aliases/lavasearchquery/) | + +#### Returns + +`object` + +| Name | Type | Defined in | +| ------ | ------ | ------ | +| `query` | `string` | [src/structures/Utils.ts:338](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L338) | +| `source` | `any` | [src/structures/Utils.ts:340](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L340) | +| `types` | `string`[] | [src/structures/Utils.ts:339](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L339) | + +#### Defined in + +[src/structures/Utils.ts:334](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L334) + +*** + +### transformQuery() + +```ts +transformQuery(query: SearchQuery): object +``` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `query` | [`SearchQuery`](/api/type-aliases/searchquery/) | + +#### Returns + +`object` + +| Name | Type | Defined in | +| ------ | ------ | ------ | +| `extraQueryUrlParams` | `URLSearchParams` | [src/structures/Utils.ts:322](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L322) | +| `query` | `string` | [src/structures/Utils.ts:321](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L321) | +| `source` | `any` | [src/structures/Utils.ts:323](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L323) | + +#### Defined in + +[src/structures/Utils.ts:318](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L318) + +*** + +### validateQueryString() + +```ts +validateQueryString( + node: LavalinkNode, + queryString: string, + sourceString?: LavalinkSearchPlatform): void +``` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `node` | [`LavalinkNode`](/api/classes/lavalinknode/) | +| `queryString` | `string` | +| `sourceString`? | [`LavalinkSearchPlatform`](/api/type-aliases/lavalinksearchplatform/) | + +#### Returns + +`void` + +#### Defined in + +[src/structures/Utils.ts:236](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L236) + +*** + +### validateSourceString() + +```ts +validateSourceString(node: LavalinkNode, sourceString: SearchPlatform): void +``` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `node` | [`LavalinkNode`](/api/classes/lavalinknode/) | +| `sourceString` | [`SearchPlatform`](/api/type-aliases/searchplatform/) | + +#### Returns + +`void` + +#### Defined in + +[src/structures/Utils.ts:351](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L351) diff --git a/docs/src/content/docs/api/classes/MiniMap.md b/docs/src/content/docs/api/classes/MiniMap.md new file mode 100644 index 0000000..6102525 --- /dev/null +++ b/docs/src/content/docs/api/classes/MiniMap.md @@ -0,0 +1,588 @@ +--- +editUrl: false +next: true +prev: true +title: "MiniMap" +--- + +## Extends + +- `Map`\<`K`, `V`\> + +## Type Parameters + +| Type Parameter | +| ------ | +| `K` | +| `V` | + +## Constructors + +### new MiniMap() + +```ts +new MiniMap(data: [K, V][]): MiniMap +``` + +#### Parameters + +| Parameter | Type | Default value | +| ------ | ------ | ------ | +| `data` | [`K`, `V`][] | `[]` | + +#### Returns + +[`MiniMap`](/api/classes/minimap/)\<`K`, `V`\> + +#### Inherited from + +`Map.constructor` + +#### Defined in + +[src/structures/Utils.ts:414](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L414) + +## Properties + +| Property | Modifier | Type | Description | Inherited from | Defined in | +| ------ | ------ | ------ | ------ | ------ | ------ | +| `[toStringTag]` | `readonly` | `string` | - | `Map.[toStringTag]` | .doc/node\_modules/.pnpm/typescript@5.6.2/node\_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts:137 | +| `constructor` | `public` | `MiniMapConstructor` | The initial value of Object.prototype.constructor is the standard built-in Object constructor. | - | [src/structures/Utils.ts:410](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L410) | +| `size` | `readonly` | `number` | | `Map.size` | .doc/node\_modules/.pnpm/typescript@5.6.2/node\_modules/typescript/lib/lib.es2015.collection.d.ts:45 | +| `[species]` | `readonly` | `MapConstructor` | - | - | .doc/node\_modules/.pnpm/typescript@5.6.2/node\_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts:319 | + +## Methods + +### \[iterator\]() + +```ts +iterator: MapIterator<[K, V]> +``` + +Returns an iterable of entries in the map. + +#### Returns + +`MapIterator`\<[`K`, `V`]\> + +#### Inherited from + +`Map.[iterator]` + +#### Defined in + +.doc/node\_modules/.pnpm/typescript@5.6.2/node\_modules/typescript/lib/lib.es2015.iterable.d.ts:143 + +*** + +### clear() + +```ts +clear(): void +``` + +#### Returns + +`void` + +#### Inherited from + +`Map.clear` + +#### Defined in + +.doc/node\_modules/.pnpm/typescript@5.6.2/node\_modules/typescript/lib/lib.es2015.collection.d.ts:20 + +*** + +### delete() + +```ts +delete(key: K): boolean +``` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `key` | `K` | + +#### Returns + +`boolean` + +true if an element in the Map existed and has been removed, or false if the element does not exist. + +#### Inherited from + +`Map.delete` + +#### Defined in + +.doc/node\_modules/.pnpm/typescript@5.6.2/node\_modules/typescript/lib/lib.es2015.collection.d.ts:24 + +*** + +### entries() + +```ts +entries(): MapIterator<[K, V]> +``` + +Returns an iterable of key, value pairs for every entry in the map. + +#### Returns + +`MapIterator`\<[`K`, `V`]\> + +#### Inherited from + +`Map.entries` + +#### Defined in + +.doc/node\_modules/.pnpm/typescript@5.6.2/node\_modules/typescript/lib/lib.es2015.iterable.d.ts:148 + +*** + +### filter() + +#### filter(fn) + +```ts +filter(fn: (value: V, key: K, miniMap: this) => key is K2): MiniMap +``` + +Identical to +[Array.filter()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter), +but returns a MiniMap instead of an Array. + +##### Type Parameters + +| Type Parameter | +| ------ | +| `K2` | + +##### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `fn` | (`value`: `V`, `key`: `K`, `miniMap`: `this`) => `key is K2` | The function to test with (should return boolean) | + +##### Returns + +[`MiniMap`](/api/classes/minimap/)\<`K2`, `V`\> + +##### Example + +```ts +miniMap.filter(user => user.username === 'Bob'); +``` + +##### Defined in + +[src/structures/Utils.ts:429](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L429) + +#### filter(fn) + +```ts +filter(fn: (value: V, key: K, miniMap: this) => value is V2): MiniMap +``` + +##### Type Parameters + +| Type Parameter | +| ------ | +| `V2` | + +##### Parameters + +| Parameter | Type | +| ------ | ------ | +| `fn` | (`value`: `V`, `key`: `K`, `miniMap`: `this`) => `value is V2` | + +##### Returns + +[`MiniMap`](/api/classes/minimap/)\<`K`, `V2`\> + +##### Defined in + +[src/structures/Utils.ts:430](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L430) + +#### filter(fn) + +```ts +filter(fn: (value: V, key: K, miniMap: this) => boolean): MiniMap +``` + +##### Parameters + +| Parameter | Type | +| ------ | ------ | +| `fn` | (`value`: `V`, `key`: `K`, `miniMap`: `this`) => `boolean` | + +##### Returns + +[`MiniMap`](/api/classes/minimap/)\<`K`, `V`\> + +##### Defined in + +[src/structures/Utils.ts:431](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L431) + +#### filter(fn, thisArg) + +```ts +filter(fn: (this: This, value: V, key: K, miniMap: this) => key is K2, thisArg: This): MiniMap +``` + +##### Type Parameters + +| Type Parameter | +| ------ | +| `This` | +| `K2` | + +##### Parameters + +| Parameter | Type | +| ------ | ------ | +| `fn` | (`this`: `This`, `value`: `V`, `key`: `K`, `miniMap`: `this`) => `key is K2` | +| `thisArg` | `This` | + +##### Returns + +[`MiniMap`](/api/classes/minimap/)\<`K2`, `V`\> + +##### Defined in + +[src/structures/Utils.ts:432](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L432) + +#### filter(fn, thisArg) + +```ts +filter(fn: (this: This, value: V, key: K, miniMap: this) => value is V2, thisArg: This): MiniMap +``` + +##### Type Parameters + +| Type Parameter | +| ------ | +| `This` | +| `V2` | + +##### Parameters + +| Parameter | Type | +| ------ | ------ | +| `fn` | (`this`: `This`, `value`: `V`, `key`: `K`, `miniMap`: `this`) => `value is V2` | +| `thisArg` | `This` | + +##### Returns + +[`MiniMap`](/api/classes/minimap/)\<`K`, `V2`\> + +##### Defined in + +[src/structures/Utils.ts:436](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L436) + +#### filter(fn, thisArg) + +```ts +filter(fn: (this: This, value: V, key: K, miniMap: this) => boolean, thisArg: This): MiniMap +``` + +##### Type Parameters + +| Type Parameter | +| ------ | +| `This` | + +##### Parameters + +| Parameter | Type | +| ------ | ------ | +| `fn` | (`this`: `This`, `value`: `V`, `key`: `K`, `miniMap`: `this`) => `boolean` | +| `thisArg` | `This` | + +##### Returns + +[`MiniMap`](/api/classes/minimap/)\<`K`, `V`\> + +##### Defined in + +[src/structures/Utils.ts:440](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L440) + +*** + +### forEach() + +```ts +forEach(callbackfn: (value: V, key: K, map: Map) => void, thisArg?: any): void +``` + +Executes a provided function once per each key/value pair in the Map, in insertion order. + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `callbackfn` | (`value`: `V`, `key`: `K`, `map`: `Map`\<`K`, `V`\>) => `void` | +| `thisArg`? | `any` | + +#### Returns + +`void` + +#### Inherited from + +`Map.forEach` + +#### Defined in + +.doc/node\_modules/.pnpm/typescript@5.6.2/node\_modules/typescript/lib/lib.es2015.collection.d.ts:28 + +*** + +### get() + +```ts +get(key: K): V +``` + +Returns a specified element from the Map object. If the value that is associated to the provided key is an object, then you will get a reference to that object and any change made to that object will effectively modify it inside the Map. + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `key` | `K` | + +#### Returns + +`V` + +Returns the element associated with the specified key. If no element is associated with the specified key, undefined is returned. + +#### Inherited from + +`Map.get` + +#### Defined in + +.doc/node\_modules/.pnpm/typescript@5.6.2/node\_modules/typescript/lib/lib.es2015.collection.d.ts:33 + +*** + +### has() + +```ts +has(key: K): boolean +``` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `key` | `K` | + +#### Returns + +`boolean` + +boolean indicating whether an element with the specified key exists or not. + +#### Inherited from + +`Map.has` + +#### Defined in + +.doc/node\_modules/.pnpm/typescript@5.6.2/node\_modules/typescript/lib/lib.es2015.collection.d.ts:37 + +*** + +### keys() + +```ts +keys(): MapIterator +``` + +Returns an iterable of keys in the map + +#### Returns + +`MapIterator`\<`K`\> + +#### Inherited from + +`Map.keys` + +#### Defined in + +.doc/node\_modules/.pnpm/typescript@5.6.2/node\_modules/typescript/lib/lib.es2015.iterable.d.ts:153 + +*** + +### map() + +#### map(fn) + +```ts +map(fn: (value: V, key: K, miniMap: this) => T): T[] +``` + +Maps each item to another value into an array. Identical in behavior to +[Array.map()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map). + +##### Type Parameters + +| Type Parameter | +| ------ | +| `T` | + +##### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `fn` | (`value`: `V`, `key`: `K`, `miniMap`: `this`) => `T` | Function that produces an element of the new array, taking three arguments | + +##### Returns + +`T`[] + +##### Example + +```ts +miniMap.map(user => user.tag); +``` + +##### Defined in + +[src/structures/Utils.ts:464](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L464) + +#### map(fn, thisArg) + +```ts +map(fn: (this: This, value: V, key: K, miniMap: this) => T, thisArg: This): T[] +``` + +##### Type Parameters + +| Type Parameter | +| ------ | +| `This` | +| `T` | + +##### Parameters + +| Parameter | Type | +| ------ | ------ | +| `fn` | (`this`: `This`, `value`: `V`, `key`: `K`, `miniMap`: `this`) => `T` | +| `thisArg` | `This` | + +##### Returns + +`T`[] + +##### Defined in + +[src/structures/Utils.ts:465](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L465) + +*** + +### set() + +```ts +set(key: K, value: V): this +``` + +Adds a new element with a specified key and value to the Map. If an element with the same key already exists, the element will be updated. + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `key` | `K` | +| `value` | `V` | + +#### Returns + +`this` + +#### Inherited from + +`Map.set` + +#### Defined in + +.doc/node\_modules/.pnpm/typescript@5.6.2/node\_modules/typescript/lib/lib.es2015.collection.d.ts:41 + +*** + +### toJSON() + +```ts +toJSON(): [K, V][] +``` + +#### Returns + +[`K`, `V`][] + +#### Defined in + +[src/structures/Utils.ts:450](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L450) + +*** + +### values() + +```ts +values(): MapIterator +``` + +Returns an iterable of values in the map + +#### Returns + +`MapIterator`\<`V`\> + +#### Inherited from + +`Map.values` + +#### Defined in + +.doc/node\_modules/.pnpm/typescript@5.6.2/node\_modules/typescript/lib/lib.es2015.iterable.d.ts:158 + +*** + +### groupBy() + +```ts +static groupBy(items: Iterable, keySelector: (item: T, index: number) => K): Map +``` + +Groups members of an iterable according to the return value of the passed callback. + +#### Type Parameters + +| Type Parameter | +| ------ | +| `K` | +| `T` | + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `items` | `Iterable`\<`T`, `any`, `any`\> | An iterable. | +| `keySelector` | (`item`: `T`, `index`: `number`) => `K` | A callback which will be invoked for each item in items. | + +#### Returns + +`Map`\<`K`, `T`[]\> + +#### Defined in + +.doc/node\_modules/.pnpm/typescript@5.6.2/node\_modules/typescript/lib/lib.esnext.collection.d.ts:25 diff --git a/docs/src/content/docs/api/classes/NodeManager.md b/docs/src/content/docs/api/classes/NodeManager.md new file mode 100644 index 0000000..9a03bc9 --- /dev/null +++ b/docs/src/content/docs/api/classes/NodeManager.md @@ -0,0 +1,1390 @@ +--- +editUrl: false +next: true +prev: true +title: "NodeManager" +--- + +## Extends + +- `EventEmitter` + +## Constructors + +### new NodeManager() + +```ts +new NodeManager(LavalinkManager: LavalinkManager): NodeManager +``` + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `LavalinkManager` | [`LavalinkManager`](/api/classes/lavalinkmanager/) | The LavalinkManager that created this NodeManager | + +#### Returns + +[`NodeManager`](/api/classes/nodemanager/) + +#### Overrides + +`EventEmitter.constructor` + +#### Defined in + +[src/structures/NodeManager.ts:73](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/NodeManager.ts#L73) + +## Properties + +| Property | Modifier | Type | Description | Inherited from | Defined in | +| ------ | ------ | ------ | ------ | ------ | ------ | +| `LavalinkManager` | `public` | [`LavalinkManager`](/api/classes/lavalinkmanager/) | The LavalinkManager that created this NodeManager | - | [src/structures/NodeManager.ts:64](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/NodeManager.ts#L64) | +| `nodes` | `public` | [`MiniMap`](/api/classes/minimap/)\<`string`, [`LavalinkNode`](/api/classes/lavalinknode/)\> | A map of all nodes in the nodeManager | - | [src/structures/NodeManager.ts:68](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/NodeManager.ts#L68) | +| `captureRejections` | `static` | `boolean` | Value: [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type) Change the default `captureRejections` option on all new `EventEmitter` objects. **Since** v13.4.0, v12.16.0 | `EventEmitter.captureRejections` | node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:459 | +| `captureRejectionSymbol` | `readonly` | *typeof* `captureRejectionSymbol` | Value: `Symbol.for('nodejs.rejection')` See how to write a custom `rejection handler`. **Since** v13.4.0, v12.16.0 | `EventEmitter.captureRejectionSymbol` | node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:452 | +| `defaultMaxListeners` | `static` | `number` | By default, a maximum of `10` listeners can be registered for any single event. This limit can be changed for individual `EventEmitter` instances using the `emitter.setMaxListeners(n)` method. To change the default for _all_`EventEmitter` instances, the `events.defaultMaxListeners` property can be used. If this value is not a positive number, a `RangeError` is thrown. Take caution when setting the `events.defaultMaxListeners` because the change affects _all_ `EventEmitter` instances, including those created before the change is made. However, calling `emitter.setMaxListeners(n)` still has precedence over `events.defaultMaxListeners`. This is not a hard limit. The `EventEmitter` instance will allow more listeners to be added but will output a trace warning to stderr indicating that a "possible EventEmitter memory leak" has been detected. For any single `EventEmitter`, the `emitter.getMaxListeners()` and `emitter.setMaxListeners()` methods can be used to temporarily avoid this warning: `import { EventEmitter } from 'node:events'; const emitter = new EventEmitter(); emitter.setMaxListeners(emitter.getMaxListeners() + 1); emitter.once('event', () => { // do stuff emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0)); });` The `--trace-warnings` command-line flag can be used to display the stack trace for such warnings. The emitted warning can be inspected with `process.on('warning')` and will have the additional `emitter`, `type`, and `count` properties, referring to the event emitter instance, the event's name and the number of attached listeners, respectively. Its `name` property is set to `'MaxListenersExceededWarning'`. **Since** v0.11.2 | `EventEmitter.defaultMaxListeners` | node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:498 | +| `errorMonitor` | `readonly` | *typeof* `errorMonitor` | This symbol shall be used to install a listener for only monitoring `'error'` events. Listeners installed using this symbol are called before the regular `'error'` listeners are called. Installing a listener using this symbol does not change the behavior once an `'error'` event is emitted. Therefore, the process will still crash if no regular `'error'` listener is installed. **Since** v13.6.0, v12.17.0 | `EventEmitter.errorMonitor` | node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:445 | + +## Methods + +### \[captureRejectionSymbol\]()? + +```ts +optional [captureRejectionSymbol]( + error: Error, + event: string | symbol, ... + args: AnyRest): void +``` + +#### Type Parameters + +| Type Parameter | +| ------ | +| `K` | + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `error` | `Error` | +| `event` | `string` \| `symbol` | +| ...`args` | `AnyRest` | + +#### Returns + +`void` + +#### Inherited from + +`EventEmitter.[captureRejectionSymbol]` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:136 + +*** + +### addListener() + +```ts +addListener(eventName: string | symbol, listener: (...args: any[]) => void): this +``` + +Alias for `emitter.on(eventName, listener)`. + +#### Type Parameters + +| Type Parameter | +| ------ | +| `K` | + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `eventName` | `string` \| `symbol` | +| `listener` | (...`args`: `any`[]) => `void` | + +#### Returns + +`this` + +#### Since + +v0.1.26 + +#### Inherited from + +`EventEmitter.addListener` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:597 + +*** + +### connectAll() + +```ts +connectAll(): Promise +``` + +Connects all not connected nodes + +#### Returns + +`Promise`\<`number`\> + +Amount of connected Nodes + +#### Defined in + +[src/structures/NodeManager.ts:103](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/NodeManager.ts#L103) + +*** + +### createNode() + +```ts +createNode(options: LavalinkNodeOptions): LavalinkNode +``` + +Create a node and add it to the nodeManager + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `options` | [`LavalinkNodeOptions`](/api/interfaces/lavalinknodeoptions/) | The options for the node | + +#### Returns + +[`LavalinkNode`](/api/classes/lavalinknode/) + +The node that was created + +#### Defined in + +[src/structures/NodeManager.ts:136](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/NodeManager.ts#L136) + +*** + +### deleteNode() + +```ts +deleteNode(node: string | LavalinkNode): void +``` + +Delete a node from the nodeManager and destroy it + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `node` | `string` \| [`LavalinkNode`](/api/classes/lavalinknode/) | The node to delete | + +#### Returns + +`void` + +#### Defined in + +[src/structures/NodeManager.ts:193](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/NodeManager.ts#L193) + +*** + +### disconnectAll() + +```ts +disconnectAll(deleteAllNodes: boolean): Promise +``` + +Disconnects all Nodes from lavalink ws sockets + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `deleteAllNodes` | `boolean` | `false` | if the nodes should also be deleted from nodeManager.nodes | + +#### Returns + +`Promise`\<`number`\> + +amount of disconnected Nodes + +#### Defined in + +[src/structures/NodeManager.ts:87](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/NodeManager.ts#L87) + +*** + +### emit() + +```ts +emit(event: Event, ...args: Parameters): boolean +``` + +Emit an event + +#### Type Parameters + +| Type Parameter | +| ------ | +| `Event` *extends* keyof [`NodeManagerEvents`](/api/interfaces/nodemanagerevents/) | + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `event` | `Event` | The event to emit | +| ...`args` | `Parameters`\<[`NodeManagerEvents`](/api/interfaces/nodemanagerevents/)\[`Event`\]\> | The arguments to pass to the event | + +#### Returns + +`boolean` + +#### Overrides + +`EventEmitter.emit` + +#### Defined in + +[src/structures/NodeManager.ts:17](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/NodeManager.ts#L17) + +*** + +### eventNames() + +```ts +eventNames(): (string | symbol)[] +``` + +Returns an array listing the events for which the emitter has registered +listeners. The values in the array are strings or `Symbol`s. + +```js +import { EventEmitter } from 'node:events'; + +const myEE = new EventEmitter(); +myEE.on('foo', () => {}); +myEE.on('bar', () => {}); + +const sym = Symbol('symbol'); +myEE.on(sym, () => {}); + +console.log(myEE.eventNames()); +// Prints: [ 'foo', 'bar', Symbol(symbol) ] +``` + +#### Returns + +(`string` \| `symbol`)[] + +#### Since + +v6.0.0 + +#### Inherited from + +`EventEmitter.eventNames` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:922 + +*** + +### getMaxListeners() + +```ts +getMaxListeners(): number +``` + +Returns the current max listener value for the `EventEmitter` which is either +set by `emitter.setMaxListeners(n)` or defaults to [defaultMaxListeners](NodeManager.md). + +#### Returns + +`number` + +#### Since + +v1.0.0 + +#### Inherited from + +`EventEmitter.getMaxListeners` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:774 + +*** + +### leastUsedNodes() + +```ts +leastUsedNodes(sortType: + | "memory" + | "cpuLavalink" + | "cpuSystem" + | "calls" + | "playingPlayers" + | "players"): LavalinkNode[] +``` + +Get the nodes sorted for the least usage, by a sorttype + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `sortType` | \| `"memory"` \| `"cpuLavalink"` \| `"cpuSystem"` \| `"calls"` \| `"playingPlayers"` \| `"players"` | `"players"` | The type of sorting to use | + +#### Returns + +[`LavalinkNode`](/api/classes/lavalinknode/)[] + +#### Defined in + +[src/structures/NodeManager.ts:148](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/NodeManager.ts#L148) + +*** + +### listenerCount() + +```ts +listenerCount(eventName: string | symbol, listener?: Function): number +``` + +Returns the number of listeners listening for the event named `eventName`. +If `listener` is provided, it will return how many times the listener is found +in the list of the listeners of the event. + +#### Type Parameters + +| Type Parameter | +| ------ | +| `K` | + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `eventName` | `string` \| `symbol` | The name of the event being listened for | +| `listener`? | `Function` | The event handler function | + +#### Returns + +`number` + +#### Since + +v3.2.0 + +#### Inherited from + +`EventEmitter.listenerCount` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:868 + +*** + +### listeners() + +```ts +listeners(eventName: string | symbol): Function[] +``` + +Returns a copy of the array of listeners for the event named `eventName`. + +```js +server.on('connection', (stream) => { + console.log('someone connected!'); +}); +console.log(util.inspect(server.listeners('connection'))); +// Prints: [ [Function] ] +``` + +#### Type Parameters + +| Type Parameter | +| ------ | +| `K` | + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `eventName` | `string` \| `symbol` | + +#### Returns + +`Function`[] + +#### Since + +v0.1.26 + +#### Inherited from + +`EventEmitter.listeners` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:787 + +*** + +### off() + +```ts +off(event: Event, listener: NodeManagerEvents[Event]): this +``` + +Remove an event listener + +#### Type Parameters + +| Type Parameter | +| ------ | +| `Event` *extends* keyof [`NodeManagerEvents`](/api/interfaces/nodemanagerevents/) | + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `event` | `Event` | The event to remove the listener from | +| `listener` | [`NodeManagerEvents`](/api/interfaces/nodemanagerevents/)\[`Event`\] | The listener to remove | + +#### Returns + +`this` + +#### Overrides + +`EventEmitter.off` + +#### Defined in + +[src/structures/NodeManager.ts:47](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/NodeManager.ts#L47) + +*** + +### on() + +```ts +on(event: Event, listener: NodeManagerEvents[Event]): this +``` + +Add an event listener + +#### Type Parameters + +| Type Parameter | +| ------ | +| `Event` *extends* keyof [`NodeManagerEvents`](/api/interfaces/nodemanagerevents/) | + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `event` | `Event` | The event to listen to | +| `listener` | [`NodeManagerEvents`](/api/interfaces/nodemanagerevents/)\[`Event`\] | The listener to add | + +#### Returns + +`this` + +#### Overrides + +`EventEmitter.on` + +#### Defined in + +[src/structures/NodeManager.ts:27](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/NodeManager.ts#L27) + +*** + +### once() + +```ts +once(event: Event, listener: NodeManagerEvents[Event]): this +``` + +Add an event listener that only fires once + +#### Type Parameters + +| Type Parameter | +| ------ | +| `Event` *extends* keyof [`NodeManagerEvents`](/api/interfaces/nodemanagerevents/) | + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `event` | `Event` | The event to listen to | +| `listener` | [`NodeManagerEvents`](/api/interfaces/nodemanagerevents/)\[`Event`\] | The listener to add | + +#### Returns + +`this` + +#### Overrides + +`EventEmitter.once` + +#### Defined in + +[src/structures/NodeManager.ts:37](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/NodeManager.ts#L37) + +*** + +### prependListener() + +```ts +prependListener(eventName: string | symbol, listener: (...args: any[]) => void): this +``` + +Adds the `listener` function to the _beginning_ of the listeners array for the +event named `eventName`. No checks are made to see if the `listener` has +already been added. Multiple calls passing the same combination of `eventName` +and `listener` will result in the `listener` being added, and called, multiple times. + +```js +server.prependListener('connection', (stream) => { + console.log('someone connected!'); +}); +``` + +Returns a reference to the `EventEmitter`, so that calls can be chained. + +#### Type Parameters + +| Type Parameter | +| ------ | +| `K` | + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `eventName` | `string` \| `symbol` | The name of the event. | +| `listener` | (...`args`: `any`[]) => `void` | The callback function | + +#### Returns + +`this` + +#### Since + +v6.0.0 + +#### Inherited from + +`EventEmitter.prependListener` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:886 + +*** + +### prependOnceListener() + +```ts +prependOnceListener(eventName: string | symbol, listener: (...args: any[]) => void): this +``` + +Adds a **one-time**`listener` function for the event named `eventName` to the _beginning_ of the listeners array. The next time `eventName` is triggered, this +listener is removed, and then invoked. + +```js +server.prependOnceListener('connection', (stream) => { + console.log('Ah, we have our first user!'); +}); +``` + +Returns a reference to the `EventEmitter`, so that calls can be chained. + +#### Type Parameters + +| Type Parameter | +| ------ | +| `K` | + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `eventName` | `string` \| `symbol` | The name of the event. | +| `listener` | (...`args`: `any`[]) => `void` | The callback function | + +#### Returns + +`this` + +#### Since + +v6.0.0 + +#### Inherited from + +`EventEmitter.prependOnceListener` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:902 + +*** + +### rawListeners() + +```ts +rawListeners(eventName: string | symbol): Function[] +``` + +Returns a copy of the array of listeners for the event named `eventName`, +including any wrappers (such as those created by `.once()`). + +```js +import { EventEmitter } from 'node:events'; +const emitter = new EventEmitter(); +emitter.once('log', () => console.log('log once')); + +// Returns a new Array with a function `onceWrapper` which has a property +// `listener` which contains the original listener bound above +const listeners = emitter.rawListeners('log'); +const logFnWrapper = listeners[0]; + +// Logs "log once" to the console and does not unbind the `once` event +logFnWrapper.listener(); + +// Logs "log once" to the console and removes the listener +logFnWrapper(); + +emitter.on('log', () => console.log('log persistently')); +// Will return a new Array with a single function bound by `.on()` above +const newListeners = emitter.rawListeners('log'); + +// Logs "log persistently" twice +newListeners[0](); +emitter.emit('log'); +``` + +#### Type Parameters + +| Type Parameter | +| ------ | +| `K` | + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `eventName` | `string` \| `symbol` | + +#### Returns + +`Function`[] + +#### Since + +v9.4.0 + +#### Inherited from + +`EventEmitter.rawListeners` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:818 + +*** + +### reconnectAll() + +```ts +reconnectAll(): Promise +``` + +Forcefully reconnects all nodes + +#### Returns + +`Promise`\<`number`\> + +amount of nodes + +#### Defined in + +[src/structures/NodeManager.ts:119](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/NodeManager.ts#L119) + +*** + +### removeAllListeners() + +```ts +removeAllListeners(eventName?: string | symbol): this +``` + +Removes all listeners, or those of the specified `eventName`. + +It is bad practice to remove listeners added elsewhere in the code, +particularly when the `EventEmitter` instance was created by some other +component or module (e.g. sockets or file streams). + +Returns a reference to the `EventEmitter`, so that calls can be chained. + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `eventName`? | `string` \| `symbol` | + +#### Returns + +`this` + +#### Since + +v0.1.26 + +#### Inherited from + +`EventEmitter.removeAllListeners` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:758 + +*** + +### removeListener() + +```ts +removeListener(event: Event, listener: NodeManagerEvents[Event]): this +``` + +Remove an event listener + +#### Type Parameters + +| Type Parameter | +| ------ | +| `Event` *extends* keyof [`NodeManagerEvents`](/api/interfaces/nodemanagerevents/) | + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `event` | `Event` | The event to remove the listener from | +| `listener` | [`NodeManagerEvents`](/api/interfaces/nodemanagerevents/)\[`Event`\] | The listener to remove | + +#### Returns + +`this` + +#### Overrides + +`EventEmitter.removeListener` + +#### Defined in + +[src/structures/NodeManager.ts:57](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/NodeManager.ts#L57) + +*** + +### setMaxListeners() + +```ts +setMaxListeners(n: number): this +``` + +By default `EventEmitter`s will print a warning if more than `10` listeners are +added for a particular event. This is a useful default that helps finding +memory leaks. The `emitter.setMaxListeners()` method allows the limit to be +modified for this specific `EventEmitter` instance. The value can be set to `Infinity` (or `0`) to indicate an unlimited number of listeners. + +Returns a reference to the `EventEmitter`, so that calls can be chained. + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `n` | `number` | + +#### Returns + +`this` + +#### Since + +v0.3.5 + +#### Inherited from + +`EventEmitter.setMaxListeners` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:768 + +*** + +### addAbortListener() + +```ts +static addAbortListener(signal: AbortSignal, resource: (event: Event) => void): Disposable +``` + +Listens once to the `abort` event on the provided `signal`. + +Listening to the `abort` event on abort signals is unsafe and may +lead to resource leaks since another third party with the signal can +call `e.stopImmediatePropagation()`. Unfortunately Node.js cannot change +this since it would violate the web standard. Additionally, the original +API makes it easy to forget to remove listeners. + +This API allows safely using `AbortSignal`s in Node.js APIs by solving these +two issues by listening to the event such that `stopImmediatePropagation` does +not prevent the listener from running. + +Returns a disposable so that it may be unsubscribed from more easily. + +```js +import { addAbortListener } from 'node:events'; + +function example(signal) { + let disposable; + try { + signal.addEventListener('abort', (e) => e.stopImmediatePropagation()); + disposable = addAbortListener(signal, (e) => { + // Do something when signal is aborted. + }); + } finally { + disposable?.[Symbol.dispose](); + } +} +``` + +:::caution[Experimental] +This API should not be used in production and may be trimmed from a public release. +::: + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `signal` | `AbortSignal` | +| `resource` | (`event`: `Event`) => `void` | + +#### Returns + +`Disposable` + +Disposable that removes the `abort` listener. + +#### Since + +v20.5.0 + +#### Inherited from + +`EventEmitter.addAbortListener` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:437 + +*** + +### getEventListeners() + +```ts +static getEventListeners(emitter: EventEmitter | EventTarget, name: string | symbol): Function[] +``` + +Returns a copy of the array of listeners for the event named `eventName`. + +For `EventEmitter`s this behaves exactly the same as calling `.listeners` on +the emitter. + +For `EventTarget`s this is the only way to get the event listeners for the +event target. This is useful for debugging and diagnostic purposes. + +```js +import { getEventListeners, EventEmitter } from 'node:events'; + +{ + const ee = new EventEmitter(); + const listener = () => console.log('Events are fun'); + ee.on('foo', listener); + console.log(getEventListeners(ee, 'foo')); // [ [Function: listener] ] +} +{ + const et = new EventTarget(); + const listener = () => console.log('Events are fun'); + et.addEventListener('foo', listener); + console.log(getEventListeners(et, 'foo')); // [ [Function: listener] ] +} +``` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `emitter` | `EventEmitter`\<`DefaultEventMap`\> \| `EventTarget` | +| `name` | `string` \| `symbol` | + +#### Returns + +`Function`[] + +#### Since + +v15.2.0, v14.17.0 + +#### Inherited from + +`EventEmitter.getEventListeners` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:358 + +*** + +### getMaxListeners() + +```ts +static getMaxListeners(emitter: EventEmitter | EventTarget): number +``` + +Returns the currently set max amount of listeners. + +For `EventEmitter`s this behaves exactly the same as calling `.getMaxListeners` on +the emitter. + +For `EventTarget`s this is the only way to get the max event listeners for the +event target. If the number of event handlers on a single EventTarget exceeds +the max set, the EventTarget will print a warning. + +```js +import { getMaxListeners, setMaxListeners, EventEmitter } from 'node:events'; + +{ + const ee = new EventEmitter(); + console.log(getMaxListeners(ee)); // 10 + setMaxListeners(11, ee); + console.log(getMaxListeners(ee)); // 11 +} +{ + const et = new EventTarget(); + console.log(getMaxListeners(et)); // 10 + setMaxListeners(11, et); + console.log(getMaxListeners(et)); // 11 +} +``` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `emitter` | `EventEmitter`\<`DefaultEventMap`\> \| `EventTarget` | + +#### Returns + +`number` + +#### Since + +v19.9.0 + +#### Inherited from + +`EventEmitter.getMaxListeners` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:387 + +*** + +### ~~listenerCount()~~ + +```ts +static listenerCount(emitter: EventEmitter, eventName: string | symbol): number +``` + +A class method that returns the number of listeners for the given `eventName` registered on the given `emitter`. + +```js +import { EventEmitter, listenerCount } from 'node:events'; + +const myEmitter = new EventEmitter(); +myEmitter.on('event', () => {}); +myEmitter.on('event', () => {}); +console.log(listenerCount(myEmitter, 'event')); +// Prints: 2 +``` + +:::caution[Deprecated] +Since v3.2.0 - Use `listenerCount` instead. +::: + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `emitter` | `EventEmitter`\<`DefaultEventMap`\> | The emitter to query | +| `eventName` | `string` \| `symbol` | The event name | + +#### Returns + +`number` + +#### Since + +v0.9.12 + +#### Inherited from + +`EventEmitter.listenerCount` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:330 + +*** + +### on() + +#### on(emitter, eventName, options) + +```ts +static on( + emitter: EventEmitter, + eventName: string | symbol, +options?: StaticEventEmitterIteratorOptions): AsyncIterableIterator +``` + +```js +import { on, EventEmitter } from 'node:events'; +import process from 'node:process'; + +const ee = new EventEmitter(); + +// Emit later on +process.nextTick(() => { + ee.emit('foo', 'bar'); + ee.emit('foo', 42); +}); + +for await (const event of on(ee, 'foo')) { + // The execution of this inner block is synchronous and it + // processes one event at a time (even with await). Do not use + // if concurrent execution is required. + console.log(event); // prints ['bar'] [42] +} +// Unreachable here +``` + +Returns an `AsyncIterator` that iterates `eventName` events. It will throw +if the `EventEmitter` emits `'error'`. It removes all listeners when +exiting the loop. The `value` returned by each iteration is an array +composed of the emitted event arguments. + +An `AbortSignal` can be used to cancel waiting on events: + +```js +import { on, EventEmitter } from 'node:events'; +import process from 'node:process'; + +const ac = new AbortController(); + +(async () => { + const ee = new EventEmitter(); + + // Emit later on + process.nextTick(() => { + ee.emit('foo', 'bar'); + ee.emit('foo', 42); + }); + + for await (const event of on(ee, 'foo', { signal: ac.signal })) { + // The execution of this inner block is synchronous and it + // processes one event at a time (even with await). Do not use + // if concurrent execution is required. + console.log(event); // prints ['bar'] [42] + } + // Unreachable here +})(); + +process.nextTick(() => ac.abort()); +``` + +Use the `close` option to specify an array of event names that will end the iteration: + +```js +import { on, EventEmitter } from 'node:events'; +import process from 'node:process'; + +const ee = new EventEmitter(); + +// Emit later on +process.nextTick(() => { + ee.emit('foo', 'bar'); + ee.emit('foo', 42); + ee.emit('close'); +}); + +for await (const event of on(ee, 'foo', { close: ['close'] })) { + console.log(event); // prints ['bar'] [42] +} +// the loop will exit after 'close' is emitted +console.log('done'); // prints 'done' +``` + +##### Parameters + +| Parameter | Type | +| ------ | ------ | +| `emitter` | `EventEmitter`\<`DefaultEventMap`\> | +| `eventName` | `string` \| `symbol` | +| `options`? | `StaticEventEmitterIteratorOptions` | + +##### Returns + +`AsyncIterableIterator`\<`any`[], `any`, `any`\> + +An `AsyncIterator` that iterates `eventName` events emitted by the `emitter` + +##### Since + +v13.6.0, v12.16.0 + +##### Inherited from + +`EventEmitter.on` + +##### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:303 + +#### on(emitter, eventName, options) + +```ts +static on( + emitter: EventTarget, + eventName: string, +options?: StaticEventEmitterIteratorOptions): AsyncIterableIterator +``` + +##### Parameters + +| Parameter | Type | +| ------ | ------ | +| `emitter` | `EventTarget` | +| `eventName` | `string` | +| `options`? | `StaticEventEmitterIteratorOptions` | + +##### Returns + +`AsyncIterableIterator`\<`any`[], `any`, `any`\> + +##### Inherited from + +`EventEmitter.on` + +##### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:308 + +*** + +### once() + +#### once(emitter, eventName, options) + +```ts +static once( + emitter: EventEmitter, + eventName: string | symbol, +options?: StaticEventEmitterOptions): Promise +``` + +Creates a `Promise` that is fulfilled when the `EventEmitter` emits the given +event or that is rejected if the `EventEmitter` emits `'error'` while waiting. +The `Promise` will resolve with an array of all the arguments emitted to the +given event. + +This method is intentionally generic and works with the web platform [EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) interface, which has no special`'error'` event +semantics and does not listen to the `'error'` event. + +```js +import { once, EventEmitter } from 'node:events'; +import process from 'node:process'; + +const ee = new EventEmitter(); + +process.nextTick(() => { + ee.emit('myevent', 42); +}); + +const [value] = await once(ee, 'myevent'); +console.log(value); + +const err = new Error('kaboom'); +process.nextTick(() => { + ee.emit('error', err); +}); + +try { + await once(ee, 'myevent'); +} catch (err) { + console.error('error happened', err); +} +``` + +The special handling of the `'error'` event is only used when `events.once()` is used to wait for another event. If `events.once()` is used to wait for the +'`error'` event itself, then it is treated as any other kind of event without +special handling: + +```js +import { EventEmitter, once } from 'node:events'; + +const ee = new EventEmitter(); + +once(ee, 'error') + .then(([err]) => console.log('ok', err.message)) + .catch((err) => console.error('error', err.message)); + +ee.emit('error', new Error('boom')); + +// Prints: ok boom +``` + +An `AbortSignal` can be used to cancel waiting for the event: + +```js +import { EventEmitter, once } from 'node:events'; + +const ee = new EventEmitter(); +const ac = new AbortController(); + +async function foo(emitter, event, signal) { + try { + await once(emitter, event, { signal }); + console.log('event emitted!'); + } catch (error) { + if (error.name === 'AbortError') { + console.error('Waiting for the event was canceled!'); + } else { + console.error('There was an error', error.message); + } + } +} + +foo(ee, 'foo', ac.signal); +ac.abort(); // Abort waiting for the event +ee.emit('foo'); // Prints: Waiting for the event was canceled! +``` + +##### Parameters + +| Parameter | Type | +| ------ | ------ | +| `emitter` | `EventEmitter`\<`DefaultEventMap`\> | +| `eventName` | `string` \| `symbol` | +| `options`? | `StaticEventEmitterOptions` | + +##### Returns + +`Promise`\<`any`[]\> + +##### Since + +v11.13.0, v10.16.0 + +##### Inherited from + +`EventEmitter.once` + +##### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:217 + +#### once(emitter, eventName, options) + +```ts +static once( + emitter: EventTarget, + eventName: string, +options?: StaticEventEmitterOptions): Promise +``` + +##### Parameters + +| Parameter | Type | +| ------ | ------ | +| `emitter` | `EventTarget` | +| `eventName` | `string` | +| `options`? | `StaticEventEmitterOptions` | + +##### Returns + +`Promise`\<`any`[]\> + +##### Inherited from + +`EventEmitter.once` + +##### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:222 + +*** + +### setMaxListeners() + +```ts +static setMaxListeners(n?: number, ...eventTargets?: (EventEmitter | EventTarget)[]): void +``` + +```js +import { setMaxListeners, EventEmitter } from 'node:events'; + +const target = new EventTarget(); +const emitter = new EventEmitter(); + +setMaxListeners(5, target, emitter); +``` + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `n`? | `number` | A non-negative number. The maximum number of listeners per `EventTarget` event. | +| ...`eventTargets`? | (`EventEmitter`\<`DefaultEventMap`\> \| `EventTarget`)[] | - | + +#### Returns + +`void` + +#### Since + +v15.4.0 + +#### Inherited from + +`EventEmitter.setMaxListeners` + +#### Defined in + +node\_modules/.pnpm/@types+node@22.5.5/node\_modules/@types/node/events.d.ts:402 diff --git a/docs/src/content/docs/api/classes/Player.md b/docs/src/content/docs/api/classes/Player.md new file mode 100644 index 0000000..f3cbf3d --- /dev/null +++ b/docs/src/content/docs/api/classes/Player.md @@ -0,0 +1,725 @@ +--- +editUrl: false +next: true +prev: true +title: "Player" +--- + +## Constructors + +### new Player() + +```ts +new Player(options: PlayerOptions, LavalinkManager: LavalinkManager): Player +``` + +Create a new Player + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `options` | [`PlayerOptions`](/api/interfaces/playeroptions/) | | +| `LavalinkManager` | [`LavalinkManager`](/api/classes/lavalinkmanager/) | | + +#### Returns + +[`Player`](/api/classes/player/) + +#### Defined in + +[src/structures/Player.ts:82](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L82) + +## Properties + +| Property | Modifier | Type | Default value | Description | Defined in | +| ------ | ------ | ------ | ------ | ------ | ------ | +| `connected` | `public` | `boolean` | `false` | The Player Connection's State (from Lavalink) | [src/structures/Player.ts:67](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L67) | +| `createdTimeStamp` | `public` | `number` | `undefined` | When the player was created [Timestamp in Ms] (from lavalink) | [src/structures/Player.ts:65](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L65) | +| `filterManager` | `public` | [`FilterManager`](/api/classes/filtermanager/) | `undefined` | Filter Manager per player | [src/structures/Player.ts:18](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L18) | +| `guildId` | `public` | `string` | `undefined` | The Guild Id of the Player | [src/structures/Player.ts:29](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L29) | +| `lastPosition` | `public` | `number` | `0` | The current Positin of the player (from Lavalink) | [src/structures/Player.ts:60](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L60) | +| `lastPositionChange` | `public` | `number` | `null` | The timestamp when the last position change update happened | [src/structures/Player.ts:58](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L58) | +| `lastSavedPosition` | `public` | `number` | `0` | - | [src/structures/Player.ts:62](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L62) | +| `LavalinkManager` | `public` | [`LavalinkManager`](/api/classes/lavalinkmanager/) | `undefined` | circular reference to the lavalink Manager from the Player for easier use | [src/structures/Player.ts:20](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L20) | +| `lavalinkVolume` | `public` | `number` | `100` | The Volume Lavalink actually is outputting | [src/structures/Player.ts:51](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L51) | +| `node` | `public` | [`LavalinkNode`](/api/classes/lavalinknode/) | `undefined` | The lavalink node assigned the the player, don't change it manually | [src/structures/Player.ts:24](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L24) | +| `options` | `public` | [`PlayerOptions`](/api/interfaces/playeroptions/) | `undefined` | Player options currently used, mutation doesn't affect player's state | [src/structures/Player.ts:22](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L22) | +| `paused` | `public` | `boolean` | `false` | States if the Bot is paused or not | [src/structures/Player.ts:37](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L37) | +| `ping` | `public` | `object` | `undefined` | Player's ping | [src/structures/Player.ts:41](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L41) | +| `ping.lavalink` | `public` | `number` | `0` | - | [src/structures/Player.ts:43](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L43) | +| `ping.ws` | `public` | `number` | `0` | - | [src/structures/Player.ts:45](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L45) | +| `playing` | `public` | `boolean` | `false` | States if the Bot is supposed to be outputting audio | [src/structures/Player.ts:35](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L35) | +| `queue` | `public` | [`Queue`](/api/classes/queue/) | `undefined` | The queue from the player | [src/structures/Player.ts:26](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L26) | +| `repeatMode` | `public` | [`RepeatMode`](/api/type-aliases/repeatmode/) | `"off"` | Repeat Mode of the Player | [src/structures/Player.ts:39](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L39) | +| `textChannelId` | `public` | `string` | `null` | The Text Channel Id of the Player | [src/structures/Player.ts:33](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L33) | +| `voice` | `public` | [`LavalinkPlayerVoiceOptions`](/api/type-aliases/lavalinkplayervoiceoptions/) | `undefined` | Voice Server Data (from Lavalink) | [src/structures/Player.ts:69](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L69) | +| `voiceChannelId` | `public` | `string` | `null` | The Voice Channel Id of the Player | [src/structures/Player.ts:31](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L31) | +| `volume` | `public` | `number` | `100` | The Display Volume | [src/structures/Player.ts:49](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L49) | + +## Accessors + +### position + +```ts +get position(): number +``` + +The current Positin of the player (Calculated) + +#### Returns + +`number` + +#### Defined in + +[src/structures/Player.ts:54](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L54) + +## Methods + +### changeNode() + +```ts +changeNode(newNode: string | LavalinkNode): Promise +``` + +Move the player on a different Audio-Node + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `newNode` | `string` \| [`LavalinkNode`](/api/classes/lavalinknode/) | New Node / New Node Id | + +#### Returns + +`Promise`\<`string`\> + +#### Defined in + +[src/structures/Player.ts:697](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L697) + +*** + +### changeVoiceState() + +```ts +changeVoiceState(data: object): Promise +``` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `data` | `object` | +| `data.selfDeaf`? | `boolean` | +| `data.selfMute`? | `boolean` | +| `data.voiceChannelId`? | `string` | + +#### Returns + +`Promise`\<[`Player`](/api/classes/player/)\> + +#### Defined in + +[src/structures/Player.ts:556](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L556) + +*** + +### clearData() + +```ts +clearData(): Player +``` + +CLears all the custom data. + +#### Returns + +[`Player`](/api/classes/player/) + +#### Defined in + +[src/structures/Player.ts:145](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L145) + +*** + +### connect() + +```ts +connect(): Promise +``` + +Connects the Player to the Voice Channel + +#### Returns + +`Promise`\<[`Player`](/api/classes/player/)\> + +#### Defined in + +[src/structures/Player.ts:538](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L538) + +*** + +### deleteSponsorBlock() + +```ts +deleteSponsorBlock(): Promise +``` + +Delete the SponsorBlock + +#### Returns + +`Promise`\<`void`\> + +#### Defined in + +[src/structures/Player.ts:402](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L402) + +*** + +### destroy() + +```ts +destroy(reason?: string, disconnect?: boolean): Promise +``` + +Destroy the player and disconnect from the voice channel + +#### Parameters + +| Parameter | Type | Default value | +| ------ | ------ | ------ | +| `reason`? | `string` | `undefined` | +| `disconnect`? | `boolean` | `true` | + +#### Returns + +`Promise`\<[`Player`](/api/classes/player/)\> + +#### Defined in + +[src/structures/Player.ts:605](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L605) + +*** + +### disconnect() + +```ts +disconnect(force: boolean): Promise +``` + +Disconnects the Player from the Voice Channel, but keeps the player in the cache + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `force` | `boolean` | `false` | If false it throws an error, if player thinks it's already disconnected | + +#### Returns + +`Promise`\<[`Player`](/api/classes/player/)\> + +#### Defined in + +[src/structures/Player.ts:584](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L584) + +*** + +### get() + +```ts +get(key: string): T +``` + +Get custom data. + +#### Type Parameters + +| Type Parameter | +| ------ | +| `T` | + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `key` | `string` | | + +#### Returns + +`T` + +#### Defined in + +[src/structures/Player.ts:138](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L138) + +*** + +### getAllData() + +```ts +getAllData(): Record +``` + +Get all custom Data + +#### Returns + +`Record`\<`string`, `unknown`\> + +#### Defined in + +[src/structures/Player.ts:157](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L157) + +*** + +### getCurrentLyrics() + +```ts +getCurrentLyrics(skipTrackSource?: boolean): Promise +``` + +Get the current lyrics of the track currently playing on the guild + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `skipTrackSource`? | `boolean` | If true, it will not try to get the lyrics from the track source | + +#### Returns + +`Promise`\<[`LyricsResult`](/api/interfaces/lyricsresult/)\> + +The current lyrics + +#### Example + +```ts +const lyrics = await player.getCurrentLyrics(); +``` + +#### Defined in + +[src/structures/Player.ts:649](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L649) + +*** + +### getLyrics() + +```ts +getLyrics(track: Track, skipTrackSource?: boolean): Promise +``` + +Get the lyrics of a specific track + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `track` | [`Track`](/api/interfaces/track/) | The track to get the lyrics for | +| `skipTrackSource`? | `boolean` | If true, it will not try to get the lyrics from the track source | + +#### Returns + +`Promise`\<[`LyricsResult`](/api/interfaces/lyricsresult/)\> + +The lyrics of the track + +#### Example + +```ts +const lyrics = await player.getLyrics(player.queue.tracks[0], true); +``` + +#### Defined in + +[src/structures/Player.ts:663](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L663) + +*** + +### getSponsorBlock() + +```ts +getSponsorBlock(): Promise +``` + +Get the SponsorBlock + +#### Returns + +`Promise`\<[`SponsorBlockSegment`](/api/type-aliases/sponsorblocksegment/)[]\> + +#### Defined in + +[src/structures/Player.ts:396](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L396) + +*** + +### lavaSearch() + +```ts +lavaSearch( + query: LavaSearchQuery, + requestUser: unknown, +throwOnEmpty: boolean): Promise +``` + +Search for a track + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `query` | [`LavaSearchQuery`](/api/type-aliases/lavasearchquery/) | `undefined` | The query to search for | +| `requestUser` | `unknown` | `undefined` | The user that requested the track | +| `throwOnEmpty` | `boolean` | `false` | If an error should be thrown if no track is found | + +#### Returns + +`Promise`\<[`SearchResult`](/api/interfaces/searchresult/) \| [`LavaSearchResponse`](/api/interfaces/lavasearchresponse/)\> + +The search result + +#### Defined in + +[src/structures/Player.ts:383](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L383) + +*** + +### pause() + +```ts +pause(): Promise +``` + +Pause the player + +#### Returns + +`Promise`\<[`Player`](/api/classes/player/)\> + +#### Defined in + +[src/structures/Player.ts:430](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L430) + +*** + +### play() + +```ts +play(options: Partial): any +``` + +Play the next track from the queue / a specific track, with playoptions for Lavalink + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `options` | `Partial`\<[`PlayOptions`](/api/interfaces/playoptions/)\> | | + +#### Returns + +`any` + +#### Defined in + +[src/structures/Player.ts:165](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L165) + +*** + +### resume() + +```ts +resume(): Promise +``` + +Resume the Player + +#### Returns + +`Promise`\<[`Player`](/api/classes/player/)\> + +#### Defined in + +[src/structures/Player.ts:443](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L443) + +*** + +### search() + +```ts +search( + query: SearchQuery, + requestUser: unknown, +throwOnEmpty: boolean): Promise +``` + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `query` | [`SearchQuery`](/api/type-aliases/searchquery/) | `undefined` | Query for your data | +| `requestUser` | `unknown` | `undefined` | | +| `throwOnEmpty` | `boolean` | `false` | - | + +#### Returns + +`Promise`\<[`UnresolvedSearchResult`](/api/interfaces/unresolvedsearchresult/) \| [`SearchResult`](/api/interfaces/searchresult/)\> + +#### Defined in + +[src/structures/Player.ts:410](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L410) + +*** + +### seek() + +```ts +seek(position: number): Promise +``` + +Seek to a specific Position + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `position` | `number` | | + +#### Returns + +`Promise`\<[`Player`](/api/classes/player/)\> + +#### Defined in + +[src/structures/Player.ts:456](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L456) + +*** + +### set() + +```ts +set(key: string, value: unknown): Player +``` + +Set custom data. + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `key` | `string` | | +| `value` | `unknown` | | + +#### Returns + +[`Player`](/api/classes/player/) + +#### Defined in + +[src/structures/Player.ts:129](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L129) + +*** + +### setRepeatMode() + +```ts +setRepeatMode(repeatMode: RepeatMode): Promise +``` + +Set the Repeatmode of the Player + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `repeatMode` | [`RepeatMode`](/api/type-aliases/repeatmode/) | | + +#### Returns + +`Promise`\<[`Player`](/api/classes/player/)\> + +#### Defined in + +[src/structures/Player.ts:481](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L481) + +*** + +### setSponsorBlock() + +```ts +setSponsorBlock(segments: SponsorBlockSegment[]): Promise +``` + +Set the SponsorBlock + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `segments` | [`SponsorBlockSegment`](/api/type-aliases/sponsorblocksegment/)[] | The segments to set | + +#### Returns + +`Promise`\<`void`\> + +#### Defined in + +[src/structures/Player.ts:390](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L390) + +*** + +### setVolume() + +```ts +setVolume(volume: number, ignoreVolumeDecrementer: boolean): Promise +``` + +Set the Volume for the Player + +#### Parameters + +| Parameter | Type | Default value | Description | +| ------ | ------ | ------ | ------ | +| `volume` | `number` | `undefined` | The Volume in percent | +| `ignoreVolumeDecrementer` | `boolean` | `false` | If it should ignore the volumedecrementer option | + +#### Returns + +`Promise`\<[`Player`](/api/classes/player/)\> + +#### Defined in + +[src/structures/Player.ts:348](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L348) + +*** + +### skip() + +```ts +skip(skipTo: number, throwError: boolean): Promise +``` + +Skip the current song, or a specific amount of songs + +#### Parameters + +| Parameter | Type | Default value | +| ------ | ------ | ------ | +| `skipTo` | `number` | `0` | +| `throwError` | `boolean` | `true` | + +#### Returns + +`Promise`\<[`Player`](/api/classes/player/)\> + +#### Defined in + +[src/structures/Player.ts:491](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L491) + +*** + +### stopPlaying() + +```ts +stopPlaying(clearQueue: boolean, executeAutoplay: boolean): Promise +``` + +Clears the queue and stops playing. Does not destroy the Player and not leave the channel + +#### Parameters + +| Parameter | Type | Default value | +| ------ | ------ | ------ | +| `clearQueue` | `boolean` | `true` | +| `executeAutoplay` | `boolean` | `false` | + +#### Returns + +`Promise`\<[`Player`](/api/classes/player/)\> + +#### Defined in + +[src/structures/Player.ts:514](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L514) + +*** + +### subscribeLyrics() + +```ts +subscribeLyrics(): Promise +``` + +Subscribe to the lyrics event on a specific guild to active live lyrics events + +#### Returns + +`Promise`\<`any`\> + +The unsubscribe function + +#### Example + +```ts +const lyrics = await player.subscribeLyrics(); +``` + +#### Defined in + +[src/structures/Player.ts:676](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L676) + +*** + +### toJSON() + +```ts +toJSON(): PlayerJson +``` + +Converts the Player including Queue to a Json state + +#### Returns + +[`PlayerJson`](/api/interfaces/playerjson/) + +#### Defined in + +[src/structures/Player.ts:739](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L739) + +*** + +### unsubscribeLyrics() + +```ts +unsubscribeLyrics(guildId: string): Promise +``` + +Unsubscribe from the lyrics event on a specific guild to disable live lyrics events + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `guildId` | `string` | The guild id to unsubscribe from | + +#### Returns + +`Promise`\<`any`\> + +The unsubscribe function + +#### Example + +```ts +const lyrics = await player.unsubscribeLyrics(); +``` + +#### Defined in + +[src/structures/Player.ts:689](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Player.ts#L689) diff --git a/docs/src/content/docs/api/classes/Queue.md b/docs/src/content/docs/api/classes/Queue.md new file mode 100644 index 0000000..024ca86 --- /dev/null +++ b/docs/src/content/docs/api/classes/Queue.md @@ -0,0 +1,220 @@ +--- +editUrl: false +next: true +prev: true +title: "Queue" +--- + +## Constructors + +### new Queue() + +```ts +new Queue( + guildId: string, + data: Partial, + QueueSaver?: QueueSaver, + queueOptions?: ManagerQueueOptions): Queue +``` + +Create a new Queue + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `guildId` | `string` | The guild ID | +| `data` | `Partial`\<[`StoredQueue`](/api/interfaces/storedqueue/)\> | The data to initialize the queue with | +| `QueueSaver`? | [`QueueSaver`](/api/classes/queuesaver/) | The queue saver to use | +| `queueOptions`? | [`ManagerQueueOptions`](/api/interfaces/managerqueueoptions/) | | + +#### Returns + +[`Queue`](/api/classes/queue/) + +#### Defined in + +[src/structures/Queue.ts:132](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L132) + +## Properties + +| Property | Modifier | Type | Default value | Description | Defined in | +| ------ | ------ | ------ | ------ | ------ | ------ | +| `current` | `public` | [`Track`](/api/interfaces/track/) | `null` | - | [src/structures/Queue.ts:118](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L118) | +| `options` | `public` | `object` | `undefined` | - | [src/structures/Queue.ts:119](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L119) | +| `options.maxPreviousTracks` | `public` | `number` | `25` | - | [src/structures/Queue.ts:119](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L119) | +| `previous` | `readonly` | [`Track`](/api/interfaces/track/)[] | `[]` | - | [src/structures/Queue.ts:117](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L117) | +| `tracks` | `readonly` | ([`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`Track`](/api/interfaces/track/))[] | `[]` | - | [src/structures/Queue.ts:116](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L116) | +| `utils` | `public` | `object` | `undefined` | Utils for a Queue | [src/structures/Queue.ts:148](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L148) | +| `utils.destroy` | `public` | () => `Promise`\<`unknown`\> | `undefined` | - | [src/structures/Queue.ts:173](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L173) | +| `utils.save` | `public` | () => `Promise`\<`unknown`\> | `undefined` | Save the current cached Queue on the database/server (overides the server) | [src/structures/Queue.ts:152](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L152) | +| `utils.sync` | `public` | (`override`: `boolean`, `dontSyncCurrent`: `boolean`) => `Promise`\<`void`\> | `undefined` | Sync the current queue database/server with the cached one | [src/structures/Queue.ts:161](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L161) | +| `utils.toJSON` | `public` | () => [`StoredQueue`](/api/interfaces/storedqueue/) | `undefined` | - | [src/structures/Queue.ts:181](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L181) | +| `utils.totalDuration` | `public` | () => `number` | `undefined` | Get the Total Duration of the Queue-Songs summed up | [src/structures/Queue.ts:194](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L194) | + +## Methods + +### add() + +```ts +add(TrackOrTracks: UnresolvedTrack | Track | (UnresolvedTrack | Track)[], index?: number): any +``` + +Add a Track to the Queue, and after saved in the "db" it returns the amount of the Tracks + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `TrackOrTracks` | [`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`Track`](/api/interfaces/track/) \| ([`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`Track`](/api/interfaces/track/))[] | | +| `index`? | `number` | At what position to add the Track | + +#### Returns + +`any` + +Queue-Size (for the next Tracks) + +#### Defined in + +[src/structures/Queue.ts:231](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L231) + +*** + +### remove() + +```ts +remove(removeQueryTrack: T): Promise +``` + +Remove stuff from the queue.tracks array + - single Track | UnresolvedTrack + - multiple Track | UnresovedTrack + - at the index or multiple indexes + +#### Type Parameters + +| Type Parameter | +| ------ | +| `T` *extends* \| `number` \| [`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`UnresolvedTrack`](/api/interfaces/unresolvedtrack/)[] \| `number`[] \| [`Track`](/api/interfaces/track/) \| [`Track`](/api/interfaces/track/)[] \| (`number` \| [`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`Track`](/api/interfaces/track/))[] | + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `removeQueryTrack` | `T` | | + +#### Returns + +`Promise`\<`object`\> + +null (if nothing was removed) / { removed } where removed is an array with all removed elements + +| Name | Type | Defined in | +| ------ | ------ | ------ | +| `removed` | ([`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`Track`](/api/interfaces/track/))[] | [src/structures/Queue.ts:305](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L305) | + +#### Example + +```js +// remove single track + +const track = player.queue.tracks[4]; +await player.queue.remove(track); + +// if you already have the index you can straight up pass it too +await player.queue.remove(4); + +// if you want to remove multiple tracks, e.g. from position 4 to position 10 you can do smt like this +await player.queue.remove(player.queue.tracks.slice(4, 10)) // get's the tracks from 4 - 10, which then get's found in the remove function to be removed + +// I still highly suggest to use .splice! + +await player.queue.splice(4, 10); // removes at index 4, 10 tracks + +await player.queue.splice(1, 1); // removes at index 1, 1 track + +await player.queue.splice(4, 0, ...tracks) // removes 0 tracks at position 4, and then inserts all tracks after position 4. +``` + +#### Defined in + +[src/structures/Queue.ts:305](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L305) + +*** + +### shiftPrevious() + +```ts +shiftPrevious(): Promise +``` + +Shifts the previous array, to return the last previous track & thus remove it from the previous queue + +#### Returns + +`Promise`\<[`Track`](/api/interfaces/track/)\> + +#### Example + +```js +// example on how to play the previous track again +const previous = await player.queue.shiftPrevious(); // get the previous track and remove it from the previous queue array!! +if(!previous) return console.error("No previous track found"); +await player.play({ clientTrack: previous }); // play it again +``` + +#### Defined in + +[src/structures/Queue.ts:398](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L398) + +*** + +### shuffle() + +```ts +shuffle(): Promise +``` + +Shuffles the current Queue, then saves it + +#### Returns + +`Promise`\<`number`\> + +Amount of Tracks in the Queue + +#### Defined in + +[src/structures/Queue.ts:203](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L203) + +*** + +### splice() + +```ts +splice( + index: number, + amount: number, + TrackOrTracks?: UnresolvedTrack | Track | (UnresolvedTrack | Track)[]): any +``` + +Splice the tracks in the Queue + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `index` | `number` | Where to remove the Track | +| `amount` | `number` | How many Tracks to remove? | +| `TrackOrTracks`? | [`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`Track`](/api/interfaces/track/) \| ([`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`Track`](/api/interfaces/track/))[] | Want to Add more Tracks? | + +#### Returns + +`any` + +Spliced Track + +#### Defined in + +[src/structures/Queue.ts:253](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L253) diff --git a/docs/src/content/docs/api/classes/QueueSaver.md b/docs/src/content/docs/api/classes/QueueSaver.md new file mode 100644 index 0000000..2d22c3b --- /dev/null +++ b/docs/src/content/docs/api/classes/QueueSaver.md @@ -0,0 +1,140 @@ +--- +editUrl: false +next: true +prev: true +title: "QueueSaver" +--- + +## Constructors + +### new QueueSaver() + +```ts +new QueueSaver(options: ManagerQueueOptions): QueueSaver +``` + +#### Parameters + +| Parameter | Type | +| ------ | ------ | +| `options` | [`ManagerQueueOptions`](/api/interfaces/managerqueueoptions/) | + +#### Returns + +[`QueueSaver`](/api/classes/queuesaver/) + +#### Defined in + +[src/structures/Queue.ts:19](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L19) + +## Properties + +| Property | Modifier | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | ------ | +| `options` | `public` | `object` | The options for the queue saver | [src/structures/Queue.ts:16](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L16) | +| `options.maxPreviousTracks` | `public` | `number` | - | [src/structures/Queue.ts:17](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L17) | + +## Methods + +### delete() + +```ts +delete(guildId: string): Promise +``` + +Delete the queue for a guild + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `guildId` | `string` | The guild ID | + +#### Returns + +`Promise`\<`unknown`\> + +The queue for the guild + +#### Defined in + +[src/structures/Queue.ts:40](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L40) + +*** + +### get() + +```ts +get(guildId: string): Promise> +``` + +Get the queue for a guild + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `guildId` | `string` | The guild ID | + +#### Returns + +`Promise`\<`Partial`\<[`StoredQueue`](/api/interfaces/storedqueue/)\>\> + +The queue for the guild + +#### Defined in + +[src/structures/Queue.ts:31](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L31) + +*** + +### set() + +```ts +set(guildId: string, valueToStringify: StoredQueue): Promise +``` + +Set the queue for a guild + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `guildId` | `string` | The guild ID | +| `valueToStringify` | [`StoredQueue`](/api/interfaces/storedqueue/) | The queue to set | + +#### Returns + +`Promise`\<`unknown`\> + +The queue for the guild + +#### Defined in + +[src/structures/Queue.ts:50](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L50) + +*** + +### sync() + +```ts +sync(guildId: string): Promise> +``` + +Sync the queue for a guild + +#### Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `guildId` | `string` | The guild ID | + +#### Returns + +`Promise`\<`Partial`\<[`StoredQueue`](/api/interfaces/storedqueue/)\>\> + +The queue for the guild + +#### Defined in + +[src/structures/Queue.ts:59](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Queue.ts#L59) diff --git a/docs/src/content/docs/api/enumerations/DebugEvents.md b/docs/src/content/docs/api/enumerations/DebugEvents.md new file mode 100644 index 0000000..fcfaf7a --- /dev/null +++ b/docs/src/content/docs/api/enumerations/DebugEvents.md @@ -0,0 +1,51 @@ +--- +editUrl: false +next: true +prev: true +title: "DebugEvents" +--- + +## Enumeration Members + +| Enumeration Member | Value | Defined in | +| ------ | ------ | ------ | +| `AutoplayExecution` | `"AutoplayExecution"` | [src/structures/Constants.ts:8](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L8) | +| `AutoplayNoSongsAdded` | `"AutoplayNoSongsAdded"` | [src/structures/Constants.ts:9](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L9) | +| `AutoplayThresholdSpamLimiter` | `"AutoplayThresholdSpamLimiter"` | [src/structures/Constants.ts:10](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L10) | +| `BandcampSearchLokalEngine` | `"BandcampSearchLokalEngine"` | [src/structures/Constants.ts:44](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L44) | +| `BuildTrackError` | `"BuildTrackError"` | [src/structures/Constants.ts:47](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L47) | +| `DeleteSponsorBlock` | `"DeleteSponsorBlock"` | [src/structures/Constants.ts:5](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L5) | +| `FailedToConnectToNodes` | `"FailedToConnectToNodes"` | [src/structures/Constants.ts:51](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L51) | +| `GetClosestTrackFailed` | `"GetClosestTrackFailed"` | [src/structures/Constants.ts:49](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L49) | +| `HeartBeatTriggered` | `"HeartBeatTriggered"` | [src/structures/Constants.ts:22](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L22) | +| `LavaSearchNothingFound` | `"LavaSearchNothingFound"` | [src/structures/Constants.ts:28](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L28) | +| `NoAudioDebug` | `"NoAudioDebug"` | [src/structures/Constants.ts:52](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L52) | +| `NoSocketOnDestroy` | `"NoSocketOnDestroy"` | [src/structures/Constants.ts:23](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L23) | +| `PlayerAutoReconnect` | `"PlayerAutoReconnect"` | [src/structures/Constants.ts:53](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L53) | +| `PlayerChangeNode` | `"PlayerChangeNode"` | [src/structures/Constants.ts:45](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L45) | +| `PlayerCreateNodeNotFound` | `"PlayerCreateNodeNotFound"` | [src/structures/Constants.ts:38](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L38) | +| `PlayerDeleteInsteadOfDestroy` | `"PlayerDeleteInsteadOfDestroy"` | [src/structures/Constants.ts:50](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L50) | +| `PlayerDestroyingSomewhereElse` | `"PlayerDestroyingSomewhereElse"` | [src/structures/Constants.ts:37](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L37) | +| `PlayerPlayQueueEmptyTimeoutClear` | `"PlayerPlayQueueEmptyTimeoutClear"` | [src/structures/Constants.ts:39](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L39) | +| `PlayerPlayUnresolvedTrack` | `"PlayerPlayUnresolvedTrack"` | [src/structures/Constants.ts:41](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L41) | +| `PlayerPlayUnresolvedTrackFailed` | `"PlayerPlayUnresolvedTrackFailed"` | [src/structures/Constants.ts:42](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L42) | +| `PlayerPlayWithTrackReplace` | `"PlayerPlayWithTrackReplace"` | [src/structures/Constants.ts:40](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L40) | +| `PlayerUpdateFilterFixApply` | `"PlayerUpdateFilterFixApply"` | [src/structures/Constants.ts:19](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L19) | +| `PlayerUpdateNoPlayer` | `"PlayerUpdateNoPlayer"` | [src/structures/Constants.ts:18](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L18) | +| `PlayerUpdateSuccess` | `"PlayerUpdateSuccess"` | [src/structures/Constants.ts:20](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L20) | +| `PlayerVolumeAsFilter` | `"PlayerVolumeAsFilter"` | [src/structures/Constants.ts:43](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L43) | +| `QueueEnded` | `"QueueEnded"` | [src/structures/Constants.ts:12](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L12) | +| `ResumingFetchingError` | `"ResumingFetchingError"` | [src/structures/Constants.ts:16](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L16) | +| `SearchNothingFound` | `"SearchNothingFound"` | [src/structures/Constants.ts:29](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L29) | +| `SetSponsorBlock` | `"SetSponsorBlock"` | [src/structures/Constants.ts:4](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L4) | +| `SocketTerminateHeartBeatTimeout` | `"SocketTerminateHeartBeatTimeout"` | [src/structures/Constants.ts:24](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L24) | +| `TrackEndReplaced` | `"TrackEndReplaced"` | [src/structures/Constants.ts:6](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L6) | +| `TrackErrorMaxTracksErroredPerTime` | `"TrackErrorMaxTracksErroredPerTime"` | [src/structures/Constants.ts:34](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L34) | +| `TrackStartNewSongsOnly` | `"TrackStartNewSongsOnly"` | [src/structures/Constants.ts:13](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L13) | +| `TrackStartNoTrack` | `"TrackStartNoTrack"` | [src/structures/Constants.ts:14](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L14) | +| `TrackStuckMaxTracksErroredPerTime` | `"TrackStuckMaxTracksErroredPerTime"` | [src/structures/Constants.ts:35](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L35) | +| `TransformRequesterFunctionFailed` | `"TransformRequesterFunctionFailed"` | [src/structures/Constants.ts:48](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L48) | +| `TriggerQueueEmptyInterval` | `"TriggerQueueEmptyInterval"` | [src/structures/Constants.ts:11](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L11) | +| `TryingConnectWhileConnected` | `"TryingConnectWhileConnected"` | [src/structures/Constants.ts:26](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L26) | +| `ValidatingBlacklistLinks` | `"ValidatingBlacklistLinks"` | [src/structures/Constants.ts:31](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L31) | +| `ValidatingWhitelistLinks` | `"ValidatingWhitelistLinks"` | [src/structures/Constants.ts:32](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L32) | diff --git a/docs/src/content/docs/api/enumerations/DestroyReasons.md b/docs/src/content/docs/api/enumerations/DestroyReasons.md new file mode 100644 index 0000000..e77b099 --- /dev/null +++ b/docs/src/content/docs/api/enumerations/DestroyReasons.md @@ -0,0 +1,23 @@ +--- +editUrl: false +next: true +prev: true +title: "DestroyReasons" +--- + +## Enumeration Members + +| Enumeration Member | Value | Defined in | +| ------ | ------ | ------ | +| `ChannelDeleted` | `"ChannelDeleted"` | [src/structures/Constants.ts:65](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L65) | +| `DisconnectAllNodes` | `"DisconnectAllNodes"` | [src/structures/Constants.ts:66](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L66) | +| `Disconnected` | `"Disconnected"` | [src/structures/Constants.ts:63](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L63) | +| `LavalinkNoVoice` | `"LavalinkNoVoice"` | [src/structures/Constants.ts:61](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L61) | +| `NodeDeleted` | `"NodeDeleted"` | [src/structures/Constants.ts:60](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L60) | +| `NodeDestroy` | `"NodeDestroy"` | [src/structures/Constants.ts:59](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L59) | +| `NodeReconnectFail` | `"NodeReconnectFail"` | [src/structures/Constants.ts:62](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L62) | +| `PlayerReconnectFail` | `"PlayerReconnectFail"` | [src/structures/Constants.ts:64](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L64) | +| `QueueEmpty` | `"QueueEmpty"` | [src/structures/Constants.ts:58](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L58) | +| `ReconnectAllNodes` | `"ReconnectAllNodes"` | [src/structures/Constants.ts:67](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L67) | +| `TrackErrorMaxTracksErroredPerTime` | `"TrackErrorMaxTracksErroredPerTime"` | [src/structures/Constants.ts:69](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L69) | +| `TrackStuckMaxTracksErroredPerTime` | `"TrackStuckMaxTracksErroredPerTime"` | [src/structures/Constants.ts:70](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L70) | diff --git a/docs/src/content/docs/api/functions/parseLavalinkConnUrl.md b/docs/src/content/docs/api/functions/parseLavalinkConnUrl.md new file mode 100644 index 0000000..4d8ab57 --- /dev/null +++ b/docs/src/content/docs/api/functions/parseLavalinkConnUrl.md @@ -0,0 +1,33 @@ +--- +editUrl: false +next: true +prev: true +title: "parseLavalinkConnUrl" +--- + +```ts +function parseLavalinkConnUrl(connectionUrl: string): object +``` + +Parses Node Connection Url: "lavalink://:@:" + +## Parameters + +| Parameter | Type | Description | +| ------ | ------ | ------ | +| `connectionUrl` | `string` | | + +## Returns + +`object` + +| Name | Type | Default value | Defined in | +| ------ | ------ | ------ | ------ | +| `authorization` | `string` | parsed.password | [src/structures/Utils.ts:37](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L37) | +| `host` | `string` | parsed.hostname | [src/structures/Utils.ts:39](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L39) | +| `id` | `string` | parsed.username | [src/structures/Utils.ts:38](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L38) | +| `port` | `number` | - | [src/structures/Utils.ts:40](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L40) | + +## Defined in + +[src/structures/Utils.ts:33](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L33) diff --git a/docs/src/content/docs/api/functions/queueTrackEnd.md b/docs/src/content/docs/api/functions/queueTrackEnd.md new file mode 100644 index 0000000..e5624e3 --- /dev/null +++ b/docs/src/content/docs/api/functions/queueTrackEnd.md @@ -0,0 +1,24 @@ +--- +editUrl: false +next: true +prev: true +title: "queueTrackEnd" +--- + +```ts +function queueTrackEnd(player: Player): Promise +``` + +## Parameters + +| Parameter | Type | +| ------ | ------ | +| `player` | [`Player`](/api/classes/player/) | + +## Returns + +`Promise`\<[`Track`](/api/interfaces/track/)\> + +## Defined in + +[src/structures/Utils.ts:477](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L477) diff --git a/docs/src/content/docs/api/interfaces/BaseNodeStats.md b/docs/src/content/docs/api/interfaces/BaseNodeStats.md new file mode 100644 index 0000000..202d5f8 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/BaseNodeStats.md @@ -0,0 +1,23 @@ +--- +editUrl: false +next: true +prev: true +title: "BaseNodeStats" +--- + +BaseNodeStats object from Lavalink + +## Extended by + +- [`NodeStats`](/api/interfaces/nodestats/) + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `cpu` | [`CPUStats`](/api/interfaces/cpustats/) | The cpu stats for the node. | [src/structures/Types/Node.ts:95](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L95) | +| `frameStats` | [`FrameStats`](/api/interfaces/framestats/) | The frame stats for the node. | [src/structures/Types/Node.ts:97](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L97) | +| `memory` | [`MemoryStats`](/api/interfaces/memorystats/) | The memory stats for the node. | [src/structures/Types/Node.ts:93](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L93) | +| `players` | `number` | The amount of players on the node. | [src/structures/Types/Node.ts:87](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L87) | +| `playingPlayers` | `number` | The amount of playing players on the node. | [src/structures/Types/Node.ts:89](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L89) | +| `uptime` | `number` | The uptime for the node. | [src/structures/Types/Node.ts:91](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L91) | diff --git a/docs/src/content/docs/api/interfaces/BasePlayOptions.md b/docs/src/content/docs/api/interfaces/BasePlayOptions.md new file mode 100644 index 0000000..e503bcf --- /dev/null +++ b/docs/src/content/docs/api/interfaces/BasePlayOptions.md @@ -0,0 +1,21 @@ +--- +editUrl: false +next: true +prev: true +title: "BasePlayOptions" +--- + +## Extended by + +- [`LavalinkPlayOptions`](/api/interfaces/lavalinkplayoptions/) + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `endTime?` | `number` | The position to end the track. | [src/structures/Types/Player.ts:84](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L84) | +| `filters?` | `Partial`\<[`LavalinkFilterData`](/api/interfaces/lavalinkfilterdata/)\> | The Lavalink Filters to use | only with the new REST API | [src/structures/Types/Player.ts:90](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L90) | +| `paused?` | `boolean` | If to start "paused" | [src/structures/Types/Player.ts:86](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L86) | +| `position?` | `number` | The position to start the track. | [src/structures/Types/Player.ts:82](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L82) | +| `voice?` | [`LavalinkPlayerVoiceOptions`](/api/type-aliases/lavalinkplayervoiceoptions/) | Voice Update for Lavalink | [src/structures/Types/Player.ts:92](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L92) | +| `volume?` | `number` | The Volume to start with | [src/structures/Types/Player.ts:88](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L88) | diff --git a/docs/src/content/docs/api/interfaces/BotClientOptions.md b/docs/src/content/docs/api/interfaces/BotClientOptions.md new file mode 100644 index 0000000..e932302 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/BotClientOptions.md @@ -0,0 +1,19 @@ +--- +editUrl: false +next: true +prev: true +title: "BotClientOptions" +--- + +The Bot client Options needed for the manager + +## Indexable + + \[`x`: `string` \| `number` \| `symbol`\]: `unknown` + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `id` | `string` | Bot Client Id | [src/structures/Types/Manager.ts:148](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L148) | +| `username?` | `string` | Bot Client Username | [src/structures/Types/Manager.ts:150](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L150) | diff --git a/docs/src/content/docs/api/interfaces/CPUStats.md b/docs/src/content/docs/api/interfaces/CPUStats.md new file mode 100644 index 0000000..eb7d261 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/CPUStats.md @@ -0,0 +1,16 @@ +--- +editUrl: false +next: true +prev: true +title: "CPUStats" +--- + +CPU Stats object from lavalink + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `cores` | `number` | The core amount the host machine has. | [src/structures/Types/Node.ts:63](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L63) | +| `lavalinkLoad` | `number` | The lavalink load. | [src/structures/Types/Node.ts:67](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L67) | +| `systemLoad` | `number` | The system load. | [src/structures/Types/Node.ts:65](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L65) | diff --git a/docs/src/content/docs/api/interfaces/ChannelDeletePacket.md b/docs/src/content/docs/api/interfaces/ChannelDeletePacket.md new file mode 100644 index 0000000..380c505 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/ChannelDeletePacket.md @@ -0,0 +1,15 @@ +--- +editUrl: false +next: true +prev: true +title: "ChannelDeletePacket" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `d` | `object` | data which is sent and relevant | [src/structures/Types/Utils.ts:482](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L482) | +| `d.guild_id` | `string` | guild id | [src/structures/Types/Utils.ts:484](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L484) | +| `d.id` | `string` | Channel id | [src/structures/Types/Utils.ts:486](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L486) | +| `t` | `"CHANNEL_DELETE"` | Packet key for channel delete | [src/structures/Types/Utils.ts:480](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L480) | diff --git a/docs/src/content/docs/api/interfaces/ChannelMixFilter.md b/docs/src/content/docs/api/interfaces/ChannelMixFilter.md new file mode 100644 index 0000000..1e861b8 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/ChannelMixFilter.md @@ -0,0 +1,19 @@ +--- +editUrl: false +next: true +prev: true +title: "ChannelMixFilter" +--- + +Mixes both channels (left and right), with a configurable factor on how much each channel affects the other. +With the defaults, both channels are kept independent of each other. +Setting all factors to 0.5 means both channels get the same audio. + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `leftToLeft?` | `number` | The left to left channel mix factor (0.0 ≀ x ≀ 1.0) | [src/structures/Types/Filters.ts:136](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L136) | +| `leftToRight?` | `number` | The left to right channel mix factor (0.0 ≀ x ≀ 1.0) | [src/structures/Types/Filters.ts:138](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L138) | +| `rightToLeft?` | `number` | The right to left channel mix factor (0.0 ≀ x ≀ 1.0) | [src/structures/Types/Filters.ts:140](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L140) | +| `rightToRight?` | `number` | The right to right channel mix factor (0.0 ≀ x ≀ 1.0) | [src/structures/Types/Filters.ts:142](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L142) | diff --git a/docs/src/content/docs/api/interfaces/DistortionFilter.md b/docs/src/content/docs/api/interfaces/DistortionFilter.md new file mode 100644 index 0000000..33af055 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/DistortionFilter.md @@ -0,0 +1,21 @@ +--- +editUrl: false +next: true +prev: true +title: "DistortionFilter" +--- + +Distortion effect. It can generate some pretty unique audio effects. + +## Properties + +| Property | Type | Defined in | +| ------ | ------ | ------ | +| `cosOffset?` | `number` | [src/structures/Types/Filters.ts:121](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L121) | +| `cosScale?` | `number` | [src/structures/Types/Filters.ts:122](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L122) | +| `offset?` | `number` | [src/structures/Types/Filters.ts:125](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L125) | +| `scale?` | `number` | [src/structures/Types/Filters.ts:126](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L126) | +| `sinOffset?` | `number` | [src/structures/Types/Filters.ts:119](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L119) | +| `sinScale?` | `number` | [src/structures/Types/Filters.ts:120](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L120) | +| `tanOffset?` | `number` | [src/structures/Types/Filters.ts:123](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L123) | +| `tanScale?` | `number` | [src/structures/Types/Filters.ts:124](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L124) | diff --git a/docs/src/content/docs/api/interfaces/EQBand.md b/docs/src/content/docs/api/interfaces/EQBand.md new file mode 100644 index 0000000..8f099f1 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/EQBand.md @@ -0,0 +1,19 @@ +--- +editUrl: false +next: true +prev: true +title: "EQBand" +--- + +There are 15 bands (0-14) that can be changed. +"gain" is the multiplier for the given band. +The default value is 0. + Valid values range from -0.25 to 1.0, where -0.25 means the given band is completely muted, and 0.25 means it is doubled. +Modifying the gain could also change the volume of the output. + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `band` | `number` \| [`IntegerNumber`](/api/type-aliases/integernumber/) | On what band position (0-14) it should work | [src/structures/Types/Filters.ts:57](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L57) | +| `gain` | `number` \| [`FloatNumber`](/api/type-aliases/floatnumber/) | The gain (-0.25 to 1.0) | [src/structures/Types/Filters.ts:59](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L59) | diff --git a/docs/src/content/docs/api/interfaces/Exception.md b/docs/src/content/docs/api/interfaces/Exception.md new file mode 100644 index 0000000..6b4ff6a --- /dev/null +++ b/docs/src/content/docs/api/interfaces/Exception.md @@ -0,0 +1,15 @@ +--- +editUrl: false +next: true +prev: true +title: "Exception" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `cause` | `string` | Cause by lavalink | [src/structures/Types/Utils.ts:160](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L160) | +| `error?` | `Error` | Nodejs Error | [src/structures/Types/Utils.ts:156](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L156) | +| `message` | `string` | Message by lavalink | [src/structures/Types/Utils.ts:158](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L158) | +| `severity` | [`Severity`](/api/type-aliases/severity/) | Severity of the error | [src/structures/Types/Utils.ts:154](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L154) | diff --git a/docs/src/content/docs/api/interfaces/FailingAddress.md b/docs/src/content/docs/api/interfaces/FailingAddress.md new file mode 100644 index 0000000..60fcc1c --- /dev/null +++ b/docs/src/content/docs/api/interfaces/FailingAddress.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "FailingAddress" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `failingAddress` | `string` | The failing address | [src/structures/Types/Utils.ts:385](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L385) | +| `failingTime` | `string` | The timestamp when the address failed as a pretty string | [src/structures/Types/Utils.ts:389](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L389) | +| `failingTimestamp` | `number` | The timestamp when the address failed | [src/structures/Types/Utils.ts:387](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L387) | diff --git a/docs/src/content/docs/api/interfaces/FilterData.md b/docs/src/content/docs/api/interfaces/FilterData.md new file mode 100644 index 0000000..4043209 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/FilterData.md @@ -0,0 +1,46 @@ +--- +editUrl: false +next: true +prev: true +title: "FilterData" +--- + +Filter Data stored in the Client and partially sent to Lavalink + +## Extended by + +- [`LavalinkFilterData`](/api/interfaces/lavalinkfilterdata/) + +## Properties + +| Property | Type | Defined in | +| ------ | ------ | ------ | +| `channelMix?` | [`ChannelMixFilter`](/api/interfaces/channelmixfilter/) | [src/structures/Types/Filters.ts:164](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L164) | +| `distortion?` | [`DistortionFilter`](/api/interfaces/distortionfilter/) | [src/structures/Types/Filters.ts:163](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L163) | +| `karaoke?` | [`KaraokeFilter`](/api/interfaces/karaokefilter/) | [src/structures/Types/Filters.ts:158](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L158) | +| `lowPass?` | [`LowPassFilter`](/api/interfaces/lowpassfilter/) | [src/structures/Types/Filters.ts:165](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L165) | +| `pluginFilters?` | `object` | [src/structures/Types/Filters.ts:166](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L166) | +| `pluginFilters.echo?` | `object` | [src/structures/Types/Filters.ts:189](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L189) | +| `pluginFilters.echo.decay?` | `number` | [src/structures/Types/Filters.ts:191](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L191) | +| `pluginFilters.echo.echoLength?` | `number` | [src/structures/Types/Filters.ts:190](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L190) | +| `pluginFilters.high-pass?` | `object` | [src/structures/Types/Filters.ts:177](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L177) | +| `pluginFilters.high-pass.boostFactor?` | `number` | [src/structures/Types/Filters.ts:179](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L179) | +| `pluginFilters.high-pass.cutoffFrequency?` | `number` | [src/structures/Types/Filters.ts:178](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L178) | +| `pluginFilters.lavalink-filter-plugin?` | `object` | [src/structures/Types/Filters.ts:167](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L167) | +| `pluginFilters.lavalink-filter-plugin.echo?` | `object` | [src/structures/Types/Filters.ts:168](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L168) | +| `pluginFilters.lavalink-filter-plugin.echo.decay?` | `number` | [src/structures/Types/Filters.ts:170](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L170) | +| `pluginFilters.lavalink-filter-plugin.echo.delay?` | `number` | [src/structures/Types/Filters.ts:169](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L169) | +| `pluginFilters.lavalink-filter-plugin.reverb?` | `object` | [src/structures/Types/Filters.ts:172](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L172) | +| `pluginFilters.lavalink-filter-plugin.reverb.delays?` | `number`[] | [src/structures/Types/Filters.ts:173](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L173) | +| `pluginFilters.lavalink-filter-plugin.reverb.gains?` | `number`[] | [src/structures/Types/Filters.ts:174](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L174) | +| `pluginFilters.low-pass?` | `object` | [src/structures/Types/Filters.ts:181](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L181) | +| `pluginFilters.low-pass.boostFactor?` | `number` | [src/structures/Types/Filters.ts:183](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L183) | +| `pluginFilters.low-pass.cutoffFrequency?` | `number` | [src/structures/Types/Filters.ts:182](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L182) | +| `pluginFilters.normalization?` | `object` | [src/structures/Types/Filters.ts:185](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L185) | +| `pluginFilters.normalization.adaptive?` | `boolean` | [src/structures/Types/Filters.ts:187](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L187) | +| `pluginFilters.normalization.maxAmplitude?` | `number` | [src/structures/Types/Filters.ts:186](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L186) | +| `rotation?` | [`RotationFilter`](/api/interfaces/rotationfilter/) | [src/structures/Types/Filters.ts:162](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L162) | +| `timescale?` | [`TimescaleFilter`](/api/interfaces/timescalefilter/) | [src/structures/Types/Filters.ts:159](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L159) | +| `tremolo?` | [`TremoloFilter`](/api/interfaces/tremolofilter/) | [src/structures/Types/Filters.ts:160](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L160) | +| `vibrato?` | [`VibratoFilter`](/api/interfaces/vibratofilter/) | [src/structures/Types/Filters.ts:161](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L161) | +| `volume?` | `number` | [src/structures/Types/Filters.ts:157](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L157) | diff --git a/docs/src/content/docs/api/interfaces/FrameStats.md b/docs/src/content/docs/api/interfaces/FrameStats.md new file mode 100644 index 0000000..8234e39 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/FrameStats.md @@ -0,0 +1,16 @@ +--- +editUrl: false +next: true +prev: true +title: "FrameStats" +--- + +FrameStats Object from lavalink + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `deficit?` | `number` | The amount of deficit frames. | [src/structures/Types/Node.ts:79](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L79) | +| `nulled?` | `number` | The amount of nulled frames. | [src/structures/Types/Node.ts:77](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L77) | +| `sent?` | `number` | The amount of sent frames. | [src/structures/Types/Node.ts:75](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L75) | diff --git a/docs/src/content/docs/api/interfaces/GitObject.md b/docs/src/content/docs/api/interfaces/GitObject.md new file mode 100644 index 0000000..6adc503 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/GitObject.md @@ -0,0 +1,16 @@ +--- +editUrl: false +next: true +prev: true +title: "GitObject" +--- + +Git information object from lavalink + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `branch` | `string` | The branch this Lavalink server was built on | [src/structures/Types/Node.ts:153](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L153) | +| `commit` | `string` | The commit this Lavalink server was built on | [src/structures/Types/Node.ts:155](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L155) | +| `commitTime` | `string` | The millisecond unix timestamp for when the commit was created | [src/structures/Types/Node.ts:157](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L157) | diff --git a/docs/src/content/docs/api/interfaces/GuildShardPayload.md b/docs/src/content/docs/api/interfaces/GuildShardPayload.md new file mode 100644 index 0000000..0a0d8a3 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/GuildShardPayload.md @@ -0,0 +1,17 @@ +--- +editUrl: false +next: true +prev: true +title: "GuildShardPayload" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `d` | `object` | Data to send | [src/structures/Types/Utils.ts:430](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L430) | +| `d.channel_id` | `string` | channel to move/connect to, or null to leave it | [src/structures/Types/Utils.ts:434](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L434) | +| `d.guild_id` | `string` | Guild id to apply voice settings | [src/structures/Types/Utils.ts:432](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L432) | +| `d.self_deaf` | `boolean` | wether or not deafen yourself | [src/structures/Types/Utils.ts:438](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L438) | +| `d.self_mute` | `boolean` | wether or not mute yourself | [src/structures/Types/Utils.ts:436](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L436) | +| `op` | `number` | The OP code | [src/structures/Types/Utils.ts:428](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L428) | diff --git a/docs/src/content/docs/api/interfaces/InvalidLavalinkRestRequest.md b/docs/src/content/docs/api/interfaces/InvalidLavalinkRestRequest.md new file mode 100644 index 0000000..dbe61c5 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/InvalidLavalinkRestRequest.md @@ -0,0 +1,17 @@ +--- +editUrl: false +next: true +prev: true +title: "InvalidLavalinkRestRequest" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `error` | `string` | Specific Errro which was sent | [src/structures/Types/Utils.ts:360](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L360) | +| `message?` | `string` | Specific Message which was created | [src/structures/Types/Utils.ts:362](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L362) | +| `path` | `string` | Path of where it's from | [src/structures/Types/Utils.ts:366](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L366) | +| `status` | `number` | Status of the request | [src/structures/Types/Utils.ts:358](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L358) | +| `timestamp` | `number` | Rest Request Data for when it was made | [src/structures/Types/Utils.ts:356](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L356) | +| `trace?` | `unknown` | The specific error trace from the request | [src/structures/Types/Utils.ts:364](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L364) | diff --git a/docs/src/content/docs/api/interfaces/KaraokeFilter.md b/docs/src/content/docs/api/interfaces/KaraokeFilter.md new file mode 100644 index 0000000..ac8843c --- /dev/null +++ b/docs/src/content/docs/api/interfaces/KaraokeFilter.md @@ -0,0 +1,17 @@ +--- +editUrl: false +next: true +prev: true +title: "KaraokeFilter" +--- + +Uses equalization to eliminate part of a band, usually targeting vocals. + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `filterBand?` | `number` | The filter band (in Hz) | [src/structures/Types/Filters.ts:70](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L70) | +| `filterWidth?` | `number` | The filter width | [src/structures/Types/Filters.ts:72](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L72) | +| `level?` | `number` | The level (0 to 1.0 where 0.0 is no effect and 1.0 is full effect) | [src/structures/Types/Filters.ts:66](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L66) | +| `monoLevel?` | `number` | The mono level (0 to 1.0 where 0.0 is no effect and 1.0 is full effect) | [src/structures/Types/Filters.ts:68](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L68) | diff --git a/docs/src/content/docs/api/interfaces/LavaSearchFilteredResponse.md b/docs/src/content/docs/api/interfaces/LavaSearchFilteredResponse.md new file mode 100644 index 0000000..6f34414 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/LavaSearchFilteredResponse.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "LavaSearchFilteredResponse" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `info` | [`PlaylistInfo`](/api/interfaces/playlistinfo/) | The Information of a playlist provided by lavasearch | [src/structures/Types/Utils.ts:543](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L543) | +| `pluginInfo` | [`PluginInfo`](/api/interfaces/plugininfo/) | additional plugin information | [src/structures/Types/Utils.ts:545](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L545) | +| `tracks` | [`Track`](/api/interfaces/track/)[] | List of tracks | [src/structures/Types/Utils.ts:547](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L547) | diff --git a/docs/src/content/docs/api/interfaces/LavaSearchResponse.md b/docs/src/content/docs/api/interfaces/LavaSearchResponse.md new file mode 100644 index 0000000..57e66b7 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/LavaSearchResponse.md @@ -0,0 +1,17 @@ +--- +editUrl: false +next: true +prev: true +title: "LavaSearchResponse" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `albums` | [`LavaSearchFilteredResponse`](/api/interfaces/lavasearchfilteredresponse/)[] | An array of albums, only present if album is in types | [src/structures/Types/Utils.ts:554](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L554) | +| `artists` | [`LavaSearchFilteredResponse`](/api/interfaces/lavasearchfilteredresponse/)[] | An array of artists, only present if artist is in types | [src/structures/Types/Utils.ts:556](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L556) | +| `playlists` | [`LavaSearchFilteredResponse`](/api/interfaces/lavasearchfilteredresponse/)[] | An array of playlists, only present if playlist is in types | [src/structures/Types/Utils.ts:558](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L558) | +| `pluginInfo` | [`PluginInfo`](/api/interfaces/plugininfo/) | Addition result data provided by plugins | [src/structures/Types/Utils.ts:565](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L565) | +| `texts` | `object`[] | An array of text results, only present if text is in types | [src/structures/Types/Utils.ts:560](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L560) | +| `tracks` | [`Track`](/api/interfaces/track/)[] | An array of tracks, only present if track is in types | [src/structures/Types/Utils.ts:552](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L552) | diff --git a/docs/src/content/docs/api/interfaces/LavalinkFilterData.md b/docs/src/content/docs/api/interfaces/LavalinkFilterData.md new file mode 100644 index 0000000..2a77206 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/LavalinkFilterData.md @@ -0,0 +1,47 @@ +--- +editUrl: false +next: true +prev: true +title: "LavalinkFilterData" +--- + +Actual Filter Data sent to Lavalink + +## Extends + +- [`FilterData`](/api/interfaces/filterdata/) + +## Properties + +| Property | Type | Inherited from | Defined in | +| ------ | ------ | ------ | ------ | +| `channelMix?` | [`ChannelMixFilter`](/api/interfaces/channelmixfilter/) | [`FilterData`](/api/interfaces/filterdata/).`channelMix` | [src/structures/Types/Filters.ts:164](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L164) | +| `distortion?` | [`DistortionFilter`](/api/interfaces/distortionfilter/) | [`FilterData`](/api/interfaces/filterdata/).`distortion` | [src/structures/Types/Filters.ts:163](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L163) | +| `equalizer?` | [`EQBand`](/api/interfaces/eqband/)[] | - | [src/structures/Types/Filters.ts:199](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L199) | +| `karaoke?` | [`KaraokeFilter`](/api/interfaces/karaokefilter/) | [`FilterData`](/api/interfaces/filterdata/).`karaoke` | [src/structures/Types/Filters.ts:158](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L158) | +| `lowPass?` | [`LowPassFilter`](/api/interfaces/lowpassfilter/) | [`FilterData`](/api/interfaces/filterdata/).`lowPass` | [src/structures/Types/Filters.ts:165](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L165) | +| `pluginFilters?` | `object` | [`FilterData`](/api/interfaces/filterdata/).`pluginFilters` | [src/structures/Types/Filters.ts:166](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L166) | +| `pluginFilters.echo?` | `object` | - | [src/structures/Types/Filters.ts:189](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L189) | +| `pluginFilters.echo.decay?` | `number` | - | [src/structures/Types/Filters.ts:191](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L191) | +| `pluginFilters.echo.echoLength?` | `number` | - | [src/structures/Types/Filters.ts:190](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L190) | +| `pluginFilters.high-pass?` | `object` | - | [src/structures/Types/Filters.ts:177](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L177) | +| `pluginFilters.high-pass.boostFactor?` | `number` | - | [src/structures/Types/Filters.ts:179](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L179) | +| `pluginFilters.high-pass.cutoffFrequency?` | `number` | - | [src/structures/Types/Filters.ts:178](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L178) | +| `pluginFilters.lavalink-filter-plugin?` | `object` | - | [src/structures/Types/Filters.ts:167](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L167) | +| `pluginFilters.lavalink-filter-plugin.echo?` | `object` | - | [src/structures/Types/Filters.ts:168](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L168) | +| `pluginFilters.lavalink-filter-plugin.echo.decay?` | `number` | - | [src/structures/Types/Filters.ts:170](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L170) | +| `pluginFilters.lavalink-filter-plugin.echo.delay?` | `number` | - | [src/structures/Types/Filters.ts:169](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L169) | +| `pluginFilters.lavalink-filter-plugin.reverb?` | `object` | - | [src/structures/Types/Filters.ts:172](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L172) | +| `pluginFilters.lavalink-filter-plugin.reverb.delays?` | `number`[] | - | [src/structures/Types/Filters.ts:173](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L173) | +| `pluginFilters.lavalink-filter-plugin.reverb.gains?` | `number`[] | - | [src/structures/Types/Filters.ts:174](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L174) | +| `pluginFilters.low-pass?` | `object` | - | [src/structures/Types/Filters.ts:181](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L181) | +| `pluginFilters.low-pass.boostFactor?` | `number` | - | [src/structures/Types/Filters.ts:183](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L183) | +| `pluginFilters.low-pass.cutoffFrequency?` | `number` | - | [src/structures/Types/Filters.ts:182](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L182) | +| `pluginFilters.normalization?` | `object` | - | [src/structures/Types/Filters.ts:185](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L185) | +| `pluginFilters.normalization.adaptive?` | `boolean` | - | [src/structures/Types/Filters.ts:187](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L187) | +| `pluginFilters.normalization.maxAmplitude?` | `number` | - | [src/structures/Types/Filters.ts:186](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L186) | +| `rotation?` | [`RotationFilter`](/api/interfaces/rotationfilter/) | [`FilterData`](/api/interfaces/filterdata/).`rotation` | [src/structures/Types/Filters.ts:162](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L162) | +| `timescale?` | [`TimescaleFilter`](/api/interfaces/timescalefilter/) | [`FilterData`](/api/interfaces/filterdata/).`timescale` | [src/structures/Types/Filters.ts:159](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L159) | +| `tremolo?` | [`TremoloFilter`](/api/interfaces/tremolofilter/) | [`FilterData`](/api/interfaces/filterdata/).`tremolo` | [src/structures/Types/Filters.ts:160](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L160) | +| `vibrato?` | [`VibratoFilter`](/api/interfaces/vibratofilter/) | [`FilterData`](/api/interfaces/filterdata/).`vibrato` | [src/structures/Types/Filters.ts:161](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L161) | +| `volume?` | `number` | [`FilterData`](/api/interfaces/filterdata/).`volume` | [src/structures/Types/Filters.ts:157](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L157) | diff --git a/docs/src/content/docs/api/interfaces/LavalinkInfo.md b/docs/src/content/docs/api/interfaces/LavalinkInfo.md new file mode 100644 index 0000000..6fa604f --- /dev/null +++ b/docs/src/content/docs/api/interfaces/LavalinkInfo.md @@ -0,0 +1,21 @@ +--- +editUrl: false +next: true +prev: true +title: "LavalinkInfo" +--- + +Entire lavalink information object from lavalink + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `buildTime` | `number` | The millisecond unix timestamp when this Lavalink jar was built | [src/structures/Types/Node.ts:115](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L115) | +| `filters` | `string`[] | The enabled filters for this server | [src/structures/Types/Node.ts:125](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L125) | +| `git` | [`GitObject`](/api/interfaces/gitobject/) | The git information of this Lavalink server | [src/structures/Types/Node.ts:117](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L117) | +| `jvm` | `string` | The JVM version this Lavalink server runs on | [src/structures/Types/Node.ts:119](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L119) | +| `lavaplayer` | `string` | The Lavaplayer version being used by this server | [src/structures/Types/Node.ts:121](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L121) | +| `plugins` | [`PluginObject`](/api/interfaces/pluginobject/)[] | The enabled plugins for this server | [src/structures/Types/Node.ts:127](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L127) | +| `sourceManagers` | `string`[] | The enabled source managers for this server | [src/structures/Types/Node.ts:123](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L123) | +| `version` | [`VersionObject`](/api/interfaces/versionobject/) | The version of this Lavalink server | [src/structures/Types/Node.ts:113](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L113) | diff --git a/docs/src/content/docs/api/interfaces/LavalinkManagerEvents.md b/docs/src/content/docs/api/interfaces/LavalinkManagerEvents.md new file mode 100644 index 0000000..069254c --- /dev/null +++ b/docs/src/content/docs/api/interfaces/LavalinkManagerEvents.md @@ -0,0 +1,32 @@ +--- +editUrl: false +next: true +prev: true +title: "LavalinkManagerEvents" +--- + +The events from the lavalink Manager + +## Events + +| Event | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `ChaptersLoaded` | (`player`: [`Player`](/api/classes/player/), `track`: [`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`Track`](/api/interfaces/track/), `payload`: [`SponsorBlockChaptersLoaded`](/api/interfaces/sponsorblockchaptersloaded/)) => `void` | SPONSORBLOCK-PLUGIN EVENT Emitted when Chapters are loaded **Link** https://github.com/topi314/Sponsorblock-Plugin#chaptersloaded Manager#trackError | [src/structures/Types/Manager.ts:111](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L111) | +| `ChapterStarted` | (`player`: [`Player`](/api/classes/player/), `track`: [`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`Track`](/api/interfaces/track/), `payload`: [`SponsorBlockChapterStarted`](/api/interfaces/sponsorblockchapterstarted/)) => `void` | SPONSORBLOCK-PLUGIN EVENT Emitted when a specific Chapter starts playing **Link** https://github.com/topi314/Sponsorblock-Plugin#chapterstarted Manager#trackError | [src/structures/Types/Manager.ts:103](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L103) | +| `debug` | (`eventKey`: [`DebugEvents`](/api/enumerations/debugevents/), `eventData`: `object`) => `void` | Lavalink-Client Debug Event Emitted for several erros, and logs within lavalink-client, if managerOptions.advancedOptions.enableDebugEvents is true Useful for debugging the lavalink-client Manager#debug | [src/structures/Types/Manager.ts:120](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L120) | +| `LyricsFound` | (`player`: [`Player`](/api/classes/player/), `track`: [`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`Track`](/api/interfaces/track/), `payload`: [`LyricsFoundEvent`](/api/interfaces/lyricsfoundevent/)) => `void` | Emitted when a Lyrics is found **Link** https://github.com/topi314/LavaLyrics Manager#LyricsFound | [src/structures/Types/Manager.ts:134](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L134) | +| `LyricsLine` | (`player`: [`Player`](/api/classes/player/), `track`: [`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`Track`](/api/interfaces/track/), `payload`: [`LyricsLineEvent`](/api/interfaces/lyricslineevent/)) => `void` | Emitted when a Lyrics line is received **Link** https://github.com/topi314/LavaLyrics Manager#LyricsLine | [src/structures/Types/Manager.ts:127](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L127) | +| `LyricsNotFound` | (`player`: [`Player`](/api/classes/player/), `track`: [`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`Track`](/api/interfaces/track/), `payload`: [`LyricsNotFoundEvent`](/api/interfaces/lyricsnotfoundevent/)) => `void` | Emitted when a Lyrics is not found **Link** https://github.com/topi314/LavaLyrics Manager#LyricsNotFound | [src/structures/Types/Manager.ts:141](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L141) | +| `playerCreate` | (`player`: [`Player`](/api/classes/player/)) => `void` | Emitted when a Player is created. Manager#playerCreate | [src/structures/Types/Manager.ts:43](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L43) | +| `playerDestroy` | (`player`: [`Player`](/api/classes/player/), `destroyReason`?: `string`) => `void` | Emitted when a Player get's destroyed Manager#playerDestroy | [src/structures/Types/Manager.ts:72](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L72) | +| `playerDisconnect` | (`player`: [`Player`](/api/classes/player/), `voiceChannelId`: `string`) => `void` | Emitted when a Player is disconnected from a channel. Manager#playerDisconnect | [src/structures/Types/Manager.ts:53](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L53) | +| `playerMove` | (`player`: [`Player`](/api/classes/player/), `oldVoiceChannelId`: `string`, `newVoiceChannelId`: `string`) => `void` | Emitted when a Player is moved within the channel. Manager#playerMove | [src/structures/Types/Manager.ts:48](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L48) | +| `playerSocketClosed` | (`player`: [`Player`](/api/classes/player/), `payload`: [`WebSocketClosedEvent`](/api/interfaces/websocketclosedevent/)) => `void` | Emitted when a Node-Socket got closed for a specific Player. Usually emits when the audio websocket to discord is closed, This can happen for various reasons (normal and abnormal), e.g. when using an expired voice server update. 4xxx codes are usually bad. So this is just information, normally lavalink should handle disconnections Discord Docs: **Link** https://discord.com/developers/docs/topics/opcodes-and-status-codes#voice-voice-close-event-codes Lavalink Docs: **Link** https://lavalink.dev/api/websocket.html#websocketclosedevent Manager#playerSocketClosed | [src/structures/Types/Manager.ts:67](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L67) | +| `playerUpdate` | (`oldPlayerJson`: [`PlayerJson`](/api/interfaces/playerjson/), `newPlayer`: [`Player`](/api/classes/player/)) => `void` | Always emits when the player (on lavalink side) got updated Manager#playerUpdate | [src/structures/Types/Manager.ts:78](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L78) | +| `queueEnd` | (`player`: [`Player`](/api/classes/player/), `track`: [`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`Track`](/api/interfaces/track/), `payload`: [`TrackEndEvent`](/api/interfaces/trackendevent/) \| [`TrackStuckEvent`](/api/interfaces/trackstuckevent/) \| [`TrackExceptionEvent`](/api/interfaces/trackexceptionevent/)) => `void` | Emitted when the Playing finished and no more tracks in the queue. Manager#queueEnd | [src/structures/Types/Manager.ts:38](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L38) | +| `SegmentSkipped` | (`player`: [`Player`](/api/classes/player/), `track`: [`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`Track`](/api/interfaces/track/), `payload`: [`SponsorBlockSegmentSkipped`](/api/interfaces/sponsorblocksegmentskipped/)) => `void` | SPONSORBLOCK-PLUGIN EVENT Emitted when a specific Segment was skipped **Link** https://github.com/topi314/Sponsorblock-Plugin#segmentskipped Manager#trackError | [src/structures/Types/Manager.ts:95](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L95) | +| `SegmentsLoaded` | (`player`: [`Player`](/api/classes/player/), `track`: [`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`Track`](/api/interfaces/track/), `payload`: [`SponsorBlockSegmentsLoaded`](/api/interfaces/sponsorblocksegmentsloaded/)) => `void` | SPONSORBLOCK-PLUGIN EVENT Emitted when Segments are loaded **Link** https://github.com/topi314/Sponsorblock-Plugin#segmentsloaded Manager#trackError | [src/structures/Types/Manager.ts:87](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L87) | +| `trackEnd` | (`player`: [`Player`](/api/classes/player/), `track`: [`Track`](/api/interfaces/track/), `payload`: [`TrackEndEvent`](/api/interfaces/trackendevent/)) => `void` | Emitted when a Track finished. Manager#trackEnd | [src/structures/Types/Manager.ts:23](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L23) | +| `trackError` | (`player`: [`Player`](/api/classes/player/), `track`: [`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`Track`](/api/interfaces/track/), `payload`: [`TrackExceptionEvent`](/api/interfaces/trackexceptionevent/)) => `void` | Emitted when a Track errored. Manager#trackError | [src/structures/Types/Manager.ts:33](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L33) | +| `trackStart` | (`player`: [`Player`](/api/classes/player/), `track`: [`Track`](/api/interfaces/track/), `payload`: [`TrackStartEvent`](/api/interfaces/trackstartevent/)) => `void` | Emitted when a Track started playing. Manager#trackStart | [src/structures/Types/Manager.ts:18](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L18) | +| `trackStuck` | (`player`: [`Player`](/api/classes/player/), `track`: [`Track`](/api/interfaces/track/), `payload`: [`TrackStuckEvent`](/api/interfaces/trackstuckevent/)) => `void` | Emitted when a Track got stuck while playing. Manager#trackStuck | [src/structures/Types/Manager.ts:28](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L28) | diff --git a/docs/src/content/docs/api/interfaces/LavalinkNodeOptions.md b/docs/src/content/docs/api/interfaces/LavalinkNodeOptions.md new file mode 100644 index 0000000..2f95797 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/LavalinkNodeOptions.md @@ -0,0 +1,26 @@ +--- +editUrl: false +next: true +prev: true +title: "LavalinkNodeOptions" +--- + +Node Options for creating a lavalink node + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `authorization` | `string` | The Lavalink Password / Authorization-Key | [src/structures/Types/Node.ts:21](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L21) | +| `closeOnError?` | `boolean` | Close on error | [src/structures/Types/Node.ts:37](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L37) | +| `enablePingOnStatsCheck?` | `boolean` | Recommended, to check wether the client is still connected or not on the stats endpoint | [src/structures/Types/Node.ts:41](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L41) | +| `heartBeatInterval?` | `30000` | Heartbeat interval , set to <= 0 to disable heartbeat system | [src/structures/Types/Node.ts:39](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L39) | +| `host` | `string` | The Lavalink Server-Ip / Domain-URL | [src/structures/Types/Node.ts:17](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L17) | +| `id?` | `string` | Add a Custom ID to the node, for later use | [src/structures/Types/Node.ts:27](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L27) | +| `port` | `number` | The Lavalink Connection Port | [src/structures/Types/Node.ts:19](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L19) | +| `regions?` | `string`[] | Voice Regions of this Node | [src/structures/Types/Node.ts:29](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L29) | +| `requestSignalTimeoutMS?` | `number` | signal for cancelling requests - default: AbortSignal.timeout(options.requestSignalTimeoutMS || 10000) - put <= 0 to disable | [src/structures/Types/Node.ts:35](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L35) | +| `retryAmount?` | `number` | The retryAmount for the node. | [src/structures/Types/Node.ts:31](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L31) | +| `retryDelay?` | `number` | The retryDelay for the node. | [src/structures/Types/Node.ts:33](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L33) | +| `secure?` | `boolean` | Does the Server use ssl (https) | [src/structures/Types/Node.ts:23](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L23) | +| `sessionId?` | `string` | RESUME THE PLAYER? by providing a sessionid on the node-creation | [src/structures/Types/Node.ts:25](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L25) | diff --git a/docs/src/content/docs/api/interfaces/LavalinkPlayOptions.md b/docs/src/content/docs/api/interfaces/LavalinkPlayOptions.md new file mode 100644 index 0000000..e530ef4 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/LavalinkPlayOptions.md @@ -0,0 +1,30 @@ +--- +editUrl: false +next: true +prev: true +title: "LavalinkPlayOptions" +--- + +## Extends + +- [`BasePlayOptions`](/api/interfaces/baseplayoptions/) + +## Extended by + +- [`PlayOptions`](/api/interfaces/playoptions/) + +## Properties + +| Property | Type | Description | Inherited from | Defined in | +| ------ | ------ | ------ | ------ | ------ | +| `endTime?` | `number` | The position to end the track. | [`BasePlayOptions`](/api/interfaces/baseplayoptions/).`endTime` | [src/structures/Types/Player.ts:84](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L84) | +| `filters?` | `Partial`\<[`LavalinkFilterData`](/api/interfaces/lavalinkfilterdata/)\> | The Lavalink Filters to use | only with the new REST API | [`BasePlayOptions`](/api/interfaces/baseplayoptions/).`filters` | [src/structures/Types/Player.ts:90](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L90) | +| `paused?` | `boolean` | If to start "paused" | [`BasePlayOptions`](/api/interfaces/baseplayoptions/).`paused` | [src/structures/Types/Player.ts:86](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L86) | +| `position?` | `number` | The position to start the track. | [`BasePlayOptions`](/api/interfaces/baseplayoptions/).`position` | [src/structures/Types/Player.ts:82](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L82) | +| `track?` | `object` | Which Track to play | don't provide, if it should pick from the Queue | - | [src/structures/Types/Player.ts:96](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L96) | +| `track.encoded?` | `string` | The track encoded base64 string to use instead of the one from the queue system | - | [src/structures/Types/Player.ts:98](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L98) | +| `track.identifier?` | `string` | The identifier of the track to use | - | [src/structures/Types/Player.ts:100](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L100) | +| `track.requester?` | `unknown` | The Track requester for when u provide encodedTrack / identifer | - | [src/structures/Types/Player.ts:104](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L104) | +| `track.userData?` | [`anyObject`](/api/type-aliases/anyobject/) | Custom User Data for the track to provide, will then be on the userData object from the track | - | [src/structures/Types/Player.ts:102](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L102) | +| `voice?` | [`LavalinkPlayerVoiceOptions`](/api/type-aliases/lavalinkplayervoiceoptions/) | Voice Update for Lavalink | [`BasePlayOptions`](/api/interfaces/baseplayoptions/).`voice` | [src/structures/Types/Player.ts:92](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L92) | +| `volume?` | `number` | The Volume to start with | [`BasePlayOptions`](/api/interfaces/baseplayoptions/).`volume` | [src/structures/Types/Player.ts:88](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L88) | diff --git a/docs/src/content/docs/api/interfaces/LavalinkPlayer.md b/docs/src/content/docs/api/interfaces/LavalinkPlayer.md new file mode 100644 index 0000000..33368dc --- /dev/null +++ b/docs/src/content/docs/api/interfaces/LavalinkPlayer.md @@ -0,0 +1,22 @@ +--- +editUrl: false +next: true +prev: true +title: "LavalinkPlayer" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `filters` | `Partial`\<[`LavalinkFilterData`](/api/interfaces/lavalinkfilterdata/)\> | All Audio Filters | [src/structures/Types/Utils.ts:463](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L463) | +| `guildId` | `string` | Guild Id of the player | [src/structures/Types/Utils.ts:453](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L453) | +| `paused` | `boolean` | Wether it's paused or not | [src/structures/Types/Utils.ts:459](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L459) | +| `state` | `object` | Lavalink-Voice-State Variables | [src/structures/Types/Utils.ts:465](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L465) | +| `state.connected` | `boolean` | COnnected or not | [src/structures/Types/Utils.ts:471](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L471) | +| `state.ping` | `number` | Ping to voice server | [src/structures/Types/Utils.ts:473](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L473) | +| `state.position` | `number` | Position of the track | [src/structures/Types/Utils.ts:469](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L469) | +| `state.time` | `number` | Time since connection established | [src/structures/Types/Utils.ts:467](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L467) | +| `track?` | [`LavalinkTrack`](/api/interfaces/lavalinktrack/) | IF playing a track, all of the track information | [src/structures/Types/Utils.ts:455](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L455) | +| `voice` | [`LavalinkPlayerVoice`](/api/interfaces/lavalinkplayervoice/) | Voice Endpoint data | [src/structures/Types/Utils.ts:461](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L461) | +| `volume` | `number` | Lavalink volume (mind volumedecrementer) | [src/structures/Types/Utils.ts:457](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L457) | diff --git a/docs/src/content/docs/api/interfaces/LavalinkPlayerVoice.md b/docs/src/content/docs/api/interfaces/LavalinkPlayerVoice.md new file mode 100644 index 0000000..440d552 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/LavalinkPlayerVoice.md @@ -0,0 +1,16 @@ +--- +editUrl: false +next: true +prev: true +title: "LavalinkPlayerVoice" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `connected?` | `boolean` | Wether or not the player is connected | [src/structures/Types/Utils.ts:376](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L376) | +| `endpoint` | `string` | The Voice Server Endpoint | [src/structures/Types/Utils.ts:372](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L372) | +| `ping?` | `number` | The Ping to the voice server | [src/structures/Types/Utils.ts:378](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L378) | +| `sessionId` | `string` | The Voice SessionId | [src/structures/Types/Utils.ts:374](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L374) | +| `token` | `string` | The Voice Token | [src/structures/Types/Utils.ts:370](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L370) | diff --git a/docs/src/content/docs/api/interfaces/LavalinkTrack.md b/docs/src/content/docs/api/interfaces/LavalinkTrack.md new file mode 100644 index 0000000..792e123 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/LavalinkTrack.md @@ -0,0 +1,15 @@ +--- +editUrl: false +next: true +prev: true +title: "LavalinkTrack" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `encoded?` | `string` | The Base 64 encoded String | [src/structures/Types/Track.ts:100](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L100) | +| `info` | [`LavalinkTrackInfo`](/api/interfaces/lavalinktrackinfo/) | Track Information | [src/structures/Types/Track.ts:102](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L102) | +| `pluginInfo` | `Partial`\<[`PluginInfo`](/api/interfaces/plugininfo/)\> | Plugin Information from Lavalink | [src/structures/Types/Track.ts:104](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L104) | +| `userData?` | [`anyObject`](/api/type-aliases/anyobject/) | The userData Object from when you provide to the lavalink request | [src/structures/Types/Track.ts:106](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L106) | diff --git a/docs/src/content/docs/api/interfaces/LavalinkTrackInfo.md b/docs/src/content/docs/api/interfaces/LavalinkTrackInfo.md new file mode 100644 index 0000000..071bcf9 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/LavalinkTrackInfo.md @@ -0,0 +1,21 @@ +--- +editUrl: false +next: true +prev: true +title: "LavalinkTrackInfo" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `artworkUrl` | `string` | The URL of the artwork if available | [src/structures/Types/Track.ts:22](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L22) | +| `author` | `string` | The Name of the Author | [src/structures/Types/Track.ts:18](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L18) | +| `identifier` | `string` | The Identifier of the Track | [src/structures/Types/Track.ts:14](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L14) | +| `isrc` | `string` | If isrc code is available, it's provided | [src/structures/Types/Track.ts:32](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L32) | +| `isSeekable` | `boolean` | Wether the audio is seekable | [src/structures/Types/Track.ts:28](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L28) | +| `isStream` | `boolean` | Wether the audio is of a live stream | [src/structures/Types/Track.ts:30](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L30) | +| `length` | `number` | The duration of the Track | [src/structures/Types/Track.ts:20](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L20) | +| `sourceName` | [`SourceNames`](/api/type-aliases/sourcenames/) | The Source name of the Track, e.g. soundcloud, youtube, spotify | [src/structures/Types/Track.ts:26](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L26) | +| `title` | `string` | The Track Title / Name | [src/structures/Types/Track.ts:16](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L16) | +| `uri` | `string` | The URL (aka Link) of the Track called URI | [src/structures/Types/Track.ts:24](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L24) | diff --git a/docs/src/content/docs/api/interfaces/LowPassFilter.md b/docs/src/content/docs/api/interfaces/LowPassFilter.md new file mode 100644 index 0000000..9a3326e --- /dev/null +++ b/docs/src/content/docs/api/interfaces/LowPassFilter.md @@ -0,0 +1,15 @@ +--- +editUrl: false +next: true +prev: true +title: "LowPassFilter" +--- + +Higher frequencies get suppressed, while lower frequencies pass through this filter, thus the name low pass. +Any smoothing values equal to or less than 1.0 will disable the filter. + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `smoothing?` | `number` | The smoothing factor (1.0 < x) | [src/structures/Types/Filters.ts:151](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L151) | diff --git a/docs/src/content/docs/api/interfaces/LyricsFoundEvent.md b/docs/src/content/docs/api/interfaces/LyricsFoundEvent.md new file mode 100644 index 0000000..34395d8 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/LyricsFoundEvent.md @@ -0,0 +1,19 @@ +--- +editUrl: false +next: true +prev: true +title: "LyricsFoundEvent" +--- + +## Extends + +- [`PlayerEvent`](/api/interfaces/playerevent/) + +## Properties + +| Property | Type | Description | Inherited from | Defined in | +| ------ | ------ | ------ | ------ | ------ | +| `guildId` | `string` | The guildId | [`PlayerEvent`](/api/interfaces/playerevent/).`guildId` | [src/structures/Types/Utils.ts:273](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L273) | +| `lyrics` | [`LyricsResult`](/api/interfaces/lyricsresult/) | The lyrics | - | [src/structures/Types/Utils.ts:275](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L275) | +| `op` | `"event"` | - | [`PlayerEvent`](/api/interfaces/playerevent/).`op` | [src/structures/Types/Utils.ts:164](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L164) | +| `type` | `"LyricsFoundEvent"` | The lyricsfound event | [`PlayerEvent`](/api/interfaces/playerevent/).`type` | [src/structures/Types/Utils.ts:271](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L271) | diff --git a/docs/src/content/docs/api/interfaces/LyricsLine.md b/docs/src/content/docs/api/interfaces/LyricsLine.md new file mode 100644 index 0000000..13ad13a --- /dev/null +++ b/docs/src/content/docs/api/interfaces/LyricsLine.md @@ -0,0 +1,15 @@ +--- +editUrl: false +next: true +prev: true +title: "LyricsLine" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `duration` | `number` | The line duration in milliseconds | [src/structures/Types/Node.ts:187](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L187) | +| `line` | `string` | The line text | [src/structures/Types/Node.ts:189](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L189) | +| `plugin` | [`PluginInfo`](/api/interfaces/plugininfo/) | Information about the plugin | [src/structures/Types/Node.ts:191](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L191) | +| `timestamp` | `number` | The millisecond timestamp | [src/structures/Types/Node.ts:185](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L185) | diff --git a/docs/src/content/docs/api/interfaces/LyricsLineEvent.md b/docs/src/content/docs/api/interfaces/LyricsLineEvent.md new file mode 100644 index 0000000..11567b5 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/LyricsLineEvent.md @@ -0,0 +1,21 @@ +--- +editUrl: false +next: true +prev: true +title: "LyricsLineEvent" +--- + +## Extends + +- [`PlayerEvent`](/api/interfaces/playerevent/) + +## Properties + +| Property | Type | Description | Inherited from | Defined in | +| ------ | ------ | ------ | ------ | ------ | +| `guildId` | `string` | The guildId | [`PlayerEvent`](/api/interfaces/playerevent/).`guildId` | [src/structures/Types/Utils.ts:289](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L289) | +| `line` | [`LyricsLine`](/api/interfaces/lyricsline/) | The line | - | [src/structures/Types/Utils.ts:293](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L293) | +| `lineIndex` | `number` | The line number | - | [src/structures/Types/Utils.ts:291](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L291) | +| `op` | `"event"` | - | [`PlayerEvent`](/api/interfaces/playerevent/).`op` | [src/structures/Types/Utils.ts:164](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L164) | +| `skipped` | `boolean` | skipped is true if the line was skipped | - | [src/structures/Types/Utils.ts:295](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L295) | +| `type` | `"LyricsLineEvent"` | The lyricsline event | [`PlayerEvent`](/api/interfaces/playerevent/).`type` | [src/structures/Types/Utils.ts:287](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L287) | diff --git a/docs/src/content/docs/api/interfaces/LyricsNotFoundEvent.md b/docs/src/content/docs/api/interfaces/LyricsNotFoundEvent.md new file mode 100644 index 0000000..4dd8097 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/LyricsNotFoundEvent.md @@ -0,0 +1,18 @@ +--- +editUrl: false +next: true +prev: true +title: "LyricsNotFoundEvent" +--- + +## Extends + +- [`PlayerEvent`](/api/interfaces/playerevent/) + +## Properties + +| Property | Type | Description | Inherited from | Defined in | +| ------ | ------ | ------ | ------ | ------ | +| `guildId` | `string` | The guildId | [`PlayerEvent`](/api/interfaces/playerevent/).`guildId` | [src/structures/Types/Utils.ts:282](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L282) | +| `op` | `"event"` | - | [`PlayerEvent`](/api/interfaces/playerevent/).`op` | [src/structures/Types/Utils.ts:164](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L164) | +| `type` | `"LyricsNotFoundEvent"` | The lyricsnotfound event | [`PlayerEvent`](/api/interfaces/playerevent/).`type` | [src/structures/Types/Utils.ts:280](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L280) | diff --git a/docs/src/content/docs/api/interfaces/LyricsResult.md b/docs/src/content/docs/api/interfaces/LyricsResult.md new file mode 100644 index 0000000..33c9a5c --- /dev/null +++ b/docs/src/content/docs/api/interfaces/LyricsResult.md @@ -0,0 +1,16 @@ +--- +editUrl: false +next: true +prev: true +title: "LyricsResult" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `lines` | [`LyricsLine`](/api/interfaces/lyricsline/)[] | The lyrics lines | [src/structures/Types/Node.ts:178](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L178) | +| `plugin` | [`PluginInfo`](/api/interfaces/plugininfo/) | Information about the plugin | [src/structures/Types/Node.ts:180](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L180) | +| `provider` | `string` | The name of the provider | [src/structures/Types/Node.ts:174](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L174) | +| `sourceName` | `string` | The name of the source | [src/structures/Types/Node.ts:172](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L172) | +| `text` | `string` | The result text | [src/structures/Types/Node.ts:176](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L176) | diff --git a/docs/src/content/docs/api/interfaces/ManagerOptions.md b/docs/src/content/docs/api/interfaces/ManagerOptions.md new file mode 100644 index 0000000..c0c28ef --- /dev/null +++ b/docs/src/content/docs/api/interfaces/ManagerOptions.md @@ -0,0 +1,33 @@ +--- +editUrl: false +next: true +prev: true +title: "ManagerOptions" +--- + +Manager Options used to create the manager + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `advancedOptions?` | `object` | Advanced Options for the Library, which may or may not be "library breaking" | [src/structures/Types/Manager.ts:219](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L219) | +| `advancedOptions.debugOptions?` | `object` | optional | [src/structures/Types/Manager.ts:225](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L225) | +| `advancedOptions.debugOptions.logCustomSearches?` | `boolean` | For logging custom searches | [src/structures/Types/Manager.ts:227](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L227) | +| `advancedOptions.debugOptions.noAudio?` | `boolean` | logs for debugging the "no-Audio" playing error | [src/structures/Types/Manager.ts:229](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L229) | +| `advancedOptions.debugOptions.playerDestroy?` | `object` | For Logging the Destroy function | [src/structures/Types/Manager.ts:231](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L231) | +| `advancedOptions.debugOptions.playerDestroy.debugLog?` | `boolean` | To show the debug reason at all times. | [src/structures/Types/Manager.ts:233](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L233) | +| `advancedOptions.debugOptions.playerDestroy.dontThrowError?` | `boolean` | If you get 'Error: Use Player#destroy("reason") not LavalinkManager#deletePlayer() to stop the Player' put it on true | [src/structures/Types/Manager.ts:235](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L235) | +| `advancedOptions.enableDebugEvents?` | `boolean` | Enable Debug event | [src/structures/Types/Manager.ts:223](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L223) | +| `advancedOptions.maxFilterFixDuration?` | `number` | Max duration for that the filter fix duration works (in ms) - default is 8mins | [src/structures/Types/Manager.ts:221](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L221) | +| `autoSkip?` | `boolean` | If it should skip to the next Track on TrackEnd / TrackError etc. events | [src/structures/Types/Manager.ts:207](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L207) | +| `autoSkipOnResolveError?` | `boolean` | If it should skip to the next Track if track.resolve errors while trying to play a track. | [src/structures/Types/Manager.ts:209](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L209) | +| `client?` | [`BotClientOptions`](/api/interfaces/botclientoptions/) | The Bot Client's Data for Authorization | [src/structures/Types/Manager.ts:201](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L201) | +| `emitNewSongsOnly?` | `boolean` | If it should emit only new (unique) songs and not when a looping track (or similar) is plaid, default false | [src/structures/Types/Manager.ts:211](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L211) | +| `linksAllowed?` | `boolean` | If links should be allowed or not. If set to false, it will throw an error if a link was provided. | [src/structures/Types/Manager.ts:217](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L217) | +| `linksBlacklist?` | (`string` \| `RegExp`)[] | Never allow link requests with links either matching some of that regExp or including some of that string (doesn't even allow if it's whitelisted) | [src/structures/Types/Manager.ts:215](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L215) | +| `linksWhitelist?` | (`string` \| `RegExp`)[] | Only allow link requests with links either matching some of that regExp or including some of that string | [src/structures/Types/Manager.ts:213](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L213) | +| `nodes` | [`LavalinkNodeOptions`](/api/interfaces/lavalinknodeoptions/)[] | The Node Options, for all Nodes! (on init) | [src/structures/Types/Manager.ts:197](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L197) | +| `playerOptions?` | [`ManagerPlayerOptions`](/api/interfaces/managerplayeroptions/) | PlayerOptions for all Players | [src/structures/Types/Manager.ts:205](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L205) | +| `queueOptions?` | [`ManagerQueueOptions`](/api/interfaces/managerqueueoptions/) | QueueOptions for all Queues | [src/structures/Types/Manager.ts:203](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L203) | +| `sendToShard` | (`guildId`: `string`, `payload`: [`GuildShardPayload`](/api/interfaces/guildshardpayload/)) => `void` | **Async** The Function to send the voice connection changes from Lavalink to Discord | [src/structures/Types/Manager.ts:199](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L199) | diff --git a/docs/src/content/docs/api/interfaces/ManagerPlayerOptions.md b/docs/src/content/docs/api/interfaces/ManagerPlayerOptions.md new file mode 100644 index 0000000..94c9736 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/ManagerPlayerOptions.md @@ -0,0 +1,29 @@ +--- +editUrl: false +next: true +prev: true +title: "ManagerPlayerOptions" +--- + +Sub Manager Options, for player specific things + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `applyVolumeAsFilter?` | `boolean` | Applies the volume via a filter, not via the lavalink volume transformer | [src/structures/Types/Manager.ts:164](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L164) | +| `clientBasedPositionUpdateInterval?` | `number` | How often it should update the the player Position | [src/structures/Types/Manager.ts:160](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L160) | +| `defaultSearchPlatform?` | [`SearchPlatform`](/api/type-aliases/searchplatform/) | What should be used as a searchPlatform, if no source was provided during the query | [src/structures/Types/Manager.ts:162](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L162) | +| `maxErrorsPerTime?` | `object` | Allows you to declare how many tracks are allowed to error/stuck within a time-frame before player is destroyed **Default** `"{threshold: 35000, maxAmount: 3 }"` | [src/structures/Types/Manager.ts:177](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L177) | +| `maxErrorsPerTime.maxAmount` | `number` | The max amount of errors within the threshold time which are allowed before destroying the player (when errors > maxAmount -> player.destroy()) | [src/structures/Types/Manager.ts:181](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L181) | +| `maxErrorsPerTime.threshold` | `number` | The threshold time to count errors (recommended is 35s) | [src/structures/Types/Manager.ts:179](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L179) | +| `minAutoPlayMs?` | `number` | Minimum time to play the song before autoPlayFunction is executed (prevents error spamming) Set to 0 to disable it **Default** `10000` | [src/structures/Types/Manager.ts:175](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L175) | +| `onDisconnect?` | `object` | What lavalink-client should do when the player reconnects | [src/structures/Types/Manager.ts:168](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L168) | +| `onDisconnect.autoReconnect?` | `boolean` | Try to reconnect? -> If fails -> Destroy | [src/structures/Types/Manager.ts:170](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L170) | +| `onDisconnect.destroyPlayer?` | `boolean` | Instantly destroy player (overrides autoReconnect) | Don't provide == disable feature | [src/structures/Types/Manager.ts:172](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L172) | +| `onEmptyQueue?` | `object` | - | [src/structures/Types/Manager.ts:184](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L184) | +| `onEmptyQueue.autoPlayFunction?` | (`player`: [`Player`](/api/classes/player/), `lastPlayedTrack`: [`Track`](/api/interfaces/track/)) => `Promise`\<`void`\> | Get's executed onEmptyQueue -> You can do any track queue previous transformations, if you add a track to the queue -> it will play it, if not queueEnd will execute! | [src/structures/Types/Manager.ts:186](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L186) | +| `onEmptyQueue.destroyAfterMs?` | `number` | - | [src/structures/Types/Manager.ts:188](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L188) | +| `requesterTransformer?` | (`requester`: `unknown`) => `unknown` | Transforms the saved data of a requested user | [src/structures/Types/Manager.ts:166](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L166) | +| `useUnresolvedData?` | `boolean` | - | [src/structures/Types/Manager.ts:191](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L191) | +| `volumeDecrementer?` | `number` | If the Lavalink Volume should be decremented by x number | [src/structures/Types/Manager.ts:158](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Manager.ts#L158) | diff --git a/docs/src/content/docs/api/interfaces/ManagerQueueOptions.md b/docs/src/content/docs/api/interfaces/ManagerQueueOptions.md new file mode 100644 index 0000000..27aa204 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/ManagerQueueOptions.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "ManagerQueueOptions" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `maxPreviousTracks?` | `number` | Maximum Amount of tracks for the queue.previous array. Set to 0 to not save previous songs. Defaults to 25 Tracks | [src/structures/Types/Queue.ts:24](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Queue.ts#L24) | +| `queueChangesWatcher?` | [`QueueChangesWatcher`](/api/interfaces/queuechangeswatcher/) | Custom Queue Watcher class | [src/structures/Types/Queue.ts:28](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Queue.ts#L28) | +| `queueStore?` | [`QueueStoreManager`](/api/interfaces/queuestoremanager/) | Custom Queue Store option | [src/structures/Types/Queue.ts:26](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Queue.ts#L26) | diff --git a/docs/src/content/docs/api/interfaces/MemoryStats.md b/docs/src/content/docs/api/interfaces/MemoryStats.md new file mode 100644 index 0000000..6c6dcb1 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/MemoryStats.md @@ -0,0 +1,17 @@ +--- +editUrl: false +next: true +prev: true +title: "MemoryStats" +--- + +Memory Stats object from lavalink + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `allocated` | `number` | The total allocated memory. | [src/structures/Types/Node.ts:53](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L53) | +| `free` | `number` | The free memory of the allocated amount. | [src/structures/Types/Node.ts:49](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L49) | +| `reservable` | `number` | The reservable memory. | [src/structures/Types/Node.ts:55](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L55) | +| `used` | `number` | The used memory of the allocated amount. | [src/structures/Types/Node.ts:51](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L51) | diff --git a/docs/src/content/docs/api/interfaces/NodeManagerEvents.md b/docs/src/content/docs/api/interfaces/NodeManagerEvents.md new file mode 100644 index 0000000..b83e608 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/NodeManagerEvents.md @@ -0,0 +1,20 @@ +--- +editUrl: false +next: true +prev: true +title: "NodeManagerEvents" +--- + +## Events + +| Event | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `connect` | (`node`: [`LavalinkNode`](/api/classes/lavalinknode/)) => `void` | Emitted when a Node is connected. Manager.nodeManager#connect | [src/structures/Types/Node.ts:212](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L212) | +| `create` | (`node`: [`LavalinkNode`](/api/classes/lavalinknode/)) => `void` | Emitted when a Node is created. Manager.nodeManager#create | [src/structures/Types/Node.ts:200](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L200) | +| `destroy` | (`node`: [`LavalinkNode`](/api/classes/lavalinknode/), `destroyReason`?: `string`) => `void` | Emitted when a Node is destroyed. Manager.nodeManager#destroy | [src/structures/Types/Node.ts:206](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L206) | +| `disconnect` | (`node`: [`LavalinkNode`](/api/classes/lavalinknode/), `reason`: `object`) => `void` | Emitted when a Node is disconnects. Manager.nodeManager#disconnect | [src/structures/Types/Node.ts:231](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L231) | +| `error` | (`node`: [`LavalinkNode`](/api/classes/lavalinknode/), `error`: `Error`, `payload`?: `unknown`) => `void` | Emitted when a Node is error. Manager.nodeManager#error | [src/structures/Types/Node.ts:237](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L237) | +| `raw` | (`node`: [`LavalinkNode`](/api/classes/lavalinknode/), `payload`: `unknown`) => `void` | Emits every single Node event. Manager.nodeManager#raw | [src/structures/Types/Node.ts:243](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L243) | +| `reconnecting` | (`node`: [`LavalinkNode`](/api/classes/lavalinknode/)) => `void` | Emitted when a Node is reconnecting. Manager.nodeManager#reconnecting | [src/structures/Types/Node.ts:218](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L218) | +| `reconnectinprogress` | (`node`: [`LavalinkNode`](/api/classes/lavalinknode/)) => `void` | Emitted When a node starts to reconnect (if you have a reconnection delay, the reconnecting event will be emitted after the retryDelay.) Useful to check wether the internal node reconnect system works or not Manager.nodeManager#reconnectinprogress | [src/structures/Types/Node.ts:225](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L225) | +| `resumed` | (`node`: [`LavalinkNode`](/api/classes/lavalinknode/), `paylaod`: `object`, `players`: [`LavalinkPlayer`](/api/interfaces/lavalinkplayer/)[] \| [`InvalidLavalinkRestRequest`](/api/interfaces/invalidlavalinkrestrequest/)) => `void` | Emits when the node connects resumed. You then need to create all players within this event for your usecase. Aka for that you need to be able to save player data like vc channel + text channel in a db and then sync it again Manager.nodeManager#nodeResumed | [src/structures/Types/Node.ts:250](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L250) | diff --git a/docs/src/content/docs/api/interfaces/NodeMessage.md b/docs/src/content/docs/api/interfaces/NodeMessage.md new file mode 100644 index 0000000..976616b --- /dev/null +++ b/docs/src/content/docs/api/interfaces/NodeMessage.md @@ -0,0 +1,26 @@ +--- +editUrl: false +next: true +prev: true +title: "NodeMessage" +--- + +Interface for nodeStats from lavalink + +## Extends + +- [`NodeStats`](/api/interfaces/nodestats/) + +## Properties + +| Property | Type | Description | Inherited from | Defined in | +| ------ | ------ | ------ | ------ | ------ | +| `cpu` | [`CPUStats`](/api/interfaces/cpustats/) | The cpu stats for the node. | [`NodeStats`](/api/interfaces/nodestats/).`cpu` | [src/structures/Types/Node.ts:95](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L95) | +| `frameStats` | [`FrameStats`](/api/interfaces/framestats/) | The frame stats for the node. | [`NodeStats`](/api/interfaces/nodestats/).`frameStats` | [src/structures/Types/Node.ts:105](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L105) | +| `guildId` | `string` | The specific guild id for that message | - | [src/structures/Types/Utils.ts:533](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L533) | +| `memory` | [`MemoryStats`](/api/interfaces/memorystats/) | The memory stats for the node. | [`NodeStats`](/api/interfaces/nodestats/).`memory` | [src/structures/Types/Node.ts:93](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L93) | +| `op` | `"playerUpdate"` \| `"stats"` \| `"event"` | what ops are applying to that event | - | [src/structures/Types/Utils.ts:531](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L531) | +| `players` | `number` | The amount of players on the node. | [`NodeStats`](/api/interfaces/nodestats/).`players` | [src/structures/Types/Node.ts:87](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L87) | +| `playingPlayers` | `number` | The amount of playing players on the node. | [`NodeStats`](/api/interfaces/nodestats/).`playingPlayers` | [src/structures/Types/Node.ts:89](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L89) | +| `type` | [`PlayerEventType`](/api/type-aliases/playereventtype/) | The type of the event | - | [src/structures/Types/Utils.ts:529](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L529) | +| `uptime` | `number` | The uptime for the node. | [`NodeStats`](/api/interfaces/nodestats/).`uptime` | [src/structures/Types/Node.ts:91](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L91) | diff --git a/docs/src/content/docs/api/interfaces/NodeStats.md b/docs/src/content/docs/api/interfaces/NodeStats.md new file mode 100644 index 0000000..f5cedad --- /dev/null +++ b/docs/src/content/docs/api/interfaces/NodeStats.md @@ -0,0 +1,27 @@ +--- +editUrl: false +next: true +prev: true +title: "NodeStats" +--- + +Interface for nodeStats from lavalink + +## Extends + +- [`BaseNodeStats`](/api/interfaces/basenodestats/) + +## Extended by + +- [`NodeMessage`](/api/interfaces/nodemessage/) + +## Properties + +| Property | Type | Description | Overrides | Inherited from | Defined in | +| ------ | ------ | ------ | ------ | ------ | ------ | +| `cpu` | [`CPUStats`](/api/interfaces/cpustats/) | The cpu stats for the node. | - | [`BaseNodeStats`](/api/interfaces/basenodestats/).`cpu` | [src/structures/Types/Node.ts:95](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L95) | +| `frameStats` | [`FrameStats`](/api/interfaces/framestats/) | The frame stats for the node. | [`BaseNodeStats`](/api/interfaces/basenodestats/).`frameStats` | - | [src/structures/Types/Node.ts:105](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L105) | +| `memory` | [`MemoryStats`](/api/interfaces/memorystats/) | The memory stats for the node. | - | [`BaseNodeStats`](/api/interfaces/basenodestats/).`memory` | [src/structures/Types/Node.ts:93](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L93) | +| `players` | `number` | The amount of players on the node. | - | [`BaseNodeStats`](/api/interfaces/basenodestats/).`players` | [src/structures/Types/Node.ts:87](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L87) | +| `playingPlayers` | `number` | The amount of playing players on the node. | - | [`BaseNodeStats`](/api/interfaces/basenodestats/).`playingPlayers` | [src/structures/Types/Node.ts:89](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L89) | +| `uptime` | `number` | The uptime for the node. | - | [`BaseNodeStats`](/api/interfaces/basenodestats/).`uptime` | [src/structures/Types/Node.ts:91](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L91) | diff --git a/docs/src/content/docs/api/interfaces/PlayOptions.md b/docs/src/content/docs/api/interfaces/PlayOptions.md new file mode 100644 index 0000000..1242a18 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/PlayOptions.md @@ -0,0 +1,28 @@ +--- +editUrl: false +next: true +prev: true +title: "PlayOptions" +--- + +## Extends + +- [`LavalinkPlayOptions`](/api/interfaces/lavalinkplayoptions/) + +## Properties + +| Property | Type | Description | Inherited from | Defined in | +| ------ | ------ | ------ | ------ | ------ | +| `clientTrack?` | [`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`Track`](/api/interfaces/track/) | Adds track on queue and skips to it | - | [src/structures/Types/Player.ts:111](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L111) | +| `endTime?` | `number` | The position to end the track. | [`LavalinkPlayOptions`](/api/interfaces/lavalinkplayoptions/).`endTime` | [src/structures/Types/Player.ts:84](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L84) | +| `filters?` | `Partial`\<[`LavalinkFilterData`](/api/interfaces/lavalinkfilterdata/)\> | The Lavalink Filters to use | only with the new REST API | [`LavalinkPlayOptions`](/api/interfaces/lavalinkplayoptions/).`filters` | [src/structures/Types/Player.ts:90](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L90) | +| `noReplace?` | `boolean` | Whether to not replace the track if a play payload is sent. | - | [src/structures/Types/Player.ts:109](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L109) | +| `paused?` | `boolean` | If to start "paused" | [`LavalinkPlayOptions`](/api/interfaces/lavalinkplayoptions/).`paused` | [src/structures/Types/Player.ts:86](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L86) | +| `position?` | `number` | The position to start the track. | [`LavalinkPlayOptions`](/api/interfaces/lavalinkplayoptions/).`position` | [src/structures/Types/Player.ts:82](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L82) | +| `track?` | `object` | Which Track to play | don't provide, if it should pick from the Queue | [`LavalinkPlayOptions`](/api/interfaces/lavalinkplayoptions/).`track` | [src/structures/Types/Player.ts:96](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L96) | +| `track.encoded?` | `string` | The track encoded base64 string to use instead of the one from the queue system | - | [src/structures/Types/Player.ts:98](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L98) | +| `track.identifier?` | `string` | The identifier of the track to use | - | [src/structures/Types/Player.ts:100](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L100) | +| `track.requester?` | `unknown` | The Track requester for when u provide encodedTrack / identifer | - | [src/structures/Types/Player.ts:104](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L104) | +| `track.userData?` | [`anyObject`](/api/type-aliases/anyobject/) | Custom User Data for the track to provide, will then be on the userData object from the track | - | [src/structures/Types/Player.ts:102](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L102) | +| `voice?` | [`LavalinkPlayerVoiceOptions`](/api/type-aliases/lavalinkplayervoiceoptions/) | Voice Update for Lavalink | [`LavalinkPlayOptions`](/api/interfaces/lavalinkplayoptions/).`voice` | [src/structures/Types/Player.ts:92](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L92) | +| `volume?` | `number` | The Volume to start with | [`LavalinkPlayOptions`](/api/interfaces/lavalinkplayoptions/).`volume` | [src/structures/Types/Player.ts:88](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L88) | diff --git a/docs/src/content/docs/api/interfaces/PlayerEvent.md b/docs/src/content/docs/api/interfaces/PlayerEvent.md new file mode 100644 index 0000000..bb2d9fd --- /dev/null +++ b/docs/src/content/docs/api/interfaces/PlayerEvent.md @@ -0,0 +1,29 @@ +--- +editUrl: false +next: true +prev: true +title: "PlayerEvent" +--- + +## Extended by + +- [`TrackStartEvent`](/api/interfaces/trackstartevent/) +- [`TrackEndEvent`](/api/interfaces/trackendevent/) +- [`TrackExceptionEvent`](/api/interfaces/trackexceptionevent/) +- [`TrackStuckEvent`](/api/interfaces/trackstuckevent/) +- [`WebSocketClosedEvent`](/api/interfaces/websocketclosedevent/) +- [`SponsorBlockSegmentsLoaded`](/api/interfaces/sponsorblocksegmentsloaded/) +- [`SponsorBlockSegmentSkipped`](/api/interfaces/sponsorblocksegmentskipped/) +- [`SponsorBlockChapterStarted`](/api/interfaces/sponsorblockchapterstarted/) +- [`SponsorBlockChaptersLoaded`](/api/interfaces/sponsorblockchaptersloaded/) +- [`LyricsFoundEvent`](/api/interfaces/lyricsfoundevent/) +- [`LyricsNotFoundEvent`](/api/interfaces/lyricsnotfoundevent/) +- [`LyricsLineEvent`](/api/interfaces/lyricslineevent/) + +## Properties + +| Property | Type | Defined in | +| ------ | ------ | ------ | +| `guildId` | `string` | [src/structures/Types/Utils.ts:166](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L166) | +| `op` | `"event"` | [src/structures/Types/Utils.ts:164](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L164) | +| `type` | [`PlayerEventType`](/api/type-aliases/playereventtype/) | [src/structures/Types/Utils.ts:165](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L165) | diff --git a/docs/src/content/docs/api/interfaces/PlayerFilters.md b/docs/src/content/docs/api/interfaces/PlayerFilters.md new file mode 100644 index 0000000..3602104 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/PlayerFilters.md @@ -0,0 +1,31 @@ +--- +editUrl: false +next: true +prev: true +title: "PlayerFilters" +--- + +The "active" / "disabled" Player Filters + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `audioOutput` | [`AudioOutputs`](/api/type-aliases/audiooutputs/) | audio Output (default stereo, mono sounds the fullest and best for not-stereo tracks) | [src/structures/Types/Filters.ts:26](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L26) | +| `custom` | `boolean` | Sets nightcore to false, and vaporwave to false | [src/structures/Types/Filters.ts:10](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L10) | +| `karaoke` | `boolean` | if karaoke filter is enabled / not | [src/structures/Types/Filters.ts:18](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L18) | +| `lavalinkFilterPlugin` | `object` | Filters for the Lavalink Filter Plugin | [src/structures/Types/Filters.ts:30](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L30) | +| `lavalinkFilterPlugin.echo` | `boolean` | if echo filter is enabled / not | [src/structures/Types/Filters.ts:32](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L32) | +| `lavalinkFilterPlugin.reverb` | `boolean` | if reverb filter is enabled / not | [src/structures/Types/Filters.ts:34](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L34) | +| `lavalinkLavaDspxPlugin` | `object` | - | [src/structures/Types/Filters.ts:36](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L36) | +| `lavalinkLavaDspxPlugin.echo` | `boolean` | if echo filter is enabled / not | [src/structures/Types/Filters.ts:44](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L44) | +| `lavalinkLavaDspxPlugin.highPass` | `boolean` | if highPass filter is enabled / not | [src/structures/Types/Filters.ts:40](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L40) | +| `lavalinkLavaDspxPlugin.lowPass` | `boolean` | if lowPass filter is enabled / not | [src/structures/Types/Filters.ts:38](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L38) | +| `lavalinkLavaDspxPlugin.normalization` | `boolean` | if normalization filter is enabled / not | [src/structures/Types/Filters.ts:42](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L42) | +| `lowPass` | `boolean` | - | [src/structures/Types/Filters.ts:24](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L24) | +| `nightcore` | `boolean` | Sets custom to false, and vaporwave to false | [src/structures/Types/Filters.ts:12](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L12) | +| `rotation` | `boolean` | If rotation filter is enabled / not | [src/structures/Types/Filters.ts:16](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L16) | +| `tremolo` | `boolean` | if tremolo filter is enabled / not | [src/structures/Types/Filters.ts:20](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L20) | +| `vaporwave` | `boolean` | Sets custom to false, and nightcore to false | [src/structures/Types/Filters.ts:14](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L14) | +| `vibrato` | `boolean` | if vibrato filter is enabled / not | [src/structures/Types/Filters.ts:22](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L22) | +| `volume` | `boolean` | Lavalink Volume FILTER (not player Volume, think of it as a gain booster) | [src/structures/Types/Filters.ts:28](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L28) | diff --git a/docs/src/content/docs/api/interfaces/PlayerJson.md b/docs/src/content/docs/api/interfaces/PlayerJson.md new file mode 100644 index 0000000..e4d47e2 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/PlayerJson.md @@ -0,0 +1,31 @@ +--- +editUrl: false +next: true +prev: true +title: "PlayerJson" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `createdTimeStamp?` | `number` | When the player was created | [src/structures/Types/Player.ts:36](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L36) | +| `equalizer` | [`EQBand`](/api/interfaces/eqband/)[] | Equalizer Bands used in lavalink | [src/structures/Types/Player.ts:47](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L47) | +| `filters` | [`FilterData`](/api/interfaces/filterdata/) | All current used fitlers Data | [src/structures/Types/Player.ts:38](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L38) | +| `guildId` | `string` | Guild Id where the player was playing in | [src/structures/Types/Player.ts:12](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L12) | +| `lastPosition` | `number` | Lavalink's position the player was at | [src/structures/Types/Player.ts:22](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L22) | +| `lastPositionChange` | `number` | Last time the position was sent from lavalink | [src/structures/Types/Player.ts:24](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L24) | +| `lavalinkVolume` | `number` | Real Volume used in lavalink (with the volumeDecrementer) | [src/structures/Types/Player.ts:28](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L28) | +| `nodeId?` | `string` | The Id of the last used node | [src/structures/Types/Player.ts:49](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L49) | +| `nodeSessionId?` | `string` | The SessionId of the node | [src/structures/Types/Player.ts:51](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L51) | +| `options` | [`PlayerOptions`](/api/interfaces/playeroptions/) | Options provided to the player | [src/structures/Types/Player.ts:14](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L14) | +| `paused` | `boolean` | Pause state | [src/structures/Types/Player.ts:32](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L32) | +| `ping` | `object` | The player's ping object | [src/structures/Types/Player.ts:40](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L40) | +| `ping.lavalink` | `number` | Avg. calc. Ping to the lavalink server | [src/structures/Types/Player.ts:44](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L44) | +| `ping.ws` | `number` | Ping to the voice websocket server | [src/structures/Types/Player.ts:42](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L42) | +| `playing` | `boolean` | Wether the player was playing or not | [src/structures/Types/Player.ts:34](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L34) | +| `position` | `number` | Position the player was at | [src/structures/Types/Player.ts:20](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L20) | +| `repeatMode` | [`RepeatMode`](/api/type-aliases/repeatmode/) | The repeatmode from the player | [src/structures/Types/Player.ts:30](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L30) | +| `textChannelId?` | `string` | Text Channel Id the player was synced to | [src/structures/Types/Player.ts:18](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L18) | +| `voiceChannelId` | `string` | Voice Channel Id the player was playing in | [src/structures/Types/Player.ts:16](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L16) | +| `volume` | `number` | Volume in % from the player (without volumeDecrementer) | [src/structures/Types/Player.ts:26](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L26) | diff --git a/docs/src/content/docs/api/interfaces/PlayerOptions.md b/docs/src/content/docs/api/interfaces/PlayerOptions.md new file mode 100644 index 0000000..5486f68 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/PlayerOptions.md @@ -0,0 +1,21 @@ +--- +editUrl: false +next: true +prev: true +title: "PlayerOptions" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `applyVolumeAsFilter?` | `boolean` | If a volume should be applied via filters instead of lavalink-volume | [src/structures/Types/Player.ts:75](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L75) | +| `guildId` | `string` | Guild id of the player | [src/structures/Types/Player.ts:57](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L57) | +| `instaUpdateFiltersFix?` | `boolean` | If when applying filters, it should use the insta apply filters fix | [src/structures/Types/Player.ts:73](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L73) | +| `node?` | `string` \| [`LavalinkNode`](/api/classes/lavalinknode/) | If it should use a specific lavalink node | [src/structures/Types/Player.ts:71](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L71) | +| `selfDeaf?` | `boolean` | if it should join deafened | [src/structures/Types/Player.ts:67](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L67) | +| `selfMute?` | `boolean` | If it should join muted | [src/structures/Types/Player.ts:69](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L69) | +| `textChannelId?` | `string` | The Text Channel Id of the Player | [src/structures/Types/Player.ts:61](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L61) | +| `vcRegion?` | `string` | VC Region for node selections | [src/structures/Types/Player.ts:65](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L65) | +| `voiceChannelId` | `string` | The Voice Channel Id | [src/structures/Types/Player.ts:59](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L59) | +| `volume?` | `number` | instantly change volume with the one play request | [src/structures/Types/Player.ts:63](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L63) | diff --git a/docs/src/content/docs/api/interfaces/PlayerUpdateInfo.md b/docs/src/content/docs/api/interfaces/PlayerUpdateInfo.md new file mode 100644 index 0000000..d01d62e --- /dev/null +++ b/docs/src/content/docs/api/interfaces/PlayerUpdateInfo.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "PlayerUpdateInfo" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `guildId` | `string` | guild id of the player | [src/structures/Types/Utils.ts:445](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L445) | +| `noReplace?` | `boolean` | Whether or not replace the current track with the new one (true is recommended) | [src/structures/Types/Utils.ts:449](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L449) | +| `playerOptions` | [`LavalinkPlayOptions`](/api/interfaces/lavalinkplayoptions/) | Player options to provide to lavalink | [src/structures/Types/Utils.ts:447](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L447) | diff --git a/docs/src/content/docs/api/interfaces/PlaylistInfo.md b/docs/src/content/docs/api/interfaces/PlaylistInfo.md new file mode 100644 index 0000000..89a5aa0 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/PlaylistInfo.md @@ -0,0 +1,18 @@ +--- +editUrl: false +next: true +prev: true +title: "PlaylistInfo" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `author?` | `string` | The playlist Author | [src/structures/Types/Utils.ts:105](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L105) | +| `duration` | `number` | The duration of the entire playlist. (calcualted) | [src/structures/Types/Utils.ts:113](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L113) | +| `name` | `string` | The playlist name | [src/structures/Types/Utils.ts:101](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L101) | +| `selectedTrack` | [`Track`](/api/interfaces/track/) | The playlist selected track. | [src/structures/Types/Utils.ts:111](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L111) | +| `thumbnail?` | `string` | The playlist Thumbnail | [src/structures/Types/Utils.ts:107](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L107) | +| `title` | `string` | The playlist title (same as name) | [src/structures/Types/Utils.ts:103](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L103) | +| `uri?` | `string` | A Uri to the playlist | [src/structures/Types/Utils.ts:109](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L109) | diff --git a/docs/src/content/docs/api/interfaces/PluginInfo.md b/docs/src/content/docs/api/interfaces/PluginInfo.md new file mode 100644 index 0000000..fb02e79 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/PluginInfo.md @@ -0,0 +1,27 @@ +--- +editUrl: false +next: true +prev: true +title: "PluginInfo" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `albumArtUrl?` | `string` | The url of the album art | [src/structures/Types/Track.ts:68](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L68) | +| `albumName?` | `string` | The Identifier provided by a plugin | [src/structures/Types/Track.ts:64](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L64) | +| `albumUrl?` | `string` | The url of the album | [src/structures/Types/Track.ts:66](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L66) | +| `artistArtworkUrl?` | `string` | The url of the artist artwork | [src/structures/Types/Track.ts:72](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L72) | +| `artistUrl?` | `string` | The url of the artist | [src/structures/Types/Track.ts:70](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L70) | +| `artworkUrl?` | `string` | The ArtworkUrl provided by a plugin | [src/structures/Types/Track.ts:82](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L82) | +| `author?` | `string` | The Author Information provided by a plugin | [src/structures/Types/Track.ts:84](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L84) | +| `clientData?` | `object` | You can put specific track information here, to transform the tracks... | [src/structures/Types/Track.ts:90](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L90) | +| `clientData.previousTrack?` | `boolean` | - | [src/structures/Types/Track.ts:92](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L92) | +| `identifier?` | `string` | The Identifier provided by a plugin | [src/structures/Types/Track.ts:80](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L80) | +| `isPreview?` | `boolean` | Whether the track is a preview | [src/structures/Types/Track.ts:76](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L76) | +| `previewUrl?` | `string` | The url of the preview | [src/structures/Types/Track.ts:74](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L74) | +| `totalTracks?` | `number` | The total number of tracks in the playlist | [src/structures/Types/Track.ts:78](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L78) | +| `type?` | `string` | The Type provided by a plugin | [src/structures/Types/Track.ts:62](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L62) | +| `uri?` | `string` | The Url provided by a Plugin | [src/structures/Types/Track.ts:88](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L88) | +| `url?` | `string` | The Url provided by a Plugin | [src/structures/Types/Track.ts:86](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L86) | diff --git a/docs/src/content/docs/api/interfaces/PluginObject.md b/docs/src/content/docs/api/interfaces/PluginObject.md new file mode 100644 index 0000000..6c912d8 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/PluginObject.md @@ -0,0 +1,15 @@ +--- +editUrl: false +next: true +prev: true +title: "PluginObject" +--- + +Lavalink's plugins object from lavalink's plugin + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `name` | `string` | The name of the plugin | [src/structures/Types/Node.ts:165](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L165) | +| `version` | `string` | The version of the plugin | [src/structures/Types/Node.ts:167](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L167) | diff --git a/docs/src/content/docs/api/interfaces/QueueChangesWatcher.md b/docs/src/content/docs/api/interfaces/QueueChangesWatcher.md new file mode 100644 index 0000000..64c0e8d --- /dev/null +++ b/docs/src/content/docs/api/interfaces/QueueChangesWatcher.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "QueueChangesWatcher" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `shuffled` | (`guildId`: `string`, `oldStoredQueue`: [`StoredQueue`](/api/interfaces/storedqueue/), `newStoredQueue`: [`StoredQueue`](/api/interfaces/storedqueue/)) => `void` | Set a value inside a guildId (MUST BE UNPARSED) | [src/structures/Types/Queue.ts:38](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Queue.ts#L38) | +| `tracksAdd` | (`guildId`: `string`, `tracks`: ([`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`Track`](/api/interfaces/track/))[], `position`: `number`, `oldStoredQueue`: [`StoredQueue`](/api/interfaces/storedqueue/), `newStoredQueue`: [`StoredQueue`](/api/interfaces/storedqueue/)) => `void` | get a Value (MUST RETURN UNPARSED!) | [src/structures/Types/Queue.ts:34](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Queue.ts#L34) | +| `tracksRemoved` | (`guildId`: `string`, `tracks`: ([`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`Track`](/api/interfaces/track/))[], `position`: `number` \| `number`[], `oldStoredQueue`: [`StoredQueue`](/api/interfaces/storedqueue/), `newStoredQueue`: [`StoredQueue`](/api/interfaces/storedqueue/)) => `void` | Set a value inside a guildId (MUST BE UNPARSED) | [src/structures/Types/Queue.ts:36](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Queue.ts#L36) | diff --git a/docs/src/content/docs/api/interfaces/QueueStoreManager.md b/docs/src/content/docs/api/interfaces/QueueStoreManager.md new file mode 100644 index 0000000..3d3d737 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/QueueStoreManager.md @@ -0,0 +1,20 @@ +--- +editUrl: false +next: true +prev: true +title: "QueueStoreManager" +--- + +## Extends + +- `Record`\<`string`, `any`\> + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `delete` | (`guildId`: `unknown`) => `Promise`\<`unknown`\> | **Async** Delete a Database Value based of it's guildId | [src/structures/Types/Queue.ts:15](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Queue.ts#L15) | +| `get` | (`guildId`: `unknown`) => `Promise`\<`unknown`\> | **Async** get a Value (MUST RETURN UNPARSED!) | [src/structures/Types/Queue.ts:11](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Queue.ts#L11) | +| `parse` | (`value`: `unknown`) => `Promise`\<`Partial`\<[`StoredQueue`](/api/interfaces/storedqueue/)\>\> | **Async** Parse the saved value back to the Queue (IF YOU DON'T NEED PARSING/STRINGIFY, then just return the value) | [src/structures/Types/Queue.ts:19](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Queue.ts#L19) | +| `set` | (`guildId`: `unknown`, `value`: `unknown`) => `Promise`\<`unknown`\> | **Async** Set a value inside a guildId (MUST BE UNPARSED) | [src/structures/Types/Queue.ts:13](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Queue.ts#L13) | +| `stringify` | (`value`: `unknown`) => `Promise`\<`unknown`\> | **Async** Transform the value(s) inside of the QueueStoreManager (IF YOU DON'T NEED PARSING/STRINGIFY, then just return the value) | [src/structures/Types/Queue.ts:17](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Queue.ts#L17) | diff --git a/docs/src/content/docs/api/interfaces/RotationFilter.md b/docs/src/content/docs/api/interfaces/RotationFilter.md new file mode 100644 index 0000000..8ae1785 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/RotationFilter.md @@ -0,0 +1,15 @@ +--- +editUrl: false +next: true +prev: true +title: "RotationFilter" +--- + +Rotates the sound around the stereo channels/user headphones (aka Audio Panning). +It can produce an effect similar to https://youtu.be/QB9EB8mTKcc (without the reverb). + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `rotationHz?` | `number` | The frequency of the audio rotating around the listener in Hz. 0.2 is similar to the example video above | [src/structures/Types/Filters.ts:112](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L112) | diff --git a/docs/src/content/docs/api/interfaces/RoutePlanner.md b/docs/src/content/docs/api/interfaces/RoutePlanner.md new file mode 100644 index 0000000..56ac082 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/RoutePlanner.md @@ -0,0 +1,22 @@ +--- +editUrl: false +next: true +prev: true +title: "RoutePlanner" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `class?` | [`RoutePlannerTypes`](/api/type-aliases/routeplannertypes/) | - | [src/structures/Types/Utils.ts:395](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L395) | +| `details?` | `object` | - | [src/structures/Types/Utils.ts:396](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L396) | +| `details.blockIndex?` | `string` | The information in which /64 block ips are chosen. This number increases on each ban. | [src/structures/Types/Utils.ts:415](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L415) | +| `details.currentAddress?` | `string` | The current address being used | [src/structures/Types/Utils.ts:411](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L411) | +| `details.currentAddressIndex?` | `string` | The current offset in the ip block | [src/structures/Types/Utils.ts:413](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L413) | +| `details.failingAddresses` | [`FailingAddress`](/api/interfaces/failingaddress/)[] | The failing addresses | [src/structures/Types/Utils.ts:405](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L405) | +| `details.ipBlock` | `object` | The ip block being used | [src/structures/Types/Utils.ts:398](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L398) | +| `details.ipBlock.size` | `string` | The size of the ip block | [src/structures/Types/Utils.ts:402](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L402) | +| `details.ipBlock.type` | `"Inet4Address"` \| `"Inet6Address"` | The type of the ip block | [src/structures/Types/Utils.ts:400](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L400) | +| `details.ipIndex?` | `string` | The current offset in the block | [src/structures/Types/Utils.ts:409](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L409) | +| `details.rotateIndex?` | `string` | The number of rotations | [src/structures/Types/Utils.ts:407](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L407) | diff --git a/docs/src/content/docs/api/interfaces/SearchResult.md b/docs/src/content/docs/api/interfaces/SearchResult.md new file mode 100644 index 0000000..db7d226 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/SearchResult.md @@ -0,0 +1,16 @@ +--- +editUrl: false +next: true +prev: true +title: "SearchResult" +--- + +## Properties + +| Property | Type | Defined in | +| ------ | ------ | ------ | +| `exception` | [`Exception`](/api/interfaces/exception/) | [src/structures/Types/Utils.ts:118](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L118) | +| `loadType` | [`LoadTypes`](/api/type-aliases/loadtypes/) | [src/structures/Types/Utils.ts:117](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L117) | +| `playlist` | [`PlaylistInfo`](/api/interfaces/playlistinfo/) | [src/structures/Types/Utils.ts:120](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L120) | +| `pluginInfo` | [`PluginInfo`](/api/interfaces/plugininfo/) | [src/structures/Types/Utils.ts:119](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L119) | +| `tracks` | [`Track`](/api/interfaces/track/)[] | [src/structures/Types/Utils.ts:121](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L121) | diff --git a/docs/src/content/docs/api/interfaces/Session.md b/docs/src/content/docs/api/interfaces/Session.md new file mode 100644 index 0000000..f95860a --- /dev/null +++ b/docs/src/content/docs/api/interfaces/Session.md @@ -0,0 +1,13 @@ +--- +editUrl: false +next: true +prev: true +title: "Session" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `resuming` | `boolean` | Wether or not session is resuming or not | [src/structures/Types/Utils.ts:421](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L421) | +| `timeout` | `number` | For how long a session is lasting while not connected | [src/structures/Types/Utils.ts:423](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L423) | diff --git a/docs/src/content/docs/api/interfaces/SponsorBlockChapterStarted.md b/docs/src/content/docs/api/interfaces/SponsorBlockChapterStarted.md new file mode 100644 index 0000000..c115fd0 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/SponsorBlockChapterStarted.md @@ -0,0 +1,23 @@ +--- +editUrl: false +next: true +prev: true +title: "SponsorBlockChapterStarted" +--- + +## Extends + +- [`PlayerEvent`](/api/interfaces/playerevent/) + +## Properties + +| Property | Type | Description | Overrides | Inherited from | Defined in | +| ------ | ------ | ------ | ------ | ------ | ------ | +| `chapter` | `object` | The Chapter which started | - | - | [src/structures/Types/Utils.ts:234](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L234) | +| `chapter.duration` | `number` | - | - | - | [src/structures/Types/Utils.ts:242](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L242) | +| `chapter.end` | `number` | - | - | - | [src/structures/Types/Utils.ts:240](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L240) | +| `chapter.name` | `string` | The Name of the Chapter | - | - | [src/structures/Types/Utils.ts:236](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L236) | +| `chapter.start` | `number` | - | - | - | [src/structures/Types/Utils.ts:238](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L238) | +| `guildId` | `string` | - | - | [`PlayerEvent`](/api/interfaces/playerevent/).`guildId` | [src/structures/Types/Utils.ts:166](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L166) | +| `op` | `"event"` | - | - | [`PlayerEvent`](/api/interfaces/playerevent/).`op` | [src/structures/Types/Utils.ts:164](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L164) | +| `type` | `"ChapterStarted"` | - | [`PlayerEvent`](/api/interfaces/playerevent/).`type` | - | [src/structures/Types/Utils.ts:232](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L232) | diff --git a/docs/src/content/docs/api/interfaces/SponsorBlockChaptersLoaded.md b/docs/src/content/docs/api/interfaces/SponsorBlockChaptersLoaded.md new file mode 100644 index 0000000..9a4288d --- /dev/null +++ b/docs/src/content/docs/api/interfaces/SponsorBlockChaptersLoaded.md @@ -0,0 +1,19 @@ +--- +editUrl: false +next: true +prev: true +title: "SponsorBlockChaptersLoaded" +--- + +## Extends + +- [`PlayerEvent`](/api/interfaces/playerevent/) + +## Properties + +| Property | Type | Description | Overrides | Inherited from | Defined in | +| ------ | ------ | ------ | ------ | ------ | ------ | +| `chapters` | `object`[] | All Chapters loaded | - | - | [src/structures/Types/Utils.ts:250](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L250) | +| `guildId` | `string` | - | - | [`PlayerEvent`](/api/interfaces/playerevent/).`guildId` | [src/structures/Types/Utils.ts:166](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L166) | +| `op` | `"event"` | - | - | [`PlayerEvent`](/api/interfaces/playerevent/).`op` | [src/structures/Types/Utils.ts:164](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L164) | +| `type` | `"ChaptersLoaded"` | - | [`PlayerEvent`](/api/interfaces/playerevent/).`type` | - | [src/structures/Types/Utils.ts:248](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L248) | diff --git a/docs/src/content/docs/api/interfaces/SponsorBlockSegmentSkipped.md b/docs/src/content/docs/api/interfaces/SponsorBlockSegmentSkipped.md new file mode 100644 index 0000000..921ff5b --- /dev/null +++ b/docs/src/content/docs/api/interfaces/SponsorBlockSegmentSkipped.md @@ -0,0 +1,22 @@ +--- +editUrl: false +next: true +prev: true +title: "SponsorBlockSegmentSkipped" +--- + +## Extends + +- [`PlayerEvent`](/api/interfaces/playerevent/) + +## Properties + +| Property | Type | Overrides | Inherited from | Defined in | +| ------ | ------ | ------ | ------ | ------ | +| `guildId` | `string` | - | [`PlayerEvent`](/api/interfaces/playerevent/).`guildId` | [src/structures/Types/Utils.ts:166](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L166) | +| `op` | `"event"` | - | [`PlayerEvent`](/api/interfaces/playerevent/).`op` | [src/structures/Types/Utils.ts:164](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L164) | +| `segment` | `object` | - | - | [src/structures/Types/Utils.ts:221](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L221) | +| `segment.category` | `string` | - | - | [src/structures/Types/Utils.ts:223](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L223) | +| `segment.end` | `number` | - | - | [src/structures/Types/Utils.ts:227](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L227) | +| `segment.start` | `number` | - | - | [src/structures/Types/Utils.ts:225](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L225) | +| `type` | `"SegmentSkipped"` | [`PlayerEvent`](/api/interfaces/playerevent/).`type` | - | [src/structures/Types/Utils.ts:219](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L219) | diff --git a/docs/src/content/docs/api/interfaces/SponsorBlockSegmentsLoaded.md b/docs/src/content/docs/api/interfaces/SponsorBlockSegmentsLoaded.md new file mode 100644 index 0000000..0115c93 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/SponsorBlockSegmentsLoaded.md @@ -0,0 +1,19 @@ +--- +editUrl: false +next: true +prev: true +title: "SponsorBlockSegmentsLoaded" +--- + +## Extends + +- [`PlayerEvent`](/api/interfaces/playerevent/) + +## Properties + +| Property | Type | Overrides | Inherited from | Defined in | +| ------ | ------ | ------ | ------ | ------ | +| `guildId` | `string` | - | [`PlayerEvent`](/api/interfaces/playerevent/).`guildId` | [src/structures/Types/Utils.ts:166](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L166) | +| `op` | `"event"` | - | [`PlayerEvent`](/api/interfaces/playerevent/).`op` | [src/structures/Types/Utils.ts:164](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L164) | +| `segments` | `object`[] | - | - | [src/structures/Types/Utils.ts:209](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L209) | +| `type` | `"SegmentsLoaded"` | [`PlayerEvent`](/api/interfaces/playerevent/).`type` | - | [src/structures/Types/Utils.ts:207](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L207) | diff --git a/docs/src/content/docs/api/interfaces/StoredQueue.md b/docs/src/content/docs/api/interfaces/StoredQueue.md new file mode 100644 index 0000000..7ebdb78 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/StoredQueue.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "StoredQueue" +--- + +## Properties + +| Property | Type | Defined in | +| ------ | ------ | ------ | +| `current` | [`Track`](/api/interfaces/track/) | [src/structures/Types/Queue.ts:4](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Queue.ts#L4) | +| `previous` | [`Track`](/api/interfaces/track/)[] | [src/structures/Types/Queue.ts:5](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Queue.ts#L5) | +| `tracks` | ([`UnresolvedTrack`](/api/interfaces/unresolvedtrack/) \| [`Track`](/api/interfaces/track/))[] | [src/structures/Types/Queue.ts:6](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Queue.ts#L6) | diff --git a/docs/src/content/docs/api/interfaces/TimescaleFilter.md b/docs/src/content/docs/api/interfaces/TimescaleFilter.md new file mode 100644 index 0000000..c419f60 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/TimescaleFilter.md @@ -0,0 +1,16 @@ +--- +editUrl: false +next: true +prev: true +title: "TimescaleFilter" +--- + +Changes the speed, pitch, and rate + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `pitch?` | `number` | The pitch 0.0 ≀ x | [src/structures/Types/Filters.ts:81](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L81) | +| `rate?` | `number` | The rate 0.0 ≀ x | [src/structures/Types/Filters.ts:83](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L83) | +| `speed?` | `number` | The playback speed 0.0 ≀ x | [src/structures/Types/Filters.ts:79](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L79) | diff --git a/docs/src/content/docs/api/interfaces/Track.md b/docs/src/content/docs/api/interfaces/Track.md new file mode 100644 index 0000000..bdf5345 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/Track.md @@ -0,0 +1,16 @@ +--- +editUrl: false +next: true +prev: true +title: "Track" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `encoded?` | `string` | The Base 64 encoded String | [src/structures/Types/Track.ts:111](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L111) | +| `info` | [`TrackInfo`](/api/interfaces/trackinfo/) | Track Information | [src/structures/Types/Track.ts:113](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L113) | +| `pluginInfo` | `Partial`\<[`PluginInfo`](/api/interfaces/plugininfo/)\> | Plugin Information from Lavalink | [src/structures/Types/Track.ts:115](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L115) | +| `requester?` | `unknown` | The Track's Requester | [src/structures/Types/Track.ts:117](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L117) | +| `userData?` | [`anyObject`](/api/type-aliases/anyobject/) | The userData Object from when you provide to the lavalink request | [src/structures/Types/Track.ts:119](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L119) | diff --git a/docs/src/content/docs/api/interfaces/TrackEndEvent.md b/docs/src/content/docs/api/interfaces/TrackEndEvent.md new file mode 100644 index 0000000..6e35f0c --- /dev/null +++ b/docs/src/content/docs/api/interfaces/TrackEndEvent.md @@ -0,0 +1,20 @@ +--- +editUrl: false +next: true +prev: true +title: "TrackEndEvent" +--- + +## Extends + +- [`PlayerEvent`](/api/interfaces/playerevent/) + +## Properties + +| Property | Type | Overrides | Inherited from | Defined in | +| ------ | ------ | ------ | ------ | ------ | +| `guildId` | `string` | - | [`PlayerEvent`](/api/interfaces/playerevent/).`guildId` | [src/structures/Types/Utils.ts:166](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L166) | +| `op` | `"event"` | - | [`PlayerEvent`](/api/interfaces/playerevent/).`op` | [src/structures/Types/Utils.ts:164](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L164) | +| `reason` | [`TrackEndReason`](/api/type-aliases/trackendreason/) | - | - | [src/structures/Types/Utils.ts:176](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L176) | +| `track` | [`LavalinkTrack`](/api/interfaces/lavalinktrack/) | - | - | [src/structures/Types/Utils.ts:175](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L175) | +| `type` | `"TrackEndEvent"` | [`PlayerEvent`](/api/interfaces/playerevent/).`type` | - | [src/structures/Types/Utils.ts:174](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L174) | diff --git a/docs/src/content/docs/api/interfaces/TrackExceptionEvent.md b/docs/src/content/docs/api/interfaces/TrackExceptionEvent.md new file mode 100644 index 0000000..2b8d48f --- /dev/null +++ b/docs/src/content/docs/api/interfaces/TrackExceptionEvent.md @@ -0,0 +1,21 @@ +--- +editUrl: false +next: true +prev: true +title: "TrackExceptionEvent" +--- + +## Extends + +- [`PlayerEvent`](/api/interfaces/playerevent/) + +## Properties + +| Property | Type | Overrides | Inherited from | Defined in | +| ------ | ------ | ------ | ------ | ------ | +| `error` | `string` | - | - | [src/structures/Types/Utils.ts:183](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L183) | +| `exception?` | [`Exception`](/api/interfaces/exception/) | - | - | [src/structures/Types/Utils.ts:181](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L181) | +| `guildId` | `string` | - | [`PlayerEvent`](/api/interfaces/playerevent/).`guildId` | [src/structures/Types/Utils.ts:166](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L166) | +| `op` | `"event"` | - | [`PlayerEvent`](/api/interfaces/playerevent/).`op` | [src/structures/Types/Utils.ts:164](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L164) | +| `tracK` | [`LavalinkTrack`](/api/interfaces/lavalinktrack/) | - | - | [src/structures/Types/Utils.ts:182](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L182) | +| `type` | `"TrackExceptionEvent"` | [`PlayerEvent`](/api/interfaces/playerevent/).`type` | - | [src/structures/Types/Utils.ts:180](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L180) | diff --git a/docs/src/content/docs/api/interfaces/TrackInfo.md b/docs/src/content/docs/api/interfaces/TrackInfo.md new file mode 100644 index 0000000..d15aac1 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/TrackInfo.md @@ -0,0 +1,21 @@ +--- +editUrl: false +next: true +prev: true +title: "TrackInfo" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `artworkUrl` | `string` | The URL of the artwork if available | [src/structures/Types/Track.ts:45](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L45) | +| `author` | `string` | The Name of the Author | [src/structures/Types/Track.ts:41](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L41) | +| `duration` | `number` | The duration of the Track | [src/structures/Types/Track.ts:43](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L43) | +| `identifier` | `string` | The Identifier of the Track | [src/structures/Types/Track.ts:37](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L37) | +| `isrc` | `string` | If isrc code is available, it's provided | [src/structures/Types/Track.ts:55](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L55) | +| `isSeekable` | `boolean` | Wether the audio is seekable | [src/structures/Types/Track.ts:51](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L51) | +| `isStream` | `boolean` | Wether the audio is of a live stream | [src/structures/Types/Track.ts:53](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L53) | +| `sourceName` | [`SourceNames`](/api/type-aliases/sourcenames/) | The Source name of the Track, e.g. soundcloud, youtube, spotify | [src/structures/Types/Track.ts:49](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L49) | +| `title` | `string` | The Track Title / Name | [src/structures/Types/Track.ts:39](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L39) | +| `uri` | `string` | The URL (aka Link) of the Track called URI | [src/structures/Types/Track.ts:47](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L47) | diff --git a/docs/src/content/docs/api/interfaces/TrackStartEvent.md b/docs/src/content/docs/api/interfaces/TrackStartEvent.md new file mode 100644 index 0000000..e050071 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/TrackStartEvent.md @@ -0,0 +1,19 @@ +--- +editUrl: false +next: true +prev: true +title: "TrackStartEvent" +--- + +## Extends + +- [`PlayerEvent`](/api/interfaces/playerevent/) + +## Properties + +| Property | Type | Overrides | Inherited from | Defined in | +| ------ | ------ | ------ | ------ | ------ | +| `guildId` | `string` | - | [`PlayerEvent`](/api/interfaces/playerevent/).`guildId` | [src/structures/Types/Utils.ts:166](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L166) | +| `op` | `"event"` | - | [`PlayerEvent`](/api/interfaces/playerevent/).`op` | [src/structures/Types/Utils.ts:164](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L164) | +| `track` | [`LavalinkTrack`](/api/interfaces/lavalinktrack/) | - | - | [src/structures/Types/Utils.ts:170](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L170) | +| `type` | `"TrackStartEvent"` | [`PlayerEvent`](/api/interfaces/playerevent/).`type` | - | [src/structures/Types/Utils.ts:169](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L169) | diff --git a/docs/src/content/docs/api/interfaces/TrackStuckEvent.md b/docs/src/content/docs/api/interfaces/TrackStuckEvent.md new file mode 100644 index 0000000..03d41fa --- /dev/null +++ b/docs/src/content/docs/api/interfaces/TrackStuckEvent.md @@ -0,0 +1,20 @@ +--- +editUrl: false +next: true +prev: true +title: "TrackStuckEvent" +--- + +## Extends + +- [`PlayerEvent`](/api/interfaces/playerevent/) + +## Properties + +| Property | Type | Overrides | Inherited from | Defined in | +| ------ | ------ | ------ | ------ | ------ | +| `guildId` | `string` | - | [`PlayerEvent`](/api/interfaces/playerevent/).`guildId` | [src/structures/Types/Utils.ts:166](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L166) | +| `op` | `"event"` | - | [`PlayerEvent`](/api/interfaces/playerevent/).`op` | [src/structures/Types/Utils.ts:164](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L164) | +| `thresholdMs` | `number` | - | - | [src/structures/Types/Utils.ts:188](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L188) | +| `tracK` | [`LavalinkTrack`](/api/interfaces/lavalinktrack/) | - | - | [src/structures/Types/Utils.ts:189](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L189) | +| `type` | `"TrackStuckEvent"` | [`PlayerEvent`](/api/interfaces/playerevent/).`type` | - | [src/structures/Types/Utils.ts:187](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L187) | diff --git a/docs/src/content/docs/api/interfaces/TremoloFilter.md b/docs/src/content/docs/api/interfaces/TremoloFilter.md new file mode 100644 index 0000000..9d6958d --- /dev/null +++ b/docs/src/content/docs/api/interfaces/TremoloFilter.md @@ -0,0 +1,16 @@ +--- +editUrl: false +next: true +prev: true +title: "TremoloFilter" +--- + +Uses amplification to create a shuddering effect, where the volume quickly oscillates. +Demo: https://en.wikipedia.org/wiki/File:Fuse_Electronics_Tremolo_MK-III_Quick_Demo.ogv + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `depth?` | `number` | The tremolo depth 0.0 < x ≀ 1.0 | [src/structures/Types/Filters.ts:94](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L94) | +| `frequency?` | `number` | The frequency 0.0 < x | [src/structures/Types/Filters.ts:92](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L92) | diff --git a/docs/src/content/docs/api/interfaces/UnresolvedQuery.md b/docs/src/content/docs/api/interfaces/UnresolvedQuery.md new file mode 100644 index 0000000..f429201 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/UnresolvedQuery.md @@ -0,0 +1,26 @@ +--- +editUrl: false +next: true +prev: true +title: "UnresolvedQuery" +--- + +## Extends + +- [`UnresolvedTrackInfo`](/api/interfaces/unresolvedtrackinfo/) + +## Properties + +| Property | Type | Description | Inherited from | Defined in | +| ------ | ------ | ------ | ------ | ------ | +| `artworkUrl?` | `string` | The URL of the artwork if available | [`UnresolvedTrackInfo`](/api/interfaces/unresolvedtrackinfo/).`artworkUrl` | [src/structures/Types/Track.ts:45](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L45) | +| `author?` | `string` | The Name of the Author | [`UnresolvedTrackInfo`](/api/interfaces/unresolvedtrackinfo/).`author` | [src/structures/Types/Track.ts:41](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L41) | +| `duration?` | `number` | The duration of the Track | [`UnresolvedTrackInfo`](/api/interfaces/unresolvedtrackinfo/).`duration` | [src/structures/Types/Track.ts:43](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L43) | +| `encoded?` | `string` | The base64 of the unresolved track to "encode" | - | [src/structures/Types/Track.ts:129](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L129) | +| `identifier?` | `string` | The Identifier of the Track | [`UnresolvedTrackInfo`](/api/interfaces/unresolvedtrackinfo/).`identifier` | [src/structures/Types/Track.ts:37](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L37) | +| `isrc?` | `string` | If isrc code is available, it's provided | [`UnresolvedTrackInfo`](/api/interfaces/unresolvedtrackinfo/).`isrc` | [src/structures/Types/Track.ts:55](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L55) | +| `isSeekable?` | `boolean` | Wether the audio is seekable | [`UnresolvedTrackInfo`](/api/interfaces/unresolvedtrackinfo/).`isSeekable` | [src/structures/Types/Track.ts:51](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L51) | +| `isStream?` | `boolean` | Wether the audio is of a live stream | [`UnresolvedTrackInfo`](/api/interfaces/unresolvedtrackinfo/).`isStream` | [src/structures/Types/Track.ts:53](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L53) | +| `sourceName?` | [`SourceNames`](/api/type-aliases/sourcenames/) | The Source name of the Track, e.g. soundcloud, youtube, spotify | [`UnresolvedTrackInfo`](/api/interfaces/unresolvedtrackinfo/).`sourceName` | [src/structures/Types/Track.ts:49](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L49) | +| `title` | `string` | Required | [`UnresolvedTrackInfo`](/api/interfaces/unresolvedtrackinfo/).`title` | [src/structures/Types/Track.ts:125](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L125) | +| `uri?` | `string` | The URL (aka Link) of the Track called URI | [`UnresolvedTrackInfo`](/api/interfaces/unresolvedtrackinfo/).`uri` | [src/structures/Types/Track.ts:47](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L47) | diff --git a/docs/src/content/docs/api/interfaces/UnresolvedSearchResult.md b/docs/src/content/docs/api/interfaces/UnresolvedSearchResult.md new file mode 100644 index 0000000..dfa0d89 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/UnresolvedSearchResult.md @@ -0,0 +1,16 @@ +--- +editUrl: false +next: true +prev: true +title: "UnresolvedSearchResult" +--- + +## Properties + +| Property | Type | Defined in | +| ------ | ------ | ------ | +| `exception` | [`Exception`](/api/interfaces/exception/) | [src/structures/Types/Utils.ts:126](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L126) | +| `loadType` | [`LoadTypes`](/api/type-aliases/loadtypes/) | [src/structures/Types/Utils.ts:125](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L125) | +| `playlist` | [`PlaylistInfo`](/api/interfaces/playlistinfo/) | [src/structures/Types/Utils.ts:128](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L128) | +| `pluginInfo` | [`PluginInfo`](/api/interfaces/plugininfo/) | [src/structures/Types/Utils.ts:127](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L127) | +| `tracks` | [`UnresolvedTrack`](/api/interfaces/unresolvedtrack/)[] | [src/structures/Types/Utils.ts:129](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L129) | diff --git a/docs/src/content/docs/api/interfaces/UnresolvedTrack.md b/docs/src/content/docs/api/interfaces/UnresolvedTrack.md new file mode 100644 index 0000000..c184bdc --- /dev/null +++ b/docs/src/content/docs/api/interfaces/UnresolvedTrack.md @@ -0,0 +1,17 @@ +--- +editUrl: false +next: true +prev: true +title: "UnresolvedTrack" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `encoded?` | `string` | The Base 64 encoded String | [src/structures/Types/Track.ts:135](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L135) | +| `info` | [`UnresolvedTrackInfo`](/api/interfaces/unresolvedtrackinfo/) | Track Information | [src/structures/Types/Track.ts:137](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L137) | +| `pluginInfo` | `Partial`\<[`PluginInfo`](/api/interfaces/plugininfo/)\> | Plugin Information from Lavalink | [src/structures/Types/Track.ts:139](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L139) | +| `requester?` | `unknown` | The Track's Requester | [src/structures/Types/Track.ts:143](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L143) | +| `resolve` | (`player`: [`Player`](/api/classes/player/)) => `Promise`\<`void`\> | Required | [src/structures/Types/Track.ts:133](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L133) | +| `userData?` | [`anyObject`](/api/type-aliases/anyobject/) | The userData Object from when you provide to the lavalink request | [src/structures/Types/Track.ts:141](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L141) | diff --git a/docs/src/content/docs/api/interfaces/UnresolvedTrackInfo.md b/docs/src/content/docs/api/interfaces/UnresolvedTrackInfo.md new file mode 100644 index 0000000..8f5b29b --- /dev/null +++ b/docs/src/content/docs/api/interfaces/UnresolvedTrackInfo.md @@ -0,0 +1,29 @@ +--- +editUrl: false +next: true +prev: true +title: "UnresolvedTrackInfo" +--- + +## Extends + +- `Partial`\<[`TrackInfo`](/api/interfaces/trackinfo/)\> + +## Extended by + +- [`UnresolvedQuery`](/api/interfaces/unresolvedquery/) + +## Properties + +| Property | Type | Description | Overrides | Inherited from | Defined in | +| ------ | ------ | ------ | ------ | ------ | ------ | +| `artworkUrl?` | `string` | The URL of the artwork if available | - | `Partial.artworkUrl` | [src/structures/Types/Track.ts:45](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L45) | +| `author?` | `string` | The Name of the Author | - | `Partial.author` | [src/structures/Types/Track.ts:41](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L41) | +| `duration?` | `number` | The duration of the Track | - | `Partial.duration` | [src/structures/Types/Track.ts:43](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L43) | +| `identifier?` | `string` | The Identifier of the Track | - | `Partial.identifier` | [src/structures/Types/Track.ts:37](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L37) | +| `isrc?` | `string` | If isrc code is available, it's provided | - | `Partial.isrc` | [src/structures/Types/Track.ts:55](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L55) | +| `isSeekable?` | `boolean` | Wether the audio is seekable | - | `Partial.isSeekable` | [src/structures/Types/Track.ts:51](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L51) | +| `isStream?` | `boolean` | Wether the audio is of a live stream | - | `Partial.isStream` | [src/structures/Types/Track.ts:53](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L53) | +| `sourceName?` | [`SourceNames`](/api/type-aliases/sourcenames/) | The Source name of the Track, e.g. soundcloud, youtube, spotify | - | `Partial.sourceName` | [src/structures/Types/Track.ts:49](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L49) | +| `title` | `string` | Required | `Partial.title` | - | [src/structures/Types/Track.ts:125](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L125) | +| `uri?` | `string` | The URL (aka Link) of the Track called URI | - | `Partial.uri` | [src/structures/Types/Track.ts:47](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L47) | diff --git a/docs/src/content/docs/api/interfaces/VersionObject.md b/docs/src/content/docs/api/interfaces/VersionObject.md new file mode 100644 index 0000000..7d637a7 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/VersionObject.md @@ -0,0 +1,19 @@ +--- +editUrl: false +next: true +prev: true +title: "VersionObject" +--- + +Lavalink's version object from lavalink + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `build?` | `string` | The build metadata according to semver as a . separated list of identifiers | [src/structures/Types/Node.ts:145](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L145) | +| `major` | `number` | The major version of this Lavalink server | [src/structures/Types/Node.ts:137](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L137) | +| `minor` | `number` | The minor version of this Lavalink server | [src/structures/Types/Node.ts:139](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L139) | +| `patch` | `internal` | The patch version of this Lavalink server | [src/structures/Types/Node.ts:141](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L141) | +| `preRelease?` | `string` | The pre-release version according to semver as a . separated list of identifiers | [src/structures/Types/Node.ts:143](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L143) | +| `semver` | `string` | The full version string of this Lavalink server | [src/structures/Types/Node.ts:135](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L135) | diff --git a/docs/src/content/docs/api/interfaces/VibratoFilter.md b/docs/src/content/docs/api/interfaces/VibratoFilter.md new file mode 100644 index 0000000..22370e4 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/VibratoFilter.md @@ -0,0 +1,15 @@ +--- +editUrl: false +next: true +prev: true +title: "VibratoFilter" +--- + +Similar to tremolo. While tremolo oscillates the volume, vibrato oscillates the pitch. + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `depth?` | `number` | The vibrato depth 0.0 < x ≀ 1.0 | [src/structures/Types/Filters.ts:103](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L103) | +| `frequency?` | `number` | The frequency 0.0 < x ≀ 14.0 | [src/structures/Types/Filters.ts:101](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L101) | diff --git a/docs/src/content/docs/api/interfaces/VoicePacket.md b/docs/src/content/docs/api/interfaces/VoicePacket.md new file mode 100644 index 0000000..e1fa18b --- /dev/null +++ b/docs/src/content/docs/api/interfaces/VoicePacket.md @@ -0,0 +1,13 @@ +--- +editUrl: false +next: true +prev: true +title: "VoicePacket" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `d` | [`VoiceState`](/api/interfaces/voicestate/) \| [`VoiceServer`](/api/interfaces/voiceserver/) | Voice Packets to send | [src/structures/Types/Utils.ts:524](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L524) | +| `t?` | `"VOICE_SERVER_UPDATE"` \| `"VOICE_STATE_UPDATE"` | Voice Packet Keys to send | [src/structures/Types/Utils.ts:522](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L522) | diff --git a/docs/src/content/docs/api/interfaces/VoiceServer.md b/docs/src/content/docs/api/interfaces/VoiceServer.md new file mode 100644 index 0000000..7285c79 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/VoiceServer.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "VoiceServer" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `endpoint` | `string` | Server Endpoint | [src/structures/Types/Utils.ts:517](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L517) | +| `guild_id` | `string` | Guild Id of the voice server connection | [src/structures/Types/Utils.ts:515](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L515) | +| `token` | `string` | Voice Token | [src/structures/Types/Utils.ts:513](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L513) | diff --git a/docs/src/content/docs/api/interfaces/VoiceState.md b/docs/src/content/docs/api/interfaces/VoiceState.md new file mode 100644 index 0000000..ae3df56 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/VoiceState.md @@ -0,0 +1,19 @@ +--- +editUrl: false +next: true +prev: true +title: "VoiceState" +--- + +## Properties + +| Property | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `channel_id` | `string` | Voice Channel Id | [src/structures/Types/Utils.ts:505](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L505) | +| `event` | [`VoiceServer`](/api/interfaces/voiceserver/) | Event data | [src/structures/Types/Utils.ts:495](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L495) | +| `guild_id` | `string` | guild id of the voice channel | [src/structures/Types/Utils.ts:499](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L499) | +| `guildId` | `string` | GuildId provided by lavalink | [src/structures/Types/Utils.ts:493](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L493) | +| `op` | `"voiceUpdate"` | OP key from lavalink | [src/structures/Types/Utils.ts:491](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L491) | +| `session_id` | `string` | Session Id of the voice connection | [src/structures/Types/Utils.ts:503](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L503) | +| `sessionId?` | `string` | Session Id of the voice connection | [src/structures/Types/Utils.ts:497](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L497) | +| `user_id` | `string` | user id from the voice connection | [src/structures/Types/Utils.ts:501](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L501) | diff --git a/docs/src/content/docs/api/interfaces/WebSocketClosedEvent.md b/docs/src/content/docs/api/interfaces/WebSocketClosedEvent.md new file mode 100644 index 0000000..9a4f342 --- /dev/null +++ b/docs/src/content/docs/api/interfaces/WebSocketClosedEvent.md @@ -0,0 +1,21 @@ +--- +editUrl: false +next: true +prev: true +title: "WebSocketClosedEvent" +--- + +## Extends + +- [`PlayerEvent`](/api/interfaces/playerevent/) + +## Properties + +| Property | Type | Overrides | Inherited from | Defined in | +| ------ | ------ | ------ | ------ | ------ | +| `byRemote` | `boolean` | - | - | [src/structures/Types/Utils.ts:195](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L195) | +| `code` | `number` | - | - | [src/structures/Types/Utils.ts:194](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L194) | +| `guildId` | `string` | - | [`PlayerEvent`](/api/interfaces/playerevent/).`guildId` | [src/structures/Types/Utils.ts:166](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L166) | +| `op` | `"event"` | - | [`PlayerEvent`](/api/interfaces/playerevent/).`op` | [src/structures/Types/Utils.ts:164](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L164) | +| `reason` | `string` | - | - | [src/structures/Types/Utils.ts:196](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L196) | +| `type` | `"WebSocketClosedEvent"` | [`PlayerEvent`](/api/interfaces/playerevent/).`type` | - | [src/structures/Types/Utils.ts:193](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L193) | diff --git a/docs/src/content/docs/api/type-aliases/AudioOutputs.md b/docs/src/content/docs/api/type-aliases/AudioOutputs.md new file mode 100644 index 0000000..f53f401 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/AudioOutputs.md @@ -0,0 +1,16 @@ +--- +editUrl: false +next: true +prev: true +title: "AudioOutputs" +--- + +```ts +type AudioOutputs: "mono" | "stereo" | "left" | "right"; +``` + +The Audio Outputs type + +## Defined in + +[src/structures/Types/Filters.ts:4](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Filters.ts#L4) diff --git a/docs/src/content/docs/api/type-aliases/Base64.md b/docs/src/content/docs/api/type-aliases/Base64.md new file mode 100644 index 0000000..b7e8156 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/Base64.md @@ -0,0 +1,16 @@ +--- +editUrl: false +next: true +prev: true +title: "Base64" +--- + +```ts +type Base64: string; +``` + +The Base64 decodes tring by lavalink + +## Defined in + +[src/structures/Types/Utils.ts:509](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L509) diff --git a/docs/src/content/docs/api/type-aliases/ClientCustomSearchPlatformUtils.md b/docs/src/content/docs/api/type-aliases/ClientCustomSearchPlatformUtils.md new file mode 100644 index 0000000..d21aec0 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/ClientCustomSearchPlatformUtils.md @@ -0,0 +1,19 @@ +--- +editUrl: false +next: true +prev: true +title: "ClientCustomSearchPlatformUtils" +--- + +```ts +type ClientCustomSearchPlatformUtils: + | "local" + | "http" + | "https" + | "link" + | "uri"; +``` + +## Defined in + +[src/structures/Types/Utils.ts:47](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L47) diff --git a/docs/src/content/docs/api/type-aliases/ClientSearchPlatform.md b/docs/src/content/docs/api/type-aliases/ClientSearchPlatform.md new file mode 100644 index 0000000..87f3c63 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/ClientSearchPlatform.md @@ -0,0 +1,47 @@ +--- +editUrl: false +next: true +prev: true +title: "ClientSearchPlatform" +--- + +```ts +type ClientSearchPlatform: + | ClientCustomSearchPlatformUtils + | "youtube" + | "yt" + | "youtube music" + | "youtubemusic" + | "ytm" + | "musicyoutube" + | "music youtube" + | "soundcloud" + | "sc" + | "am" + | "apple music" + | "applemusic" + | "apple" + | "musicapple" + | "music apple" + | "sp" + | "spsuggestion" + | "spotify" + | "spotify.com" + | "spotifycom" + | "dz" + | "deezer" + | "yandex" + | "yandex music" + | "yandexmusic" + | "flowerytts" + | "flowery" + | "flowery.tts" + | LavalinkClientSearchPlatformResolve + | LavalinkClientSearchPlatform + | "js" + | "jiosaavn"; +``` + +## Defined in + +[src/structures/Types/Utils.ts:49](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L49) diff --git a/docs/src/content/docs/api/type-aliases/DestroyReasonsType.md b/docs/src/content/docs/api/type-aliases/DestroyReasonsType.md new file mode 100644 index 0000000..c1fc428 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/DestroyReasonsType.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "DestroyReasonsType" +--- + +```ts +type DestroyReasonsType: keyof typeof DestroyReasons | string; +``` + +## Defined in + +[src/structures/Types/Player.ts:8](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L8) diff --git a/docs/src/content/docs/api/type-aliases/DuncteSearchPlatform.md b/docs/src/content/docs/api/type-aliases/DuncteSearchPlatform.md new file mode 100644 index 0000000..a4407d3 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/DuncteSearchPlatform.md @@ -0,0 +1,19 @@ +--- +editUrl: false +next: true +prev: true +title: "DuncteSearchPlatform" +--- + +```ts +type DuncteSearchPlatform: + | "speak" + | "phsearch" + | "pornhub" + | "porn" + | "tts"; +``` + +## Defined in + +[src/structures/Types/Utils.ts:28](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L28) diff --git a/docs/src/content/docs/api/type-aliases/FloatNumber.md b/docs/src/content/docs/api/type-aliases/FloatNumber.md new file mode 100644 index 0000000..fc6e7bb --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/FloatNumber.md @@ -0,0 +1,16 @@ +--- +editUrl: false +next: true +prev: true +title: "FloatNumber" +--- + +```ts +type FloatNumber: Opaque; +``` + +Opqaue tyep for floatnumber + +## Defined in + +[src/structures/Types/Utils.ts:15](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L15) diff --git a/docs/src/content/docs/api/type-aliases/IntegerNumber.md b/docs/src/content/docs/api/type-aliases/IntegerNumber.md new file mode 100644 index 0000000..3fd2c23 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/IntegerNumber.md @@ -0,0 +1,16 @@ +--- +editUrl: false +next: true +prev: true +title: "IntegerNumber" +--- + +```ts +type IntegerNumber: Opaque; +``` + +Opqaue tyep for integernumber + +## Defined in + +[src/structures/Types/Utils.ts:12](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L12) diff --git a/docs/src/content/docs/api/type-aliases/JioSaavnSearchPlatform.md b/docs/src/content/docs/api/type-aliases/JioSaavnSearchPlatform.md new file mode 100644 index 0000000..fef6078 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/JioSaavnSearchPlatform.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "JioSaavnSearchPlatform" +--- + +```ts +type JioSaavnSearchPlatform: "jssearch" | "jsrec"; +``` + +## Defined in + +[src/structures/Types/Utils.ts:26](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L26) diff --git a/docs/src/content/docs/api/type-aliases/LavaSearchQuery.md b/docs/src/content/docs/api/type-aliases/LavaSearchQuery.md new file mode 100644 index 0000000..923a630 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/LavaSearchQuery.md @@ -0,0 +1,24 @@ +--- +editUrl: false +next: true +prev: true +title: "LavaSearchQuery" +--- + +```ts +type LavaSearchQuery: object; +``` + +SearchQuery Object for Lavalink LavaSearch Plugin requests + +## Type declaration + +| Name | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `query` | `string` | lavalink search Query / identifier string | [src/structures/Types/Utils.ts:580](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L580) | +| `source` | [`LavaSrcSearchPlatformBase`](/api/type-aliases/lavasrcsearchplatformbase/) | Source to append to the search query string | [src/structures/Types/Utils.ts:582](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L582) | +| `types`? | [`LavaSearchType`](/api/type-aliases/lavasearchtype/)[] | The Types to filter the search to | [src/structures/Types/Utils.ts:584](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L584) | + +## Defined in + +[src/structures/Types/Utils.ts:578](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L578) diff --git a/docs/src/content/docs/api/type-aliases/LavaSearchType.md b/docs/src/content/docs/api/type-aliases/LavaSearchType.md new file mode 100644 index 0000000..9a9057c --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/LavaSearchType.md @@ -0,0 +1,26 @@ +--- +editUrl: false +next: true +prev: true +title: "LavaSearchType" +--- + +```ts +type LavaSearchType: + | "track" + | "album" + | "artist" + | "playlist" + | "text" + | "tracks" + | "albums" + | "artists" + | "playlists" + | "texts"; +``` + +Specific types to filter for lavasearch, will be filtered to correct types + +## Defined in + +[src/structures/Types/Utils.ts:539](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L539) diff --git a/docs/src/content/docs/api/type-aliases/LavaSrcSearchPlatform.md b/docs/src/content/docs/api/type-aliases/LavaSrcSearchPlatform.md new file mode 100644 index 0000000..0af74cd --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/LavaSrcSearchPlatform.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "LavaSrcSearchPlatform" +--- + +```ts +type LavaSrcSearchPlatform: LavaSrcSearchPlatformBase | "ftts"; +``` + +## Defined in + +[src/structures/Types/Utils.ts:24](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L24) diff --git a/docs/src/content/docs/api/type-aliases/LavaSrcSearchPlatformBase.md b/docs/src/content/docs/api/type-aliases/LavaSrcSearchPlatformBase.md new file mode 100644 index 0000000..07dfaaf --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/LavaSrcSearchPlatformBase.md @@ -0,0 +1,20 @@ +--- +editUrl: false +next: true +prev: true +title: "LavaSrcSearchPlatformBase" +--- + +```ts +type LavaSrcSearchPlatformBase: + | "spsearch" + | "sprec" + | "amsearch" + | "dzsearch" + | "dzisrc" + | "ymsearch"; +``` + +## Defined in + +[src/structures/Types/Utils.ts:17](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L17) diff --git a/docs/src/content/docs/api/type-aliases/LavalinkClientSearchPlatform.md b/docs/src/content/docs/api/type-aliases/LavalinkClientSearchPlatform.md new file mode 100644 index 0000000..fb42405 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/LavalinkClientSearchPlatform.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "LavalinkClientSearchPlatform" +--- + +```ts +type LavalinkClientSearchPlatform: "bcsearch"; +``` + +## Defined in + +[src/structures/Types/Utils.ts:35](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L35) diff --git a/docs/src/content/docs/api/type-aliases/LavalinkClientSearchPlatformResolve.md b/docs/src/content/docs/api/type-aliases/LavalinkClientSearchPlatformResolve.md new file mode 100644 index 0000000..d07affa --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/LavalinkClientSearchPlatformResolve.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "LavalinkClientSearchPlatformResolve" +--- + +```ts +type LavalinkClientSearchPlatformResolve: "bandcamp" | "bc"; +``` + +## Defined in + +[src/structures/Types/Utils.ts:36](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L36) diff --git a/docs/src/content/docs/api/type-aliases/LavalinkNodeIdentifier.md b/docs/src/content/docs/api/type-aliases/LavalinkNodeIdentifier.md new file mode 100644 index 0000000..8e973c2 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/LavalinkNodeIdentifier.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "LavalinkNodeIdentifier" +--- + +```ts +type LavalinkNodeIdentifier: string; +``` + +## Defined in + +[src/structures/Types/Node.ts:193](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L193) diff --git a/docs/src/content/docs/api/type-aliases/LavalinkPlayerVoiceOptions.md b/docs/src/content/docs/api/type-aliases/LavalinkPlayerVoiceOptions.md new file mode 100644 index 0000000..b9af469 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/LavalinkPlayerVoiceOptions.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "LavalinkPlayerVoiceOptions" +--- + +```ts +type LavalinkPlayerVoiceOptions: Omit; +``` + +## Defined in + +[src/structures/Types/Utils.ts:381](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L381) diff --git a/docs/src/content/docs/api/type-aliases/LavalinkPlugin_LavaSrc_SourceNames.md b/docs/src/content/docs/api/type-aliases/LavalinkPlugin_LavaSrc_SourceNames.md new file mode 100644 index 0000000..1eef786 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/LavalinkPlugin_LavaSrc_SourceNames.md @@ -0,0 +1,21 @@ +--- +editUrl: false +next: true +prev: true +title: "LavalinkPlugin_LavaSrc_SourceNames" +--- + +```ts +type LavalinkPlugin_LavaSrc_SourceNames: + | "deezer" + | "spotify" + | "applemusic" + | "yandexmusic" + | "flowery-tts"; +``` + +Source Names provided by lava src plugin + +## Defined in + +[src/structures/Types/Track.ts:8](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L8) diff --git a/docs/src/content/docs/api/type-aliases/LavalinkSearchPlatform.md b/docs/src/content/docs/api/type-aliases/LavalinkSearchPlatform.md new file mode 100644 index 0000000..88dedd8 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/LavalinkSearchPlatform.md @@ -0,0 +1,22 @@ +--- +editUrl: false +next: true +prev: true +title: "LavalinkSearchPlatform" +--- + +```ts +type LavalinkSearchPlatform: + | "ytsearch" + | "ytmsearch" + | "scsearch" + | "bcsearch" + | LavaSrcSearchPlatform + | DuncteSearchPlatform + | JioSaavnSearchPlatform + | LavalinkClientSearchPlatform; +``` + +## Defined in + +[src/structures/Types/Utils.ts:38](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L38) diff --git a/docs/src/content/docs/api/type-aliases/LavalinkSourceNames.md b/docs/src/content/docs/api/type-aliases/LavalinkSourceNames.md new file mode 100644 index 0000000..3f8cc84 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/LavalinkSourceNames.md @@ -0,0 +1,21 @@ +--- +editUrl: false +next: true +prev: true +title: "LavalinkSourceNames" +--- + +```ts +type LavalinkSourceNames: + | "youtube" + | "youtubemusic" + | "soundcloud" + | "bandcamp" + | "twitch"; +``` + +Sourcenames provided by lavalink server + +## Defined in + +[src/structures/Types/Track.ts:6](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L6) diff --git a/docs/src/content/docs/api/type-aliases/LoadTypes.md b/docs/src/content/docs/api/type-aliases/LoadTypes.md new file mode 100644 index 0000000..de20c78 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/LoadTypes.md @@ -0,0 +1,19 @@ +--- +editUrl: false +next: true +prev: true +title: "LoadTypes" +--- + +```ts +type LoadTypes: + | "track" + | "playlist" + | "search" + | "error" + | "empty"; +``` + +## Defined in + +[src/structures/Types/Utils.ts:326](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L326) diff --git a/docs/src/content/docs/api/type-aliases/LyricsEvent.md b/docs/src/content/docs/api/type-aliases/LyricsEvent.md new file mode 100644 index 0000000..8dfb775 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/LyricsEvent.md @@ -0,0 +1,16 @@ +--- +editUrl: false +next: true +prev: true +title: "LyricsEvent" +--- + +```ts +type LyricsEvent: LyricsFoundEvent | LyricsNotFoundEvent | LyricsLineEvent; +``` + +Types & Events for Lyrics plugin from Lavalink: https://github.com/topi314/LavaLyrics + +## Defined in + +[src/structures/Types/Utils.ts:265](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L265) diff --git a/docs/src/content/docs/api/type-aliases/LyricsEventType.md b/docs/src/content/docs/api/type-aliases/LyricsEventType.md new file mode 100644 index 0000000..3f52ebd --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/LyricsEventType.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "LyricsEventType" +--- + +```ts +type LyricsEventType: "LyricsFoundEvent" | "LyricsNotFoundEvent" | "LyricsLineEvent"; +``` + +## Defined in + +[src/structures/Types/Utils.ts:267](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L267) diff --git a/docs/src/content/docs/api/type-aliases/ModifyRequest.md b/docs/src/content/docs/api/type-aliases/ModifyRequest.md new file mode 100644 index 0000000..f304194 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/ModifyRequest.md @@ -0,0 +1,26 @@ +--- +editUrl: false +next: true +prev: true +title: "ModifyRequest" +--- + +```ts +type ModifyRequest: (options: RequestInit & object) => void; +``` + +Ability to manipulate fetch requests + +## Parameters + +| Parameter | Type | +| ------ | ------ | +| `options` | `RequestInit` & `object` | + +## Returns + +`void` + +## Defined in + +[src/structures/Types/Node.ts:8](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L8) diff --git a/docs/src/content/docs/api/type-aliases/Opaque.md b/docs/src/content/docs/api/type-aliases/Opaque.md new file mode 100644 index 0000000..716d9f0 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/Opaque.md @@ -0,0 +1,29 @@ +--- +editUrl: false +next: true +prev: true +title: "Opaque" +--- + +```ts +type Opaque: T & object; +``` + +Helper for generating Opaque types. + +## Type declaration + +| Name | Type | Defined in | +| ------ | ------ | ------ | +| `__opaque__` | `K` | [src/structures/Types/Utils.ts:9](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L9) | + +## Type Parameters + +| Type Parameter | +| ------ | +| `T` | +| `K` | + +## Defined in + +[src/structures/Types/Utils.ts:9](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L9) diff --git a/docs/src/content/docs/api/type-aliases/PlayerEventType.md b/docs/src/content/docs/api/type-aliases/PlayerEventType.md new file mode 100644 index 0000000..3bae09b --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/PlayerEventType.md @@ -0,0 +1,21 @@ +--- +editUrl: false +next: true +prev: true +title: "PlayerEventType" +--- + +```ts +type PlayerEventType: + | "TrackStartEvent" + | "TrackEndEvent" + | "TrackExceptionEvent" + | "TrackStuckEvent" + | "WebSocketClosedEvent" + | SponsorBlockSegmentEventType + | LyricsEventType; +``` + +## Defined in + +[src/structures/Types/Utils.ts:340](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L340) diff --git a/docs/src/content/docs/api/type-aliases/PlayerEvents.md b/docs/src/content/docs/api/type-aliases/PlayerEvents.md new file mode 100644 index 0000000..74584b1 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/PlayerEvents.md @@ -0,0 +1,21 @@ +--- +editUrl: false +next: true +prev: true +title: "PlayerEvents" +--- + +```ts +type PlayerEvents: + | TrackStartEvent + | TrackEndEvent + | TrackStuckEvent + | TrackExceptionEvent + | WebSocketClosedEvent + | SponsorBlockSegmentEvents + | LyricsEvent; +``` + +## Defined in + +[src/structures/Types/Utils.ts:143](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L143) diff --git a/docs/src/content/docs/api/type-aliases/RepeatMode.md b/docs/src/content/docs/api/type-aliases/RepeatMode.md new file mode 100644 index 0000000..73f6863 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/RepeatMode.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "RepeatMode" +--- + +```ts +type RepeatMode: "queue" | "track" | "off"; +``` + +## Defined in + +[src/structures/Types/Player.ts:54](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L54) diff --git a/docs/src/content/docs/api/type-aliases/RoutePlannerTypes.md b/docs/src/content/docs/api/type-aliases/RoutePlannerTypes.md new file mode 100644 index 0000000..b081db5 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/RoutePlannerTypes.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "RoutePlannerTypes" +--- + +```ts +type RoutePlannerTypes: "RotatingIpRoutePlanner" | "NanoIpRoutePlanner" | "RotatingNanoIpRoutePlanner" | "BalancingIpRoutePlanner"; +``` + +## Defined in + +[src/structures/Types/Utils.ts:392](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L392) diff --git a/docs/src/content/docs/api/type-aliases/SearchPlatform.md b/docs/src/content/docs/api/type-aliases/SearchPlatform.md new file mode 100644 index 0000000..c0f4ce2 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/SearchPlatform.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "SearchPlatform" +--- + +```ts +type SearchPlatform: LavalinkSearchPlatform | ClientSearchPlatform; +``` + +## Defined in + +[src/structures/Types/Utils.ts:60](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L60) diff --git a/docs/src/content/docs/api/type-aliases/SearchQuery.md b/docs/src/content/docs/api/type-aliases/SearchQuery.md new file mode 100644 index 0000000..df98a5a --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/SearchQuery.md @@ -0,0 +1,16 @@ +--- +editUrl: false +next: true +prev: true +title: "SearchQuery" +--- + +```ts +type SearchQuery: object | string; +``` + +SearchQuery Object for raw lavalink requests + +## Defined in + +[src/structures/Types/Utils.ts:569](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L569) diff --git a/docs/src/content/docs/api/type-aliases/Severity.md b/docs/src/content/docs/api/type-aliases/Severity.md new file mode 100644 index 0000000..50e429c --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/Severity.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "Severity" +--- + +```ts +type Severity: "COMMON" | "SUSPICIOUS" | "FAULT"; +``` + +## Defined in + +[src/structures/Types/Utils.ts:150](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L150) diff --git a/docs/src/content/docs/api/type-aliases/SourceNames.md b/docs/src/content/docs/api/type-aliases/SourceNames.md new file mode 100644 index 0000000..d24aaf0 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/SourceNames.md @@ -0,0 +1,16 @@ +--- +editUrl: false +next: true +prev: true +title: "SourceNames" +--- + +```ts +type SourceNames: LavalinkSourceNames | LavalinkPlugin_LavaSrc_SourceNames; +``` + +The SourceNames provided by lavalink + +## Defined in + +[src/structures/Types/Track.ts:10](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Track.ts#L10) diff --git a/docs/src/content/docs/api/type-aliases/SourcesRegex.md b/docs/src/content/docs/api/type-aliases/SourcesRegex.md new file mode 100644 index 0000000..d4c0fb7 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/SourcesRegex.md @@ -0,0 +1,50 @@ +--- +editUrl: false +next: true +prev: true +title: "SourcesRegex" +--- + +```ts +type SourcesRegex: + | "YoutubeRegex" + | "YoutubeMusicRegex" + | "SoundCloudRegex" + | "SoundCloudMobileRegex" + | "DeezerTrackRegex" + | "DeezerArtistRegex" + | "DeezerEpisodeRegex" + | "DeezerMixesRegex" + | "DeezerPageLinkRegex" + | "DeezerPlaylistRegex" + | "DeezerAlbumRegex" + | "AllDeezerRegex" + | "AllDeezerRegexWithoutPageLink" + | "SpotifySongRegex" + | "SpotifyPlaylistRegex" + | "SpotifyArtistRegex" + | "SpotifyEpisodeRegex" + | "SpotifyShowRegex" + | "SpotifyAlbumRegex" + | "AllSpotifyRegex" + | "mp3Url" + | "m3uUrl" + | "m3u8Url" + | "mp4Url" + | "m4aUrl" + | "wavUrl" + | "aacpUrl" + | "tiktok" + | "mixcloud" + | "musicYandex" + | "radiohost" + | "bandcamp" + | "jiosaavn" + | "appleMusic" + | "TwitchTv" + | "vimeo"; +``` + +## Defined in + +[src/structures/Types/Utils.ts:62](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L62) diff --git a/docs/src/content/docs/api/type-aliases/SponsorBlockSegment.md b/docs/src/content/docs/api/type-aliases/SponsorBlockSegment.md new file mode 100644 index 0000000..46317af --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/SponsorBlockSegment.md @@ -0,0 +1,22 @@ +--- +editUrl: false +next: true +prev: true +title: "SponsorBlockSegment" +--- + +```ts +type SponsorBlockSegment: + | "sponsor" + | "selfpromo" + | "interaction" + | "intro" + | "outro" + | "preview" + | "music_offtopic" + | "filler"; +``` + +## Defined in + +[src/structures/Types/Node.ts:10](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Node.ts#L10) diff --git a/docs/src/content/docs/api/type-aliases/SponsorBlockSegmentEventType.md b/docs/src/content/docs/api/type-aliases/SponsorBlockSegmentEventType.md new file mode 100644 index 0000000..19adc0b --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/SponsorBlockSegmentEventType.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "SponsorBlockSegmentEventType" +--- + +```ts +type SponsorBlockSegmentEventType: "SegmentSkipped" | "SegmentsLoaded" | "ChaptersLoaded" | "ChapterStarted"; +``` + +## Defined in + +[src/structures/Types/Utils.ts:204](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L204) diff --git a/docs/src/content/docs/api/type-aliases/SponsorBlockSegmentEvents.md b/docs/src/content/docs/api/type-aliases/SponsorBlockSegmentEvents.md new file mode 100644 index 0000000..c5c1b79 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/SponsorBlockSegmentEvents.md @@ -0,0 +1,16 @@ +--- +editUrl: false +next: true +prev: true +title: "SponsorBlockSegmentEvents" +--- + +```ts +type SponsorBlockSegmentEvents: SponsorBlockSegmentSkipped | SponsorBlockSegmentsLoaded | SponsorBlockChapterStarted | SponsorBlockChaptersLoaded; +``` + +Types & Events for Sponsorblock-plugin from Lavalink: https://github.com/topi314/Sponsorblock-Plugin#segmentsloaded + +## Defined in + +[src/structures/Types/Utils.ts:202](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L202) diff --git a/docs/src/content/docs/api/type-aliases/State.md b/docs/src/content/docs/api/type-aliases/State.md new file mode 100644 index 0000000..c2cf420 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/State.md @@ -0,0 +1,19 @@ +--- +editUrl: false +next: true +prev: true +title: "State" +--- + +```ts +type State: + | "CONNECTED" + | "CONNECTING" + | "DISCONNECTED" + | "DISCONNECTING" + | "DESTROYING"; +``` + +## Defined in + +[src/structures/Types/Utils.ts:333](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L333) diff --git a/docs/src/content/docs/api/type-aliases/TrackEndReason.md b/docs/src/content/docs/api/type-aliases/TrackEndReason.md new file mode 100644 index 0000000..adb9909 --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/TrackEndReason.md @@ -0,0 +1,19 @@ +--- +editUrl: false +next: true +prev: true +title: "TrackEndReason" +--- + +```ts +type TrackEndReason: + | "finished" + | "loadFailed" + | "stopped" + | "replaced" + | "cleanup"; +``` + +## Defined in + +[src/structures/Types/Utils.ts:347](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Utils.ts#L347) diff --git a/docs/src/content/docs/api/type-aliases/anyObject.md b/docs/src/content/docs/api/type-aliases/anyObject.md new file mode 100644 index 0000000..ddccf4d --- /dev/null +++ b/docs/src/content/docs/api/type-aliases/anyObject.md @@ -0,0 +1,18 @@ +--- +editUrl: false +next: true +prev: true +title: "anyObject" +--- + +```ts +type anyObject: object; +``` + +## Index Signature + + \[`key`: `string` \| `number`\]: `string` \| `number` \| `null` \| [`anyObject`](/api/type-aliases/anyobject/) + +## Defined in + +[src/structures/Types/Player.ts:78](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Types/Player.ts#L78) diff --git a/docs/src/content/docs/api/variables/DefaultSources.md b/docs/src/content/docs/api/variables/DefaultSources.md new file mode 100644 index 0000000..f5931c1 --- /dev/null +++ b/docs/src/content/docs/api/variables/DefaultSources.md @@ -0,0 +1,16 @@ +--- +editUrl: false +next: true +prev: true +title: "DefaultSources" +--- + +```ts +const DefaultSources: Record; +``` + +Default Sources Record, to allow source parsing with multiple inputs. + +## Defined in + +[src/structures/LavalinkManagerStatics.ts:6](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManagerStatics.ts#L6) diff --git a/docs/src/content/docs/api/variables/EQList.md b/docs/src/content/docs/api/variables/EQList.md new file mode 100644 index 0000000..ff27725 --- /dev/null +++ b/docs/src/content/docs/api/variables/EQList.md @@ -0,0 +1,30 @@ +--- +editUrl: false +next: true +prev: true +title: "EQList" +--- + +```ts +const EQList: object; +``` + +## Type declaration + +| Name | Type | Description | Defined in | +| ------ | ------ | ------ | ------ | +| `BassboostEarrape` | [`EQBand`](/api/interfaces/eqband/)[] | A Bassboost Equalizer, so high it distorts the audio | [src/structures/Constants.ts:109](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L109) | +| `BassboostHigh` | [`EQBand`](/api/interfaces/eqband/)[] | A High and decent Bassboost Equalizer | [src/structures/Constants.ts:127](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L127) | +| `BassboostLow` | [`EQBand`](/api/interfaces/eqband/)[] | A slight Bassboost Equalizer | [src/structures/Constants.ts:163](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L163) | +| `BassboostMedium` | [`EQBand`](/api/interfaces/eqband/)[] | A decent Bassboost Equalizer | [src/structures/Constants.ts:145](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L145) | +| `BetterMusic` | [`EQBand`](/api/interfaces/eqband/)[] | Makes the Music slightly "better" | [src/structures/Constants.ts:181](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L181) | +| `Classic` | [`EQBand`](/api/interfaces/eqband/)[] | Makes the Music sound like Classic music / sound Classic music better | [src/structures/Constants.ts:217](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L217) | +| `Electronic` | [`EQBand`](/api/interfaces/eqband/)[] | Makes the Music sound like Electronic music / sound Electronic music better | [src/structures/Constants.ts:252](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L252) | +| `FullSound` | [`EQBand`](/api/interfaces/eqband/)[] | Boosts all Bands slightly for louder and fuller sound | [src/structures/Constants.ts:270](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L270) | +| `Gaming` | [`EQBand`](/api/interfaces/eqband/)[] | Boosts basses + lower highs for a pro gaming sound | [src/structures/Constants.ts:288](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L288) | +| `Pop` | [`EQBand`](/api/interfaces/eqband/)[] | Makes the Music sound like Pop music / sound Pop music better | [src/structures/Constants.ts:235](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L235) | +| `Rock` | [`EQBand`](/api/interfaces/eqband/)[] | Makes the Music sound like rock music / sound rock music better | [src/structures/Constants.ts:199](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L199) | + +## Defined in + +[src/structures/Constants.ts:107](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L107) diff --git a/docs/src/content/docs/api/variables/LavalinkPlugins.md b/docs/src/content/docs/api/variables/LavalinkPlugins.md new file mode 100644 index 0000000..e5fc20d --- /dev/null +++ b/docs/src/content/docs/api/variables/LavalinkPlugins.md @@ -0,0 +1,28 @@ +--- +editUrl: false +next: true +prev: true +title: "LavalinkPlugins" +--- + +```ts +const LavalinkPlugins: object; +``` + +Lavalink Plugins definiton + +## Type declaration + +| Name | Type | Default value | Defined in | +| ------ | ------ | ------ | ------ | +| `DuncteBot_Plugin` | `string` | "DuncteBot-plugin" | [src/structures/LavalinkManagerStatics.ts:79](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManagerStatics.ts#L79) | +| `GoogleCloudTTS` | `string` | "tts-plugin" | [src/structures/LavalinkManagerStatics.ts:81](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManagerStatics.ts#L81) | +| `JavaTimedLyricsPlugin` | `string` | "java-lyrics-plugin" | [src/structures/LavalinkManagerStatics.ts:85](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManagerStatics.ts#L85) | +| `Jiosaavn_Plugin` | `string` | "jiosaavn-plugin" | [src/structures/LavalinkManagerStatics.ts:83](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManagerStatics.ts#L83) | +| `LavalinkFilterPlugin` | `string` | "lavalink-filter-plugin" | [src/structures/LavalinkManagerStatics.ts:84](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManagerStatics.ts#L84) | +| `LavaSearch` | `string` | "lavasearch-plugin" | [src/structures/LavalinkManagerStatics.ts:82](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManagerStatics.ts#L82) | +| `LavaSrc` | `string` | "lavasrc-plugin" | [src/structures/LavalinkManagerStatics.ts:80](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManagerStatics.ts#L80) | + +## Defined in + +[src/structures/LavalinkManagerStatics.ts:78](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManagerStatics.ts#L78) diff --git a/docs/src/content/docs/api/variables/NodeSymbol.md b/docs/src/content/docs/api/variables/NodeSymbol.md new file mode 100644 index 0000000..7e436c9 --- /dev/null +++ b/docs/src/content/docs/api/variables/NodeSymbol.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "NodeSymbol" +--- + +```ts +const NodeSymbol: typeof NodeSymbol; +``` + +## Defined in + +[src/structures/Utils.ts:22](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L22) diff --git a/docs/src/content/docs/api/variables/QueueSymbol.md b/docs/src/content/docs/api/variables/QueueSymbol.md new file mode 100644 index 0000000..eb109eb --- /dev/null +++ b/docs/src/content/docs/api/variables/QueueSymbol.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "QueueSymbol" +--- + +```ts +const QueueSymbol: typeof QueueSymbol; +``` + +## Defined in + +[src/structures/Utils.ts:21](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L21) diff --git a/docs/src/content/docs/api/variables/SourceLinksRegexes.md b/docs/src/content/docs/api/variables/SourceLinksRegexes.md new file mode 100644 index 0000000..8cf6458 --- /dev/null +++ b/docs/src/content/docs/api/variables/SourceLinksRegexes.md @@ -0,0 +1,16 @@ +--- +editUrl: false +next: true +prev: true +title: "SourceLinksRegexes" +--- + +```ts +const SourceLinksRegexes: Record; +``` + +Lavalink Sources regexes for url validations + +## Defined in + +[src/structures/LavalinkManagerStatics.ts:89](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/LavalinkManagerStatics.ts#L89) diff --git a/docs/src/content/docs/api/variables/TrackSymbol.md b/docs/src/content/docs/api/variables/TrackSymbol.md new file mode 100644 index 0000000..2eecd47 --- /dev/null +++ b/docs/src/content/docs/api/variables/TrackSymbol.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "TrackSymbol" +--- + +```ts +const TrackSymbol: typeof TrackSymbol; +``` + +## Defined in + +[src/structures/Utils.ts:19](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L19) diff --git a/docs/src/content/docs/api/variables/UnresolvedTrackSymbol.md b/docs/src/content/docs/api/variables/UnresolvedTrackSymbol.md new file mode 100644 index 0000000..0f6ad09 --- /dev/null +++ b/docs/src/content/docs/api/variables/UnresolvedTrackSymbol.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "UnresolvedTrackSymbol" +--- + +```ts +const UnresolvedTrackSymbol: typeof UnresolvedTrackSymbol; +``` + +## Defined in + +[src/structures/Utils.ts:20](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Utils.ts#L20) diff --git a/docs/src/content/docs/api/variables/audioOutputsData.md b/docs/src/content/docs/api/variables/audioOutputsData.md new file mode 100644 index 0000000..ac72c9e --- /dev/null +++ b/docs/src/content/docs/api/variables/audioOutputsData.md @@ -0,0 +1,16 @@ +--- +editUrl: false +next: true +prev: true +title: "audioOutputsData" +--- + +```ts +const audioOutputsData: Record; +``` + +The audio Outputs Data map declaration + +## Defined in + +[src/structures/Constants.ts:79](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L79) diff --git a/docs/src/content/docs/api/variables/validSponsorBlocks.md b/docs/src/content/docs/api/variables/validSponsorBlocks.md new file mode 100644 index 0000000..51f2d0d --- /dev/null +++ b/docs/src/content/docs/api/variables/validSponsorBlocks.md @@ -0,0 +1,14 @@ +--- +editUrl: false +next: true +prev: true +title: "validSponsorBlocks" +--- + +```ts +const validSponsorBlocks: string[]; +``` + +## Defined in + +[src/structures/Constants.ts:74](https://github.com/appujet/lavalink-client/blob/4880e032861893b27e80b7c2d6c36639afbb3479/src/structures/Constants.ts#L74) diff --git a/docs/src/content/docs/extra/manager-events.mdx b/docs/src/content/docs/extra/manager-events.mdx new file mode 100644 index 0000000..dea06e4 --- /dev/null +++ b/docs/src/content/docs/extra/manager-events.mdx @@ -0,0 +1,62 @@ +--- +editUrl: false +next: true +prev: true +title: Manager Events +description: "All Events of the Lavalink Manager." +--- + +## Player Related Logs + +> *Monitor player activities and changes:* + +- **`playerCreate`** ➑️ `(player) => {}` + *Triggered when a player is created.* + +- **`playerDestroy`** ➑️ `(player, reason) => {}` + *Triggered when a player is destroyed. Reason for destruction provided.* + +- **`playerDisconnect`** ➑️ `(player, voiceChannelId) => {}` + *Triggered when a player disconnects from a voice channel.* + +- **`playerMove`** ➑️ `(player, oldChannelId, newChannelId) => {}` + *Triggered when a player moves from one channel to another.* + *Updating the voice channel is handled automatically by the client.* + +- **`playerSocketClosed`** ➑️ `(player, payload) => {}` + *Triggered when the player’s socket is closed.* + +## Track / Manager Related Logs + +> *Handle track events and manage playback:* + +- **`trackStart`** ➑️ `(player, track, payload) => {}` + *Triggered when a track starts playing.* + +- **`trackStuck`** ➑️ `(player, track, payload) => {}` + *Triggered when a track gets stuck (e.g., playback halts).* + +- **`trackError`** ➑️ `(player, track, payload) => {}` + *Triggered when an error occurs during track playback.* + +- **`trackEnd`** ➑️ `(player, track, payload) => {}` + *Triggered when a track finishes playing.* + +- **`queueEnd`** ➑️ `(player, track, payload) => {}` + *Triggered when the queue ends.* + +- **`playerUpdate`** ➑️ `(player) => {}` + *Triggered when the player is updated.* + +## Examples + +```js +client.lavalink.on("create", (node, payload) => { + console.log(`The Lavalink Node #${node.id} connected`); +}); + +// For all node-based errors: +client.lavalink.on("error", (node, error, payload) => { + console.error(`The Lavalink Node #${node.id} errored: `, error); + console.error(`Error Payload: `, payload); +}); diff --git a/docs/src/content/docs/extra/node-events.mdx b/docs/src/content/docs/extra/node-events.mdx new file mode 100644 index 0000000..2c79a72 --- /dev/null +++ b/docs/src/content/docs/extra/node-events.mdx @@ -0,0 +1,49 @@ +--- +editUrl: false +next: true +prev: true +title: Node Events +description: "All Events of the Lavalink Node." +--- + +## Node-Manager Events + +> *Monitor and manage Lavalink nodes:* + +- **`raw`** ➑️ `(node, payload) => {}` + *Triggered when raw data is received from the node.* + +- **`disconnect`** ➑️ `(node, reason) => {}` + *Triggered when the node disconnects. Reason for disconnection is provided.* + +- **`connect`** ➑️ `(node) => {}` + *Triggered when the node successfully connects.* + +- **`reconnecting`** ➑️ `(node) => {}` + *Triggered when the node is attempting to reconnect.* + +- **`create`** ➑️ `(node) => {}` + *Triggered when a new node is created.* + +- **`destroy`** ➑️ `(node) => {}` + *Triggered when a node is destroyed.* + +- **`error`** ➑️ `(node, error, payload) => {}` + *Triggered when an error occurs with the node.* + +- **`resumed`** ➑️ `(node, payload, players) => {}` + *Triggered when the node resumes.* + *Resuming needs to be handled manually; ensure to add the players to the manager.* + +## Example: Listening to Node Events + +```js +client.lavalink.nodeManager.on("create", (node, payload) => { + console.log(`The Lavalink Node #${node.id} connected`); +}); + +// For all node-based errors: +client.lavalink.nodeManager.on("error", (node, error, payload) => { + console.error(`The Lavalink Node #${node.id} errored: `, error); + console.error(`Error Payload: `, payload); +}); diff --git a/docs/src/content/docs/home/configuration.mdx b/docs/src/content/docs/home/configuration.mdx new file mode 100644 index 0000000..927ccce --- /dev/null +++ b/docs/src/content/docs/home/configuration.mdx @@ -0,0 +1,153 @@ +--- +editUrl: false +next: true +prev: true +title: Configuration +description: Learn how to use the lavalink@v4 Client. +--- + + +```ts +import { LavalinkManager, QueueChangesWatcher, QueueStoreManager } from "lavalink-client"; +import { RedisClientType } from "redis"; // example for custom queue store +import { Client, GatewayIntentBits } from "discord.js"; // example for a discord bot + +// you might want to extend the types of the client, to bind lavalink to it. +const client = new Client({ + intents: [ + GatewayIntentBits.Guilds, + GatewayIntentBits.GuildVoiceStates, + ] +}); + +const previouslyUsedSessions = new Map(); //nodeManager.on("connect", node => previouslyUsedSessions.set(node.id, node.sessionId)) + +client.lavalink = new LavalinkManager({ + nodes: [ + { + authorization: "localhoist", + host: "localhost", + port: 2333, + id: "testnode", + // get the previously used session, to restart with "resuming" enabled + sessionId: previouslyUsedSessions.get("testnode"), + requestSignalTimeoutMS: 3000, + closeOnError: true, + heartBeatInterval: 30_000, + enablePingOnStatsCheck: true, + retryDelay: 10e3, + secure: false, + retryAmount: 5, + } + ], + sendToShard: (guildId, payload) => client.guilds.cache.get(guildId)?.shard?.send(payload), + autoSkip: true, + client: { // client: client.user + id: envConfig.clientId, // REQUIRED! (at least after the .init) + username: "TESTBOT", + }, + autoSkipOnResolveError: true, // skip song, if resolving an unresolved song fails + emitNewSongsOnly: true, // don't emit "looping songs" + playerOptions: { + // These are the default prevention methods + maxErrorsPerTime: { + threshold: 10_000, + maxAmount: 3, + }, + // only allow an autoplay function to execute, if the previous function was longer ago than this number. + minAutoPlayMs: 10_000, + + applyVolumeAsFilter: false, + clientBasedPositionUpdateInterval: 50, // in ms to up-calc player.position + defaultSearchPlatform: "ytmsearch", + volumeDecrementer: 0.75, // on client 100% == on lavalink 75% + requesterTransformer: requesterTransformer, + onDisconnect: { + autoReconnect: true, // automatically attempts a reconnect, if the bot disconnects from the voice channel, if it fails, it get's destroyed + destroyPlayer: false // overrides autoReconnect and directly destroys the player if the bot disconnects from the vc + }, + onEmptyQueue: { + destroyAfterMs: 30_000, // 0 === instantly destroy | don't provide the option, to don't destroy the player + autoPlayFunction: autoPlayFunction, + }, + useUnresolvedData: true, + }, + queueOptions: { + maxPreviousTracks: 10, + // only needed if you want and need external storage, don't provide if you don't need to + queueStore: new myCustomStore(client.redis), // client.redis = new redis() + // only needed, if you want to watch changes in the queue via a custom class, + queueChangesWatcher: new myCustomWatcher(client) + }, + linksAllowed: true, + // example: don't allow p*rn / youtube links., you can also use a regex pattern if you want. + // linksBlacklist: ["porn", "youtube.com", "youtu.be"], + linksBlacklist: [], + linksWhitelist: [], + advancedOptions: { + enableDebugEvents: true, + maxFilterFixDuration: 600_000, // only allow instafixfilterupdate for tracks sub 10mins + debugOptions: { + noAudio: false, + playerDestroy: { + dontThrowError: false, + debugLog: false, + }, + logCustomSearches: false, + } + } +}); + + +client.on("raw", d => client.lavalink.sendRawData(d)); // send raw data to lavalink-client to handle stuff + +client.on("ready", () => { + client.lavalink.init(client.user); // init lavalink +}); + +// for the custom queue Store create a redis instance +client.redis = createClient({ url: "redis://localhost:6379", password: "securepass" }); +client.redis.connect(); + + +// Custom external queue Store +export class myCustomStore implements QueueStoreManager { + private redis:RedisClientType; + constructor(redisClient:RedisClientType) { + this.redis = redisClient; + } + async get(guildId): Promise { + return await this.redis.get(this.id(guildId)); + } + async set(guildId, stringifiedQueueData): Promise { + return await this.redis.set(this.id(guildId), stringifiedQueueData); + } + async delete(guildId): Promise { + return await this.redis.del(this.id(guildId)); + } + async parse(stringifiedQueueData): Promise> { + return JSON.parse(stringifiedQueueData); + } + async stringify(parsedQueueData): Promise { + return JSON.stringify(parsedQueueData); + } + private id(guildId) { + return `lavalinkqueue_${guildId}`; // transform the id to your belikings + } +} + +// Custom Queue Watcher Functions +export class myCustomWatcher implements QueueChangesWatcher { + constructor() { + } + shuffled(guildId, oldStoredQueue, newStoredQueue) { + console.log(`${this.client.guilds.cache.get(guildId)?.name || guildId}: Queue got shuffled`) + } + tracksAdd(guildId, tracks, position, oldStoredQueue, newStoredQueue) { + console.log(`${this.client.guilds.cache.get(guildId)?.name || guildId}: ${tracks.length} Tracks got added into the Queue at position #${position}`); + } + tracksRemoved(guildId, tracks, position, oldStoredQueue, newStoredQueue) { + console.log(`${this.client.guilds.cache.get(guildId)?.name || guildId}: ${tracks.length} Tracks got removed from the Queue at position #${position}`); + } +} +``` \ No newline at end of file diff --git a/docs/src/content/docs/home/example.mdx b/docs/src/content/docs/home/example.mdx new file mode 100644 index 0000000..1a42f90 --- /dev/null +++ b/docs/src/content/docs/home/example.mdx @@ -0,0 +1,200 @@ +--- +title: Example Guide +description: Learn how to use the lavalink@v4 Client. +--- + + + +```ts +import { LavalinkManager } from "lavalink-client"; +import { Client, GatewayIntentBits } from "discord.js"; // example for a discord bot + +// you might want to extend the types of the client, to bind lavalink to it. +const client = new Client({ + intents: [ + GatewayIntentBits.Guilds, + GatewayIntentBits.GuildVoiceStates, + ] +}); + +// create instance +client.lavalink = new LavalinkManager({ + nodes: [ + { + authorization: "youshallnotpass", + host: "localhost", + port: 2333, + id: "testnode", + } + ], + sendToShard: (guildId, payload) => client.guilds.cache.get(guildId)?.shard?.send(payload), + autoSkip: true, + client: { + id: envConfig.clientId, + username: "TESTBOT", + }, +}); + +client.on("raw", d => client.lavalink.sendRawData(d)); // send raw data to lavalink-client to handle stuff + +client.on("ready", () => { + client.lavalink.init(client.user); // init lavalink +}); + +``` + +# All Events: + +## On **Lavalink-Manager**: +> *Player related logs* +- `playerCreate` ➑️ `(player) => {}` +- `playerDestroy` ➑️ `(player, reason) => {}` +- `playerDisconnect` ➑️ `(player, voiceChannelId) => {}` +- `playerMove` ➑️ `(player, oldChannelId, newChannelId) => {}` + - Updating the voice channel is handled by the client automatically +- `playerSocketClosed` ➑️ `(player, payload) => {}` + +> *Track / Manager related logs* +- `trackStart` ➑️ `(player, track, payload) => {}` +- `trackStuck` ➑️ `(player, track, payload) => {}` +- `trackError` ➑️ `(player, track, payload) => {}` +- `trackEnd` ➑️ `(player, track, payload) => {}` +- `queueEnd` ➑️ `(player, track, payload) => {}` +- `playerUpdate` ➑️ `(player) => {}` + +```js +client.lavalink.on("create", (node, payload) => { + console.log(`The Lavalink Node #${node.id} connected`); +}); +// for all node based errors: +client.lavalink.on("error", (node, error, payload) => { + console.error(`The Lavalink Node #${node.id} errored: `, error); + console.error(`Error-Payload: `, payload) +}); +``` + +## On **Node-Manager**: +- `raw` ➑️ `(node, payload) => {}` +- `disconnect` ➑️ `(node, reason) => {}` +- `connect` ➑️ `(node) => {}` +- `reconnecting` ➑️ `(node) => {}` +- `create` ➑️ `(node) => {}` +- `destroy` ➑️ `(node) => {}` +- `error` ➑️ `(node, error, payload) => {}` +- `resumed` ➑️ `(node, payload, players) => {}` + - Resuming needs to be handled manually by you *(aka add the players to the manager)* +- e.g. of listening to node events: +```ts +client.lavalink.nodeManager.on("create", (node, payload) => { + console.log(`The Lavalink Node #${node.id} connected`); +}); +// for all node based errors: +client.lavalink.nodeManager.on("error", (node, error, payload) => { + console.error(`The Lavalink Node #${node.id} errored: `, error); + console.error(`Error-Payload: `, payload) +}); +``` + +## How to log queue logs? +> When creating the manager, add the option: `queueOptions.queueChangesWatcher: new myCustomWatcher(botClient)` +> E.g: +```ts +import { QueueChangesWatcher, LavalinkManager } from "lavalink-client"; + +class myCustomWatcher implements QueueChangesWatcher { + constructor(client) { + this.client = client; + } + shuffled(guildId, oldStoredQueue, newStoredQueue) { + console.log(`${this.client.guilds.cache.get(guildId)?.name || guildId}: Queue got shuffled`) + } + tracksAdd(guildId, tracks, position, oldStoredQueue, newStoredQueue) { + console.log(`${this.client.guilds.cache.get(guildId)?.name || guildId}: ${tracks.length} Tracks got added into the Queue at position #${position}`); + } + tracksRemoved(guildId, tracks, position, oldStoredQueue, newStoredQueue) { + console.log(`${this.client.guilds.cache.get(guildId)?.name || guildId}: ${tracks.length} Tracks got removed from the Queue at position #${position}`); + } +} + +client.lavalink = new LavalinkManager({ + // ... other options + queueOptions: { + queueChangesWatcher: new myCustomWatcher(client) + } +}) +``` + +## How to do resuming + +1. You need to enable resuming on a __connected__ Lavalink node : **` node.updateSession(true, 360e3) `** +2. The NodeManager#resumed event will emit when the node resumes, you retrieves all fetchedPlayers (fetched by the client), and thus all you need to do is re-create all player instances (and possibly the queues too) + - For that is the queuestore useful + - To save the playerData you can utilize smt like playerUpdate event. + +## Resuming full Example +Full code sample: can be found on the [Testbot in here](https://github.com/Tomato6966/lavalink-client/blob/main/testBot/Utils/handleResuming.ts) +```js +// but here is the schema: +client.lavalink.nodeManager.on("connect", (node) => node.updateSession(true, 360e3)); +client.lavalink.nodeManager.on("resumed", (node, payload, fetchedPlayers) => { + // create players: + for(const fetchedPlayer of fetchedPlayers) { + // fetchedPlayer is the live data from lavalink + // saved Player data is the config you should save in a database / file or smt + const savedPlayerData = await getSavedPlayerData(fetchedPlayer.guildId); + const player = client.lavalink.createPlayer({ + guildId: fetchedPlayer.guildId, + }); + // if lavalink says the bot got disconnected, we can skip the resuming, or force reconnect whatever you want!, here we choose to not do anything and thus delete the saved player data + if(!data.state.connected) { + console.log("skipping resuming player, because it already disconnected"); + await deletedSavedPlayerData(data.guildId); + continue; + } + // now you can create the player based on the live and saved data + const player = client.lavalink.createPlayer({ + guildId: data.guildId, + node: node.id, + // you need to update the volume of the player by the volume of lavalink which might got decremented by the volume decrementer + volume: client.lavalink.options.playerOptions?.volumeDecrementer + ? Math.round(data.volume / client.lavalink.options.playerOptions.volumeDecrementer) + : data.volume, + // all of the following options are needed to be provided by some sort of player saving + voiceChannelId: dataOfSaving.voiceChannelId, + textChannelId: dataOfSaving.textChannelId, + // all of the following options can either be saved too, or you can use pre-defined defaults + selfDeaf: dataOfSaving.options?.selfDeaf || true, + selfMute: dataOfSaving.options?.selfMute || false, + + applyVolumeAsFilter: dataOfSaving.options.applyVolumeAsFilter, + instaUpdateFiltersFix: dataOfSaving.options.instaUpdateFiltersFix, + vcRegion: dataOfSaving.options.vcRegion, + }); + + // player.voice = data.voice; + // normally just player.voice is enough, but if you restart the entire bot, you need to create a new connection, thus call player.connect(); + await player.connect(); + + player.filterManager.data = data.filters; // override the filters data + await player.queue.utils.sync(true, false); // get the queue data including the current track (for the requester) + // override the current track with the data from lavalink + if(data.track) player.queue.current = client.lavalink.utils.buildTrack(data.track, player.queue.current?.requester || client.user); + // override the position of the player + player.lastPosition = data.state.position; + player.lastPositionChange = Date.now(); + // you can also override the ping of the player, or wait about 30s till it's done automatically + player.ping.lavalink = data.state.ping; + // important to have skipping work correctly later + player.paused = data.paused; + player.playing = !data.paused && !!data.track; + // That's about it + } +}) +client.lavalink.on("playerUpdate", (oldPlayer, newPlayer) => { // automatically sync player data on updates. if you don'T want to save everything you can instead also just save the data on playerCreate + setSavedPlayerData(newPlayer.toJSON()); +}); +// delete the player again +client.lavalink.on("playerDestroy", (player) => { + deleteSavedPlayerData(player.guildId); +}) +``` diff --git a/docs/src/content/docs/home/features.mdx b/docs/src/content/docs/home/features.mdx new file mode 100644 index 0000000..42ed5e4 --- /dev/null +++ b/docs/src/content/docs/home/features.mdx @@ -0,0 +1,40 @@ +--- +title: "Features" +description: Easy, flexible and feature-rich lavalink@v4 Client. Both for Beginners and Proficients." +--- + +- πŸ’― Lavalink v4 Supported only (with Lavalink Plugins) + +- βœ… Player-Destroy Reasons like: + - Channel got deleted, Player got disconnected... + +- ✨ Choose able queue stores (maps, collections, redis, databases, ...) + - You can create your own queueStore, thus make it easy to sync queues accross multiple connections (e.g. dashboard-bot) + - Automated Queue Sync methods + - Automated unresolveable Tracks (save the queries as Partial Track Objects -> Fetch the tracks only once they are gonna play) + +- 😍 Included Filter & Equalizer Management + +- πŸ‘ Multiple Player Options *for easier use* + - onDisconnect -> Player Destroy / auto Reconnect + - onEmptyQueue -> Player Destroy / leave After x Time + - instaFixFilter -> seek the player after applying a filter, to instantly apply it's effect (only works for little-durational-songs) + - applyVolumeAsFilter -> instead of using lavalink.volume, it uses lavalink.filters.volume which is much different! + +- πŸ›‘οΈ Lavalink Validations + - It only let's you use the filters / plugins / sources, if Lavalink actually has it enabled + +- πŸ›‘οΈ Client Validations + - Allows you to whitelist links and even blacklist links / words / domain names, so that it doesn't allow requests you don't want! + - Checks almost all Lavalink Requests for out of bound errors, right before the request is made to prevent process breaking errors. + +- πŸ§‘β€πŸ’» Memory friendly and easy style + - Only the required data is displayed, and the store-way & types match Lavalink#IMPLEMENTATION.md + +- 😘 Automated Handlings + - Skips the songs, on TrackEnd, TrackStuck, TrackError, + - Destroys the player on channeldelete + - Pauses / resumes the player if it get's muted / unmuted (server-wide) [soon] + - ... + +- 😁 Much much more! diff --git a/docs/src/content/docs/home/installation.mdx b/docs/src/content/docs/home/installation.mdx new file mode 100644 index 0000000..97bd7d5 --- /dev/null +++ b/docs/src/content/docs/home/installation.mdx @@ -0,0 +1,24 @@ +--- +title: "lavalink-client" +description: Easy, flexible and feature-rich lavalink@v4 Client. Both for Beginners and Proficients." +--- + +import Version from '../../../components/version.astro' + + +### Install: πŸŽ‰ + +Latest stable Version: + + +```bash +npm install lavalink-client + +``` + +Dev Version: (Current): + +```bash +npm install tomato6966/lavalink-client + +``` diff --git a/docs/src/content/docs/index.mdx b/docs/src/content/docs/index.mdx new file mode 100644 index 0000000..ac3b6bb --- /dev/null +++ b/docs/src/content/docs/index.mdx @@ -0,0 +1,25 @@ +--- +title: Lavalink-Client +description: Easy, flexible and feature-rich lavalink@v4 Client. Both for Beginners and Proficients. +template: splash +hero: + tagline: Easy, flexible and feature-rich lavalink@v4 Client. Both for Beginners and Proficients. + image: + file: ../../assets/houston.webp + actions: + - text: Example Guide + link: /home/example/ + icon: right-arrow + - text: Read the docs + link: /home/installation + icon: external + variant: minimal +--- + +import { Card, CardGrid } from '@astrojs/starlight/components'; + +## Next steps + + + + diff --git a/docs/src/env.d.ts b/docs/src/env.d.ts new file mode 100644 index 0000000..acef35f --- /dev/null +++ b/docs/src/env.d.ts @@ -0,0 +1,2 @@ +/// +/// diff --git a/docs/tsconfig.json b/docs/tsconfig.json new file mode 100644 index 0000000..77da9dd --- /dev/null +++ b/docs/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "astro/tsconfigs/strict" +} \ No newline at end of file diff --git a/docs/types/Types_Filters.AudioOutputs.html b/docs/types/Types_Filters.AudioOutputs.html deleted file mode 100644 index dd68d71..0000000 --- a/docs/types/Types_Filters.AudioOutputs.html +++ /dev/null @@ -1,175 +0,0 @@ -AudioOutputs | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Node.LavalinkNodeIdentifier.html b/docs/types/Types_Node.LavalinkNodeIdentifier.html deleted file mode 100644 index 2317f89..0000000 --- a/docs/types/Types_Node.LavalinkNodeIdentifier.html +++ /dev/null @@ -1,174 +0,0 @@ -LavalinkNodeIdentifier | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Node.ModifyRequest.html b/docs/types/Types_Node.ModifyRequest.html deleted file mode 100644 index f28321b..0000000 --- a/docs/types/Types_Node.ModifyRequest.html +++ /dev/null @@ -1,175 +0,0 @@ -ModifyRequest | lavalink-client
ModifyRequest: ((options) => void)

Type declaration

    • (options): void
    • Ability to manipulate fetch requests

      -

      Parameters

      • options: RequestInit & {
        Β Β Β Β extraQueryUrlParams?: URLSearchParams;
        Β Β Β Β path: string;
        }

      Returns void

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Node.SponsorBlockSegment.html b/docs/types/Types_Node.SponsorBlockSegment.html deleted file mode 100644 index 374c86f..0000000 --- a/docs/types/Types_Node.SponsorBlockSegment.html +++ /dev/null @@ -1,174 +0,0 @@ -SponsorBlockSegment | lavalink-client

Type alias SponsorBlockSegment

SponsorBlockSegment: "sponsor" | "selfpromo" | "interaction" | "intro" | "outro" | "preview" | "music_offtopic" | "filler"

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Player.DestroyReasonsType.html b/docs/types/Types_Player.DestroyReasonsType.html deleted file mode 100644 index a9d46b9..0000000 --- a/docs/types/Types_Player.DestroyReasonsType.html +++ /dev/null @@ -1,174 +0,0 @@ -DestroyReasonsType | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Player.RepeatMode.html b/docs/types/Types_Player.RepeatMode.html deleted file mode 100644 index d154fec..0000000 --- a/docs/types/Types_Player.RepeatMode.html +++ /dev/null @@ -1,174 +0,0 @@ -RepeatMode | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Player.anyObject.html b/docs/types/Types_Player.anyObject.html deleted file mode 100644 index fe0e8e4..0000000 --- a/docs/types/Types_Player.anyObject.html +++ /dev/null @@ -1,174 +0,0 @@ -anyObject | lavalink-client
anyObject: {
Β Β Β Β [key: string | number]: string | number | null | anyObject;
}

Type declaration

  • [key: string | number]: string | number | null | anyObject

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Track.LavalinkPlugin_LavaSrc_SourceNames.html b/docs/types/Types_Track.LavalinkPlugin_LavaSrc_SourceNames.html deleted file mode 100644 index 17cf4e6..0000000 --- a/docs/types/Types_Track.LavalinkPlugin_LavaSrc_SourceNames.html +++ /dev/null @@ -1,175 +0,0 @@ -LavalinkPlugin_LavaSrc_SourceNames | lavalink-client

Type alias LavalinkPlugin_LavaSrc_SourceNames

LavalinkPlugin_LavaSrc_SourceNames: "deezer" | "spotify" | "applemusic" | "yandexmusic" | "flowery-tts"

Source Names provided by lava src plugin

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Track.LavalinkSourceNames.html b/docs/types/Types_Track.LavalinkSourceNames.html deleted file mode 100644 index 0f984fe..0000000 --- a/docs/types/Types_Track.LavalinkSourceNames.html +++ /dev/null @@ -1,175 +0,0 @@ -LavalinkSourceNames | lavalink-client

Type alias LavalinkSourceNames

LavalinkSourceNames: "youtube" | "youtubemusic" | "soundcloud" | "bandcamp" | "twitch"

Sourcenames provided by lavalink server

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Track.SourceNames.html b/docs/types/Types_Track.SourceNames.html deleted file mode 100644 index 8690f68..0000000 --- a/docs/types/Types_Track.SourceNames.html +++ /dev/null @@ -1,175 +0,0 @@ -SourceNames | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.Base64.html b/docs/types/Types_Utils.Base64.html deleted file mode 100644 index 13a234c..0000000 --- a/docs/types/Types_Utils.Base64.html +++ /dev/null @@ -1,175 +0,0 @@ -Base64 | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.ClientCustomSearchPlatformUtils.html b/docs/types/Types_Utils.ClientCustomSearchPlatformUtils.html deleted file mode 100644 index 45b47a9..0000000 --- a/docs/types/Types_Utils.ClientCustomSearchPlatformUtils.html +++ /dev/null @@ -1,174 +0,0 @@ -ClientCustomSearchPlatformUtils | lavalink-client

Type alias ClientCustomSearchPlatformUtils

ClientCustomSearchPlatformUtils: "local" | "http" | "https" | "link" | "uri"

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.ClientSearchPlatform.html b/docs/types/Types_Utils.ClientSearchPlatform.html deleted file mode 100644 index baa5622..0000000 --- a/docs/types/Types_Utils.ClientSearchPlatform.html +++ /dev/null @@ -1,174 +0,0 @@ -ClientSearchPlatform | lavalink-client

Type alias ClientSearchPlatform

ClientSearchPlatform: ClientCustomSearchPlatformUtils | "youtube" | "yt" | "youtube music" | "youtubemusic" | "ytm" | "musicyoutube" | "music youtube" | "soundcloud" | "sc" | "am" | "apple music" | "applemusic" | "apple" | "musicapple" | "music apple" | "sp" | "spsuggestion" | "spotify" | "spotify.com" | "spotifycom" | "dz" | "deezer" | "yandex" | "yandex music" | "yandexmusic" | "flowerytts" | "flowery" | "flowery.tts" | LavalinkClientSearchPlatformResolve | LavalinkClientSearchPlatform | "js" | "jiosaavn"

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.DuncteSearchPlatform.html b/docs/types/Types_Utils.DuncteSearchPlatform.html deleted file mode 100644 index e35f9e5..0000000 --- a/docs/types/Types_Utils.DuncteSearchPlatform.html +++ /dev/null @@ -1,174 +0,0 @@ -DuncteSearchPlatform | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.FloatNumber.html b/docs/types/Types_Utils.FloatNumber.html deleted file mode 100644 index 87176f6..0000000 --- a/docs/types/Types_Utils.FloatNumber.html +++ /dev/null @@ -1,175 +0,0 @@ -FloatNumber | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.IntegerNumber.html b/docs/types/Types_Utils.IntegerNumber.html deleted file mode 100644 index 75bb7cd..0000000 --- a/docs/types/Types_Utils.IntegerNumber.html +++ /dev/null @@ -1,175 +0,0 @@ -IntegerNumber | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.JioSaavnSearchPlatform.html b/docs/types/Types_Utils.JioSaavnSearchPlatform.html deleted file mode 100644 index 904e586..0000000 --- a/docs/types/Types_Utils.JioSaavnSearchPlatform.html +++ /dev/null @@ -1,174 +0,0 @@ -JioSaavnSearchPlatform | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.LavaSearchQuery.html b/docs/types/Types_Utils.LavaSearchQuery.html deleted file mode 100644 index 80ba16e..0000000 --- a/docs/types/Types_Utils.LavaSearchQuery.html +++ /dev/null @@ -1,178 +0,0 @@ -LavaSearchQuery | lavalink-client
LavaSearchQuery: {
Β Β Β Β query: string;
Β Β Β Β source: LavaSrcSearchPlatformBase;
Β Β Β Β types?: LavaSearchType[];
}

SearchQuery Object for Lavalink LavaSearch Plugin requests

-

Type declaration

  • query: string

    lavalink search Query / identifier string

    -
  • source: LavaSrcSearchPlatformBase

    Source to append to the search query string

    -
  • Optional types?: LavaSearchType[]

    The Types to filter the search to

    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.LavaSearchType.html b/docs/types/Types_Utils.LavaSearchType.html deleted file mode 100644 index 3c7ea9c..0000000 --- a/docs/types/Types_Utils.LavaSearchType.html +++ /dev/null @@ -1,175 +0,0 @@ -LavaSearchType | lavalink-client
LavaSearchType: "track" | "album" | "artist" | "playlist" | "text" | "tracks" | "albums" | "artists" | "playlists" | "texts"

Specific types to filter for lavasearch, will be filtered to correct types

-

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.LavaSrcSearchPlatform.html b/docs/types/Types_Utils.LavaSrcSearchPlatform.html deleted file mode 100644 index c34ece9..0000000 --- a/docs/types/Types_Utils.LavaSrcSearchPlatform.html +++ /dev/null @@ -1,174 +0,0 @@ -LavaSrcSearchPlatform | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.LavaSrcSearchPlatformBase.html b/docs/types/Types_Utils.LavaSrcSearchPlatformBase.html deleted file mode 100644 index 76f3fd1..0000000 --- a/docs/types/Types_Utils.LavaSrcSearchPlatformBase.html +++ /dev/null @@ -1,174 +0,0 @@ -LavaSrcSearchPlatformBase | lavalink-client

Type alias LavaSrcSearchPlatformBase

LavaSrcSearchPlatformBase: "spsearch" | "sprec" | "amsearch" | "dzsearch" | "dzisrc" | "ymsearch"

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.LavalinkClientSearchPlatform.html b/docs/types/Types_Utils.LavalinkClientSearchPlatform.html deleted file mode 100644 index a62e2ef..0000000 --- a/docs/types/Types_Utils.LavalinkClientSearchPlatform.html +++ /dev/null @@ -1,174 +0,0 @@ -LavalinkClientSearchPlatform | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.LavalinkClientSearchPlatformResolve.html b/docs/types/Types_Utils.LavalinkClientSearchPlatformResolve.html deleted file mode 100644 index c85dc31..0000000 --- a/docs/types/Types_Utils.LavalinkClientSearchPlatformResolve.html +++ /dev/null @@ -1,174 +0,0 @@ -LavalinkClientSearchPlatformResolve | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.LavalinkSearchPlatform.html b/docs/types/Types_Utils.LavalinkSearchPlatform.html deleted file mode 100644 index b0530cc..0000000 --- a/docs/types/Types_Utils.LavalinkSearchPlatform.html +++ /dev/null @@ -1,174 +0,0 @@ -LavalinkSearchPlatform | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.LoadTypes.html b/docs/types/Types_Utils.LoadTypes.html deleted file mode 100644 index b3ed49d..0000000 --- a/docs/types/Types_Utils.LoadTypes.html +++ /dev/null @@ -1,174 +0,0 @@ -LoadTypes | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.LyricsEvent.html b/docs/types/Types_Utils.LyricsEvent.html deleted file mode 100644 index fb7e20d..0000000 --- a/docs/types/Types_Utils.LyricsEvent.html +++ /dev/null @@ -1,175 +0,0 @@ -LyricsEvent | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.LyricsEventType.html b/docs/types/Types_Utils.LyricsEventType.html deleted file mode 100644 index b53171f..0000000 --- a/docs/types/Types_Utils.LyricsEventType.html +++ /dev/null @@ -1,174 +0,0 @@ -LyricsEventType | lavalink-client
LyricsEventType: "LyricsFoundEvent" | "LyricsNotFoundEvent" | "LyricsLineEvent"

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.Opaque.html b/docs/types/Types_Utils.Opaque.html deleted file mode 100644 index d9b5608..0000000 --- a/docs/types/Types_Utils.Opaque.html +++ /dev/null @@ -1,175 +0,0 @@ -Opaque | lavalink-client

Type alias Opaque<T, K>

Opaque<T, K>: T & {
Β Β Β Β __opaque__: K;
}

Helper for generating Opaque types.

-

Type Parameters

  • T

  • K

Type declaration

  • __opaque__: K

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.PlayerEventType.html b/docs/types/Types_Utils.PlayerEventType.html deleted file mode 100644 index 0687cae..0000000 --- a/docs/types/Types_Utils.PlayerEventType.html +++ /dev/null @@ -1,174 +0,0 @@ -PlayerEventType | lavalink-client
PlayerEventType: "TrackStartEvent" | "TrackEndEvent" | "TrackExceptionEvent" | "TrackStuckEvent" | "WebSocketClosedEvent" | SponsorBlockSegmentEventType | LyricsEventType

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.PlayerEvents.html b/docs/types/Types_Utils.PlayerEvents.html deleted file mode 100644 index e9a4dea..0000000 --- a/docs/types/Types_Utils.PlayerEvents.html +++ /dev/null @@ -1,174 +0,0 @@ -PlayerEvents | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.RoutePlannerTypes.html b/docs/types/Types_Utils.RoutePlannerTypes.html deleted file mode 100644 index 49adf90..0000000 --- a/docs/types/Types_Utils.RoutePlannerTypes.html +++ /dev/null @@ -1,174 +0,0 @@ -RoutePlannerTypes | lavalink-client
RoutePlannerTypes: "RotatingIpRoutePlanner" | "NanoIpRoutePlanner" | "RotatingNanoIpRoutePlanner" | "BalancingIpRoutePlanner"

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.SearchPlatform.html b/docs/types/Types_Utils.SearchPlatform.html deleted file mode 100644 index 45001b4..0000000 --- a/docs/types/Types_Utils.SearchPlatform.html +++ /dev/null @@ -1,174 +0,0 @@ -SearchPlatform | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.SearchQuery.html b/docs/types/Types_Utils.SearchQuery.html deleted file mode 100644 index 3b1bc2a..0000000 --- a/docs/types/Types_Utils.SearchQuery.html +++ /dev/null @@ -1,178 +0,0 @@ -SearchQuery | lavalink-client
SearchQuery: {
Β Β Β Β extraQueryUrlParams?: URLSearchParams;
Β Β Β Β query: string;
Β Β Β Β source?: SearchPlatform;
} | string

SearchQuery Object for raw lavalink requests

-

Type declaration

  • Optional extraQueryUrlParams?: URLSearchParams

    Extra url query params to use, e.g. for flowertts

    -
  • query: string

    lavalink search Query / identifier string

    -
  • Optional source?: SearchPlatform

    Source to append to the search query string

    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.Severity.html b/docs/types/Types_Utils.Severity.html deleted file mode 100644 index d9be97e..0000000 --- a/docs/types/Types_Utils.Severity.html +++ /dev/null @@ -1,174 +0,0 @@ -Severity | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.SourcesRegex.html b/docs/types/Types_Utils.SourcesRegex.html deleted file mode 100644 index 9ec4935..0000000 --- a/docs/types/Types_Utils.SourcesRegex.html +++ /dev/null @@ -1,174 +0,0 @@ -SourcesRegex | lavalink-client
SourcesRegex: "YoutubeRegex" | "YoutubeMusicRegex" | "SoundCloudRegex" | "SoundCloudMobileRegex" | "DeezerTrackRegex" | "DeezerArtistRegex" | "DeezerEpisodeRegex" | "DeezerMixesRegex" | "DeezerPageLinkRegex" | "DeezerPlaylistRegex" | "DeezerAlbumRegex" | "AllDeezerRegex" | "AllDeezerRegexWithoutPageLink" | "SpotifySongRegex" | "SpotifyPlaylistRegex" | "SpotifyArtistRegex" | "SpotifyEpisodeRegex" | "SpotifyShowRegex" | "SpotifyAlbumRegex" | "AllSpotifyRegex" | "mp3Url" | "m3uUrl" | "m3u8Url" | "mp4Url" | "m4aUrl" | "wavUrl" | "aacpUrl" | "tiktok" | "mixcloud" | "musicYandex" | "radiohost" | "bandcamp" | "jiosaavn" | "appleMusic" | "TwitchTv" | "vimeo"

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.SponsorBlockSegmentEventType.html b/docs/types/Types_Utils.SponsorBlockSegmentEventType.html deleted file mode 100644 index 840faee..0000000 --- a/docs/types/Types_Utils.SponsorBlockSegmentEventType.html +++ /dev/null @@ -1,174 +0,0 @@ -SponsorBlockSegmentEventType | lavalink-client

Type alias SponsorBlockSegmentEventType

SponsorBlockSegmentEventType: "SegmentSkipped" | "SegmentsLoaded" | "ChaptersLoaded" | "ChapterStarted"

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.SponsorBlockSegmentEvents.html b/docs/types/Types_Utils.SponsorBlockSegmentEvents.html deleted file mode 100644 index b465b38..0000000 --- a/docs/types/Types_Utils.SponsorBlockSegmentEvents.html +++ /dev/null @@ -1,175 +0,0 @@ -SponsorBlockSegmentEvents | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.State.html b/docs/types/Types_Utils.State.html deleted file mode 100644 index b0c72be..0000000 --- a/docs/types/Types_Utils.State.html +++ /dev/null @@ -1,174 +0,0 @@ -State | lavalink-client
State: "CONNECTED" | "CONNECTING" | "DISCONNECTED" | "DISCONNECTING" | "DESTROYING"

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/types/Types_Utils.TrackEndReason.html b/docs/types/Types_Utils.TrackEndReason.html deleted file mode 100644 index b34e0ac..0000000 --- a/docs/types/Types_Utils.TrackEndReason.html +++ /dev/null @@ -1,174 +0,0 @@ -TrackEndReason | lavalink-client
TrackEndReason: "finished" | "loadFailed" | "stopped" | "replaced" | "cleanup"

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/variables/Constants.EQList.html b/docs/variables/Constants.EQList.html deleted file mode 100644 index a41c79b..0000000 --- a/docs/variables/Constants.EQList.html +++ /dev/null @@ -1,185 +0,0 @@ -EQList | lavalink-client

Variable EQListConst

EQList: {
Β Β Β Β BassboostEarrape: EQBand[];
Β Β Β Β BassboostHigh: EQBand[];
Β Β Β Β BassboostLow: EQBand[];
Β Β Β Β BassboostMedium: EQBand[];
Β Β Β Β BetterMusic: EQBand[];
Β Β Β Β Classic: EQBand[];
Β Β Β Β Electronic: EQBand[];
Β Β Β Β FullSound: EQBand[];
Β Β Β Β Gaming: EQBand[];
Β Β Β Β Pop: EQBand[];
Β Β Β Β Rock: EQBand[];
} = ...

Type declaration

  • BassboostEarrape: EQBand[]

    A Bassboost Equalizer, so high it distorts the audio

    -
  • BassboostHigh: EQBand[]

    A High and decent Bassboost Equalizer

    -
  • BassboostLow: EQBand[]

    A slight Bassboost Equalizer

    -
  • BassboostMedium: EQBand[]

    A decent Bassboost Equalizer

    -
  • BetterMusic: EQBand[]

    Makes the Music slightly "better"

    -
  • Classic: EQBand[]

    Makes the Music sound like Classic music / sound Classic music better

    -
  • Electronic: EQBand[]

    Makes the Music sound like Electronic music / sound Electronic music better

    -
  • FullSound: EQBand[]

    Boosts all Bands slightly for louder and fuller sound

    -
  • Gaming: EQBand[]

    Boosts basses + lower highs for a pro gaming sound

    -
  • Pop: EQBand[]

    Makes the Music sound like Pop music / sound Pop music better

    -
  • Rock: EQBand[]

    Makes the Music sound like rock music / sound rock music better

    -

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/variables/Constants.audioOutputsData.html b/docs/variables/Constants.audioOutputsData.html deleted file mode 100644 index c0ba8d6..0000000 --- a/docs/variables/Constants.audioOutputsData.html +++ /dev/null @@ -1,175 +0,0 @@ -audioOutputsData | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/variables/Constants.validSponsorBlocks.html b/docs/variables/Constants.validSponsorBlocks.html deleted file mode 100644 index c4ff291..0000000 --- a/docs/variables/Constants.validSponsorBlocks.html +++ /dev/null @@ -1,174 +0,0 @@ -validSponsorBlocks | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/variables/LavalinkManagerStatics.DefaultSources.html b/docs/variables/LavalinkManagerStatics.DefaultSources.html deleted file mode 100644 index f41ac35..0000000 --- a/docs/variables/LavalinkManagerStatics.DefaultSources.html +++ /dev/null @@ -1,175 +0,0 @@ -DefaultSources | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/variables/LavalinkManagerStatics.LavalinkPlugins.html b/docs/variables/LavalinkManagerStatics.LavalinkPlugins.html deleted file mode 100644 index 77ba75d..0000000 --- a/docs/variables/LavalinkManagerStatics.LavalinkPlugins.html +++ /dev/null @@ -1,175 +0,0 @@ -LavalinkPlugins | lavalink-client
LavalinkPlugins: {
Β Β Β Β DuncteBot_Plugin: string;
Β Β Β Β GoogleCloudTTS: string;
Β Β Β Β JavaTimedLyricsPlugin: string;
Β Β Β Β Jiosaavn_Plugin: string;
Β Β Β Β LavaSearch: string;
Β Β Β Β LavaSrc: string;
Β Β Β Β LavalinkFilterPlugin: string;
} = ...

Lavalink Plugins definiton

-

Type declaration

  • DuncteBot_Plugin: string
  • GoogleCloudTTS: string
  • JavaTimedLyricsPlugin: string
  • Jiosaavn_Plugin: string
  • LavaSearch: string
  • LavaSrc: string
  • LavalinkFilterPlugin: string

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/variables/LavalinkManagerStatics.SourceLinksRegexes.html b/docs/variables/LavalinkManagerStatics.SourceLinksRegexes.html deleted file mode 100644 index b7d26b6..0000000 --- a/docs/variables/LavalinkManagerStatics.SourceLinksRegexes.html +++ /dev/null @@ -1,175 +0,0 @@ -SourceLinksRegexes | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/variables/Utils.NodeSymbol.html b/docs/variables/Utils.NodeSymbol.html deleted file mode 100644 index 90dc744..0000000 --- a/docs/variables/Utils.NodeSymbol.html +++ /dev/null @@ -1,174 +0,0 @@ -NodeSymbol | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/variables/Utils.QueueSymbol.html b/docs/variables/Utils.QueueSymbol.html deleted file mode 100644 index 564b86c..0000000 --- a/docs/variables/Utils.QueueSymbol.html +++ /dev/null @@ -1,174 +0,0 @@ -QueueSymbol | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/variables/Utils.TrackSymbol.html b/docs/variables/Utils.TrackSymbol.html deleted file mode 100644 index ca17200..0000000 --- a/docs/variables/Utils.TrackSymbol.html +++ /dev/null @@ -1,174 +0,0 @@ -TrackSymbol | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/docs/variables/Utils.UnresolvedTrackSymbol.html b/docs/variables/Utils.UnresolvedTrackSymbol.html deleted file mode 100644 index f7745f4..0000000 --- a/docs/variables/Utils.UnresolvedTrackSymbol.html +++ /dev/null @@ -1,174 +0,0 @@ -UnresolvedTrackSymbol | lavalink-client

Generated using TypeDoc

\ No newline at end of file diff --git a/package.json b/package.json index 6661dec..590487a 100644 --- a/package.json +++ b/package.json @@ -7,22 +7,15 @@ "types": "dist/types/index.d.js", "scripts": { "build": "npm run tool:clean && npm run build:all && npm run tool:fixbuild", - "build:all": "npm run build:cjs && npm run build:esm && npm run build:types", "build:cjs": "tsc -p tools/config/tsconfig.cjs.json && tsc-alias -p tools/config/tsconfig.cjs.json", "build:esm": "tsc -p tools/config/tsconfig.esm.json && tsc-alias -p tools/config/tsconfig.esm.json", "build:types": "tsc -p tools/config/tsconfig.types.json && tsc-alias -p tools/config/tsconfig.types.json", - "tool:clean": "node tools/cleanup.js", "tool:fixbuild": "node tools/fixup.js", - "lint": "eslint .", "lint:fix": "npm run lint -- --fix", - "test": "node -v", - - "docs": "npx typedoc", - "prepublishOnly": "npm run build", "prepare": "npm run build" }, @@ -71,12 +64,12 @@ "@typescript-eslint/parser": "^8.6.0", "eslint": "^9.11.0", "tsc-alias": "^1.8.10", - "typedoc": "^0.26.7", - "typedoc-material-theme": "^1.1.0", "typescript": "^5.6.2" }, "dependencies": { + "starlight-typedoc": "^0.16.0", "tslib": "^2.7.0", + "typedoc-plugin-markdown": "^4.2.7", "ws": "^8.18.0" }, "engines": { From 1ccb5e6cb4692e323c02b2578326f71a5b71cb6e Mon Sep 17 00:00:00 2001 From: Appu Date: Sun, 22 Sep 2024 00:05:06 +0530 Subject: [PATCH 03/14] added github page workflow --- .github/workflows/deploy.yml | 39 ++++++++++++++++++++++++++++++++++++ docs/astro.config.mjs | 2 ++ 2 files changed, 41 insertions(+) create mode 100644 .github/workflows/deploy.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..ebdb235 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,39 @@ +name: Deploy to GitHub Pages + +on: + # Trigger the workflow every time you push to the `main` branch + # Using a different branch name? Replace `main` with your branch’s name + push: + branches: [ cleanup-everything ] # for now only + # Allows you to run this workflow manually from the Actions tab on GitHub. + workflow_dispatch: + +# Allow this job to clone the repo and create a page deployment +permissions: + contents: read + pages: write + id-token: write + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout your repository using git + uses: actions/checkout@v4 + - name: Install, build, and upload your site + uses: withastro/action@v3 + with: + path: "/docs" + node-version: 20 # The specific version of Node that should be used to build your site. Defaults to 20. (optional) + + + deploy: + needs: build + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 \ No newline at end of file diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs index c0db6c5..e74d514 100644 --- a/docs/astro.config.mjs +++ b/docs/astro.config.mjs @@ -5,6 +5,8 @@ import starlightTypeDoc, { typeDocSidebarGroup } from 'starlight-typedoc' // https://astro.build/config export default defineConfig({ + site: 'https://tomato6966.github.io/lavalink-client/', + base: '/docs', integrations: [ starlight({ title: 'Lavalink Client', From c678b47f9fecbd812e7bf28a6221039b3f3ca948 Mon Sep 17 00:00:00 2001 From: Appu Date: Sun, 22 Sep 2024 00:08:46 +0530 Subject: [PATCH 04/14] update workflow --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index ebdb235..fff4f3d 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -4,7 +4,7 @@ on: # Trigger the workflow every time you push to the `main` branch # Using a different branch name? Replace `main` with your branch’s name push: - branches: [ cleanup-everything ] # for now only + branches: [ cleanup-everything-new-docs ] # for now only # Allows you to run this workflow manually from the Actions tab on GitHub. workflow_dispatch: From e0514d1e0930b14d92e49968f53a3bcf8d6cedbf Mon Sep 17 00:00:00 2001 From: Appu Date: Sun, 22 Sep 2024 00:10:41 +0530 Subject: [PATCH 05/14] update path --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index fff4f3d..911a149 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -23,7 +23,7 @@ jobs: - name: Install, build, and upload your site uses: withastro/action@v3 with: - path: "/docs" + path: . node-version: 20 # The specific version of Node that should be used to build your site. Defaults to 20. (optional) From 7a12bc75fe8994987d627ed936aa8da0136f9b03 Mon Sep 17 00:00:00 2001 From: Appu Date: Sun, 22 Sep 2024 00:12:50 +0530 Subject: [PATCH 06/14] added package-manager --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 911a149..86b5ab5 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -25,7 +25,7 @@ jobs: with: path: . node-version: 20 # The specific version of Node that should be used to build your site. Defaults to 20. (optional) - + package-manager: npm deploy: needs: build From 41a36c19e1161a5519890230e03ea9850b392b63 Mon Sep 17 00:00:00 2001 From: Appu Date: Sun, 22 Sep 2024 00:15:00 +0530 Subject: [PATCH 07/14] update path --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 86b5ab5..02a925c 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -23,7 +23,7 @@ jobs: - name: Install, build, and upload your site uses: withastro/action@v3 with: - path: . + path: ./docs node-version: 20 # The specific version of Node that should be used to build your site. Defaults to 20. (optional) package-manager: npm From 6744797d726c944d13f4eafcc01188fa8d685864 Mon Sep 17 00:00:00 2001 From: Appu Date: Sun, 22 Sep 2024 00:18:17 +0530 Subject: [PATCH 08/14] package-manager tob bun --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 02a925c..236a789 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -25,7 +25,7 @@ jobs: with: path: ./docs node-version: 20 # The specific version of Node that should be used to build your site. Defaults to 20. (optional) - package-manager: npm + package-manager: bun@latest deploy: needs: build From f57c0650cbe68c0fc24d9b26a0ee9d24426ea14b Mon Sep 17 00:00:00 2001 From: Appu Date: Sun, 22 Sep 2024 00:22:54 +0530 Subject: [PATCH 09/14] fixed issue --- .github/workflows/deploy.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 236a789..c9a18bc 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -20,7 +20,18 @@ jobs: steps: - name: Checkout your repository using git uses: actions/checkout@v4 - - name: Install, build, and upload your site + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Install dependencies + run: yarn install --no-frozen-lockfile + + - name: Build + run: yarn run build + + - name: Deploy to GitHub Pages uses: withastro/action@v3 with: path: ./docs From 95a30c33dd21a943d346632f1142c33a7268eb7d Mon Sep 17 00:00:00 2001 From: Appu Date: Sun, 22 Sep 2024 00:33:55 +0530 Subject: [PATCH 10/14] removed extra package --- package.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/package.json b/package.json index 590487a..c66c7b8 100644 --- a/package.json +++ b/package.json @@ -67,13 +67,11 @@ "typescript": "^5.6.2" }, "dependencies": { - "starlight-typedoc": "^0.16.0", "tslib": "^2.7.0", - "typedoc-plugin-markdown": "^4.2.7", "ws": "^8.18.0" }, "engines": { "node": ">=18.0.0", "bun": ">=1.0.0" } -} +} \ No newline at end of file From dcbbd669d45c6e9feb6f1d93d17fe0e4b462b1d9 Mon Sep 17 00:00:00 2001 From: Appu Date: Sun, 22 Sep 2024 00:41:34 +0530 Subject: [PATCH 11/14] for testing --- docs/astro.config.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs index e74d514..8d360ff 100644 --- a/docs/astro.config.mjs +++ b/docs/astro.config.mjs @@ -5,7 +5,7 @@ import starlightTypeDoc, { typeDocSidebarGroup } from 'starlight-typedoc' // https://astro.build/config export default defineConfig({ - site: 'https://tomato6966.github.io/lavalink-client/', + site: 'https://appujet.github.io/lavalink-client/', base: '/docs', integrations: [ starlight({ From 768f5444f1457fd95e6546ef6548e8fd1996927f Mon Sep 17 00:00:00 2001 From: Appu Date: Sun, 22 Sep 2024 01:01:07 +0530 Subject: [PATCH 12/14] Revert "removed extra package" This reverts commit 95a30c33dd21a943d346632f1142c33a7268eb7d. --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index c66c7b8..590487a 100644 --- a/package.json +++ b/package.json @@ -67,11 +67,13 @@ "typescript": "^5.6.2" }, "dependencies": { + "starlight-typedoc": "^0.16.0", "tslib": "^2.7.0", + "typedoc-plugin-markdown": "^4.2.7", "ws": "^8.18.0" }, "engines": { "node": ">=18.0.0", "bun": ">=1.0.0" } -} \ No newline at end of file +} From 0fa8d8bf25c0f14dc6e57120f539b6c734240e86 Mon Sep 17 00:00:00 2001 From: Appu Date: Sun, 22 Sep 2024 01:02:55 +0530 Subject: [PATCH 13/14] Revert "for testing" This reverts commit dcbbd669d45c6e9feb6f1d93d17fe0e4b462b1d9. --- docs/astro.config.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/astro.config.mjs b/docs/astro.config.mjs index 8d360ff..e74d514 100644 --- a/docs/astro.config.mjs +++ b/docs/astro.config.mjs @@ -5,7 +5,7 @@ import starlightTypeDoc, { typeDocSidebarGroup } from 'starlight-typedoc' // https://astro.build/config export default defineConfig({ - site: 'https://appujet.github.io/lavalink-client/', + site: 'https://tomato6966.github.io/lavalink-client/', base: '/docs', integrations: [ starlight({ From 95022c9f4d95635a8079b14ac7eaa6acc691279b Mon Sep 17 00:00:00 2001 From: Appu Date: Sun, 22 Sep 2024 01:04:09 +0530 Subject: [PATCH 14/14] removed typedoc --- package.json | 2 -- typedoc.json | 15 --------------- 2 files changed, 17 deletions(-) delete mode 100644 typedoc.json diff --git a/package.json b/package.json index 590487a..7203a5c 100644 --- a/package.json +++ b/package.json @@ -67,9 +67,7 @@ "typescript": "^5.6.2" }, "dependencies": { - "starlight-typedoc": "^0.16.0", "tslib": "^2.7.0", - "typedoc-plugin-markdown": "^4.2.7", "ws": "^8.18.0" }, "engines": { diff --git a/typedoc.json b/typedoc.json deleted file mode 100644 index 92a1624..0000000 --- a/typedoc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "entryPoints": [ - "src/structures/**/*.ts" - ], - "out": "docs", - "entryPointStrategy": "expand", - "plugin": ["typedoc-material-theme"], - "themeColor": "#ff624a", - "tsconfig": "./tsconfig.json", - "navigationLinks": { - "Github": "https://github.com/tomato6966/lavalink-client", - "NPM": "https://npmjs.com/lavalink-client", - "Example Bot": "https://github.com/Tomato6966/lavalink-client/tree/main/testBot" - } -}