ziplayer 0.1.4 → 0.2.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 CHANGED
@@ -18,6 +18,7 @@ A modular Discord voice player with plugin system for @discordjs/voice.
18
18
  - 🎭 **Multi-guild support** - Manage players across multiple Discord servers
19
19
  - 🗃️ **User data** - Attach custom data to each player for later use
20
20
  - 🔌 **Lavalink** - Support manage an external Lavalink JVM node
21
+ - 🎛️ **Audio Filters** - Apply real-time audio effects using FFmpeg (bassboost, nightcore, etc.)
21
22
 
22
23
  ## Installation
23
24
 
@@ -50,6 +51,8 @@ const player = await manager.create(guildId, {
50
51
  userdata: { channel: textChannel }, // store channel for events
51
52
  // Choose extensions for this player (by name or instances)
52
53
  extensions: ["voiceExt"],
54
+ // Apply audio filters
55
+ filters: ["bassboost", "normalize"],
53
56
  });
54
57
 
55
58
  // Connect and play
@@ -74,6 +77,19 @@ player.on("trackStart", (player, track) => {
74
77
  player.userdata?.channel?.send(`Now playing: ${track.title}`);
75
78
  });
76
79
 
80
+ // Audio Filters
81
+ player.filter.applyFilter("bassboost"); // Apply bass boost
82
+ player.filter.applyFilter("nightcore"); // Apply nightcore effect
83
+ player.filter.removeFilter("bassboost"); // Remove specific filter
84
+ player.filter.clearFilters(); // Clear all filters
85
+
86
+ // Apply custom filter
87
+ player.filter.applyFilter({
88
+ name: "custom",
89
+ ffmpegFilter: "volume=1.5,treble=g=5",
90
+ description: "Volume boost + treble boost",
91
+ });
92
+
77
93
  // Receive transcripts
78
94
  manager.on("voiceCreate", (player, evt) => {
79
95
  console.log(`User ${evt.userId} said: ${evt.content}`);
@@ -1,12 +1,29 @@
1
+ import type { Player } from "../structures/Player";
2
+ import type { PlayerManager } from "../structures/PlayerManager";
3
+ import type { SearchResult, StreamInfo, Track, ExtensionPlayRequest, ExtensionPlayResponse, ExtensionAfterPlayPayload } from "../types";
1
4
  import { BaseExtension } from "./BaseExtension";
2
5
  export { BaseExtension } from "./BaseExtension";
3
6
  export declare class ExtensionManager {
7
+ private debug;
4
8
  private extensions;
9
+ private player;
10
+ private manager;
11
+ private extensionContext;
12
+ constructor(player: Player, manager: PlayerManager);
5
13
  register(extension: BaseExtension): void;
6
- unregister(name: string): boolean;
14
+ unregister(extension: BaseExtension): boolean;
15
+ destroy(): void;
7
16
  get(name: string): BaseExtension | undefined;
8
17
  getAll(): BaseExtension[];
9
18
  findExtension(alas: any): BaseExtension | undefined;
10
19
  clear(): void;
20
+ private invokeExtensionLifecycle;
21
+ provideSearch(query: string, requestedBy: string): Promise<SearchResult | null>;
22
+ provideStream(track: Track): Promise<StreamInfo | null>;
23
+ BeforePlayHooks(initial: ExtensionPlayRequest): Promise<{
24
+ request: ExtensionPlayRequest;
25
+ response: ExtensionPlayResponse;
26
+ }>;
27
+ AfterPlayHooks(payload: ExtensionAfterPlayPayload): Promise<void>;
11
28
  }
12
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,UAAU,CAAyC;IAE3D,QAAQ,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI;IAIxC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI5C,MAAM,IAAI,aAAa,EAAE;IAIzB,aAAa,CAAC,IAAI,EAAE,GAAG,GAAG,aAAa,GAAG,SAAS;IAInD,KAAK,IAAI,IAAI;CAGb"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAEX,YAAY,EACZ,UAAU,EACV,KAAK,EAEL,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EAEzB,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAKhD,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;IAalD,QAAQ,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI;IAUxC,UAAU,CAAC,SAAS,EAAE,aAAa,GAAG,OAAO;IAS7C,OAAO,IAAI,IAAI;IAQf,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI5C,MAAM,IAAI,aAAa,EAAE;IAIzB,aAAa,CAAC,IAAI,EAAE,GAAG,GAAG,aAAa,GAAG,SAAS;IAInD,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,wBAAwB;IAc1B,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAkB/E,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAkBvD,eAAe,CACpB,OAAO,EAAE,oBAAoB,GAC3B,OAAO,CAAC;QAAE,OAAO,EAAE,oBAAoB,CAAC;QAAC,QAAQ,EAAE,qBAAqB,CAAA;KAAE,CAAC;IAwCxE,cAAc,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;CAiBvE"}
@@ -5,14 +5,40 @@ var BaseExtension_1 = require("./BaseExtension");
5
5
  Object.defineProperty(exports, "BaseExtension", { enumerable: true, get: function () { return BaseExtension_1.BaseExtension; } });
6
6
  // Extension factory
7
7
  class ExtensionManager {
8
- constructor() {
8
+ constructor(player, manager) {
9
+ this.player = player;
10
+ this.manager = manager;
9
11
  this.extensions = new Map();
12
+ this.extensionContext = Object.freeze({ player, manager });
13
+ this.debug = (message, ...optionalParams) => {
14
+ if (manager.debugEnabled) {
15
+ manager.emit("debug", `[ExtensionManager] ${message}`, ...optionalParams);
16
+ }
17
+ };
10
18
  }
11
19
  register(extension) {
20
+ if (this.extensions.has(extension.name)) {
21
+ return;
22
+ }
23
+ if (!extension.player) {
24
+ extension.player = this.player;
25
+ }
12
26
  this.extensions.set(extension.name, extension);
13
27
  }
14
- unregister(name) {
15
- return this.extensions.delete(name);
28
+ unregister(extension) {
29
+ const name = extension.name;
30
+ const result = this.extensions.delete(name);
31
+ if (result) {
32
+ this.invokeExtensionLifecycle(extension, "onDestroy");
33
+ }
34
+ return result;
35
+ }
36
+ destroy() {
37
+ this.debug(`[ExtensionManager] destroying all extensions`);
38
+ for (const extension of this.extensions.values()) {
39
+ this.unregister(extension);
40
+ }
41
+ this.extensions.clear();
16
42
  }
17
43
  get(name) {
18
44
  return this.extensions.get(name);
@@ -26,6 +52,123 @@ class ExtensionManager {
26
52
  clear() {
27
53
  this.extensions.clear();
28
54
  }
55
+ invokeExtensionLifecycle(extension, hook) {
56
+ if (!extension)
57
+ return;
58
+ const fn = extension[hook];
59
+ if (typeof fn !== "function")
60
+ return;
61
+ try {
62
+ const result = fn.call(extension, this.extensionContext);
63
+ if (result && typeof result.then === "function") {
64
+ result.catch((err) => this.debug(`[Player] Extension ${extension.name} ${hook} error:`, err));
65
+ }
66
+ }
67
+ catch (err) {
68
+ this.debug(`[Player] Extension ${extension.name} ${hook} error:`, err);
69
+ }
70
+ }
71
+ async provideSearch(query, requestedBy) {
72
+ const request = { query, requestedBy };
73
+ for (const extension of this.getAll()) {
74
+ const hook = extension.provideSearch;
75
+ if (typeof hook !== "function")
76
+ continue;
77
+ try {
78
+ const result = await Promise.resolve(hook.call(extension, this.extensionContext, request));
79
+ if (result && Array.isArray(result.tracks) && result.tracks.length > 0) {
80
+ this.debug(`[Player] Extension ${extension.name} handled search for query: ${query}`);
81
+ return result;
82
+ }
83
+ }
84
+ catch (err) {
85
+ this.debug(`[Player] Extension ${extension.name} provideSearch error:`, err);
86
+ }
87
+ }
88
+ return null;
89
+ }
90
+ async provideStream(track) {
91
+ const request = { track };
92
+ for (const extension of this.getAll()) {
93
+ const hook = extension.provideStream;
94
+ if (typeof hook !== "function")
95
+ continue;
96
+ try {
97
+ const result = await Promise.resolve(hook.call(extension, this.extensionContext, request));
98
+ if (result && result.stream) {
99
+ this.debug(`[Player] Extension ${extension.name} provided stream for track: ${track.title}`);
100
+ return result;
101
+ }
102
+ }
103
+ catch (err) {
104
+ this.debug(`[Player] Extension ${extension.name} provideStream error:`, err);
105
+ }
106
+ }
107
+ return null;
108
+ }
109
+ async BeforePlayHooks(initial) {
110
+ const request = { ...initial };
111
+ const response = {};
112
+ for (const extension of this.getAll()) {
113
+ const hook = extension.beforePlay;
114
+ if (typeof hook !== "function")
115
+ continue;
116
+ try {
117
+ const result = await Promise.resolve(hook.call(extension, this.extensionContext, request));
118
+ if (!result)
119
+ continue;
120
+ if (result.query !== undefined) {
121
+ request.query = result.query;
122
+ response.query = result.query;
123
+ }
124
+ if (result.requestedBy !== undefined) {
125
+ request.requestedBy = result.requestedBy;
126
+ response.requestedBy = result.requestedBy;
127
+ }
128
+ if (Array.isArray(result.tracks)) {
129
+ response.tracks = result.tracks;
130
+ }
131
+ if (typeof result.isPlaylist === "boolean") {
132
+ response.isPlaylist = result.isPlaylist;
133
+ }
134
+ if (typeof result.success === "boolean") {
135
+ response.success = result.success;
136
+ }
137
+ if (result.error instanceof Error) {
138
+ response.error = result.error;
139
+ }
140
+ if (typeof result.handled === "boolean") {
141
+ response.handled = result.handled;
142
+ if (result.handled)
143
+ break;
144
+ }
145
+ }
146
+ catch (err) {
147
+ this.debug(`[Player] Extension ${extension.name} beforePlay error:`, err);
148
+ }
149
+ }
150
+ return { request, response };
151
+ }
152
+ async AfterPlayHooks(payload) {
153
+ if (this.getAll().length === 0)
154
+ return;
155
+ const safeTracks = payload.tracks ? [...payload.tracks] : undefined;
156
+ if (safeTracks) {
157
+ Object.freeze(safeTracks);
158
+ }
159
+ const immutablePayload = Object.freeze({ ...payload, tracks: safeTracks });
160
+ for (const extension of this.getAll()) {
161
+ const hook = extension.afterPlay;
162
+ if (typeof hook !== "function")
163
+ continue;
164
+ try {
165
+ await Promise.resolve(hook.call(extension, this.extensionContext, immutablePayload));
166
+ }
167
+ catch (err) {
168
+ this.debug(`[Player] Extension ${extension.name} afterPlay error:`, err);
169
+ }
170
+ }
171
+ }
29
172
  }
30
173
  exports.ExtensionManager = ExtensionManager;
31
174
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":";;;AAEA,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AAEtB,oBAAoB;AACpB,MAAa,gBAAgB;IAA7B;QACS,eAAU,GAA+B,IAAI,GAAG,EAAE,CAAC;IAyB5D,CAAC;IAvBA,QAAQ,CAAC,SAAwB;QAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAChD,CAAC;IAED,UAAU,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,GAAG,CAAC,IAAY;QACf,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,MAAM;QACL,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,aAAa,CAAC,IAAS;QACtB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACD;AA1BD,4CA0BC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,24 @@
1
1
  import { BasePlugin } from "./BasePlugin";
2
+ import type { Track, StreamInfo } from "../types";
3
+ import type { PlayerManager } from "../structures/PlayerManager";
4
+ import type { Player } from "../structures/Player";
5
+ type PluginManagerOptions = {
6
+ extractorTimeout: number | undefined;
7
+ };
2
8
  export { BasePlugin } from "./BasePlugin";
3
9
  export declare class PluginManager {
10
+ private debug;
11
+ private options;
12
+ private player;
13
+ private manager;
4
14
  private plugins;
15
+ constructor(player: Player, manager: PlayerManager, options: PluginManagerOptions);
5
16
  register(plugin: BasePlugin): void;
6
17
  unregister(name: string): boolean;
7
18
  get(name: string): BasePlugin | undefined;
8
19
  getAll(): BasePlugin[];
9
20
  findPlugin(query: string): BasePlugin | undefined;
10
21
  clear(): void;
22
+ getStream(track: Track): Promise<StreamInfo | null>;
11
23
  }
12
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,qBAAa,aAAa;IACzB,OAAO,CAAC,OAAO,CAAsC;IAErD,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAIlC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIzC,MAAM,IAAI,UAAU,EAAE;IAItB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIjD,KAAK,IAAI,IAAI;CAGb"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGnD,KAAK,oBAAoB,GAAG;IAC3B,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,qBAAa,aAAa;IACzB,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,OAAO,CAAsC;gBAEzC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,oBAAoB;IAWjF,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAIlC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIzC,MAAM,IAAI,UAAU,EAAE;IAItB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIjD,KAAK,IAAI,IAAI;IAIP,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;CA6CzD"}
@@ -1,12 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PluginManager = exports.BasePlugin = void 0;
4
+ const timeout_1 = require("../utils/timeout");
4
5
  var BasePlugin_1 = require("./BasePlugin");
5
6
  Object.defineProperty(exports, "BasePlugin", { enumerable: true, get: function () { return BasePlugin_1.BasePlugin; } });
6
7
  // Plugin factory
7
8
  class PluginManager {
8
- constructor() {
9
+ constructor(player, manager, options) {
9
10
  this.plugins = new Map();
11
+ this.player = player;
12
+ this.manager = manager;
13
+ this.options = options;
14
+ this.debug = (message, ...optionalParams) => {
15
+ if (manager.debugEnabled) {
16
+ manager.emit("debug", `[ExtensionManager] ${message}`, ...optionalParams);
17
+ }
18
+ };
10
19
  }
11
20
  register(plugin) {
12
21
  this.plugins.set(plugin.name, plugin);
@@ -26,6 +35,51 @@ class PluginManager {
26
35
  clear() {
27
36
  this.plugins.clear();
28
37
  }
38
+ async getStream(track) {
39
+ let streamInfo = null;
40
+ const plugin = this.get(track.source) || this.findPlugin(track.url);
41
+ if (!plugin) {
42
+ this.debug(`[Player] No plugin found for track: ${track.title}`);
43
+ return null;
44
+ }
45
+ this.debug(`[Player] Getting stream for track: ${track.title}`);
46
+ this.debug(`[Player] Using plugin: ${plugin.name}`);
47
+ this.debug(`[Track] Track Info:`, track);
48
+ const timeoutMs = this.options.extractorTimeout ?? 50000;
49
+ try {
50
+ streamInfo = await (0, timeout_1.withTimeout)(plugin.getStream(track), timeoutMs, "getStream timed out");
51
+ if (!streamInfo?.stream) {
52
+ throw new Error(`No stream returned from ${plugin.name}`);
53
+ }
54
+ }
55
+ catch (streamError) {
56
+ this.debug(`[Player] getStream failed, trying getFallback:`, streamError);
57
+ const allplugs = this.getAll();
58
+ for (const p of allplugs) {
59
+ if (typeof p.getFallback !== "function" && typeof p.getStream !== "function") {
60
+ continue;
61
+ }
62
+ try {
63
+ streamInfo = await (0, timeout_1.withTimeout)(p.getStream(track), timeoutMs, `getStream timed out for plugin ${p.name}`);
64
+ if (streamInfo?.stream) {
65
+ this.debug(`[Player] getStream succeeded with plugin ${p.name} for track: ${track.title}`);
66
+ break;
67
+ }
68
+ streamInfo = await (0, timeout_1.withTimeout)(p.getFallback(track), timeoutMs, `getFallback timed out for plugin ${p.name}`);
69
+ if (!streamInfo?.stream)
70
+ continue;
71
+ break;
72
+ }
73
+ catch (fallbackError) {
74
+ this.debug(`[Player] getFallback failed with plugin ${p.name}:`, fallbackError);
75
+ }
76
+ }
77
+ if (!streamInfo?.stream) {
78
+ throw new Error(`All getFallback attempts failed for track: ${track.title}`);
79
+ }
80
+ }
81
+ return streamInfo;
82
+ }
29
83
  }
30
84
  exports.PluginManager = PluginManager;
31
85
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":";;;AAEA,2CAA0C;AAAjC,wGAAA,UAAU,OAAA;AAEnB,iBAAiB;AACjB,MAAa,aAAa;IAA1B;QACS,YAAO,GAA4B,IAAI,GAAG,EAAE,CAAC;IAyBtD,CAAC;IAvBA,QAAQ,CAAC,MAAkB;QAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,UAAU,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,GAAG,CAAC,IAAY;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM;QACL,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,UAAU,CAAC,KAAa;QACvB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACD;AA1BD,sCA0BC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ import type { AudioFilter } from "../types";
2
+ import type { Player } from "./Player";
3
+ import type { PlayerManager } from "./PlayerManager";
4
+ import type { Readable } from "stream";
5
+ export declare class FilterManager {
6
+ private activeFilters;
7
+ private debug;
8
+ private player;
9
+ private ffmpeg;
10
+ StreamType: "webm/opus" | "ogg/opus" | "mp3" | "arbitrary";
11
+ constructor(player: Player, manager: PlayerManager);
12
+ /**
13
+ * Destroy the filter manager
14
+ *
15
+ * @returns {void}
16
+ * @example
17
+ * player.filter.destroy();
18
+ */
19
+ destroy(): void;
20
+ /**
21
+ * Get the combined FFmpeg filter string for all active filters
22
+ *
23
+ * @returns {string} Combined FFmpeg filter string
24
+ * @example
25
+ * const filterString = player.getFilterString();
26
+ * console.log(`Filter string: ${filterString}`);
27
+ */
28
+ getFilterString(): string;
29
+ /**
30
+ * Get all currently applied filters
31
+ *
32
+ * @returns {AudioFilter[]} Array of active filters
33
+ * @example
34
+ * const filters = player.getActiveFilters();
35
+ * console.log(`Active filters: ${filters.map(f => f.name).join(', ')}`);
36
+ */
37
+ getActiveFilters(): AudioFilter[];
38
+ /**
39
+ * Check if a specific filter is currently applied
40
+ *
41
+ * @param {string} filterName - Name of the filter to check
42
+ * @returns {boolean} True if filter is applied
43
+ * @example
44
+ * const hasBassBoost = player.hasFilter("bassboost");
45
+ * console.log(`Has bass boost: ${hasBassBoost}`);
46
+ */
47
+ hasFilter(filterName: string): boolean;
48
+ /**
49
+ * Get available predefined filters
50
+ *
51
+ * @returns {AudioFilter[]} Array of all predefined filters
52
+ * @example
53
+ * const availableFilters = player.getAvailableFilters();
54
+ * console.log(`Available filters: ${availableFilters.length}`);
55
+ */
56
+ getAvailableFilters(): AudioFilter[];
57
+ /**
58
+ * Get filters by category
59
+ *
60
+ * @param {string} category - Category to filter by
61
+ * @returns {AudioFilter[]} Array of filters in the category
62
+ * @example
63
+ * const eqFilters = player.getFiltersByCategory("eq");
64
+ * console.log(`EQ filters: ${eqFilters.map(f => f.name).join(', ')}`);
65
+ */
66
+ getFiltersByCategory(category: string): AudioFilter[];
67
+ /**
68
+ * Apply an audio filter to the player
69
+ *
70
+ * @param {string | AudioFilter} filter - Filter name or AudioFilter object
71
+ * @returns {Promise<boolean>} True if filter was applied successfully
72
+ * @example
73
+ * // Apply predefined filter to current track
74
+ * await player.applyFilter("bassboost");
75
+ *
76
+ * // Apply custom filter to current track
77
+ * await player.applyFilter({
78
+ * name: "custom",
79
+ * ffmpegFilter: "volume=1.5,treble=g=5",
80
+ * description: "Tăng âm lượng và âm cao"
81
+ * });
82
+ *
83
+ * // Apply filter without affecting current track
84
+ * await player.applyFilter("bassboost", false);
85
+ */
86
+ applyFilter(filter?: string | AudioFilter): Promise<boolean>;
87
+ /**
88
+ * Apply multiple filters at once
89
+ *
90
+ * @param {(string | AudioFilter)[]} filters - Array of filter names or AudioFilter objects
91
+ * @returns {Promise<boolean>} True if all filters were applied successfully
92
+ * @example
93
+ * // Apply multiple filters to current track
94
+ * await player.applyFilters(["bassboost", "trebleboost"]);
95
+ *
96
+ * // Apply filters without affecting current track
97
+ * await player.applyFilters(["bassboost", "trebleboost"], false);
98
+ */
99
+ applyFilters(filters: (string | AudioFilter)[]): Promise<boolean>;
100
+ /**
101
+ * Remove an audio filter from the player
102
+ *
103
+ * @param {string} filterName - Name of the filter to remove
104
+ * @returns {boolean} True if filter was removed successfully
105
+ * @example
106
+ * player.removeFilter("bassboost");
107
+ */
108
+ removeFilter(filterName: string): Promise<boolean>;
109
+ /**
110
+ * Clear all audio filters from the player
111
+ *
112
+ * @returns {boolean} True if filters were cleared successfully
113
+ * @example
114
+ * player.clearFilters();
115
+ */
116
+ clearAll(): Promise<boolean>;
117
+ /**
118
+ * Apply filters and seek to a stream
119
+ *
120
+ * @param {Readable} stream - The stream to apply filters and seek to
121
+ * @param {number} position - The position to seek to in milliseconds (default: 0)
122
+ * @returns {Promise<Readable>} The stream with filters and seek applied
123
+ */
124
+ applyFiltersAndSeek(stream: Readable, position?: number): Promise<Readable>;
125
+ }
126
+ //# sourceMappingURL=FilterManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterManager.d.ts","sourceRoot":"","sources":["../../src/structures/FilterManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAIvC,qBAAa,aAAa;IACzB,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAuB;IAC9B,UAAU,EAAE,WAAW,GAAG,UAAU,GAAG,KAAK,GAAG,WAAW,CAAS;gBAE9D,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;IAUlD;;;;;;OAMG;IACH,OAAO,IAAI,IAAI;IAUf;;;;;;;OAOG;IACI,eAAe,IAAI,MAAM;IAKhC;;;;;;;OAOG;IACI,gBAAgB,IAAI,WAAW,EAAE;IAIxC;;;;;;;;OAQG;IACI,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAI7C;;;;;;;OAOG;IACI,mBAAmB,IAAI,WAAW,EAAE;IAI3C;;;;;;;;OAQG;IACI,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE;IAI5D;;;;;;;;;;;;;;;;;;OAkBG;IACU,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBzE;;;;;;;;;;;OAWG;IACU,YAAY,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,WAAW,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ9E;;;;;;;OAOG;IACU,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW/D;;;;;;OAMG;IACU,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;IAOzC;;;;;;OAMG;IACU,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAE,MAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;CAmD5F"}