@ziplayer/plugin 0.0.3 → 0.0.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/README.md +180 -179
- package/dist/SoundCloudPlugin.d.ts.map +1 -1
- package/dist/SoundCloudPlugin.js +20 -9
- package/dist/SoundCloudPlugin.js.map +1 -1
- package/dist/TTSPlugin.d.ts.map +1 -1
- package/dist/TTSPlugin.js +4 -1
- package/dist/TTSPlugin.js.map +1 -1
- package/dist/YouTubePlugin.d.ts +2 -0
- package/dist/YouTubePlugin.d.ts.map +1 -1
- package/dist/YouTubePlugin.js +82 -86
- package/dist/YouTubePlugin.js.map +1 -1
- package/package.json +3 -3
- package/src/SoundCloudPlugin.ts +20 -8
- package/src/TTSPlugin.ts +4 -1
- package/src/YouTubePlugin.ts +133 -94
package/README.md
CHANGED
|
@@ -1,179 +1,180 @@
|
|
|
1
|
-
<img width="
|
|
2
|
-
|
|
3
|
-
# @ziplayer/plugin
|
|
4
|
-
|
|
5
|
-
Official plugin bundle for ZiPlayer. It ships a set of ready‑to‑use source plugins you can register on your `PlayerManager`:
|
|
6
|
-
|
|
7
|
-
- YouTubePlugin: search + stream YouTube videos and playlists
|
|
8
|
-
- SoundCloudPlugin: search + stream SoundCloud tracks and sets
|
|
9
|
-
- SpotifyPlugin: resolve tracks/albums/playlists, stream via fallbacks
|
|
10
|
-
- TTSPlugin: Text‑to‑Speech playback from simple `tts:` queries
|
|
11
|
-
|
|
12
|
-
ZiPlayer is an audio player built on top of `@discordjs/voice` and `discord.js`. This package provides sources; the core player
|
|
13
|
-
lives in `ziplayer`.
|
|
14
|
-
|
|
15
|
-
## Installation
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
npm install @ziplayer/plugin ziplayer @discordjs/voice discord.js
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
The TTS plugin uses a lightweight Google TTS wrapper and HTTP fetches:
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
npm install @zibot/zitts axios
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Quick Start
|
|
28
|
-
|
|
29
|
-
```ts
|
|
30
|
-
import { PlayerManager } from "ziplayer";
|
|
31
|
-
import { YouTubePlugin, SoundCloudPlugin, SpotifyPlugin, TTSPlugin } from "@ziplayer/plugin";
|
|
32
|
-
|
|
33
|
-
const manager = new PlayerManager({
|
|
34
|
-
plugins: [
|
|
35
|
-
// Order matters: put more specific handlers first (e.g., TTS)
|
|
36
|
-
new TTSPlugin({ defaultLang: "en" }),
|
|
37
|
-
new YouTubePlugin(),
|
|
38
|
-
new SoundCloudPlugin(),
|
|
39
|
-
new SpotifyPlugin(),
|
|
40
|
-
],
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
// Create and connect a player (discord.js VoiceChannel instance)
|
|
44
|
-
const player = manager.create(guildId, { userdata: { channel: textChannel } });
|
|
45
|
-
await player.connect(voiceChannel);
|
|
46
|
-
|
|
47
|
-
// Search & play
|
|
48
|
-
await player.play("never gonna give you up", requestedBy);
|
|
49
|
-
|
|
50
|
-
// Play a playlist URL directly
|
|
51
|
-
await player.play("https://www.youtube.com/playlist?list=...", requestedBy);
|
|
52
|
-
|
|
53
|
-
// Speak with TTS
|
|
54
|
-
await player.play("tts:en:Hello there!", requestedBy);
|
|
55
|
-
|
|
56
|
-
// Handle events via the manager
|
|
57
|
-
manager.on("trackStart", (plr, track) => {
|
|
58
|
-
plr.userdata?.channel?.send?.(`Now playing: ${track.title}`);
|
|
59
|
-
});
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
## Included Plugins
|
|
63
|
-
|
|
64
|
-
### YouTubePlugin
|
|
65
|
-
|
|
66
|
-
- Resolves YouTube videos and playlists.
|
|
67
|
-
- Uses `youtubei.js` under the hood.
|
|
68
|
-
|
|
69
|
-
```ts
|
|
70
|
-
import { YouTubePlugin } from "@ziplayer/plugin";
|
|
71
|
-
const youtube = new YouTubePlugin();
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
### SoundCloudPlugin
|
|
75
|
-
|
|
76
|
-
- Resolves tracks and sets. You may further tune streaming by combining with other plugins that provide fallbacks.
|
|
77
|
-
|
|
78
|
-
```ts
|
|
79
|
-
import { SoundCloudPlugin } from "@ziplayer/plugin";
|
|
80
|
-
const sc = new SoundCloudPlugin();
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
### SpotifyPlugin
|
|
84
|
-
|
|
85
|
-
- Resolves track/album/playlist metadata from Spotify.
|
|
86
|
-
- Streaming typically uses fallback sources (e.g., YouTube) discovered by your plugin set.
|
|
87
|
-
|
|
88
|
-
```ts
|
|
89
|
-
import { SpotifyPlugin } from "@ziplayer/plugin";
|
|
90
|
-
const sp = new SpotifyPlugin();
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
### TTSPlugin (Text‑to‑Speech)
|
|
94
|
-
|
|
95
|
-
- Plays spoken audio from text using a lightweight Google TTS wrapper.
|
|
96
|
-
- Supported query formats:
|
|
97
|
-
- `tts: <text>`
|
|
98
|
-
- `tts:<lang>:<text>` (e.g., `tts:vi:xin chao`)
|
|
99
|
-
- `tts:<lang>:1:<text>` (set `slow = true`, `0` = normal)
|
|
100
|
-
|
|
101
|
-
```ts
|
|
102
|
-
import { TTSPlugin } from "@ziplayer/plugin";
|
|
103
|
-
const tts = new TTSPlugin({ defaultLang: "en", slow: false });
|
|
104
|
-
await player.play("tts:en:1:good morning", requestedBy);
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
Note: Please comply with the service’s terms and provide your own quotas. The wrapper is intended for lightweight usage and may
|
|
108
|
-
change without notice.
|
|
109
|
-
|
|
110
|
-
Advanced: custom TTS provider
|
|
111
|
-
|
|
112
|
-
You can override audio generation by passing a `createStream` function. It receives the text and context and can return a Node
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
-
|
|
169
|
-
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
-
|
|
175
|
-
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
1
|
+
<img width="1175" height="305" alt="logo" src="https://github.com/user-attachments/assets/d4db4892-9c3d-4314-9228-701629555380" />
|
|
2
|
+
|
|
3
|
+
# @ziplayer/plugin
|
|
4
|
+
|
|
5
|
+
Official plugin bundle for ZiPlayer. It ships a set of ready‑to‑use source plugins you can register on your `PlayerManager`:
|
|
6
|
+
|
|
7
|
+
- YouTubePlugin: search + stream YouTube videos and playlists
|
|
8
|
+
- SoundCloudPlugin: search + stream SoundCloud tracks and sets
|
|
9
|
+
- SpotifyPlugin: resolve tracks/albums/playlists, stream via fallbacks
|
|
10
|
+
- TTSPlugin: Text‑to‑Speech playback from simple `tts:` queries
|
|
11
|
+
|
|
12
|
+
ZiPlayer is an audio player built on top of `@discordjs/voice` and `discord.js`. This package provides sources; the core player
|
|
13
|
+
lives in `ziplayer`.
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install @ziplayer/plugin ziplayer @discordjs/voice discord.js
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
The TTS plugin uses a lightweight Google TTS wrapper and HTTP fetches:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm install @zibot/zitts axios
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Quick Start
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
import { PlayerManager } from "ziplayer";
|
|
31
|
+
import { YouTubePlugin, SoundCloudPlugin, SpotifyPlugin, TTSPlugin } from "@ziplayer/plugin";
|
|
32
|
+
|
|
33
|
+
const manager = new PlayerManager({
|
|
34
|
+
plugins: [
|
|
35
|
+
// Order matters: put more specific handlers first (e.g., TTS)
|
|
36
|
+
new TTSPlugin({ defaultLang: "en" }),
|
|
37
|
+
new YouTubePlugin(),
|
|
38
|
+
new SoundCloudPlugin(),
|
|
39
|
+
new SpotifyPlugin(),
|
|
40
|
+
],
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
// Create and connect a player (discord.js VoiceChannel instance)
|
|
44
|
+
const player = manager.create(guildId, { userdata: { channel: textChannel } });
|
|
45
|
+
await player.connect(voiceChannel);
|
|
46
|
+
|
|
47
|
+
// Search & play
|
|
48
|
+
await player.play("never gonna give you up", requestedBy);
|
|
49
|
+
|
|
50
|
+
// Play a playlist URL directly
|
|
51
|
+
await player.play("https://www.youtube.com/playlist?list=...", requestedBy);
|
|
52
|
+
|
|
53
|
+
// Speak with TTS
|
|
54
|
+
await player.play("tts:en:Hello there!", requestedBy);
|
|
55
|
+
|
|
56
|
+
// Handle events via the manager
|
|
57
|
+
manager.on("trackStart", (plr, track) => {
|
|
58
|
+
plr.userdata?.channel?.send?.(`Now playing: ${track.title}`);
|
|
59
|
+
});
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Included Plugins
|
|
63
|
+
|
|
64
|
+
### YouTubePlugin
|
|
65
|
+
|
|
66
|
+
- Resolves YouTube videos and playlists.
|
|
67
|
+
- Uses `youtubei.js` under the hood.
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
import { YouTubePlugin } from "@ziplayer/plugin";
|
|
71
|
+
const youtube = new YouTubePlugin();
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### SoundCloudPlugin
|
|
75
|
+
|
|
76
|
+
- Resolves tracks and sets. You may further tune streaming by combining with other plugins that provide fallbacks.
|
|
77
|
+
|
|
78
|
+
```ts
|
|
79
|
+
import { SoundCloudPlugin } from "@ziplayer/plugin";
|
|
80
|
+
const sc = new SoundCloudPlugin();
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### SpotifyPlugin
|
|
84
|
+
|
|
85
|
+
- Resolves track/album/playlist metadata from Spotify.
|
|
86
|
+
- Streaming typically uses fallback sources (e.g., YouTube) discovered by your plugin set.
|
|
87
|
+
|
|
88
|
+
```ts
|
|
89
|
+
import { SpotifyPlugin } from "@ziplayer/plugin";
|
|
90
|
+
const sp = new SpotifyPlugin();
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### TTSPlugin (Text‑to‑Speech)
|
|
94
|
+
|
|
95
|
+
- Plays spoken audio from text using a lightweight Google TTS wrapper.
|
|
96
|
+
- Supported query formats:
|
|
97
|
+
- `tts: <text>`
|
|
98
|
+
- `tts:<lang>:<text>` (e.g., `tts:vi:xin chao`)
|
|
99
|
+
- `tts:<lang>:1:<text>` (set `slow = true`, `0` = normal)
|
|
100
|
+
|
|
101
|
+
```ts
|
|
102
|
+
import { TTSPlugin } from "@ziplayer/plugin";
|
|
103
|
+
const tts = new TTSPlugin({ defaultLang: "en", slow: false });
|
|
104
|
+
await player.play("tts:en:1:good morning", requestedBy);
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Note: Please comply with the service’s terms and provide your own quotas. The wrapper is intended for lightweight usage and may
|
|
108
|
+
change without notice.
|
|
109
|
+
|
|
110
|
+
Advanced: custom TTS provider
|
|
111
|
+
|
|
112
|
+
You can override audio generation by passing a `createStream` function. It receives the text and context and can return a Node
|
|
113
|
+
`Readable`, an HTTP(S) URL string, or a `Buffer`.
|
|
114
|
+
|
|
115
|
+
```ts
|
|
116
|
+
const tts = new TTSPlugin({
|
|
117
|
+
defaultLang: "vi",
|
|
118
|
+
async createStream(text, ctx) {
|
|
119
|
+
// Example: integrate with Azure, CAMB.AI, etc.
|
|
120
|
+
// Return a URL and the plugin will stream it
|
|
121
|
+
const url = await myTTSService(text, { lang: ctx?.lang, slow: ctx?.slow });
|
|
122
|
+
return url; // or Readable / Buffer
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Writing Your Own Plugin
|
|
128
|
+
|
|
129
|
+
Plugins implement the `BasePlugin` contract from `ziplayer`:
|
|
130
|
+
|
|
131
|
+
```ts
|
|
132
|
+
import { BasePlugin, Track, SearchResult, StreamInfo } from "ziplayer";
|
|
133
|
+
|
|
134
|
+
export class MyPlugin extends BasePlugin {
|
|
135
|
+
name = "myplugin";
|
|
136
|
+
version = "1.0.0";
|
|
137
|
+
|
|
138
|
+
canHandle(query: string): boolean {
|
|
139
|
+
// Return true if this plugin can handle a given query/URL
|
|
140
|
+
return query.includes("mysite.com");
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
async search(query: string, requestedBy: string): Promise<SearchResult> {
|
|
144
|
+
// Return one or more tracks for the query
|
|
145
|
+
return {
|
|
146
|
+
tracks: [
|
|
147
|
+
{
|
|
148
|
+
id: "abc",
|
|
149
|
+
title: "My Track",
|
|
150
|
+
url: "https://mysite.com/track/abc",
|
|
151
|
+
duration: 180,
|
|
152
|
+
requestedBy,
|
|
153
|
+
source: this.name,
|
|
154
|
+
},
|
|
155
|
+
],
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
async getStream(track: Track): Promise<StreamInfo> {
|
|
160
|
+
// Return a Node Readable stream and an input type
|
|
161
|
+
return { stream, type: "arbitrary" };
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Tips
|
|
167
|
+
|
|
168
|
+
- Keep network calls bounded; ZiPlayer applies timeouts to extractor operations.
|
|
169
|
+
- For sources that require indirection (like Spotify), consider a `getFallback` strategy via other plugins.
|
|
170
|
+
- Use `track.metadata` for any source‑specific fields you want to carry along.
|
|
171
|
+
|
|
172
|
+
## Requirements
|
|
173
|
+
|
|
174
|
+
- Node.js 18+
|
|
175
|
+
- `discord.js` 14 and `@discordjs/voice` 0.19+
|
|
176
|
+
- For TTS: `@zibot/zitts` and `axios`
|
|
177
|
+
|
|
178
|
+
## License
|
|
179
|
+
|
|
180
|
+
MIT
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SoundCloudPlugin.d.ts","sourceRoot":"","sources":["../src/SoundCloudPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAgBvE,qBAAa,gBAAiB,SAAQ,UAAU;IAC/C,IAAI,SAAgB;IACpB,OAAO,SAAW;IAClB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,KAAK,CAAgB;;YAOf,IAAI;IAKlB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"SoundCloudPlugin.d.ts","sourceRoot":"","sources":["../src/SoundCloudPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAgBvE,qBAAa,gBAAiB,SAAQ,UAAU;IAC/C,IAAI,SAAgB;IACpB,OAAO,SAAW;IAClB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,KAAK,CAAgB;;YAOf,IAAI;IAKlB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAgBjC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIxB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAgFjE,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;IAmB5C,gBAAgB,CACrB,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAA;KAAO,GAC/D,OAAO,CAAC,KAAK,EAAE,CAAC;IAiCb,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;IAS9C,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;CAsBzE"}
|
package/dist/SoundCloudPlugin.js
CHANGED
|
@@ -4,7 +4,7 @@ exports.SoundCloudPlugin = void 0;
|
|
|
4
4
|
const ziplayer_1 = require("ziplayer");
|
|
5
5
|
const SoundCloud = require("@zibot/scdl");
|
|
6
6
|
const url_1 = require("url");
|
|
7
|
-
const ALLOWED_SOUNDCLOUD_HOSTS = ["soundcloud.com", "www.soundcloud.com"];
|
|
7
|
+
const ALLOWED_SOUNDCLOUD_HOSTS = ["soundcloud.com", "www.soundcloud.com", "m.soundcloud.com"];
|
|
8
8
|
function isValidSoundCloudHost(maybeUrl) {
|
|
9
9
|
try {
|
|
10
10
|
const parsed = new url_1.URL(maybeUrl);
|
|
@@ -28,24 +28,35 @@ class SoundCloudPlugin extends ziplayer_1.BasePlugin {
|
|
|
28
28
|
}
|
|
29
29
|
canHandle(query) {
|
|
30
30
|
const q = (query || "").trim().toLowerCase();
|
|
31
|
-
|
|
32
|
-
if (
|
|
31
|
+
const isUrl = q.startsWith("http://") || q.startsWith("https://");
|
|
32
|
+
if (isUrl) {
|
|
33
33
|
return isValidSoundCloudHost(query);
|
|
34
34
|
}
|
|
35
|
-
// Avoid intercepting explicit patterns for other extractors
|
|
35
|
+
// Avoid intercepting explicit patterns for other extractors
|
|
36
36
|
if (q.startsWith("tts:") || q.startsWith("say "))
|
|
37
37
|
return false;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
if (q.startsWith("spotify:") || q.includes("open.spotify.com"))
|
|
39
|
+
return false;
|
|
40
|
+
if (q.includes("youtube"))
|
|
41
|
+
return false;
|
|
42
|
+
// Treat remaining non-URL free text as searchable
|
|
43
|
+
return true;
|
|
43
44
|
}
|
|
44
45
|
validate(url) {
|
|
45
46
|
return isValidSoundCloudHost(url);
|
|
46
47
|
}
|
|
47
48
|
async search(query, requestedBy) {
|
|
48
49
|
await this.ready;
|
|
50
|
+
// If the query is a URL but not a SoundCloud URL, do not handle it here
|
|
51
|
+
// This prevents hijacking e.g. YouTube/Spotify links as free-text searches.
|
|
52
|
+
try {
|
|
53
|
+
const q = (query || "").trim().toLowerCase();
|
|
54
|
+
const isUrl = q.startsWith("http://") || q.startsWith("https://");
|
|
55
|
+
if (isUrl && !this.validate(query)) {
|
|
56
|
+
return { tracks: [] };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch { }
|
|
49
60
|
try {
|
|
50
61
|
if (isValidSoundCloudHost(query)) {
|
|
51
62
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SoundCloudPlugin.js","sourceRoot":"","sources":["../src/SoundCloudPlugin.ts"],"names":[],"mappings":";;;AAAA,uCAAuE;AAEvE,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAC1C,6BAA0B;AAE1B,MAAM,wBAAwB,GAAG,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"SoundCloudPlugin.js","sourceRoot":"","sources":["../src/SoundCloudPlugin.ts"],"names":[],"mappings":"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"}
|
package/dist/TTSPlugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TTSPlugin.d.ts","sourceRoot":"","sources":["../src/TTSPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAIlC,MAAM,WAAW,gBAAgB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;;;;;;;OAUG;IACH,YAAY,CAAC,EAAE,CACd,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,KAElD,OAAO,CAAC,QAAQ,GAAG,MAAM,GAAG,GAAG,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,CAAC,GACpE,QAAQ,GACR,MAAM,GACN,GAAG,GACH,MAAM,GACN,UAAU,GACV,WAAW,CAAC;CACf;AAQD,qBAAa,SAAU,SAAQ,UAAU;IACxC,IAAI,SAAS;IACb,OAAO,SAAW;IAClB,OAAO,CAAC,IAAI,CAA0F;gBAE1F,IAAI,CAAC,EAAE,gBAAgB;IASnC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAM3B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAuBjE,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"TTSPlugin.d.ts","sourceRoot":"","sources":["../src/TTSPlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAIlC,MAAM,WAAW,gBAAgB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;;;;;;;OAUG;IACH,YAAY,CAAC,EAAE,CACd,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,KAElD,OAAO,CAAC,QAAQ,GAAG,MAAM,GAAG,GAAG,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,CAAC,GACpE,QAAQ,GACR,MAAM,GACN,GAAG,GACH,MAAM,GACN,UAAU,GACV,WAAW,CAAC;CACf;AAQD,qBAAa,SAAU,SAAQ,UAAU;IACxC,IAAI,SAAS;IACb,OAAO,SAAW;IAClB,OAAO,CAAC,IAAI,CAA0F;gBAE1F,IAAI,CAAC,EAAE,gBAAgB;IASnC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAM3B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAuBjE,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;YAsEpC,UAAU;IAgBxB,OAAO,CAAC,UAAU;IAiDlB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,aAAa;CAYrB"}
|
package/dist/TTSPlugin.js
CHANGED
|
@@ -82,7 +82,10 @@ class TTSPlugin extends ziplayer_1.BasePlugin {
|
|
|
82
82
|
const urlStr = o.url.toString();
|
|
83
83
|
try {
|
|
84
84
|
type =
|
|
85
|
-
normType(o.type) ||
|
|
85
|
+
normType(o.type) ||
|
|
86
|
+
(urlStr.endsWith(".webm") ? "webm/opus"
|
|
87
|
+
: urlStr.endsWith(".ogg") ? "ogg/opus"
|
|
88
|
+
: undefined);
|
|
86
89
|
const res = await axios_1.default.get(urlStr, { responseType: "stream" });
|
|
87
90
|
stream = res.data;
|
|
88
91
|
metadata = o.metadata;
|
package/dist/TTSPlugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TTSPlugin.js","sourceRoot":"","sources":["../src/TTSPlugin.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"TTSPlugin.js","sourceRoot":"","sources":["../src/TTSPlugin.ts"],"names":[],"mappings":"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"}
|
package/dist/YouTubePlugin.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export declare class YouTubePlugin extends BasePlugin {
|
|
|
7
7
|
private ready;
|
|
8
8
|
constructor();
|
|
9
9
|
private init;
|
|
10
|
+
private buildTrack;
|
|
10
11
|
canHandle(query: string): boolean;
|
|
11
12
|
validate(url: string): boolean;
|
|
12
13
|
search(query: string, requestedBy: string): Promise<SearchResult>;
|
|
@@ -19,6 +20,7 @@ export declare class YouTubePlugin extends BasePlugin {
|
|
|
19
20
|
}): Promise<Track[]>;
|
|
20
21
|
getFallback(track: Track): Promise<StreamInfo>;
|
|
21
22
|
private extractVideoId;
|
|
23
|
+
private isMixListId;
|
|
22
24
|
private extractListId;
|
|
23
25
|
}
|
|
24
26
|
//# sourceMappingURL=YouTubePlugin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YouTubePlugin.d.ts","sourceRoot":"","sources":["../src/YouTubePlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAIvE,qBAAa,aAAc,SAAQ,UAAU;IAC5C,IAAI,SAAa;IACjB,OAAO,SAAW;IAElB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,KAAK,CAAgB;;YAOf,IAAI;
|
|
1
|
+
{"version":3,"file":"YouTubePlugin.d.ts","sourceRoot":"","sources":["../src/YouTubePlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAIvE,qBAAa,aAAc,SAAQ,UAAU;IAC5C,IAAI,SAAa;IACjB,OAAO,SAAW;IAElB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,KAAK,CAAgB;;YAOf,IAAI;IAelB,OAAO,CAAC,UAAU;IA0ElB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAsBjC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAUxB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAmEjE,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAgCnE,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;IA8D5C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAA;KAAO,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAoBvH,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;IAWpD,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,aAAa;CAQrB"}
|
package/dist/YouTubePlugin.js
CHANGED
|
@@ -22,6 +22,33 @@ class YouTubePlugin extends ziplayer_1.BasePlugin {
|
|
|
22
22
|
});
|
|
23
23
|
youtubei_js_1.Log.setLevel(0);
|
|
24
24
|
}
|
|
25
|
+
// Build a Track from various YouTube object shapes (search item, playlist item, watch_next feed, basic_info, info)
|
|
26
|
+
buildTrack(raw, requestedBy, extra) {
|
|
27
|
+
const pickFirst = (...vals) => vals.find((v) => v !== undefined && v !== null && v !== "");
|
|
28
|
+
// Try to resolve from multiple common shapes
|
|
29
|
+
const id = pickFirst(raw?.id, raw?.video_id, raw?.videoId, raw?.content_id, raw?.identifier, raw?.basic_info?.id, raw?.basic_info?.video_id, raw?.basic_info?.videoId, raw?.basic_info?.content_id);
|
|
30
|
+
const title = pickFirst(raw?.metadata?.title?.text, raw?.title?.text, raw?.title, raw?.headline, raw?.basic_info?.title, "Unknown title");
|
|
31
|
+
const durationValue = pickFirst(raw?.length_seconds, raw?.duration?.seconds, raw?.duration?.text, raw?.duration, raw?.length_text, raw?.basic_info?.duration);
|
|
32
|
+
const duration = Number(toSeconds(durationValue)) || 0;
|
|
33
|
+
const thumb = pickFirst(raw?.thumbnails?.[0]?.url, raw?.thumbnail?.[0]?.url, raw?.thumbnail?.url, raw?.thumbnail?.thumbnails?.[0]?.url, raw?.content_image?.image?.[0]?.url, raw?.basic_info?.thumbnail?.[0]?.url, raw?.basic_info?.thumbnail?.[raw?.basic_info?.thumbnail?.length - 1]?.url, raw?.thumbnails?.[raw?.thumbnails?.length - 1]?.url);
|
|
34
|
+
const author = pickFirst(raw?.author?.name, raw?.author, raw?.channel?.name, raw?.owner?.name, raw?.basic_info?.author);
|
|
35
|
+
const views = pickFirst(raw?.view_count, raw?.views, raw?.short_view_count, raw?.stats?.view_count, raw?.basic_info?.view_count);
|
|
36
|
+
const url = pickFirst(raw?.url, id ? `https://www.youtube.com/watch?v=${id}` : undefined);
|
|
37
|
+
return {
|
|
38
|
+
id: String(id),
|
|
39
|
+
title: String(title),
|
|
40
|
+
url: String(url),
|
|
41
|
+
duration,
|
|
42
|
+
thumbnail: thumb,
|
|
43
|
+
requestedBy,
|
|
44
|
+
source: this.name,
|
|
45
|
+
metadata: {
|
|
46
|
+
author,
|
|
47
|
+
views,
|
|
48
|
+
...(extra?.playlist ? { playlist: extra.playlist } : {}),
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
25
52
|
canHandle(query) {
|
|
26
53
|
const q = (query || "").trim().toLowerCase();
|
|
27
54
|
const isUrl = q.startsWith("http://") || q.startsWith("https://");
|
|
@@ -48,7 +75,7 @@ class YouTubePlugin extends ziplayer_1.BasePlugin {
|
|
|
48
75
|
validate(url) {
|
|
49
76
|
try {
|
|
50
77
|
const parsed = new URL(url);
|
|
51
|
-
const allowedHosts = ["youtube.com", "www.youtube.com", "music.youtube.com", "youtu.be", "www.youtu.be"];
|
|
78
|
+
const allowedHosts = ["youtube.com", "www.youtube.com", "music.youtube.com", "youtu.be", "www.youtu.be", "m.youtube.com"];
|
|
52
79
|
return allowedHosts.includes(parsed.hostname.toLowerCase());
|
|
53
80
|
}
|
|
54
81
|
catch (e) {
|
|
@@ -60,27 +87,33 @@ class YouTubePlugin extends ziplayer_1.BasePlugin {
|
|
|
60
87
|
if (this.validate(query)) {
|
|
61
88
|
const listId = this.extractListId(query);
|
|
62
89
|
if (listId) {
|
|
90
|
+
if (this.isMixListId(listId)) {
|
|
91
|
+
const anchorVideoId = this.extractVideoId(query);
|
|
92
|
+
if (anchorVideoId) {
|
|
93
|
+
try {
|
|
94
|
+
const info = await this.searchClient.getInfo(anchorVideoId);
|
|
95
|
+
console.log(info);
|
|
96
|
+
const feed = info?.watch_next_feed || [];
|
|
97
|
+
const tracks = feed
|
|
98
|
+
.filter((tr) => tr?.content_type === "VIDEO")
|
|
99
|
+
.map((v) => this.buildTrack(v, requestedBy, { playlist: listId }));
|
|
100
|
+
const { basic_info } = info;
|
|
101
|
+
const currTrack = this.buildTrack(basic_info, requestedBy);
|
|
102
|
+
tracks.unshift(currTrack);
|
|
103
|
+
return {
|
|
104
|
+
tracks,
|
|
105
|
+
playlist: { name: "YouTube Mix", url: query, thumbnail: tracks[0]?.thumbnail },
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// ignore and fall back to normal playlist handling below
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
63
113
|
try {
|
|
64
|
-
const playlist = await this.
|
|
114
|
+
const playlist = await this.searchClient.getPlaylist(listId);
|
|
65
115
|
const videos = playlist?.videos || playlist?.items || [];
|
|
66
|
-
const tracks = videos.map((v) => {
|
|
67
|
-
const id = v.id || v.video_id || v.videoId;
|
|
68
|
-
const title = v.title?.text ?? v.title;
|
|
69
|
-
const duration = toSeconds(v.duration?.text ?? v.duration);
|
|
70
|
-
const thumb = v.thumbnails?.[0]?.url || v.thumbnail?.url;
|
|
71
|
-
const author = v.author?.name ?? v.channel?.name;
|
|
72
|
-
const views = v.view_count ?? v.views;
|
|
73
|
-
return {
|
|
74
|
-
id: String(id),
|
|
75
|
-
title,
|
|
76
|
-
url: `https://www.youtube.com/watch?v=${id}`,
|
|
77
|
-
duration: Number(duration) || 0,
|
|
78
|
-
thumbnail: thumb,
|
|
79
|
-
requestedBy,
|
|
80
|
-
source: this.name,
|
|
81
|
-
metadata: { author, views, playlist: listId },
|
|
82
|
-
};
|
|
83
|
-
});
|
|
116
|
+
const tracks = videos.map((v) => this.buildTrack(v, requestedBy, { playlist: listId }));
|
|
84
117
|
return {
|
|
85
118
|
tracks,
|
|
86
119
|
playlist: {
|
|
@@ -99,20 +132,7 @@ class YouTubePlugin extends ziplayer_1.BasePlugin {
|
|
|
99
132
|
if (!videoId)
|
|
100
133
|
throw new Error("Invalid YouTube URL");
|
|
101
134
|
const info = await this.client.getBasicInfo(videoId);
|
|
102
|
-
const
|
|
103
|
-
const track = {
|
|
104
|
-
id: videoId,
|
|
105
|
-
title: basic.title ?? info.title ?? "Unknown title",
|
|
106
|
-
url: `https://www.youtube.com/watch?v=${videoId}`,
|
|
107
|
-
duration: toSeconds(basic.duration ?? info.duration) ?? 0,
|
|
108
|
-
thumbnail: basic.thumbnail?.[0]?.url || basic.thumbnail?.[basic.thumbnail?.length - 1]?.url || info.thumbnails?.[0]?.url,
|
|
109
|
-
requestedBy,
|
|
110
|
-
source: this.name,
|
|
111
|
-
metadata: {
|
|
112
|
-
author: basic.author ?? info.author?.name,
|
|
113
|
-
views: info.basic_info?.view_count ?? info.view_count,
|
|
114
|
-
},
|
|
115
|
-
};
|
|
135
|
+
const track = this.buildTrack(info, requestedBy);
|
|
116
136
|
return { tracks: [track] };
|
|
117
137
|
}
|
|
118
138
|
// Text search → return up to 10 video tracks
|
|
@@ -120,25 +140,7 @@ class YouTubePlugin extends ziplayer_1.BasePlugin {
|
|
|
120
140
|
type: "video",
|
|
121
141
|
});
|
|
122
142
|
const items = res?.items || res?.videos || res?.results || [];
|
|
123
|
-
const tracks = items.slice(0, 10).map((v) =>
|
|
124
|
-
const id = v.id || v.video_id || v.videoId || v.identifier;
|
|
125
|
-
const title = v.title?.text ?? v.title ?? v.headline ?? "Unknown title";
|
|
126
|
-
const duration = toSeconds(v.duration?.text ?? v.duration?.seconds ?? v.duration ?? v.length_text);
|
|
127
|
-
const thumbnail = v.thumbnails?.[0]?.url || v.thumbnail?.url || v.thumbnail?.thumbnails?.[0]?.url;
|
|
128
|
-
const author = v.author?.name ?? v.channel?.name ?? v.owner?.name;
|
|
129
|
-
const views = v.view_count ?? v.views ?? v.short_view_count ?? v.stats?.view_count;
|
|
130
|
-
const track = {
|
|
131
|
-
id: String(id),
|
|
132
|
-
title,
|
|
133
|
-
url: `https://www.youtube.com/watch?v=${id}`,
|
|
134
|
-
duration: Number(duration) || 0,
|
|
135
|
-
thumbnail,
|
|
136
|
-
requestedBy,
|
|
137
|
-
source: this.name,
|
|
138
|
-
metadata: { author, views },
|
|
139
|
-
};
|
|
140
|
-
return track;
|
|
141
|
-
});
|
|
143
|
+
const tracks = items.slice(0, 10).map((v) => this.buildTrack(v, requestedBy));
|
|
142
144
|
return { tracks };
|
|
143
145
|
}
|
|
144
146
|
async extractPlaylist(url, requestedBy) {
|
|
@@ -147,30 +149,28 @@ class YouTubePlugin extends ziplayer_1.BasePlugin {
|
|
|
147
149
|
if (!listId)
|
|
148
150
|
return [];
|
|
149
151
|
try {
|
|
152
|
+
// Attempt to handle dynamic Mix playlists via watch_next feed
|
|
153
|
+
if (this.isMixListId(listId)) {
|
|
154
|
+
const anchorVideoId = this.extractVideoId(url);
|
|
155
|
+
if (anchorVideoId) {
|
|
156
|
+
try {
|
|
157
|
+
const info = await this.searchClient.getInfo(anchorVideoId);
|
|
158
|
+
const feed = info?.watch_next_feed || [];
|
|
159
|
+
return feed
|
|
160
|
+
.filter((tr) => tr?.content_type === "VIDEO")
|
|
161
|
+
.map((v) => this.buildTrack(v, requestedBy, { playlist: listId }));
|
|
162
|
+
}
|
|
163
|
+
catch { }
|
|
164
|
+
}
|
|
165
|
+
}
|
|
150
166
|
const playlist = await this.client.getPlaylist(listId);
|
|
151
167
|
const videos = playlist?.videos || playlist?.items || [];
|
|
168
|
+
console.log(playlist);
|
|
152
169
|
return videos.map((v) => {
|
|
153
|
-
|
|
154
|
-
const title = v.title?.text ?? v.title;
|
|
155
|
-
const duration = toSeconds(v.duration?.text ?? v.duration);
|
|
156
|
-
const thumb = v.thumbnails?.[0]?.url || v.thumbnail?.url;
|
|
157
|
-
const author = v.author?.name ?? v.channel?.name;
|
|
158
|
-
const views = v.view_count ?? v.views;
|
|
159
|
-
const track = {
|
|
160
|
-
id: String(id),
|
|
161
|
-
title,
|
|
162
|
-
url: `https://www.youtube.com/watch?v=${id}`,
|
|
163
|
-
duration: Number(duration) || 0,
|
|
164
|
-
thumbnail: thumb,
|
|
165
|
-
requestedBy,
|
|
166
|
-
source: this.name,
|
|
167
|
-
metadata: { author, views, playlist: listId },
|
|
168
|
-
};
|
|
169
|
-
return track;
|
|
170
|
+
return this.buildTrack(v, requestedBy, { playlist: listId }); //ack;
|
|
170
171
|
});
|
|
171
172
|
}
|
|
172
173
|
catch {
|
|
173
|
-
// If playlist fetch fails, return empty to keep optional contract intact
|
|
174
174
|
return [];
|
|
175
175
|
}
|
|
176
176
|
}
|
|
@@ -235,25 +235,17 @@ class YouTubePlugin extends ziplayer_1.BasePlugin {
|
|
|
235
235
|
async getRelatedTracks(trackURL, opts = {}) {
|
|
236
236
|
await this.ready;
|
|
237
237
|
const videoId = this.extractVideoId(trackURL);
|
|
238
|
+
if (!videoId) {
|
|
239
|
+
// If the last track URL is not a direct video URL (e.g., playlist URL),
|
|
240
|
+
// we cannot fetch related videos reliably.
|
|
241
|
+
return [];
|
|
242
|
+
}
|
|
238
243
|
const info = await await this.searchClient.getInfo(videoId);
|
|
239
244
|
const related = info?.watch_next_feed || [];
|
|
240
245
|
const offset = opts.offset ?? 0;
|
|
241
246
|
const limit = opts.limit ?? 5;
|
|
242
|
-
const relatedfilter = related.filter((tr) => !(opts?.history ?? []).some((t) => t.url === tr.url));
|
|
243
|
-
return relatedfilter.slice(offset, offset + limit).map((v) =>
|
|
244
|
-
const id = v.id || v.video_id || v.videoId || v.content_id;
|
|
245
|
-
const videometa = v?.metadata;
|
|
246
|
-
return {
|
|
247
|
-
id: String(id),
|
|
248
|
-
title: videometa.title.text ?? "Unknown title",
|
|
249
|
-
url: `https://www.youtube.com/watch?v=${id}`,
|
|
250
|
-
duration: Number(v.length_seconds || toSeconds(v.duration)) || 0,
|
|
251
|
-
thumbnail: v.thumbnails?.[0]?.url || v.thumbnail?.url || v.content_image?.image?.[0]?.url,
|
|
252
|
-
requestedBy: "auto",
|
|
253
|
-
source: this.name,
|
|
254
|
-
metadata: { author: v.author, views: v.view_count },
|
|
255
|
-
};
|
|
256
|
-
});
|
|
247
|
+
const relatedfilter = related.filter((tr) => tr.content_type === "VIDEO" && !(opts?.history ?? []).some((t) => t.url === tr.url));
|
|
248
|
+
return relatedfilter.slice(offset, offset + limit).map((v) => this.buildTrack(v, "auto"));
|
|
257
249
|
}
|
|
258
250
|
async getFallback(track) {
|
|
259
251
|
try {
|
|
@@ -291,6 +283,10 @@ class YouTubePlugin extends ziplayer_1.BasePlugin {
|
|
|
291
283
|
return null;
|
|
292
284
|
}
|
|
293
285
|
}
|
|
286
|
+
isMixListId(listId) {
|
|
287
|
+
// YouTube dynamic mixes typically start with 'RD'
|
|
288
|
+
return typeof listId === "string" && listId.toUpperCase().startsWith("RD");
|
|
289
|
+
}
|
|
294
290
|
extractListId(input) {
|
|
295
291
|
try {
|
|
296
292
|
const u = new URL(input);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YouTubePlugin.js","sourceRoot":"","sources":["../src/YouTubePlugin.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"YouTubePlugin.js","sourceRoot":"","sources":["../src/YouTubePlugin.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ziplayer/plugin",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"description": "A modular Discord voice player with plugin system",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ZiPlayer",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"player",
|
|
11
11
|
"voice"
|
|
12
12
|
],
|
|
13
|
-
"homepage": "https://
|
|
13
|
+
"homepage": "https://player.ziji.world",
|
|
14
14
|
"bugs": {
|
|
15
15
|
"url": "https://github.com/ZiProject/ZiPlayer/issues"
|
|
16
16
|
},
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"@zibot/zitts": "^0.0.3",
|
|
33
33
|
"axios": "^1.11.0",
|
|
34
34
|
"youtubei.js": "^15.0.1",
|
|
35
|
-
"ziplayer": "^0.0.
|
|
35
|
+
"ziplayer": "^0.0.6"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@types/node": "^20.0.0",
|
package/src/SoundCloudPlugin.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { BasePlugin, Track, SearchResult, StreamInfo } from "ziplayer";
|
|
|
3
3
|
const SoundCloud = require("@zibot/scdl");
|
|
4
4
|
import { URL } from "url";
|
|
5
5
|
|
|
6
|
-
const ALLOWED_SOUNDCLOUD_HOSTS = ["soundcloud.com", "www.soundcloud.com"];
|
|
6
|
+
const ALLOWED_SOUNDCLOUD_HOSTS = ["soundcloud.com", "www.soundcloud.com", "m.soundcloud.com"];
|
|
7
7
|
|
|
8
8
|
function isValidSoundCloudHost(maybeUrl: string): boolean {
|
|
9
9
|
try {
|
|
@@ -32,16 +32,18 @@ export class SoundCloudPlugin extends BasePlugin {
|
|
|
32
32
|
|
|
33
33
|
canHandle(query: string): boolean {
|
|
34
34
|
const q = (query || "").trim().toLowerCase();
|
|
35
|
-
|
|
36
|
-
if (
|
|
35
|
+
const isUrl = q.startsWith("http://") || q.startsWith("https://");
|
|
36
|
+
if (isUrl) {
|
|
37
37
|
return isValidSoundCloudHost(query);
|
|
38
38
|
}
|
|
39
|
-
|
|
39
|
+
|
|
40
|
+
// Avoid intercepting explicit patterns for other extractors
|
|
40
41
|
if (q.startsWith("tts:") || q.startsWith("say ")) return false;
|
|
41
|
-
|
|
42
|
-
if (q.includes("
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
if (q.startsWith("spotify:") || q.includes("open.spotify.com")) return false;
|
|
43
|
+
if (q.includes("youtube")) return false;
|
|
44
|
+
|
|
45
|
+
// Treat remaining non-URL free text as searchable
|
|
46
|
+
return true;
|
|
45
47
|
}
|
|
46
48
|
|
|
47
49
|
validate(url: string): boolean {
|
|
@@ -51,6 +53,16 @@ export class SoundCloudPlugin extends BasePlugin {
|
|
|
51
53
|
async search(query: string, requestedBy: string): Promise<SearchResult> {
|
|
52
54
|
await this.ready;
|
|
53
55
|
|
|
56
|
+
// If the query is a URL but not a SoundCloud URL, do not handle it here
|
|
57
|
+
// This prevents hijacking e.g. YouTube/Spotify links as free-text searches.
|
|
58
|
+
try {
|
|
59
|
+
const q = (query || "").trim().toLowerCase();
|
|
60
|
+
const isUrl = q.startsWith("http://") || q.startsWith("https://");
|
|
61
|
+
if (isUrl && !this.validate(query)) {
|
|
62
|
+
return { tracks: [] };
|
|
63
|
+
}
|
|
64
|
+
} catch {}
|
|
65
|
+
|
|
54
66
|
try {
|
|
55
67
|
if (isValidSoundCloudHost(query)) {
|
|
56
68
|
try {
|
package/src/TTSPlugin.ts
CHANGED
|
@@ -116,7 +116,10 @@ export class TTSPlugin extends BasePlugin {
|
|
|
116
116
|
const urlStr = o.url.toString();
|
|
117
117
|
try {
|
|
118
118
|
type =
|
|
119
|
-
normType(o.type) ||
|
|
119
|
+
normType(o.type) ||
|
|
120
|
+
(urlStr.endsWith(".webm") ? "webm/opus"
|
|
121
|
+
: urlStr.endsWith(".ogg") ? "ogg/opus"
|
|
122
|
+
: undefined);
|
|
120
123
|
const res = await axios.get(urlStr, { responseType: "stream" });
|
|
121
124
|
stream = res.data as unknown as Readable;
|
|
122
125
|
metadata = o.metadata;
|
package/src/YouTubePlugin.ts
CHANGED
|
@@ -29,6 +29,81 @@ export class YouTubePlugin extends BasePlugin {
|
|
|
29
29
|
Log.setLevel(0);
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
// Build a Track from various YouTube object shapes (search item, playlist item, watch_next feed, basic_info, info)
|
|
33
|
+
private buildTrack(raw: any, requestedBy: string, extra?: { playlist?: string }): Track {
|
|
34
|
+
const pickFirst = (...vals: any[]) => vals.find((v) => v !== undefined && v !== null && v !== "");
|
|
35
|
+
|
|
36
|
+
// Try to resolve from multiple common shapes
|
|
37
|
+
const id = pickFirst(
|
|
38
|
+
raw?.id,
|
|
39
|
+
raw?.video_id,
|
|
40
|
+
raw?.videoId,
|
|
41
|
+
raw?.content_id,
|
|
42
|
+
raw?.identifier,
|
|
43
|
+
raw?.basic_info?.id,
|
|
44
|
+
raw?.basic_info?.video_id,
|
|
45
|
+
raw?.basic_info?.videoId,
|
|
46
|
+
raw?.basic_info?.content_id,
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
const title = pickFirst(
|
|
50
|
+
raw?.metadata?.title?.text,
|
|
51
|
+
raw?.title?.text,
|
|
52
|
+
raw?.title,
|
|
53
|
+
raw?.headline,
|
|
54
|
+
raw?.basic_info?.title,
|
|
55
|
+
"Unknown title",
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
const durationValue = pickFirst(
|
|
59
|
+
raw?.length_seconds,
|
|
60
|
+
raw?.duration?.seconds,
|
|
61
|
+
raw?.duration?.text,
|
|
62
|
+
raw?.duration,
|
|
63
|
+
raw?.length_text,
|
|
64
|
+
raw?.basic_info?.duration,
|
|
65
|
+
);
|
|
66
|
+
const duration = Number(toSeconds(durationValue)) || 0;
|
|
67
|
+
|
|
68
|
+
const thumb = pickFirst(
|
|
69
|
+
raw?.thumbnails?.[0]?.url,
|
|
70
|
+
raw?.thumbnail?.[0]?.url,
|
|
71
|
+
raw?.thumbnail?.url,
|
|
72
|
+
raw?.thumbnail?.thumbnails?.[0]?.url,
|
|
73
|
+
raw?.content_image?.image?.[0]?.url,
|
|
74
|
+
raw?.basic_info?.thumbnail?.[0]?.url,
|
|
75
|
+
raw?.basic_info?.thumbnail?.[raw?.basic_info?.thumbnail?.length - 1]?.url,
|
|
76
|
+
raw?.thumbnails?.[raw?.thumbnails?.length - 1]?.url,
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
const author = pickFirst(raw?.author?.name, raw?.author, raw?.channel?.name, raw?.owner?.name, raw?.basic_info?.author);
|
|
80
|
+
|
|
81
|
+
const views = pickFirst(
|
|
82
|
+
raw?.view_count,
|
|
83
|
+
raw?.views,
|
|
84
|
+
raw?.short_view_count,
|
|
85
|
+
raw?.stats?.view_count,
|
|
86
|
+
raw?.basic_info?.view_count,
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
const url = pickFirst(raw?.url, id ? `https://www.youtube.com/watch?v=${id}` : undefined);
|
|
90
|
+
|
|
91
|
+
return {
|
|
92
|
+
id: String(id),
|
|
93
|
+
title: String(title),
|
|
94
|
+
url: String(url),
|
|
95
|
+
duration,
|
|
96
|
+
thumbnail: thumb,
|
|
97
|
+
requestedBy,
|
|
98
|
+
source: this.name,
|
|
99
|
+
metadata: {
|
|
100
|
+
author,
|
|
101
|
+
views,
|
|
102
|
+
...(extra?.playlist ? { playlist: extra.playlist } : {}),
|
|
103
|
+
},
|
|
104
|
+
} as Track;
|
|
105
|
+
}
|
|
106
|
+
|
|
32
107
|
canHandle(query: string): boolean {
|
|
33
108
|
const q = (query || "").trim().toLowerCase();
|
|
34
109
|
const isUrl = q.startsWith("http://") || q.startsWith("https://");
|
|
@@ -54,7 +129,7 @@ export class YouTubePlugin extends BasePlugin {
|
|
|
54
129
|
validate(url: string): boolean {
|
|
55
130
|
try {
|
|
56
131
|
const parsed = new URL(url);
|
|
57
|
-
const allowedHosts = ["youtube.com", "www.youtube.com", "music.youtube.com", "youtu.be", "www.youtu.be"];
|
|
132
|
+
const allowedHosts = ["youtube.com", "www.youtube.com", "music.youtube.com", "youtu.be", "www.youtu.be", "m.youtube.com"];
|
|
58
133
|
return allowedHosts.includes(parsed.hostname.toLowerCase());
|
|
59
134
|
} catch (e) {
|
|
60
135
|
return false;
|
|
@@ -67,29 +142,33 @@ export class YouTubePlugin extends BasePlugin {
|
|
|
67
142
|
if (this.validate(query)) {
|
|
68
143
|
const listId = this.extractListId(query);
|
|
69
144
|
if (listId) {
|
|
145
|
+
if (this.isMixListId(listId)) {
|
|
146
|
+
const anchorVideoId = this.extractVideoId(query);
|
|
147
|
+
if (anchorVideoId) {
|
|
148
|
+
try {
|
|
149
|
+
const info: any = await (this.searchClient as any).getInfo(anchorVideoId);
|
|
150
|
+
console.log(info);
|
|
151
|
+
const feed: any[] = info?.watch_next_feed || [];
|
|
152
|
+
const tracks: Track[] = feed
|
|
153
|
+
.filter((tr: any) => tr?.content_type === "VIDEO")
|
|
154
|
+
.map((v: any) => this.buildTrack(v, requestedBy, { playlist: listId }));
|
|
155
|
+
const { basic_info } = info;
|
|
156
|
+
|
|
157
|
+
const currTrack = this.buildTrack(basic_info, requestedBy);
|
|
158
|
+
tracks.unshift(currTrack);
|
|
159
|
+
return {
|
|
160
|
+
tracks,
|
|
161
|
+
playlist: { name: "YouTube Mix", url: query, thumbnail: tracks[0]?.thumbnail },
|
|
162
|
+
};
|
|
163
|
+
} catch {
|
|
164
|
+
// ignore and fall back to normal playlist handling below
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
70
168
|
try {
|
|
71
|
-
const playlist: any = await (this.
|
|
169
|
+
const playlist: any = await (this.searchClient as any).getPlaylist(listId);
|
|
72
170
|
const videos: any[] = playlist?.videos || playlist?.items || [];
|
|
73
|
-
|
|
74
|
-
const tracks: Track[] = videos.map((v: any) => {
|
|
75
|
-
const id = v.id || v.video_id || v.videoId;
|
|
76
|
-
const title = v.title?.text ?? v.title;
|
|
77
|
-
const duration = toSeconds(v.duration?.text ?? v.duration);
|
|
78
|
-
const thumb = v.thumbnails?.[0]?.url || v.thumbnail?.url;
|
|
79
|
-
const author = v.author?.name ?? v.channel?.name;
|
|
80
|
-
const views = v.view_count ?? v.views;
|
|
81
|
-
|
|
82
|
-
return {
|
|
83
|
-
id: String(id),
|
|
84
|
-
title,
|
|
85
|
-
url: `https://www.youtube.com/watch?v=${id}`,
|
|
86
|
-
duration: Number(duration) || 0,
|
|
87
|
-
thumbnail: thumb,
|
|
88
|
-
requestedBy,
|
|
89
|
-
source: this.name,
|
|
90
|
-
metadata: { author, views, playlist: listId },
|
|
91
|
-
} as Track;
|
|
92
|
-
});
|
|
171
|
+
const tracks: Track[] = videos.map((v: any) => this.buildTrack(v, requestedBy, { playlist: listId }));
|
|
93
172
|
|
|
94
173
|
return {
|
|
95
174
|
tracks,
|
|
@@ -109,23 +188,7 @@ export class YouTubePlugin extends BasePlugin {
|
|
|
109
188
|
if (!videoId) throw new Error("Invalid YouTube URL");
|
|
110
189
|
|
|
111
190
|
const info = await this.client.getBasicInfo(videoId);
|
|
112
|
-
const
|
|
113
|
-
|
|
114
|
-
const track: Track = {
|
|
115
|
-
id: videoId,
|
|
116
|
-
title: basic.title ?? (info as any).title ?? "Unknown title",
|
|
117
|
-
url: `https://www.youtube.com/watch?v=${videoId}`,
|
|
118
|
-
duration: toSeconds(basic.duration ?? (info as any).duration) ?? 0,
|
|
119
|
-
thumbnail:
|
|
120
|
-
basic.thumbnail?.[0]?.url || basic.thumbnail?.[basic.thumbnail?.length - 1]?.url || (info as any).thumbnails?.[0]?.url,
|
|
121
|
-
requestedBy,
|
|
122
|
-
source: this.name,
|
|
123
|
-
metadata: {
|
|
124
|
-
author: basic.author ?? (info as any).author?.name,
|
|
125
|
-
views: (info as any).basic_info?.view_count ?? (info as any).view_count,
|
|
126
|
-
},
|
|
127
|
-
};
|
|
128
|
-
|
|
191
|
+
const track = this.buildTrack(info, requestedBy);
|
|
129
192
|
return { tracks: [track] };
|
|
130
193
|
}
|
|
131
194
|
|
|
@@ -135,26 +198,7 @@ export class YouTubePlugin extends BasePlugin {
|
|
|
135
198
|
});
|
|
136
199
|
const items: any[] = res?.items || res?.videos || res?.results || [];
|
|
137
200
|
|
|
138
|
-
const tracks: Track[] = items.slice(0, 10).map((v: any) =>
|
|
139
|
-
const id = v.id || v.video_id || v.videoId || v.identifier;
|
|
140
|
-
const title = v.title?.text ?? v.title ?? v.headline ?? "Unknown title";
|
|
141
|
-
const duration = toSeconds(v.duration?.text ?? v.duration?.seconds ?? v.duration ?? v.length_text);
|
|
142
|
-
const thumbnail = v.thumbnails?.[0]?.url || v.thumbnail?.url || v.thumbnail?.thumbnails?.[0]?.url;
|
|
143
|
-
const author = v.author?.name ?? v.channel?.name ?? v.owner?.name;
|
|
144
|
-
const views = v.view_count ?? v.views ?? v.short_view_count ?? v.stats?.view_count;
|
|
145
|
-
|
|
146
|
-
const track: Track = {
|
|
147
|
-
id: String(id),
|
|
148
|
-
title,
|
|
149
|
-
url: `https://www.youtube.com/watch?v=${id}`,
|
|
150
|
-
duration: Number(duration) || 0,
|
|
151
|
-
thumbnail,
|
|
152
|
-
requestedBy,
|
|
153
|
-
source: this.name,
|
|
154
|
-
metadata: { author, views },
|
|
155
|
-
};
|
|
156
|
-
return track;
|
|
157
|
-
});
|
|
201
|
+
const tracks: Track[] = items.slice(0, 10).map((v: any) => this.buildTrack(v, requestedBy));
|
|
158
202
|
|
|
159
203
|
return { tracks };
|
|
160
204
|
}
|
|
@@ -166,31 +210,27 @@ export class YouTubePlugin extends BasePlugin {
|
|
|
166
210
|
if (!listId) return [];
|
|
167
211
|
|
|
168
212
|
try {
|
|
213
|
+
// Attempt to handle dynamic Mix playlists via watch_next feed
|
|
214
|
+
if (this.isMixListId(listId)) {
|
|
215
|
+
const anchorVideoId = this.extractVideoId(url);
|
|
216
|
+
if (anchorVideoId) {
|
|
217
|
+
try {
|
|
218
|
+
const info: any = await (this.searchClient as any).getInfo(anchorVideoId);
|
|
219
|
+
const feed: any[] = info?.watch_next_feed || [];
|
|
220
|
+
return feed
|
|
221
|
+
.filter((tr: any) => tr?.content_type === "VIDEO")
|
|
222
|
+
.map((v: any) => this.buildTrack(v, requestedBy, { playlist: listId }));
|
|
223
|
+
} catch {}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
169
227
|
const playlist: any = await (this.client as any).getPlaylist(listId);
|
|
170
228
|
const videos: any[] = playlist?.videos || playlist?.items || [];
|
|
171
|
-
|
|
229
|
+
console.log(playlist);
|
|
172
230
|
return videos.map((v: any) => {
|
|
173
|
-
|
|
174
|
-
const title = v.title?.text ?? v.title;
|
|
175
|
-
const duration = toSeconds(v.duration?.text ?? v.duration);
|
|
176
|
-
const thumb = v.thumbnails?.[0]?.url || v.thumbnail?.url;
|
|
177
|
-
const author = v.author?.name ?? v.channel?.name;
|
|
178
|
-
const views = v.view_count ?? v.views;
|
|
179
|
-
|
|
180
|
-
const track: Track = {
|
|
181
|
-
id: String(id),
|
|
182
|
-
title,
|
|
183
|
-
url: `https://www.youtube.com/watch?v=${id}`,
|
|
184
|
-
duration: Number(duration) || 0,
|
|
185
|
-
thumbnail: thumb,
|
|
186
|
-
requestedBy,
|
|
187
|
-
source: this.name,
|
|
188
|
-
metadata: { author, views, playlist: listId },
|
|
189
|
-
};
|
|
190
|
-
return track;
|
|
231
|
+
return this.buildTrack(v, requestedBy, { playlist: listId }); //ack;
|
|
191
232
|
});
|
|
192
233
|
} catch {
|
|
193
|
-
// If playlist fetch fails, return empty to keep optional contract intact
|
|
194
234
|
return [];
|
|
195
235
|
}
|
|
196
236
|
}
|
|
@@ -260,27 +300,21 @@ export class YouTubePlugin extends BasePlugin {
|
|
|
260
300
|
async getRelatedTracks(trackURL: string, opts: { limit?: number; offset?: number; history?: Track[] } = {}): Promise<Track[]> {
|
|
261
301
|
await this.ready;
|
|
262
302
|
const videoId = this.extractVideoId(trackURL);
|
|
303
|
+
if (!videoId) {
|
|
304
|
+
// If the last track URL is not a direct video URL (e.g., playlist URL),
|
|
305
|
+
// we cannot fetch related videos reliably.
|
|
306
|
+
return [];
|
|
307
|
+
}
|
|
263
308
|
const info: any = await await (this.searchClient as any).getInfo(videoId);
|
|
264
309
|
const related: any[] = info?.watch_next_feed || [];
|
|
265
310
|
const offset = opts.offset ?? 0;
|
|
266
311
|
const limit = opts.limit ?? 5;
|
|
267
312
|
|
|
268
|
-
const relatedfilter = related.filter(
|
|
313
|
+
const relatedfilter = related.filter(
|
|
314
|
+
(tr: any) => tr.content_type === "VIDEO" && !(opts?.history ?? []).some((t) => t.url === tr.url),
|
|
315
|
+
);
|
|
269
316
|
|
|
270
|
-
return relatedfilter.slice(offset, offset + limit).map((v: any) =>
|
|
271
|
-
const id = v.id || v.video_id || v.videoId || v.content_id;
|
|
272
|
-
const videometa = v?.metadata;
|
|
273
|
-
return {
|
|
274
|
-
id: String(id),
|
|
275
|
-
title: videometa.title.text ?? "Unknown title",
|
|
276
|
-
url: `https://www.youtube.com/watch?v=${id}`,
|
|
277
|
-
duration: Number(v.length_seconds || toSeconds(v.duration)) || 0,
|
|
278
|
-
thumbnail: v.thumbnails?.[0]?.url || v.thumbnail?.url || v.content_image?.image?.[0]?.url,
|
|
279
|
-
requestedBy: "auto",
|
|
280
|
-
source: this.name,
|
|
281
|
-
metadata: { author: v.author, views: v.view_count },
|
|
282
|
-
} as Track;
|
|
283
|
-
});
|
|
317
|
+
return relatedfilter.slice(offset, offset + limit).map((v: any) => this.buildTrack(v, "auto"));
|
|
284
318
|
}
|
|
285
319
|
|
|
286
320
|
async getFallback(track: Track): Promise<StreamInfo> {
|
|
@@ -315,6 +349,11 @@ export class YouTubePlugin extends BasePlugin {
|
|
|
315
349
|
}
|
|
316
350
|
}
|
|
317
351
|
|
|
352
|
+
private isMixListId(listId: string): boolean {
|
|
353
|
+
// YouTube dynamic mixes typically start with 'RD'
|
|
354
|
+
return typeof listId === "string" && listId.toUpperCase().startsWith("RD");
|
|
355
|
+
}
|
|
356
|
+
|
|
318
357
|
private extractListId(input: string): string | null {
|
|
319
358
|
try {
|
|
320
359
|
const u = new URL(input);
|