ziplayer 0.2.6 → 0.2.7-dev.1

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 (57) hide show
  1. package/AI-Guide.md +607 -0
  2. package/README.md +513 -196
  3. package/dist/extensions/BaseExtension.d.ts +1 -0
  4. package/dist/extensions/BaseExtension.d.ts.map +1 -1
  5. package/dist/extensions/BaseExtension.js.map +1 -1
  6. package/dist/extensions/index.d.ts +38 -3
  7. package/dist/extensions/index.d.ts.map +1 -1
  8. package/dist/extensions/index.js +259 -41
  9. package/dist/extensions/index.js.map +1 -1
  10. package/dist/persistence/PersistenceManager.d.ts +61 -0
  11. package/dist/persistence/PersistenceManager.d.ts.map +1 -0
  12. package/dist/persistence/PersistenceManager.js +551 -0
  13. package/dist/persistence/PersistenceManager.js.map +1 -0
  14. package/dist/plugins/BasePlugin.js +1 -1
  15. package/dist/plugins/BasePlugin.js.map +1 -1
  16. package/dist/plugins/index.d.ts +19 -4
  17. package/dist/plugins/index.d.ts.map +1 -1
  18. package/dist/plugins/index.js +273 -146
  19. package/dist/plugins/index.js.map +1 -1
  20. package/dist/structures/FilterManager.js +3 -3
  21. package/dist/structures/FilterManager.js.map +1 -1
  22. package/dist/structures/Player.d.ts +64 -14
  23. package/dist/structures/Player.d.ts.map +1 -1
  24. package/dist/structures/Player.js +344 -91
  25. package/dist/structures/Player.js.map +1 -1
  26. package/dist/structures/PlayerManager.d.ts +125 -91
  27. package/dist/structures/PlayerManager.d.ts.map +1 -1
  28. package/dist/structures/PlayerManager.js +406 -111
  29. package/dist/structures/PlayerManager.js.map +1 -1
  30. package/dist/structures/Queue.d.ts +136 -31
  31. package/dist/structures/Queue.d.ts.map +1 -1
  32. package/dist/structures/Queue.js +265 -46
  33. package/dist/structures/Queue.js.map +1 -1
  34. package/dist/types/index.d.ts +39 -6
  35. package/dist/types/index.d.ts.map +1 -1
  36. package/dist/types/index.js +1 -0
  37. package/dist/types/index.js.map +1 -1
  38. package/dist/types/persistence.d.ts +55 -0
  39. package/dist/types/persistence.d.ts.map +1 -0
  40. package/dist/types/persistence.js +3 -0
  41. package/dist/types/persistence.js.map +1 -0
  42. package/package.json +47 -46
  43. package/src/extensions/BaseExtension.ts +36 -35
  44. package/src/extensions/index.ts +473 -190
  45. package/src/index.ts +16 -16
  46. package/src/persistence/PersistenceManager.ts +572 -0
  47. package/src/plugins/BasePlugin.ts +27 -27
  48. package/src/plugins/index.ts +403 -236
  49. package/src/structures/FilterManager.ts +303 -303
  50. package/src/structures/Player.ts +1962 -1689
  51. package/src/structures/PlayerManager.ts +788 -416
  52. package/src/structures/Queue.ts +599 -354
  53. package/src/types/index.ts +406 -373
  54. package/src/types/persistence.ts +65 -0
  55. package/src/types/plugin.ts +1 -1
  56. package/src/utils/timeout.ts +10 -10
  57. package/tsconfig.json +22 -23
@@ -0,0 +1,55 @@
1
+ import type { LoopMode, PlayerOptions } from ".";
2
+ export interface SerializedTrack {
3
+ id: string;
4
+ title: string;
5
+ url: string;
6
+ source: string;
7
+ duration: number;
8
+ thumbnail?: string;
9
+ author?: string;
10
+ requestedBy?: string;
11
+ isLive?: boolean;
12
+ artwork?: string;
13
+ [key: string]: any;
14
+ }
15
+ export interface SerializedQueue {
16
+ tracks: SerializedTrack[];
17
+ current: SerializedTrack | null;
18
+ history: SerializedTrack[];
19
+ loopMode: LoopMode;
20
+ autoPlay: boolean;
21
+ position?: number;
22
+ }
23
+ export interface SerializedPlayer {
24
+ guildId: string;
25
+ queue: SerializedQueue;
26
+ volume: number;
27
+ isPlaying: boolean;
28
+ isPaused: boolean;
29
+ options: PlayerOptions;
30
+ filters?: string[];
31
+ lastUpdate: number;
32
+ version: string;
33
+ }
34
+ export interface PersistenceOptions {
35
+ enabled: boolean;
36
+ provider?: "file" | "redis" | "database";
37
+ saveInterval?: number;
38
+ autoLoad?: boolean;
39
+ maxBackups?: number;
40
+ compress?: boolean;
41
+ filePath?: string;
42
+ redisUrl?: string;
43
+ redisPrefix?: string;
44
+ save?: (data: Map<string, SerializedPlayer>) => Promise<void>;
45
+ load?: () => Promise<Map<string, SerializedPlayer>>;
46
+ delete?: (guildId: string) => Promise<void>;
47
+ list?: () => Promise<string[]>;
48
+ }
49
+ export interface PersistenceProvider {
50
+ save(key: string, data: any, compress?: boolean): Promise<void>;
51
+ load(key: string): Promise<any>;
52
+ delete(key: string): Promise<void>;
53
+ list(): Promise<string[]>;
54
+ }
55
+ //# sourceMappingURL=persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/types/persistence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,QAAQ,EAAE,aAAa,EAAE,MAAM,GAAG,CAAC;AAExD,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAChC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAGnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACpD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAC1B"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/types/persistence.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,46 +1,47 @@
1
- {
2
- "name": "ziplayer",
3
- "version": "0.2.6",
4
- "description": "A modular Discord voice player with plugin system",
5
- "keywords": [
6
- "ZiPlayer",
7
- "discord",
8
- "music",
9
- "player",
10
- "voice",
11
- "@ziplayer/plugin"
12
- ],
13
- "homepage": "https://player.ziji.world",
14
- "bugs": {
15
- "url": "https://github.com/ZiProject/ZiPlayer/issues"
16
- },
17
- "repository": {
18
- "type": "git",
19
- "url": "git+https://github.com/ZiProject/ZiPlayer.git"
20
- },
21
- "main": "dist/index.js",
22
- "types": "dist/index.d.ts",
23
- "scripts": {
24
- "build": "tsc",
25
- "dev": "tsc --watch",
26
- "prepare": "npm run build"
27
- },
28
- "dependencies": {
29
- "@discordjs/voice": "^0.19.0",
30
- "@snazzah/davey": "^0.1.6",
31
- "discord-api-types": "^0.38.37",
32
- "ffmpeg-static": "^5.2.0",
33
- "libsodium-wrappers": "^0.7.15",
34
- "opusscript": "^0.1.1",
35
- "prism-media": "^1.3.5"
36
- },
37
- "devDependencies": {
38
- "@types/node": "^20.0.0",
39
- "typescript": "^5.0.0"
40
- },
41
- "overrides": {
42
- "prism-media": {
43
- "opusscript": "^0.1.1"
44
- }
45
- }
46
- }
1
+ {
2
+ "name": "ziplayer",
3
+ "version": "0.2.7-dev.1",
4
+ "description": "A modular Discord voice player with plugin system",
5
+ "keywords": [
6
+ "ZiPlayer",
7
+ "discord",
8
+ "music",
9
+ "player",
10
+ "voice",
11
+ "@ziplayer/plugin"
12
+ ],
13
+ "homepage": "https://player.ziji.best",
14
+ "bugs": {
15
+ "url": "https://github.com/ZiProject/ZiPlayer/issues"
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/ZiProject/ZiPlayer.git"
20
+ },
21
+ "main": "dist/index.js",
22
+ "types": "dist/index.d.ts",
23
+ "scripts": {
24
+ "build": "tsc",
25
+ "dev": "tsc --watch",
26
+ "prepare": "npm run build"
27
+ },
28
+ "dependencies": {
29
+ "@discordjs/voice": "^0.19.0",
30
+ "@snazzah/davey": "^0.1.6",
31
+ "discord-api-types": "^0.38.37",
32
+ "ffmpeg-static": "^5.2.0",
33
+ "libsodium-wrappers": "^0.7.15",
34
+ "lru-cache": "^11.3.6",
35
+ "opusscript": "^0.1.1",
36
+ "prism-media": "^1.3.5"
37
+ },
38
+ "devDependencies": {
39
+ "@types/node": "^20.0.0",
40
+ "typescript": "^5.0.0"
41
+ },
42
+ "overrides": {
43
+ "prism-media": {
44
+ "opusscript": "^0.1.1"
45
+ }
46
+ }
47
+ }
@@ -1,35 +1,36 @@
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
- }
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
+ priority?: number; // Higher = run first
18
+ abstract player: Player | null;
19
+ abstract active(alas: any): boolean | Promise<boolean>;
20
+
21
+ onRegister?(context: ExtensionContext): void | Promise<void>;
22
+ onDestroy?(context: ExtensionContext): void | Promise<void>;
23
+ beforePlay?(
24
+ context: ExtensionContext,
25
+ payload: ExtensionPlayRequest,
26
+ ): Promise<ExtensionPlayResponse | void> | ExtensionPlayResponse | void;
27
+ afterPlay?(context: ExtensionContext, payload: ExtensionAfterPlayPayload): Promise<void> | void;
28
+ provideSearch?(
29
+ context: ExtensionContext,
30
+ payload: ExtensionSearchRequest,
31
+ ): Promise<SearchResult | null | undefined> | SearchResult | null | undefined;
32
+ provideStream?(
33
+ context: ExtensionContext,
34
+ payload: ExtensionStreamRequest,
35
+ ): Promise<StreamInfo | null | undefined> | StreamInfo | null | undefined;
36
+ }