ziplayer 0.3.2 → 0.3.4
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/{AI-Guide.md → AGENTS.md} +717 -624
- package/README.md +658 -526
- package/dist/extensions/BaseExtension.d.ts +10 -1
- package/dist/extensions/BaseExtension.d.ts.map +1 -1
- package/dist/extensions/BaseExtension.js +27 -1
- package/dist/extensions/BaseExtension.js.map +1 -1
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/index.js +24 -6
- package/dist/extensions/index.js.map +1 -1
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +105 -51
- package/dist/plugins/index.js.map +1 -1
- package/dist/structures/Player.d.ts +90 -15
- package/dist/structures/Player.d.ts.map +1 -1
- package/dist/structures/Player.js +487 -81
- package/dist/structures/Player.js.map +1 -1
- package/dist/structures/PlayerManager.d.ts +70 -6
- package/dist/structures/PlayerManager.d.ts.map +1 -1
- package/dist/structures/PlayerManager.js +184 -19
- package/dist/structures/PlayerManager.js.map +1 -1
- package/dist/structures/Queue.d.ts +19 -0
- package/dist/structures/Queue.d.ts.map +1 -1
- package/dist/structures/Queue.js +21 -0
- package/dist/structures/Queue.js.map +1 -1
- package/dist/types/extension.d.ts +3 -0
- package/dist/types/extension.d.ts.map +1 -1
- package/dist/types/index.d.ts +69 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +13 -0
- package/dist/types/index.js.map +1 -1
- package/package.json +1 -1
- package/src/extensions/BaseExtension.ts +31 -1
- package/src/extensions/index.ts +30 -7
- package/src/plugins/index.ts +137 -54
- package/src/structures/Player.ts +2937 -2457
- package/src/structures/PlayerManager.ts +916 -725
- package/src/structures/Queue.ts +621 -599
- package/src/types/extension.ts +3 -0
- package/src/types/index.ts +80 -2
package/src/types/extension.ts
CHANGED
package/src/types/index.ts
CHANGED
|
@@ -4,6 +4,12 @@ import type { PlayerManager } from "../structures/PlayerManager";
|
|
|
4
4
|
import type { AudioFilter } from "./fillter";
|
|
5
5
|
import type { SourcePluginLike } from "./plugin";
|
|
6
6
|
import type { AudioResource } from "@discordjs/voice";
|
|
7
|
+
|
|
8
|
+
export enum PlaybackMode {
|
|
9
|
+
NATIVE = "native",
|
|
10
|
+
REMOTE = "remote",
|
|
11
|
+
FORWARD = "forward",
|
|
12
|
+
}
|
|
7
13
|
/**
|
|
8
14
|
* Represents a music track with metadata and streaming information.
|
|
9
15
|
*
|
|
@@ -118,8 +124,50 @@ export interface SearchScore {
|
|
|
118
124
|
*/
|
|
119
125
|
export interface StreamInfo {
|
|
120
126
|
stream: Readable;
|
|
121
|
-
type: "webm/opus" | "ogg/opus" | "arbitrary";
|
|
127
|
+
type: "webm/opus" | "ogg/opus" | "arbitrary" | string;
|
|
122
128
|
metadata?: Record<string, any>;
|
|
129
|
+
|
|
130
|
+
remote?: boolean;
|
|
131
|
+
|
|
132
|
+
handle?: {
|
|
133
|
+
play(): Promise<void>;
|
|
134
|
+
stop(): Promise<void>;
|
|
135
|
+
pause(): Promise<void>;
|
|
136
|
+
resume(): Promise<void>;
|
|
137
|
+
seek(position: number): Promise<void>;
|
|
138
|
+
setVolume(volume: number): Promise<void>;
|
|
139
|
+
destroy(): Promise<void>;
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/** Passed to each {@link TrackMiddleware} run (before stream resolution). */
|
|
144
|
+
export interface TrackMiddlewareContext {
|
|
145
|
+
player: Player;
|
|
146
|
+
manager: PlayerManager;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Runs immediately before stream extraction (`Player.getStream`): after enqueue, before extension `provideStream` and plugins.
|
|
151
|
+
* Prefer mutating `track` in place (especially `metadata`). If you return another object, its fields are merged into the original
|
|
152
|
+
* `track` reference so queue/current-track pointers stay valid.
|
|
153
|
+
*/
|
|
154
|
+
export type TrackMiddleware = (track: Track, context: TrackMiddlewareContext) => void | Track | Promise<void | Track>;
|
|
155
|
+
|
|
156
|
+
/** Options for {@link PlayerManager.subscribeForwardMirror}. */
|
|
157
|
+
export interface PlaybackMirrorOptions {
|
|
158
|
+
leaderGuildId: string;
|
|
159
|
+
followerGuildIds: string[];
|
|
160
|
+
/**
|
|
161
|
+
* When enabled, follower connections subscribe directly
|
|
162
|
+
* to leader.audioPlayer
|
|
163
|
+
* Default: true
|
|
164
|
+
*/
|
|
165
|
+
forwardMode?: boolean;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export function normalizeTrackMiddleware(input?: TrackMiddleware | TrackMiddleware[]): TrackMiddleware[] {
|
|
169
|
+
if (!input) return [];
|
|
170
|
+
return Array.isArray(input) ? input : [input];
|
|
123
171
|
}
|
|
124
172
|
|
|
125
173
|
/**
|
|
@@ -302,6 +350,11 @@ export interface PlayerOptions {
|
|
|
302
350
|
*/
|
|
303
351
|
limiterCeiling?: number;
|
|
304
352
|
};
|
|
353
|
+
/**
|
|
354
|
+
* Chain of middleware applied to every track immediately before stream extraction (after queueing).
|
|
355
|
+
* Merged after {@link PlayerManagerOptions.trackMiddleware} from the manager.
|
|
356
|
+
*/
|
|
357
|
+
trackMiddleware?: TrackMiddleware | TrackMiddleware[];
|
|
305
358
|
}
|
|
306
359
|
|
|
307
360
|
export interface PlayerManagerOptions {
|
|
@@ -312,6 +365,10 @@ export interface PlayerManagerOptions {
|
|
|
312
365
|
cleanupInterval?: number; // Cleanup interval in ms
|
|
313
366
|
enableSearchCache?: boolean; // Enable search result caching
|
|
314
367
|
enableStatsCollection?: boolean; // Enable stats collection events
|
|
368
|
+
/**
|
|
369
|
+
* Global track middleware for every {@link Player} created from this manager (before per-player middleware).
|
|
370
|
+
*/
|
|
371
|
+
trackMiddleware?: TrackMiddleware | TrackMiddleware[];
|
|
315
372
|
}
|
|
316
373
|
|
|
317
374
|
/**
|
|
@@ -381,12 +438,28 @@ export interface PreloadState {
|
|
|
381
438
|
isBeingUsed: boolean;
|
|
382
439
|
}
|
|
383
440
|
|
|
441
|
+
export interface ForwardHealthStatus {
|
|
442
|
+
guildId: string;
|
|
443
|
+
healthy: boolean;
|
|
444
|
+
role: "leader" | "follower" | "none";
|
|
445
|
+
issues: string[];
|
|
446
|
+
details: {
|
|
447
|
+
leaderId?: string;
|
|
448
|
+
followerCount?: number;
|
|
449
|
+
connectionState?: string;
|
|
450
|
+
audioPlayerState?: string;
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
|
|
384
454
|
export interface PlayerStats {
|
|
385
455
|
totalPlayers: number;
|
|
456
|
+
leader: number;
|
|
457
|
+
follower: number;
|
|
386
458
|
activePlayers: number;
|
|
387
459
|
pausedPlayers: number;
|
|
388
460
|
connectedPlayers: number;
|
|
389
461
|
totalTracksInQueue: number;
|
|
462
|
+
forwardHealthStatus: ForwardHealthStatus[];
|
|
390
463
|
}
|
|
391
464
|
|
|
392
465
|
export interface StreamSlot {
|
|
@@ -507,7 +580,10 @@ export interface ManagerEvents {
|
|
|
507
580
|
lyricsChange: [player: Player, track: Track, lyrics: any];
|
|
508
581
|
voiceCreate: [player: Player, evt: any];
|
|
509
582
|
stats: [stats: PlayerStats];
|
|
510
|
-
streamError: [error: Error, track: Track | null];
|
|
583
|
+
streamError: [player: Player, error: Error, track: Track | null];
|
|
584
|
+
|
|
585
|
+
forwardModeStart: [player: Player, leader: Player];
|
|
586
|
+
forwardModeEnd: [player: Player, leader: Player, reason: string | undefined];
|
|
511
587
|
}
|
|
512
588
|
export interface PlayerEvents {
|
|
513
589
|
debug: [message: string, ...args: any[]];
|
|
@@ -541,6 +617,8 @@ export interface PlayerEvents {
|
|
|
541
617
|
streamError: [error: Error, track: Track | null];
|
|
542
618
|
/** Emitted when player stats are updated (if enabled) */
|
|
543
619
|
stats: [stats: PlayerStats];
|
|
620
|
+
forwardModeStart: [leader: Player];
|
|
621
|
+
forwardModeEnd: [leader: Player, reason: string | undefined];
|
|
544
622
|
}
|
|
545
623
|
|
|
546
624
|
export * from "./fillter";
|