ziplayer 0.0.8 → 0.1.0
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.
- package/README.md +61 -30
- package/dist/extensions/BaseExtension.d.ts +9 -3
- package/dist/extensions/BaseExtension.d.ts.map +1 -1
- package/dist/extensions/BaseExtension.js.map +1 -1
- package/dist/structures/Player.d.ts +299 -2
- package/dist/structures/Player.d.ts.map +1 -1
- package/dist/structures/Player.js +594 -86
- package/dist/structures/Player.js.map +1 -1
- package/dist/structures/PlayerManager.d.ts +166 -2
- package/dist/structures/PlayerManager.d.ts.map +1 -1
- package/dist/structures/PlayerManager.js +182 -8
- package/dist/structures/PlayerManager.js.map +1 -1
- package/dist/structures/Queue.d.ts +193 -2
- package/dist/structures/Queue.d.ts.map +1 -1
- package/dist/structures/Queue.js +193 -2
- package/dist/structures/Queue.js.map +1 -1
- package/dist/types/index.d.ts +327 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/timeout.d.ts +9 -0
- package/dist/utils/timeout.d.ts.map +1 -0
- package/dist/utils/timeout.js +14 -0
- package/dist/utils/timeout.js.map +1 -0
- package/package.json +1 -1
- package/src/extensions/BaseExtension.ts +35 -10
- package/src/structures/Player.ts +625 -88
- package/src/structures/PlayerManager.ts +189 -8
- package/src/structures/Queue.ts +196 -2
- package/src/types/index.ts +343 -4
- package/src/utils/timeout.ts +10 -0
package/dist/types/index.d.ts
CHANGED
|
@@ -1,6 +1,54 @@
|
|
|
1
1
|
import { VoiceConnection } from "@discordjs/voice";
|
|
2
2
|
import { Readable } from "stream";
|
|
3
3
|
import { Player } from "../structures/Player";
|
|
4
|
+
import type { PlayerManager } from "../structures/PlayerManager";
|
|
5
|
+
/**
|
|
6
|
+
* Represents a music track with metadata and streaming information.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* // Basic track from YouTube
|
|
10
|
+
* const track: Track = {
|
|
11
|
+
* id: "dQw4w9WgXcQ",
|
|
12
|
+
* title: "Never Gonna Give You Up",
|
|
13
|
+
* url: "https://youtube.com/watch?v=dQw4w9WgXcQ",
|
|
14
|
+
* duration: 212000,
|
|
15
|
+
* thumbnail: "https://img.youtube.com/vi/dQw4w9WgXcQ/maxresdefault.jpg",
|
|
16
|
+
* requestedBy: "123456789",
|
|
17
|
+
* source: "youtube",
|
|
18
|
+
* metadata: {
|
|
19
|
+
* artist: "Rick Astley",
|
|
20
|
+
* album: "Whenever You Need Somebody"
|
|
21
|
+
* }
|
|
22
|
+
* };
|
|
23
|
+
*
|
|
24
|
+
* // Track from SoundCloud
|
|
25
|
+
* const soundcloudTrack: Track = {
|
|
26
|
+
* id: "soundcloud-track-123",
|
|
27
|
+
* title: "Electronic Song",
|
|
28
|
+
* url: "https://soundcloud.com/artist/electronic-song",
|
|
29
|
+
* duration: 180000,
|
|
30
|
+
* requestedBy: "user456",
|
|
31
|
+
* source: "soundcloud",
|
|
32
|
+
* metadata: {
|
|
33
|
+
* artist: "Electronic Artist",
|
|
34
|
+
* genre: "Electronic"
|
|
35
|
+
* }
|
|
36
|
+
* };
|
|
37
|
+
*
|
|
38
|
+
* // TTS track
|
|
39
|
+
* const ttsTrack: Track = {
|
|
40
|
+
* id: "tts-" + Date.now(),
|
|
41
|
+
* title: "TTS: Hello everyone!",
|
|
42
|
+
* url: "tts: Hello everyone!",
|
|
43
|
+
* duration: 5000,
|
|
44
|
+
* requestedBy: "user789",
|
|
45
|
+
* source: "tts",
|
|
46
|
+
* metadata: {
|
|
47
|
+
* text: "Hello everyone!",
|
|
48
|
+
* language: "en"
|
|
49
|
+
* }
|
|
50
|
+
* };
|
|
51
|
+
*/
|
|
4
52
|
export interface Track {
|
|
5
53
|
id: string;
|
|
6
54
|
title: string;
|
|
@@ -11,6 +59,28 @@ export interface Track {
|
|
|
11
59
|
source: string;
|
|
12
60
|
metadata?: Record<string, any>;
|
|
13
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Contains search results from plugins, including tracks and optional playlist information.
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* const result: SearchResult = {
|
|
67
|
+
* tracks: [
|
|
68
|
+
* {
|
|
69
|
+
* id: "track1",
|
|
70
|
+
* title: "Song 1",
|
|
71
|
+
* url: "https://example.com/track1",
|
|
72
|
+
* duration: 180000,
|
|
73
|
+
* requestedBy: "user123",
|
|
74
|
+
* source: "youtube"
|
|
75
|
+
* }
|
|
76
|
+
* ],
|
|
77
|
+
* playlist: {
|
|
78
|
+
* name: "My Playlist",
|
|
79
|
+
* url: "https://example.com/playlist",
|
|
80
|
+
* thumbnail: "https://example.com/thumb.jpg"
|
|
81
|
+
* }
|
|
82
|
+
* };
|
|
83
|
+
*/
|
|
14
84
|
export interface SearchResult {
|
|
15
85
|
tracks: Track[];
|
|
16
86
|
playlist?: {
|
|
@@ -19,11 +89,45 @@ export interface SearchResult {
|
|
|
19
89
|
thumbnail?: string;
|
|
20
90
|
};
|
|
21
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Contains streaming information for audio playback.
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* const streamInfo: StreamInfo = {
|
|
97
|
+
* stream: audioStream,
|
|
98
|
+
* type: "webm/opus",
|
|
99
|
+
* metadata: {
|
|
100
|
+
* bitrate: 128000,
|
|
101
|
+
* sampleRate: 48000
|
|
102
|
+
* }
|
|
103
|
+
* };
|
|
104
|
+
*/
|
|
22
105
|
export interface StreamInfo {
|
|
23
106
|
stream: Readable;
|
|
24
107
|
type: "webm/opus" | "ogg/opus" | "arbitrary";
|
|
25
108
|
metadata?: Record<string, any>;
|
|
26
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* Configuration options for creating a new player instance.
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* const options: PlayerOptions = {
|
|
115
|
+
* leaveOnEnd: true,
|
|
116
|
+
* leaveOnEmpty: true,
|
|
117
|
+
* leaveTimeout: 30000,
|
|
118
|
+
* volume: 0.5,
|
|
119
|
+
* quality: "high",
|
|
120
|
+
* selfDeaf: false,
|
|
121
|
+
* selfMute: false,
|
|
122
|
+
* extractorTimeout: 10000,
|
|
123
|
+
* tts: {
|
|
124
|
+
* createPlayer: true,
|
|
125
|
+
* interrupt: true,
|
|
126
|
+
* volume: 1.0,
|
|
127
|
+
* Max_Time_TTS: 30000
|
|
128
|
+
* }
|
|
129
|
+
* };
|
|
130
|
+
*/
|
|
27
131
|
export interface PlayerOptions {
|
|
28
132
|
leaveOnEnd?: boolean;
|
|
29
133
|
leaveOnEmpty?: boolean;
|
|
@@ -61,8 +165,40 @@ export interface PlayerOptions {
|
|
|
61
165
|
*/
|
|
62
166
|
extensions?: any[] | string[];
|
|
63
167
|
}
|
|
168
|
+
/**
|
|
169
|
+
* Constructor for a SourcePlugin
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* const plugin = new YouTubePlugin();
|
|
173
|
+
* console.log(`Plugin: ${plugin.name}`);
|
|
174
|
+
*/
|
|
64
175
|
export type SourcePluginCtor<T extends SourcePlugin = SourcePlugin> = new (...args: any[]) => T;
|
|
176
|
+
/**
|
|
177
|
+
* SourcePlugin or SourcePluginCtor
|
|
178
|
+
*
|
|
179
|
+
* @example
|
|
180
|
+
* const plugin = new YouTubePlugin();
|
|
181
|
+
* console.log(`Plugin: ${plugin.name}`);
|
|
182
|
+
*/
|
|
65
183
|
export type SourcePluginLike = SourcePlugin | SourcePluginCtor;
|
|
184
|
+
/**
|
|
185
|
+
* Configuration options for creating a PlayerManager instance.
|
|
186
|
+
*
|
|
187
|
+
* @example
|
|
188
|
+
* const managerOptions: PlayerManagerOptions = {
|
|
189
|
+
* plugins: [
|
|
190
|
+
* new YouTubePlugin(),
|
|
191
|
+
* new SoundCloudPlugin(),
|
|
192
|
+
* new SpotifyPlugin(),
|
|
193
|
+
* new TTSPlugin({ defaultLang: "en" })
|
|
194
|
+
* ],
|
|
195
|
+
* extensions: [
|
|
196
|
+
* new voiceExt(null, { lang: "en-US" }),
|
|
197
|
+
* new lavalinkExt(null, { nodes: [...] })
|
|
198
|
+
* ],
|
|
199
|
+
* extractorTimeout: 10000
|
|
200
|
+
* };
|
|
201
|
+
*/
|
|
66
202
|
export interface PlayerManagerOptions {
|
|
67
203
|
plugins?: SourcePluginLike[];
|
|
68
204
|
extensions?: any[];
|
|
@@ -72,12 +208,178 @@ export interface PlayerManagerOptions {
|
|
|
72
208
|
*/
|
|
73
209
|
extractorTimeout?: number;
|
|
74
210
|
}
|
|
211
|
+
/**
|
|
212
|
+
* Options for the progress bar
|
|
213
|
+
*
|
|
214
|
+
* @example
|
|
215
|
+
* const options: ProgressBarOptions = {
|
|
216
|
+
* size: 10,
|
|
217
|
+
* barChar: "=",
|
|
218
|
+
* progressChar: ">"
|
|
219
|
+
* };
|
|
220
|
+
*/
|
|
75
221
|
export interface ProgressBarOptions {
|
|
76
222
|
size?: number;
|
|
77
223
|
barChar?: string;
|
|
78
224
|
progressChar?: string;
|
|
79
225
|
}
|
|
80
226
|
export type LoopMode = "off" | "track" | "queue";
|
|
227
|
+
/**
|
|
228
|
+
* Context for the extension
|
|
229
|
+
*
|
|
230
|
+
* @example
|
|
231
|
+
* const context: ExtensionContext = {
|
|
232
|
+
* player: player,
|
|
233
|
+
* manager: manager
|
|
234
|
+
* };
|
|
235
|
+
*/
|
|
236
|
+
export interface ExtensionContext {
|
|
237
|
+
player: Player;
|
|
238
|
+
manager: PlayerManager;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Request for the extension to play a track
|
|
242
|
+
*
|
|
243
|
+
* @example
|
|
244
|
+
* const request: ExtensionPlayRequest = {
|
|
245
|
+
* query: "Song Name",
|
|
246
|
+
* requestedBy: "user123"
|
|
247
|
+
* };
|
|
248
|
+
*/
|
|
249
|
+
export interface ExtensionPlayRequest {
|
|
250
|
+
query: string | Track;
|
|
251
|
+
requestedBy?: string;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Response for the extension to play a track
|
|
255
|
+
*
|
|
256
|
+
* @example
|
|
257
|
+
* const response: ExtensionPlayResponse = {
|
|
258
|
+
* handled: true,
|
|
259
|
+
* query: "Song Name",
|
|
260
|
+
* requestedBy: "user123"
|
|
261
|
+
* };
|
|
262
|
+
*/
|
|
263
|
+
export interface ExtensionPlayResponse {
|
|
264
|
+
handled?: boolean;
|
|
265
|
+
query?: string | Track;
|
|
266
|
+
requestedBy?: string;
|
|
267
|
+
tracks?: Track[];
|
|
268
|
+
isPlaylist?: boolean;
|
|
269
|
+
success?: boolean;
|
|
270
|
+
error?: Error;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Payload for the extension to play a track
|
|
274
|
+
*
|
|
275
|
+
* @example
|
|
276
|
+
* const payload: ExtensionAfterPlayPayload = {
|
|
277
|
+
* success: true,
|
|
278
|
+
* query: "Song Name",
|
|
279
|
+
* requestedBy: "user123"
|
|
280
|
+
* };
|
|
281
|
+
*/
|
|
282
|
+
export interface ExtensionAfterPlayPayload {
|
|
283
|
+
success: boolean;
|
|
284
|
+
query: string | Track;
|
|
285
|
+
requestedBy?: string;
|
|
286
|
+
tracks?: Track[];
|
|
287
|
+
isPlaylist?: boolean;
|
|
288
|
+
error?: Error;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Request for the extension to stream a track
|
|
292
|
+
*
|
|
293
|
+
* @example
|
|
294
|
+
* const request: ExtensionStreamRequest = {
|
|
295
|
+
* track: track
|
|
296
|
+
* };
|
|
297
|
+
*/
|
|
298
|
+
export interface ExtensionStreamRequest {
|
|
299
|
+
track: Track;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Request for the extension to search for a track
|
|
303
|
+
*
|
|
304
|
+
* @example
|
|
305
|
+
* const request: ExtensionSearchRequest = {
|
|
306
|
+
* query: "Song Name",
|
|
307
|
+
* requestedBy: "user123"
|
|
308
|
+
* };
|
|
309
|
+
*/
|
|
310
|
+
export interface ExtensionSearchRequest {
|
|
311
|
+
query: string;
|
|
312
|
+
requestedBy: string;
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Event types emitted by Player instances.
|
|
316
|
+
*
|
|
317
|
+
* @example
|
|
318
|
+
*
|
|
319
|
+
* player.on("willPlay", (player, track) => {
|
|
320
|
+
* console.log(`Up next: ${track.title}`);
|
|
321
|
+
* });
|
|
322
|
+
*
|
|
323
|
+
* player.on("trackEnd", (player, track) => {
|
|
324
|
+
* console.log(`Now playing: ${track.title}`);
|
|
325
|
+
* });
|
|
326
|
+
*
|
|
327
|
+
* player.on("queueAdd", (player, track) => {
|
|
328
|
+
* console.log(`Queue added: ${track.title}`);
|
|
329
|
+
* });
|
|
330
|
+
*
|
|
331
|
+
* player.on("queueAddList", (player, tracks) => {
|
|
332
|
+
* console.log(`Queue added: ${tracks.length} tracks`);
|
|
333
|
+
* });
|
|
334
|
+
*
|
|
335
|
+
* player.on("queueRemove", (player, track, index) => {
|
|
336
|
+
* console.log(`Queue removed: ${track.title} at index ${index}`);
|
|
337
|
+
* });
|
|
338
|
+
*
|
|
339
|
+
* player.on("playerPause", (player, track) => {
|
|
340
|
+
* console.log(`Player paused: ${track.title}`);
|
|
341
|
+
* });
|
|
342
|
+
*
|
|
343
|
+
* player.on("playerResume", (player, track) => {
|
|
344
|
+
* console.log(`Player resumed: ${track.title}`);
|
|
345
|
+
* });
|
|
346
|
+
*
|
|
347
|
+
* player.on("playerStop", (player) => {
|
|
348
|
+
* console.log("Player stopped");
|
|
349
|
+
* });
|
|
350
|
+
*
|
|
351
|
+
* player.on("playerDestroy", (player) => {
|
|
352
|
+
* console.log("Player destroyed");
|
|
353
|
+
* });
|
|
354
|
+
*
|
|
355
|
+
* player.on("ttsStart", (player, payload) => {
|
|
356
|
+
* console.log(`TTS started: ${payload.text}`);
|
|
357
|
+
* });
|
|
358
|
+
*
|
|
359
|
+
* player.on("ttsEnd", (player) => {
|
|
360
|
+
* console.log("TTS ended");
|
|
361
|
+
* });
|
|
362
|
+
*
|
|
363
|
+
* player.on("playerError", (player, error, track) => {
|
|
364
|
+
* console.log(`Player error: ${error.message}`);
|
|
365
|
+
* });
|
|
366
|
+
*
|
|
367
|
+
* player.on("connectionError", (player, error) => {
|
|
368
|
+
* console.log(`Connection error: ${error.message}`);
|
|
369
|
+
* });
|
|
370
|
+
* player.on("trackStart", (player, track) => {
|
|
371
|
+
* console.log(`Track started: ${track.title}`);
|
|
372
|
+
* });
|
|
373
|
+
*
|
|
374
|
+
* player.on("volumeChange", (player, oldVolume, newVolume) => {
|
|
375
|
+
* console.log(`Volume changed: ${oldVolume} -> ${newVolume}`);
|
|
376
|
+
* });
|
|
377
|
+
*
|
|
378
|
+
* player.on("queueEnd", (player) => {
|
|
379
|
+
* console.log("Queue finished");
|
|
380
|
+
* });
|
|
381
|
+
*
|
|
382
|
+
*/
|
|
81
383
|
export interface PlayerEvents {
|
|
82
384
|
debug: [message: string, ...args: any[]];
|
|
83
385
|
willPlay: [track: Track, upcomingTracks: Track[]];
|
|
@@ -102,6 +404,15 @@ export interface PlayerEvents {
|
|
|
102
404
|
/** Emitted when TTS finished (interruption mode) */
|
|
103
405
|
ttsEnd: [];
|
|
104
406
|
}
|
|
407
|
+
/**
|
|
408
|
+
* Plugin interface
|
|
409
|
+
*
|
|
410
|
+
* @example
|
|
411
|
+
* const plugin: SourcePlugin = {
|
|
412
|
+
* name: "YouTube",
|
|
413
|
+
* version: "1.0.0"
|
|
414
|
+
* };
|
|
415
|
+
*/
|
|
105
416
|
export interface SourcePlugin {
|
|
106
417
|
name: string;
|
|
107
418
|
version: string;
|
|
@@ -115,11 +426,26 @@ export interface SourcePlugin {
|
|
|
115
426
|
validate?(url: string): boolean;
|
|
116
427
|
extractPlaylist?(url: string, requestedBy: string): Promise<Track[]>;
|
|
117
428
|
}
|
|
429
|
+
/**
|
|
430
|
+
* Extension interface
|
|
431
|
+
*
|
|
432
|
+
* @example
|
|
433
|
+
* const extension: SourceExtension = {
|
|
434
|
+
* name: "YouTube",
|
|
435
|
+
* version: "1.0.0"
|
|
436
|
+
* };
|
|
437
|
+
*/
|
|
118
438
|
export interface SourceExtension {
|
|
119
439
|
name: string;
|
|
120
440
|
version: string;
|
|
121
441
|
connection?: VoiceConnection;
|
|
122
442
|
player: Player | null;
|
|
123
|
-
active(alas: any): boolean
|
|
443
|
+
active(alas: any): boolean | Promise<boolean>;
|
|
444
|
+
onRegister?(context: ExtensionContext): void | Promise<void>;
|
|
445
|
+
onDestroy?(context: ExtensionContext): void | Promise<void>;
|
|
446
|
+
beforePlay?(context: ExtensionContext, payload: ExtensionPlayRequest): Promise<ExtensionPlayResponse | void> | ExtensionPlayResponse | void;
|
|
447
|
+
afterPlay?(context: ExtensionContext, payload: ExtensionAfterPlayPayload): Promise<void> | void;
|
|
448
|
+
provideSearch?(context: ExtensionContext, payload: ExtensionSearchRequest): Promise<SearchResult | null | undefined> | SearchResult | null | undefined;
|
|
449
|
+
provideStream?(context: ExtensionContext, payload: ExtensionStreamRequest): Promise<StreamInfo | null | undefined> | StreamInfo | null | undefined;
|
|
124
450
|
}
|
|
125
451
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility function to add timeout to a promise
|
|
3
|
+
* @param promise The promise to add timeout to
|
|
4
|
+
* @param timeoutMs Timeout in milliseconds
|
|
5
|
+
* @param message Error message when timeout occurs
|
|
6
|
+
* @returns Promise that rejects if timeout is reached
|
|
7
|
+
*/
|
|
8
|
+
export declare function withTimeout<T>(promise: Promise<T>, timeoutMs: number, message: string): Promise<T>;
|
|
9
|
+
//# sourceMappingURL=timeout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../src/utils/timeout.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAElG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.withTimeout = withTimeout;
|
|
4
|
+
/**
|
|
5
|
+
* Utility function to add timeout to a promise
|
|
6
|
+
* @param promise The promise to add timeout to
|
|
7
|
+
* @param timeoutMs Timeout in milliseconds
|
|
8
|
+
* @param message Error message when timeout occurs
|
|
9
|
+
* @returns Promise that rejects if timeout is reached
|
|
10
|
+
*/
|
|
11
|
+
function withTimeout(promise, timeoutMs, message) {
|
|
12
|
+
return Promise.race([promise, new Promise((_, reject) => setTimeout(() => reject(new Error(message)), timeoutMs))]);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=timeout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeout.js","sourceRoot":"","sources":["../../src/utils/timeout.ts"],"names":[],"mappings":";;AAOA,kCAEC;AATD;;;;;;GAMG;AACH,SAAgB,WAAW,CAAI,OAAmB,EAAE,SAAiB,EAAE,OAAe;IACrF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5H,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,35 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import type {
|
|
2
|
+
SourceExtension,
|
|
3
|
+
ExtensionContext,
|
|
4
|
+
SearchResult,
|
|
5
|
+
ExtensionPlayRequest,
|
|
6
|
+
ExtensionPlayResponse,
|
|
7
|
+
ExtensionAfterPlayPayload,
|
|
8
|
+
ExtensionStreamRequest,
|
|
9
|
+
StreamInfo,
|
|
10
|
+
ExtensionSearchRequest,
|
|
11
|
+
} from "../types";
|
|
12
|
+
import type { Player } from "../structures/Player";
|
|
13
|
+
|
|
14
|
+
export abstract class BaseExtension implements SourceExtension {
|
|
15
|
+
abstract name: string;
|
|
16
|
+
abstract version: string;
|
|
17
|
+
abstract player: Player | null;
|
|
18
|
+
abstract active(alas: any): boolean | Promise<boolean>;
|
|
19
|
+
|
|
20
|
+
onRegister?(context: ExtensionContext): void | Promise<void>;
|
|
21
|
+
onDestroy?(context: ExtensionContext): void | Promise<void>;
|
|
22
|
+
beforePlay?(
|
|
23
|
+
context: ExtensionContext,
|
|
24
|
+
payload: ExtensionPlayRequest,
|
|
25
|
+
): Promise<ExtensionPlayResponse | void> | ExtensionPlayResponse | void;
|
|
26
|
+
afterPlay?(context: ExtensionContext, payload: ExtensionAfterPlayPayload): Promise<void> | void;
|
|
27
|
+
provideSearch?(
|
|
28
|
+
context: ExtensionContext,
|
|
29
|
+
payload: ExtensionSearchRequest,
|
|
30
|
+
): Promise<SearchResult | null | undefined> | SearchResult | null | undefined;
|
|
31
|
+
provideStream?(
|
|
32
|
+
context: ExtensionContext,
|
|
33
|
+
payload: ExtensionStreamRequest,
|
|
34
|
+
): Promise<StreamInfo | null | undefined> | StreamInfo | null | undefined;
|
|
35
|
+
}
|