lavalink-client 2.2.0 → 2.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +116 -15
  2. package/dist/cjs/structures/Filters.d.ts +1 -1
  3. package/dist/cjs/structures/Filters.js +9 -9
  4. package/dist/cjs/structures/LavalinkManager.d.ts +24 -7
  5. package/dist/cjs/structures/LavalinkManager.js +15 -2
  6. package/dist/cjs/structures/LavalinkManagerStatics.d.ts +3 -0
  7. package/dist/cjs/structures/LavalinkManagerStatics.js +4 -1
  8. package/dist/cjs/structures/Node.d.ts +307 -22
  9. package/dist/cjs/structures/Node.js +328 -72
  10. package/dist/cjs/structures/NodeManager.js +3 -1
  11. package/dist/cjs/structures/Player.d.ts +44 -8
  12. package/dist/cjs/structures/Player.js +27 -18
  13. package/dist/cjs/structures/Queue.d.ts +47 -0
  14. package/dist/cjs/structures/Queue.js +104 -1
  15. package/dist/cjs/structures/Track.d.ts +1 -0
  16. package/dist/cjs/structures/Utils.d.ts +3 -0
  17. package/dist/cjs/structures/Utils.js +6 -4
  18. package/dist/esm/structures/Filters.d.ts +1 -1
  19. package/dist/esm/structures/Filters.js +9 -9
  20. package/dist/esm/structures/LavalinkManager.d.ts +24 -7
  21. package/dist/esm/structures/LavalinkManager.js +15 -2
  22. package/dist/esm/structures/LavalinkManagerStatics.d.ts +3 -0
  23. package/dist/esm/structures/LavalinkManagerStatics.js +4 -1
  24. package/dist/esm/structures/Node.d.ts +307 -22
  25. package/dist/esm/structures/Node.js +328 -72
  26. package/dist/esm/structures/NodeManager.js +3 -1
  27. package/dist/esm/structures/Player.d.ts +44 -8
  28. package/dist/esm/structures/Player.js +27 -18
  29. package/dist/esm/structures/Queue.d.ts +47 -0
  30. package/dist/esm/structures/Queue.js +104 -1
  31. package/dist/esm/structures/Track.d.ts +1 -0
  32. package/dist/esm/structures/Utils.d.ts +3 -0
  33. package/dist/esm/structures/Utils.js +6 -4
  34. package/dist/types/structures/Filters.d.ts +1 -1
  35. package/dist/types/structures/LavalinkManager.d.ts +24 -7
  36. package/dist/types/structures/LavalinkManagerStatics.d.ts +3 -0
  37. package/dist/types/structures/Node.d.ts +307 -22
  38. package/dist/types/structures/Player.d.ts +44 -8
  39. package/dist/types/structures/Queue.d.ts +47 -0
  40. package/dist/types/structures/Track.d.ts +1 -0
  41. package/dist/types/structures/Utils.d.ts +3 -0
  42. package/package.json +2 -3
@@ -6,6 +6,7 @@ import { DestroyReasonsType, Player, PlayerJson, PlayerOptions } from "./Player"
6
6
  import { ManagerQueueOptions } from "./Queue";
7
7
  import { Track, UnresolvedTrack } from "./Track";
8
8
  import { ChannelDeletePacket, GuildShardPayload, ManagerUtils, MiniMap, SearchPlatform, SponsorBlockChaptersLoaded, SponsorBlockChapterStarted, SponsorBlockSegmentSkipped, SponsorBlockSegmentsLoaded, TrackEndEvent, TrackExceptionEvent, TrackStartEvent, TrackStuckEvent, VoicePacket, VoiceServer, VoiceState, WebSocketClosedEvent } from "./Utils";
9
+ /** How the botclient is allowed to be structured */
9
10
  export interface BotClientOptions {
10
11
  /** Bot Client Id */
11
12
  id: string;
@@ -14,6 +15,7 @@ export interface BotClientOptions {
14
15
  /** So users can pass entire objects / classes */
15
16
  [x: string | number | symbol]: unknown;
16
17
  }
18
+ /** Sub Manager Options, for player specific things */
17
19
  export interface ManagerPlayerOptions {
18
20
  /** If the Lavalink Volume should be decremented by x number */
19
21
  volumeDecrementer?: number;
@@ -39,6 +41,7 @@ export interface ManagerPlayerOptions {
39
41
  };
40
42
  useUnresolvedData?: boolean;
41
43
  }
44
+ /** Manager Options used to create the manager */
42
45
  export interface ManagerOptions {
43
46
  /** The Node Options, for all Nodes! (on init) */
44
47
  nodes: LavalinkNodeOptions[];
@@ -64,6 +67,8 @@ export interface ManagerOptions {
64
67
  linksAllowed?: boolean;
65
68
  /** Advanced Options for the Library, which may or may not be "library breaking" */
66
69
  advancedOptions?: {
70
+ /** Max duration for that the filter fix duration works (in ms) - default is 8mins */
71
+ maxFilterFixDuration?: number;
67
72
  /** optional */
68
73
  debugOptions?: {
69
74
  /** For logging custom searches */
@@ -90,7 +95,7 @@ export interface LavalinkManagerEvents {
90
95
  * Emitted when a Track finished.
91
96
  * @event Manager#trackEnd
92
97
  */
93
- "trackEnd": (player: Player, track: Track, payload: TrackEndEvent) => void;
98
+ "trackEnd": (player: Player, track: Track | null, payload: TrackEndEvent) => void;
94
99
  /**
95
100
  * Emitted when a Track got stuck while playing.
96
101
  * @event Manager#trackStuck
@@ -105,7 +110,7 @@ export interface LavalinkManagerEvents {
105
110
  * Emitted when the Playing finished and no more tracks in the queue.
106
111
  * @event Manager#queueEnd
107
112
  */
108
- "queueEnd": (player: Player, track: Track, payload: TrackEndEvent | TrackStuckEvent | TrackExceptionEvent) => void;
113
+ "queueEnd": (player: Player, track: Track | UnresolvedTrack | null, payload: TrackEndEvent | TrackStuckEvent | TrackExceptionEvent) => void;
109
114
  /**
110
115
  * Emitted when a Player is created.
111
116
  * @event Manager#playerCreate
@@ -142,28 +147,28 @@ export interface LavalinkManagerEvents {
142
147
  * @link https://github.com/topi314/Sponsorblock-Plugin#segmentsloaded
143
148
  * @event Manager#trackError
144
149
  */
145
- "SegmentsLoaded": (player: Player, track: Track | UnresolvedTrack, payload: SponsorBlockSegmentsLoaded) => void;
150
+ "SegmentsLoaded": (player: Player, track: Track | UnresolvedTrack | null, payload: SponsorBlockSegmentsLoaded) => void;
146
151
  /**
147
152
  * SPONSORBLOCK-PLUGIN EVENT
148
153
  * Emitted when a specific Segment was skipped
149
154
  * @link https://github.com/topi314/Sponsorblock-Plugin#segmentskipped
150
155
  * @event Manager#trackError
151
156
  */
152
- "SegmentSkipped": (player: Player, track: Track | UnresolvedTrack, payload: SponsorBlockSegmentSkipped) => void;
157
+ "SegmentSkipped": (player: Player, track: Track | UnresolvedTrack | null, payload: SponsorBlockSegmentSkipped) => void;
153
158
  /**
154
159
  * SPONSORBLOCK-PLUGIN EVENT
155
160
  * Emitted when a specific Chapter starts playing
156
161
  * @link https://github.com/topi314/Sponsorblock-Plugin#chapterstarted
157
162
  * @event Manager#trackError
158
163
  */
159
- "ChapterStarted": (player: Player, track: Track | UnresolvedTrack, payload: SponsorBlockChapterStarted) => void;
164
+ "ChapterStarted": (player: Player, track: Track | UnresolvedTrack | null, payload: SponsorBlockChapterStarted) => void;
160
165
  /**
161
166
  * SPONSORBLOCK-PLUGIN EVENT
162
167
  * Emitted when Chapters are loaded
163
168
  * @link https://github.com/topi314/Sponsorblock-Plugin#chaptersloaded
164
169
  * @event Manager#trackError
165
170
  */
166
- "ChaptersLoaded": (player: Player, track: Track | UnresolvedTrack, payload: SponsorBlockChaptersLoaded) => void;
171
+ "ChaptersLoaded": (player: Player, track: Track | UnresolvedTrack | null, payload: SponsorBlockChaptersLoaded) => void;
167
172
  }
168
173
  export interface LavalinkManager {
169
174
  /** @private */
@@ -239,6 +244,7 @@ export declare class LavalinkManager extends EventEmitter {
239
244
  * linksBlacklist: [],
240
245
  * linksWhitelist: [],
241
246
  * advancedOptions: {
247
+ * maxFilterFixDuration: 600_000,
242
248
  * debugOptions: {
243
249
  * noAudio: false,
244
250
  * playerDestroy: {
@@ -309,10 +315,22 @@ export declare class LavalinkManager extends EventEmitter {
309
315
  * Delete's a player from the cache without destroying it on lavalink (only works when it's disconnected)
310
316
  * @param guildId
311
317
  * @returns
318
+ *
319
+ * @example
320
+ * ```ts
321
+ * client.lavalink.deletePlayer(interaction.guildId);
322
+ * // shouldn't be used except you know what you are doing.
323
+ * ```
312
324
  */
313
325
  deletePlayer(guildId: string): boolean;
314
326
  /**
315
327
  * Checks wether the the lib is useable based on if any node is connected
328
+ *
329
+ * @example
330
+ * ```ts
331
+ * if(!client.lavalink.useable) return console.error("can'T search yet, because there is no useable lavalink node.")
332
+ * // continue with code e.g. createing a player and searching
333
+ * ```
316
334
  */
317
335
  get useable(): boolean;
318
336
  /**
@@ -320,7 +338,6 @@ export declare class LavalinkManager extends EventEmitter {
320
338
  * @param clientData
321
339
  *
322
340
  * @example
323
- *
324
341
  * ```ts
325
342
  * // on the bot ready event
326
343
  * client.on("ready", () => {
@@ -55,6 +55,7 @@ export class LavalinkManager extends EventEmitter {
55
55
  queueStore: options?.queueOptions?.queueStore ?? new DefaultQueueStore(),
56
56
  },
57
57
  advancedOptions: {
58
+ maxFilterFixDuration: options?.advancedOptions?.maxFilterFixDuration ?? 600000,
58
59
  debugOptions: {
59
60
  logCustomSearches: options?.advancedOptions?.debugOptions?.logCustomSearches ?? false,
60
61
  noAudio: options?.advancedOptions?.debugOptions?.noAudio ?? false,
@@ -147,6 +148,7 @@ export class LavalinkManager extends EventEmitter {
147
148
  * linksBlacklist: [],
148
149
  * linksWhitelist: [],
149
150
  * advancedOptions: {
151
+ * maxFilterFixDuration: 600_000,
150
152
  * debugOptions: {
151
153
  * noAudio: false,
152
154
  * playerDestroy: {
@@ -241,12 +243,18 @@ export class LavalinkManager extends EventEmitter {
241
243
  * Delete's a player from the cache without destroying it on lavalink (only works when it's disconnected)
242
244
  * @param guildId
243
245
  * @returns
246
+ *
247
+ * @example
248
+ * ```ts
249
+ * client.lavalink.deletePlayer(interaction.guildId);
250
+ * // shouldn't be used except you know what you are doing.
251
+ * ```
244
252
  */
245
253
  deletePlayer(guildId) {
246
254
  const oldPlayer = this.getPlayer(guildId);
247
255
  if (!oldPlayer)
248
256
  return;
249
- // oldPlayer.connected is operational. you could also do oldPlayer.voice?.token
257
+ // oldPlayer.connected is operational. you could also do oldPlayer.voice?.token
250
258
  if (oldPlayer.voiceChannelId === "string" && oldPlayer.connected && !oldPlayer.get("internal_destroywithoutdisconnect")) {
251
259
  if (!this.options?.advancedOptions?.debugOptions?.playerDestroy?.dontThrowError)
252
260
  throw new Error(`Use Player#destroy() not LavalinkManager#deletePlayer() to stop the Player ${JSON.stringify(oldPlayer.toJSON?.())}`);
@@ -257,6 +265,12 @@ export class LavalinkManager extends EventEmitter {
257
265
  }
258
266
  /**
259
267
  * Checks wether the the lib is useable based on if any node is connected
268
+ *
269
+ * @example
270
+ * ```ts
271
+ * if(!client.lavalink.useable) return console.error("can'T search yet, because there is no useable lavalink node.")
272
+ * // continue with code e.g. createing a player and searching
273
+ * ```
260
274
  */
261
275
  get useable() {
262
276
  return this.nodeManager.nodes.filter(v => v.connected).size > 0;
@@ -266,7 +280,6 @@ export class LavalinkManager extends EventEmitter {
266
280
  * @param clientData
267
281
  *
268
282
  * @example
269
- *
270
283
  * ```ts
271
284
  * // on the bot ready event
272
285
  * client.on("ready", () => {
@@ -1,5 +1,7 @@
1
1
  import { ClientCustomSearchPlatformUtils, LavalinkSearchPlatform, SearchPlatform, SourcesRegex } from "./Utils";
2
+ /** Default Sources Record, to allow source parsing with multiple inputs. */
2
3
  export declare const DefaultSources: Record<SearchPlatform, LavalinkSearchPlatform | ClientCustomSearchPlatformUtils>;
4
+ /** Lavalink Plugins definiton */
3
5
  export declare const LavalinkPlugins: {
4
6
  DuncteBot_Plugin: string;
5
7
  LavaSrc: string;
@@ -7,4 +9,5 @@ export declare const LavalinkPlugins: {
7
9
  LavaSearch: string;
8
10
  LavalinkFilterPlugin: string;
9
11
  };
12
+ /** Lavalink Sources regexes for url validations */
10
13
  export declare const SourceLinksRegexes: Record<SourcesRegex, RegExp>;
@@ -1,3 +1,4 @@
1
+ /** Default Sources Record, to allow source parsing with multiple inputs. */
1
2
  export const DefaultSources = {
2
3
  // youtubemusic
3
4
  "youtube music": "ytmsearch",
@@ -22,7 +23,7 @@ export const DefaultSources = {
22
23
  "am": "amsearch",
23
24
  "musicapple": "amsearch",
24
25
  "music apple": "amsearch",
25
- // spotify
26
+ // spotify
26
27
  "spotify": "spsearch",
27
28
  "spsearch": "spsearch",
28
29
  "sp": "spsearch",
@@ -63,6 +64,7 @@ export const DefaultSources = {
63
64
  "link": "link",
64
65
  "uri": "uri"
65
66
  };
67
+ /** Lavalink Plugins definiton */
66
68
  export const LavalinkPlugins = {
67
69
  DuncteBot_Plugin: "DuncteBot-plugin",
68
70
  LavaSrc: "lavasrc-plugin",
@@ -70,6 +72,7 @@ export const LavalinkPlugins = {
70
72
  LavaSearch: "lavasearch-plugin",
71
73
  LavalinkFilterPlugin: "lavalink-filter-plugin"
72
74
  };
75
+ /** Lavalink Sources regexes for url validations */
73
76
  export const SourceLinksRegexes = {
74
77
  /** DEFAULT SUPPORTED BY LAVALINK */
75
78
  YoutubeRegex: /https?:\/\/?(?:www\.)?(?:(m|www)\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|shorts|playlist\?|watch\?v=|watch\?.+(?:&|&#38;);v=))([a-zA-Z0-9\-_]{11})?(?:(?:\?|&|&#38;)index=((?:\d){1,3}))?(?:(?:\?|&|&#38;)?list=([a-zA-Z\-_0-9]{34}))?(?:\S+)?/,