ziplayer 0.2.5 → 0.2.7
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 +956 -0
- package/README.md +206 -175
- package/dist/extensions/index.d.ts +1 -1
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/index.js +5 -5
- package/dist/extensions/index.js.map +1 -1
- package/dist/plugins/BasePlugin.d.ts +4 -3
- package/dist/plugins/BasePlugin.d.ts.map +1 -1
- package/dist/plugins/BasePlugin.js +4 -1
- package/dist/plugins/BasePlugin.js.map +1 -1
- package/dist/plugins/index.d.ts +10 -1
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +195 -40
- package/dist/plugins/index.js.map +1 -1
- package/dist/structures/Player.d.ts +0 -9
- package/dist/structures/Player.d.ts.map +1 -1
- package/dist/structures/Player.js +45 -91
- package/dist/structures/Player.js.map +1 -1
- package/dist/types/plugin.d.ts +3 -1
- package/dist/types/plugin.d.ts.map +1 -1
- package/dist/types/plugin.js.map +1 -1
- package/package.json +1 -1
- package/src/extensions/index.ts +5 -9
- package/src/plugins/BasePlugin.ts +4 -3
- package/src/plugins/index.ts +226 -47
- package/src/structures/Player.ts +1693 -1743
- package/src/types/plugin.ts +3 -1
- package/tsconfig.json +2 -2
package/README.md
CHANGED
|
@@ -1,228 +1,259 @@
|
|
|
1
1
|
<img width="1175" height="305" alt="logo" src="https://raw.githubusercontent.com/ZiProject/ZiPlayer/refs/heads/main/publish/logo.png" />
|
|
2
2
|
|
|
3
|
-
#
|
|
3
|
+
# ZiPlayer
|
|
4
4
|
|
|
5
|
-
A
|
|
5
|
+
A powerful, extensible Discord music engine built on top of `@discordjs/voice`, designed for scalability, flexibility, and
|
|
6
|
+
developer experience.
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
ZiPlayer is not just a player — it's a **full ecosystem** with plugins, extensions, and a modular architecture that lets you build
|
|
9
|
+
advanced music bots quickly.
|
|
8
10
|
|
|
9
|
-
|
|
10
|
-
- 🎶 **Multiple source support** - YouTube, SoundCloud, Spotify (with fallback)
|
|
11
|
-
- 🔊 **Queue management** - Add, remove, shuffle, clear
|
|
12
|
-
- 🎚️ **Volume control** - 0-200% volume range
|
|
13
|
-
- ⏯️ **Playback control** - Play, pause, resume, stop, skip
|
|
14
|
-
- 🔁 **Auto play** - Automatically replay the queue when it ends
|
|
15
|
-
- 🔂 **Loop control** - Repeat a single track or the entire queue
|
|
16
|
-
- 📊 **Progress bar** - Display playback progress with customizable icons
|
|
17
|
-
- 🔔 **Event-driven** - Rich event system for all player actions
|
|
18
|
-
- 🎭 **Multi-guild support** - Manage players across multiple Discord servers
|
|
19
|
-
- 🗃️ **User data** - Attach custom data to each player for later use
|
|
20
|
-
- 🔌 **Lavalink** - Support manage an external Lavalink JVM node
|
|
21
|
-
- 🎛️ **Audio Filters** - Apply real-time audio effects using FFmpeg (bassboost, nightcore, etc.)
|
|
11
|
+
---
|
|
22
12
|
|
|
23
|
-
##
|
|
13
|
+
## ✨ Highlights
|
|
14
|
+
|
|
15
|
+
- 🔌 **Plugin-driven architecture** — Easily support new audio sources
|
|
16
|
+
- 🌐 **Multi-source playback** — YouTube, SoundCloud, Spotify (with fallback), TTS, and more
|
|
17
|
+
- 🧠 **Smart fallback system** — Automatically resolves streams across plugins
|
|
18
|
+
- 🎛️ **Advanced audio filters** — Real-time FFmpeg effects (bassboost, nightcore, etc.)
|
|
19
|
+
- 🔁 **Autoplay & looping** — Seamless listening experience
|
|
20
|
+
- 🧩 **Extension system** — Add STT, lyrics, Lavalink, and custom logic
|
|
21
|
+
- 🗂️ **Per-guild player system** — Scales across multiple Discord servers
|
|
22
|
+
- 📡 **Event-driven core** — Full lifecycle hooks for customization
|
|
23
|
+
- 💾 **Custom userdata** — Attach context to each player
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 📦 Installation
|
|
24
28
|
|
|
25
29
|
```bash
|
|
26
|
-
npm install ziplayer @ziplayer/plugin @ziplayer/extension @discordjs/voice discord.js
|
|
30
|
+
npm install ziplayer @ziplayer/plugin @ziplayer/extension @ziplayer/infinity @discordjs/voice discord.js opusscript
|
|
27
31
|
```
|
|
28
32
|
|
|
29
|
-
|
|
33
|
+
---
|
|
30
34
|
|
|
31
|
-
|
|
35
|
+
## 🚀 Quick Start
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
import { Client, GatewayIntentBits } from "discord.js";
|
|
32
39
|
import { PlayerManager } from "ziplayer";
|
|
33
|
-
import {
|
|
34
|
-
import {
|
|
40
|
+
import { YouTubePlugin, SoundCloudPlugin, SpotifyPlugin } from "@ziplayer/plugin";
|
|
41
|
+
import { InfinityPlugin } from "@ziplayer/infinity";
|
|
42
|
+
|
|
43
|
+
const client = new Client({
|
|
44
|
+
intents: [
|
|
45
|
+
GatewayIntentBits.Guilds,
|
|
46
|
+
GatewayIntentBits.GuildVoiceStates,
|
|
47
|
+
GatewayIntentBits.GuildMessages,
|
|
48
|
+
GatewayIntentBits.MessageContent,
|
|
49
|
+
],
|
|
50
|
+
});
|
|
35
51
|
|
|
36
52
|
const manager = new PlayerManager({
|
|
37
|
-
plugins: [new
|
|
38
|
-
extensions: [
|
|
39
|
-
new voiceExt(null, {
|
|
40
|
-
lang: "vi-VN",
|
|
41
|
-
minimalVoiceMessageDuration: 1,
|
|
42
|
-
postSilenceDelayMs: 2000,
|
|
43
|
-
}),
|
|
44
|
-
],
|
|
53
|
+
plugins: [new YouTubePlugin(), new SoundCloudPlugin(), new SpotifyPlugin(), new InfinityPlugin()],
|
|
45
54
|
});
|
|
46
55
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
+
client.on("messageCreate", async (msg) => {
|
|
57
|
+
if (!msg.content.startsWith("!play ") || !msg.guildId) return;
|
|
58
|
+
|
|
59
|
+
const voiceChannel = msg.member?.voice?.channel;
|
|
60
|
+
if (!voiceChannel) return msg.reply("Join a voice channel first!");
|
|
61
|
+
|
|
62
|
+
const player = await manager.create(msg.guildId, {
|
|
63
|
+
leaveOnEnd: true,
|
|
64
|
+
userdata: { channel: msg.channel },
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
if (!player.connection) await player.connect(voiceChannel);
|
|
68
|
+
await player.play(msg.content.slice(6), msg.author.id);
|
|
56
69
|
});
|
|
57
70
|
|
|
58
|
-
|
|
59
|
-
|
|
71
|
+
client.login(process.env.DISCORD_TOKEN);
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 🧱 Architecture Overview
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
PlayerManager (global)
|
|
80
|
+
└── Player (per guild)
|
|
81
|
+
├── Queue
|
|
82
|
+
├── PluginManager
|
|
83
|
+
├── ExtensionManager
|
|
84
|
+
└── FilterManager
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Flow
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
create → connect → play → stream → events → destroy
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## 🎵 Core Usage
|
|
96
|
+
|
|
97
|
+
### Play music
|
|
98
|
+
|
|
99
|
+
```ts
|
|
60
100
|
await player.play("Never Gonna Give You Up", userId);
|
|
101
|
+
await player.play("https://youtube.com/watch?v=...", userId);
|
|
102
|
+
await player.play("tts: Hello world", userId);
|
|
103
|
+
```
|
|
61
104
|
|
|
62
|
-
|
|
63
|
-
await player.play("https://www.youtube.com/playlist?list=PL123", userId);
|
|
105
|
+
### Controls
|
|
64
106
|
|
|
65
|
-
|
|
66
|
-
player.
|
|
107
|
+
```ts
|
|
108
|
+
player.pause();
|
|
109
|
+
player.resume();
|
|
110
|
+
player.skip();
|
|
111
|
+
player.stop();
|
|
112
|
+
player.setVolume(100);
|
|
113
|
+
player.loop("track");
|
|
114
|
+
player.shuffle();
|
|
115
|
+
```
|
|
67
116
|
|
|
68
|
-
|
|
69
|
-
await player.play("https://soundcloud.com/artist/sets/playlist", userId);
|
|
117
|
+
### Queue
|
|
70
118
|
|
|
71
|
-
|
|
72
|
-
player.
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
player.
|
|
76
|
-
|
|
77
|
-
player.userdata?.channel?.send(`Now playing: ${track.title}`);
|
|
78
|
-
});
|
|
119
|
+
```ts
|
|
120
|
+
player.queue.add(track);
|
|
121
|
+
player.queue.remove(0);
|
|
122
|
+
player.queue.shuffle();
|
|
123
|
+
player.queue.clear();
|
|
124
|
+
```
|
|
79
125
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## 🔌 Plugins
|
|
129
|
+
|
|
130
|
+
Install via `@ziplayer/plugin`:
|
|
131
|
+
|
|
132
|
+
- **YouTubePlugin** — YouTube + search
|
|
133
|
+
- **SoundCloudPlugin** — SoundCloud streaming
|
|
134
|
+
- **SpotifyPlugin** — Metadata (uses fallback)
|
|
135
|
+
- **TTSPlugin** — Text-to-speech
|
|
136
|
+
- **AttachmentsPlugin** — Local/URL audio files
|
|
137
|
+
|
|
138
|
+
### Example
|
|
139
|
+
|
|
140
|
+
```ts
|
|
141
|
+
import { TTSPlugin } from "@ziplayer/plugin";
|
|
92
142
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
console.log(`User ${evt.userId} said: ${evt.content}`);
|
|
143
|
+
new PlayerManager({
|
|
144
|
+
plugins: [new TTSPlugin({ defaultLang: "en" })],
|
|
96
145
|
});
|
|
97
146
|
```
|
|
98
147
|
|
|
99
|
-
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## 🧩 Extensions
|
|
151
|
+
|
|
152
|
+
Enhance player behavior:
|
|
100
153
|
|
|
101
|
-
|
|
102
|
-
|
|
154
|
+
- 🎤 `voiceExt` — Speech-to-text commands
|
|
155
|
+
- 🎤 `lyricsExt` — Auto lyrics (synced support)
|
|
156
|
+
- ⚡ `lavalinkExt` — External Lavalink node
|
|
103
157
|
|
|
104
|
-
|
|
158
|
+
### Example
|
|
105
159
|
|
|
106
160
|
```ts
|
|
107
|
-
import {
|
|
108
|
-
import { TTSPlugin, YouTubePlugin, SoundCloudPlugin, SpotifyPlugin } from "@ziplayer/plugin";
|
|
161
|
+
import { voiceExt, lyricsExt } from "@ziplayer/extension";
|
|
109
162
|
|
|
110
163
|
const manager = new PlayerManager({
|
|
111
|
-
|
|
164
|
+
extensions: [new voiceExt(null, { lang: "en-US" }), new lyricsExt(null, { provider: "lrclib" })],
|
|
112
165
|
});
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## 🎛️ Audio Filters
|
|
171
|
+
|
|
172
|
+
Apply FFmpeg filters in real-time:
|
|
173
|
+
|
|
174
|
+
```ts
|
|
175
|
+
await player.filter.applyFilter("bassboost");
|
|
176
|
+
await player.filter.applyFilter("nightcore");
|
|
177
|
+
await player.filter.clearAll();
|
|
178
|
+
```
|
|
113
179
|
|
|
114
|
-
|
|
180
|
+
### Available filters
|
|
181
|
+
|
|
182
|
+
- bassboost, trebleboost
|
|
183
|
+
- nightcore, lofi, vaporwave
|
|
184
|
+
- echo, reverb, chorus
|
|
185
|
+
- karaoke
|
|
186
|
+
- normalize, compressor, limiter
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## 🔊 TTS (Interrupt Mode)
|
|
191
|
+
|
|
192
|
+
```ts
|
|
115
193
|
const player = await manager.create(guildId, {
|
|
116
194
|
tts: {
|
|
117
|
-
createPlayer: true,
|
|
118
|
-
interrupt: true,
|
|
119
|
-
volume: 1, // 1 => 100%
|
|
195
|
+
createPlayer: true,
|
|
196
|
+
interrupt: true,
|
|
120
197
|
},
|
|
121
198
|
});
|
|
122
199
|
|
|
123
|
-
await player.
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
Notes
|
|
134
|
-
|
|
135
|
-
- The detection uses track.source that includes "tts" or query starting with `tts:`.
|
|
136
|
-
- If you need more control, call `player.interruptWithTTSTrack(track)` after building a TTS track via your plugin.
|
|
137
|
-
- For CPU-heavy TTS generation, consider offloading to `worker_threads` or a separate process and pass a stream/buffer to the
|
|
138
|
-
plugin.
|
|
139
|
-
|
|
140
|
-
### Player Lifecycle Overview
|
|
141
|
-
|
|
142
|
-
```
|
|
143
|
-
PlayerManager.create(guild, opts)
|
|
144
|
-
│
|
|
145
|
-
▼
|
|
146
|
-
[Player constructor]
|
|
147
|
-
- setup event listeners
|
|
148
|
-
- freeze ExtensionContext { player, manager }
|
|
149
|
-
- register plugins
|
|
150
|
-
│
|
|
151
|
-
▼
|
|
152
|
-
attachExtension(ext)
|
|
153
|
-
- set ext.player
|
|
154
|
-
- ext.onRegister?(context)
|
|
155
|
-
- ext.active?(...) → false ⇒ detach
|
|
156
|
-
│
|
|
157
|
-
▼
|
|
158
|
-
player.play(query, by)
|
|
159
|
-
- runBeforePlayHooks → extensions may mutate query/tracks/start Lavalink
|
|
160
|
-
- resolve track list / queue updates / TTS interrupt check
|
|
161
|
-
- extensionsProvideStream → extension stream overrides plugin pipeline
|
|
162
|
-
- plugin.getStream / getFallback
|
|
163
|
-
│
|
|
164
|
-
▼
|
|
165
|
-
Audio playback
|
|
166
|
-
- trackStart / queue events emitted
|
|
167
|
-
- runAfterPlayHooks with final outcome
|
|
168
|
-
│
|
|
169
|
-
▼
|
|
170
|
-
player.destroy()
|
|
171
|
-
- stop audio/voice / clear queue & plugins
|
|
172
|
-
- ext.onDestroy?(context) for each attached extension
|
|
173
|
-
- emit playerDestroy & cleanup references
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
This diagram shows how custom extensions (voice, lyrics, Lavalink, etc.) integrate across the full player lifecycle and where
|
|
177
|
-
their hooks are invoked.
|
|
178
|
-
|
|
179
|
-
### Lavalink Process
|
|
180
|
-
|
|
181
|
-
Use `lavalinkExt` when you need ZiPlayer to manage an external Lavalink JVM node. The extension starts, stops, and optionally
|
|
182
|
-
restarts the Lavalink jar and forwards lifecycle events through the manager/player.
|
|
200
|
+
await player.play("tts: Hello everyone", userId);
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## 📡 Events
|
|
206
|
+
|
|
207
|
+
Listen globally via manager:
|
|
183
208
|
|
|
184
209
|
```ts
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
nodes: [
|
|
190
|
-
{
|
|
191
|
-
identifier: "locallavalink",
|
|
192
|
-
password: "youshallnotpass",
|
|
193
|
-
host: "localhost",
|
|
194
|
-
port: 2333,
|
|
195
|
-
secure: false,
|
|
196
|
-
},
|
|
197
|
-
],
|
|
198
|
-
client: client,
|
|
199
|
-
searchPrefix: "scsearch",
|
|
200
|
-
});
|
|
210
|
+
manager.on("trackStart", (player, track) => {});
|
|
211
|
+
manager.on("queueEnd", (player) => {});
|
|
212
|
+
manager.on("playerError", (player, error) => {});
|
|
213
|
+
```
|
|
201
214
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## 🧠 Advanced Features
|
|
218
|
+
|
|
219
|
+
### Autoplay
|
|
220
|
+
|
|
221
|
+
```ts
|
|
222
|
+
player.queue.autoPlay(true);
|
|
205
223
|
```
|
|
206
224
|
|
|
207
|
-
|
|
225
|
+
### Insert next track
|
|
226
|
+
|
|
227
|
+
```ts
|
|
228
|
+
await player.insert("song", 0);
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Save stream
|
|
232
|
+
|
|
233
|
+
```ts
|
|
234
|
+
const stream = await player.save(track);
|
|
235
|
+
stream.pipe(fs.createWriteStream("song.mp3"));
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## ⚠️ Best Practices
|
|
241
|
+
|
|
242
|
+
- Use **one PlayerManager** per bot
|
|
243
|
+
- Always `await player.connect()` before playing
|
|
244
|
+
- Handle `playerError` events
|
|
245
|
+
- Do not reuse a destroyed player
|
|
208
246
|
|
|
209
|
-
|
|
247
|
+
---
|
|
210
248
|
|
|
211
|
-
|
|
212
|
-
- `willPlay` - Before a track begins playing
|
|
213
|
-
- `trackEnd` - When a track finishes
|
|
214
|
-
- `queueEnd` - When the queue is empty
|
|
215
|
-
- `playerError` - When an error occurs
|
|
216
|
-
- `queueAdd` - When a track is added
|
|
217
|
-
- `volumeChange` - When volume changes
|
|
218
|
-
- And more...
|
|
249
|
+
## 📚 Resources
|
|
219
250
|
|
|
220
|
-
|
|
251
|
+
- Examples: [https://github.com/ZiProject/ZiPlayer/tree/main/examples](https://github.com/ZiProject/ZiPlayer/tree/main/examples)
|
|
252
|
+
- GitHub: [https://github.com/ZiProject/ZiPlayer](https://github.com/ZiProject/ZiPlayer)
|
|
253
|
+
- npm: [https://www.npmjs.com/package/ziplayer](https://www.npmjs.com/package/ziplayer)
|
|
221
254
|
|
|
222
|
-
|
|
223
|
-
[Package](https://www.npmjs.com/package/ziplayer) | [Plugin](https://www.npmjs.com/package/@ziplayer/plugin) |
|
|
224
|
-
[Extension](https://www.npmjs.com/package/@ziplayer/extension)
|
|
255
|
+
---
|
|
225
256
|
|
|
226
|
-
## License
|
|
257
|
+
## 📄 License
|
|
227
258
|
|
|
228
259
|
MIT License
|
|
@@ -4,12 +4,12 @@ import type { SearchResult, StreamInfo, Track, ExtensionPlayRequest, ExtensionPl
|
|
|
4
4
|
import { BaseExtension } from "./BaseExtension";
|
|
5
5
|
export { BaseExtension } from "./BaseExtension";
|
|
6
6
|
export declare class ExtensionManager {
|
|
7
|
-
private debug;
|
|
8
7
|
private extensions;
|
|
9
8
|
private player;
|
|
10
9
|
private manager;
|
|
11
10
|
private extensionContext;
|
|
12
11
|
constructor(player: Player, manager: PlayerManager);
|
|
12
|
+
debug(message?: any, ...optionalParams: any[]): void;
|
|
13
13
|
register(extension: BaseExtension): void;
|
|
14
14
|
unregister(extension: BaseExtension): boolean;
|
|
15
15
|
destroy(): void;
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;AAGhD,qBAAa,gBAAgB;IAC5B,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;IAMlD,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI;IAMpD,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"}
|
package/dist/extensions/index.js
CHANGED
|
@@ -10,11 +10,11 @@ class ExtensionManager {
|
|
|
10
10
|
this.manager = manager;
|
|
11
11
|
this.extensions = new Map();
|
|
12
12
|
this.extensionContext = Object.freeze({ player, manager });
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
}
|
|
13
|
+
}
|
|
14
|
+
debug(message, ...optionalParams) {
|
|
15
|
+
if (this.manager.debugEnabled) {
|
|
16
|
+
this.manager.emit("debug", `[ExtensionManager] ${message}`, ...optionalParams);
|
|
17
|
+
}
|
|
18
18
|
}
|
|
19
19
|
register(extension) {
|
|
20
20
|
if (this.extensions.has(extension.name)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":";;;AAgBA,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,12 @@ import { SourcePlugin, Track, SearchResult, StreamInfo } from "../types";
|
|
|
2
2
|
export declare abstract class BasePlugin implements SourcePlugin {
|
|
3
3
|
abstract name: string;
|
|
4
4
|
abstract version: string;
|
|
5
|
+
priority?: number;
|
|
5
6
|
abstract canHandle(query: string): boolean;
|
|
6
7
|
abstract search(query: string, requestedBy: string): Promise<SearchResult>;
|
|
7
|
-
abstract getStream(track: Track): Promise<StreamInfo>;
|
|
8
|
-
getFallback?(track: Track): Promise<StreamInfo>;
|
|
9
|
-
getRelatedTracks?(trackURL:
|
|
8
|
+
abstract getStream(track: Track, signal?: AbortSignal): Promise<StreamInfo>;
|
|
9
|
+
getFallback?(track: Track, signal?: AbortSignal): Promise<StreamInfo>;
|
|
10
|
+
getRelatedTracks?(trackURL: Track, opts?: {
|
|
10
11
|
limit?: number;
|
|
11
12
|
offset?: number;
|
|
12
13
|
history?: Track[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasePlugin.d.ts","sourceRoot":"","sources":["../../src/plugins/BasePlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEzE,8BAAsB,UAAW,YAAW,YAAY;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"BasePlugin.d.ts","sourceRoot":"","sources":["../../src/plugins/BasePlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEzE,8BAAsB,UAAW,YAAW,YAAY;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAK;IAEtB,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAC1C,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAC1E,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAE3E,WAAW,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAIrE,gBAAgB,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAInH,QAAQ,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B,eAAe,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;CAGpE"}
|
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.BasePlugin = void 0;
|
|
4
4
|
class BasePlugin {
|
|
5
|
-
|
|
5
|
+
constructor() {
|
|
6
|
+
this.priority = 0;
|
|
7
|
+
}
|
|
8
|
+
getFallback(track, signal) {
|
|
6
9
|
throw new Error("getFallback not implemented");
|
|
7
10
|
}
|
|
8
11
|
getRelatedTracks(trackURL, opts) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasePlugin.js","sourceRoot":"","sources":["../../src/plugins/BasePlugin.ts"],"names":[],"mappings":";;;AAEA,MAAsB,UAAU;
|
|
1
|
+
{"version":3,"file":"BasePlugin.js","sourceRoot":"","sources":["../../src/plugins/BasePlugin.ts"],"names":[],"mappings":";;;AAEA,MAAsB,UAAU;IAAhC;QAGC,aAAQ,GAAY,CAAC,CAAC;IAqBvB,CAAC;IAfA,WAAW,CAAE,KAAY,EAAE,MAAoB;QAC9C,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAChD,CAAC;IAED,gBAAgB,CAAE,QAAe,EAAE,IAA6D;QAC/F,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED,QAAQ,CAAE,GAAW;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,eAAe,CAAE,GAAW,EAAE,WAAmB;QAChD,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC;CACD;AAxBD,gCAwBC"}
|
package/dist/plugins/index.d.ts
CHANGED
|
@@ -7,12 +7,12 @@ type PluginManagerOptions = {
|
|
|
7
7
|
};
|
|
8
8
|
export { BasePlugin } from "./BasePlugin";
|
|
9
9
|
export declare class PluginManager {
|
|
10
|
-
private debug;
|
|
11
10
|
private options;
|
|
12
11
|
private player;
|
|
13
12
|
private manager;
|
|
14
13
|
private plugins;
|
|
15
14
|
constructor(player: Player, manager: PlayerManager, options: PluginManagerOptions);
|
|
15
|
+
debug(message?: any, ...optionalParams: any[]): void;
|
|
16
16
|
register(plugin: BasePlugin): void;
|
|
17
17
|
unregister(name: string): boolean;
|
|
18
18
|
get(name: string): BasePlugin | undefined;
|
|
@@ -20,5 +20,14 @@ export declare class PluginManager {
|
|
|
20
20
|
findPlugin(query: string): BasePlugin | undefined;
|
|
21
21
|
clear(): void;
|
|
22
22
|
getStream(track: Track): Promise<StreamInfo | null>;
|
|
23
|
+
/**
|
|
24
|
+
* Get related tracks for a given track
|
|
25
|
+
* @param {Track} track Track to find related tracks for
|
|
26
|
+
* @returns {Track[]} Related tracks or empty array
|
|
27
|
+
* @example
|
|
28
|
+
* const related = await player.getRelatedTracks(track);
|
|
29
|
+
* console.log(`Found ${related.length} related tracks`);
|
|
30
|
+
*/
|
|
31
|
+
getRelatedTracks(track: Track): Promise<Track[]>;
|
|
23
32
|
}
|
|
24
33
|
//# 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,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;
|
|
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;AAEnD,KAAK,oBAAoB,GAAG;IAC3B,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAwF1C,qBAAa,aAAa;IACzB,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;IAMjF,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,EAAE,GAAG,IAAI;IAMpD,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;IAqFzD;;;;;;;OAOG;IACG,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;CAsDtD"}
|