ziplayer 0.3.3 → 0.3.5

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 (40) hide show
  1. package/AGENTS.md +717 -653
  2. package/README.md +658 -639
  3. package/dist/extensions/BaseExtension.d.ts +10 -1
  4. package/dist/extensions/BaseExtension.d.ts.map +1 -1
  5. package/dist/extensions/BaseExtension.js +27 -1
  6. package/dist/extensions/BaseExtension.js.map +1 -1
  7. package/dist/extensions/index.d.ts.map +1 -1
  8. package/dist/extensions/index.js +24 -6
  9. package/dist/extensions/index.js.map +1 -1
  10. package/dist/plugins/index.d.ts.map +1 -1
  11. package/dist/plugins/index.js +104 -50
  12. package/dist/plugins/index.js.map +1 -1
  13. package/dist/structures/Player.d.ts +74 -43
  14. package/dist/structures/Player.d.ts.map +1 -1
  15. package/dist/structures/Player.js +443 -114
  16. package/dist/structures/Player.js.map +1 -1
  17. package/dist/structures/PlayerManager.d.ts +41 -6
  18. package/dist/structures/PlayerManager.d.ts.map +1 -1
  19. package/dist/structures/PlayerManager.js +94 -125
  20. package/dist/structures/PlayerManager.js.map +1 -1
  21. package/dist/structures/StreamManager.d.ts +1 -0
  22. package/dist/structures/StreamManager.d.ts.map +1 -1
  23. package/dist/structures/StreamManager.js +1 -0
  24. package/dist/structures/StreamManager.js.map +1 -1
  25. package/dist/types/extension.d.ts +3 -0
  26. package/dist/types/extension.d.ts.map +1 -1
  27. package/dist/types/index.d.ts +38 -11
  28. package/dist/types/index.d.ts.map +1 -1
  29. package/dist/types/index.js +7 -0
  30. package/dist/types/index.js.map +1 -1
  31. package/package.json +1 -1
  32. package/src/extensions/BaseExtension.ts +31 -1
  33. package/src/extensions/index.ts +30 -7
  34. package/src/plugins/index.ts +136 -53
  35. package/src/structures/Player.ts +2940 -2544
  36. package/src/structures/PlayerManager.ts +916 -955
  37. package/src/structures/Queue.ts +621 -621
  38. package/src/structures/StreamManager.ts +2 -0
  39. package/src/types/extension.ts +3 -0
  40. package/src/types/index.ts +43 -11
@@ -12,6 +12,7 @@ export interface ManagedStream {
12
12
  metadata: {
13
13
  source: string;
14
14
  isPreload: boolean;
15
+ isRemote: boolean;
15
16
  priority: number;
16
17
  };
17
18
  listeners: {
@@ -128,6 +129,7 @@ export class StreamManager extends EventEmitter {
128
129
  source: track.source || "unknown",
129
130
  isPreload: metadata.isPreload || false,
130
131
  priority: metadata.priority || 0,
132
+ isRemote: metadata.isRemote || false,
131
133
  ...metadata,
132
134
  },
133
135
  listeners,
@@ -47,6 +47,9 @@ export interface SourceExtension {
47
47
  export interface ExtensionContext {
48
48
  player: Player;
49
49
  manager: PlayerManager;
50
+ playNext?: () => Promise<void>;
51
+ skip?: () => void;
52
+ emit?: (event: string, ...args: any[]) => void;
50
53
  }
51
54
 
52
55
  /**
@@ -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,20 @@ 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
+ };
123
141
  }
124
142
 
125
143
  /** Passed to each {@link TrackMiddleware} run (before stream resolution). */
@@ -135,20 +153,13 @@ export interface TrackMiddlewareContext {
135
153
  */
136
154
  export type TrackMiddleware = (track: Track, context: TrackMiddlewareContext) => void | Track | Promise<void | Track>;
137
155
 
138
- /** Options for {@link PlayerManager.subscribePlaybackMirror}. */
156
+ /** Options for {@link PlayerManager.subscribeForwardMirror}. */
139
157
  export interface PlaybackMirrorOptions {
140
158
  leaderGuildId: string;
141
159
  followerGuildIds: string[];
142
- /** User id passed to follower `play()` (often the bot application id). */
143
- mirrorUserId: string;
144
- /** When true (default), follower `setVolume` tracks the leader. */
145
- syncVolume?: boolean;
146
160
  /**
147
161
  * When enabled, follower connections subscribe directly
148
- * to leader.audioPlayer instead of creating their own streams.
149
- *
150
- * Greatly reduces bandwidth/CPU usage.
151
- *
162
+ * to leader.audioPlayer
152
163
  * Default: true
153
164
  */
154
165
  forwardMode?: boolean;
@@ -427,12 +438,28 @@ export interface PreloadState {
427
438
  isBeingUsed: boolean;
428
439
  }
429
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
+
430
454
  export interface PlayerStats {
431
455
  totalPlayers: number;
456
+ leader: number;
457
+ follower: number;
432
458
  activePlayers: number;
433
459
  pausedPlayers: number;
434
460
  connectedPlayers: number;
435
461
  totalTracksInQueue: number;
462
+ forwardHealthStatus: ForwardHealthStatus[];
436
463
  }
437
464
 
438
465
  export interface StreamSlot {
@@ -553,7 +580,10 @@ export interface ManagerEvents {
553
580
  lyricsChange: [player: Player, track: Track, lyrics: any];
554
581
  voiceCreate: [player: Player, evt: any];
555
582
  stats: [stats: PlayerStats];
556
- 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];
557
587
  }
558
588
  export interface PlayerEvents {
559
589
  debug: [message: string, ...args: any[]];
@@ -587,6 +617,8 @@ export interface PlayerEvents {
587
617
  streamError: [error: Error, track: Track | null];
588
618
  /** Emitted when player stats are updated (if enabled) */
589
619
  stats: [stats: PlayerStats];
620
+ forwardModeStart: [leader: Player];
621
+ forwardModeEnd: [leader: Player, reason: string | undefined];
590
622
  }
591
623
 
592
624
  export * from "./fillter";