ziplayer 0.1.3 → 0.1.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 +212 -212
- package/dist/plugins/SoundCloudPlugin.d.ts +22 -0
- package/dist/plugins/SoundCloudPlugin.d.ts.map +1 -0
- package/dist/plugins/SoundCloudPlugin.js +171 -0
- package/dist/plugins/SoundCloudPlugin.js.map +1 -0
- package/dist/plugins/SpotifyPlugin.d.ts +26 -0
- package/dist/plugins/SpotifyPlugin.d.ts.map +1 -0
- package/dist/plugins/SpotifyPlugin.js +183 -0
- package/dist/plugins/SpotifyPlugin.js.map +1 -0
- package/dist/plugins/YouTubePlugin.d.ts +25 -0
- package/dist/plugins/YouTubePlugin.d.ts.map +1 -0
- package/dist/plugins/YouTubePlugin.js +314 -0
- package/dist/plugins/YouTubePlugin.js.map +1 -0
- package/dist/structures/Player.d.ts +23 -13
- package/dist/structures/Player.d.ts.map +1 -1
- package/dist/structures/Player.js +129 -54
- package/dist/structures/Player.js.map +1 -1
- package/package.json +45 -45
- package/src/extensions/BaseExtension.ts +35 -35
- package/src/extensions/index.ts +32 -32
- package/src/index.ts +16 -16
- package/src/plugins/BasePlugin.ts +26 -26
- package/src/plugins/index.ts +32 -32
- package/src/structures/Player.ts +1828 -1747
- package/src/structures/PlayerManager.ts +411 -411
- package/src/structures/Queue.ts +354 -354
- package/src/types/index.ts +470 -470
- package/src/utils/timeout.ts +10 -10
- package/tsconfig.json +23 -23
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SpotifyPlugin = void 0;
|
|
4
|
+
const BasePlugin_1 = require("./BasePlugin");
|
|
5
|
+
/**
|
|
6
|
+
* This minimal Spotify plugin:
|
|
7
|
+
* - Parses Spotify URLs/URIs (track/playlist/album)
|
|
8
|
+
* - Uses Spotify's public oEmbed endpoint to fetch *display metadata* (no auth, no SDK)
|
|
9
|
+
* - Does NOT provide audio streams (player is expected to redirect/fallback upstream)
|
|
10
|
+
* - Does NOT expand playlists/albums (no SDK; oEmbed doesn't enumerate items)
|
|
11
|
+
*/
|
|
12
|
+
class SpotifyPlugin extends BasePlugin_1.BasePlugin {
|
|
13
|
+
constructor() {
|
|
14
|
+
super(...arguments);
|
|
15
|
+
this.name = "spotify";
|
|
16
|
+
this.version = "1.1.0";
|
|
17
|
+
}
|
|
18
|
+
canHandle(query) {
|
|
19
|
+
const q = query.toLowerCase().trim();
|
|
20
|
+
if (q.startsWith("spotify:"))
|
|
21
|
+
return true;
|
|
22
|
+
try {
|
|
23
|
+
const u = new URL(q);
|
|
24
|
+
return u.hostname.includes("open.spotify.com");
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
validate(url) {
|
|
31
|
+
if (url.startsWith("spotify:"))
|
|
32
|
+
return true;
|
|
33
|
+
try {
|
|
34
|
+
const u = new URL(url);
|
|
35
|
+
return u.hostname.includes("open.spotify.com");
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async search(query, requestedBy) {
|
|
42
|
+
if (!this.validate(query)) {
|
|
43
|
+
return { tracks: [] };
|
|
44
|
+
}
|
|
45
|
+
const kind = this.identifyKind(query);
|
|
46
|
+
if (kind === "track") {
|
|
47
|
+
const t = await this.buildTrackFromUrlOrUri(query, requestedBy);
|
|
48
|
+
return { tracks: t ? [t] : [] };
|
|
49
|
+
}
|
|
50
|
+
if (kind === "playlist") {
|
|
51
|
+
const t = await this.buildHeaderItem(query, requestedBy, "playlist");
|
|
52
|
+
return { tracks: t ? [t] : [] };
|
|
53
|
+
}
|
|
54
|
+
if (kind === "album") {
|
|
55
|
+
const t = await this.buildHeaderItem(query, requestedBy, "album");
|
|
56
|
+
return { tracks: t ? [t] : [] };
|
|
57
|
+
}
|
|
58
|
+
return { tracks: [] };
|
|
59
|
+
}
|
|
60
|
+
async extractPlaylist(_input, _requestedBy) {
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
async extractAlbum(_input, _requestedBy) {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
async getStream(_track) {
|
|
67
|
+
throw new Error("Spotify streaming is not supported by this plugin");
|
|
68
|
+
}
|
|
69
|
+
identifyKind(input) {
|
|
70
|
+
if (input.startsWith("spotify:")) {
|
|
71
|
+
if (input.includes(":track:"))
|
|
72
|
+
return "track";
|
|
73
|
+
if (input.includes(":playlist:"))
|
|
74
|
+
return "playlist";
|
|
75
|
+
if (input.includes(":album:"))
|
|
76
|
+
return "album";
|
|
77
|
+
return "unknown";
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
const u = new URL(input);
|
|
81
|
+
const parts = u.pathname.split("/").filter(Boolean);
|
|
82
|
+
const kind = parts[0];
|
|
83
|
+
if (kind === "track")
|
|
84
|
+
return "track";
|
|
85
|
+
if (kind === "playlist")
|
|
86
|
+
return "playlist";
|
|
87
|
+
if (kind === "album")
|
|
88
|
+
return "album";
|
|
89
|
+
return "unknown";
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return "unknown";
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
extractId(input) {
|
|
96
|
+
if (!input)
|
|
97
|
+
return null;
|
|
98
|
+
if (input.startsWith("spotify:")) {
|
|
99
|
+
const parts = input.split(":");
|
|
100
|
+
return parts[2] || null;
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
const u = new URL(input);
|
|
104
|
+
const parts = u.pathname.split("/").filter(Boolean);
|
|
105
|
+
return parts[1] || null; // /track/<id>
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async buildTrackFromUrlOrUri(input, requestedBy) {
|
|
112
|
+
const id = this.extractId(input);
|
|
113
|
+
if (!id)
|
|
114
|
+
return null;
|
|
115
|
+
const url = this.toShareUrl(input, "track", id);
|
|
116
|
+
const meta = await this.fetchOEmbed(url).catch(() => undefined);
|
|
117
|
+
const title = meta?.title || `Spotify Track ${id}`;
|
|
118
|
+
const thumbnail = meta?.thumbnail_url;
|
|
119
|
+
const track = {
|
|
120
|
+
id,
|
|
121
|
+
title,
|
|
122
|
+
url,
|
|
123
|
+
duration: 0,
|
|
124
|
+
thumbnail,
|
|
125
|
+
requestedBy,
|
|
126
|
+
source: this.name,
|
|
127
|
+
metadata: {
|
|
128
|
+
author: meta?.author_name,
|
|
129
|
+
provider: meta?.provider_name,
|
|
130
|
+
spotify_id: id,
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
return track;
|
|
134
|
+
}
|
|
135
|
+
async buildHeaderItem(input, requestedBy, kind) {
|
|
136
|
+
const id = this.extractId(input);
|
|
137
|
+
if (!id)
|
|
138
|
+
return null;
|
|
139
|
+
const url = this.toShareUrl(input, kind, id);
|
|
140
|
+
const meta = await this.fetchOEmbed(url).catch(() => undefined);
|
|
141
|
+
const title = meta?.title || `Spotify ${kind} ${id}`;
|
|
142
|
+
const thumbnail = meta?.thumbnail_url;
|
|
143
|
+
return {
|
|
144
|
+
id,
|
|
145
|
+
title,
|
|
146
|
+
url,
|
|
147
|
+
duration: 0,
|
|
148
|
+
thumbnail,
|
|
149
|
+
requestedBy,
|
|
150
|
+
source: this.name,
|
|
151
|
+
metadata: {
|
|
152
|
+
author: meta?.author_name,
|
|
153
|
+
provider: meta?.provider_name,
|
|
154
|
+
spotify_id: id,
|
|
155
|
+
kind,
|
|
156
|
+
},
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
toShareUrl(input, expectedKind, id) {
|
|
160
|
+
if (input.startsWith("spotify:")) {
|
|
161
|
+
return `https://open.spotify.com/${expectedKind}/${id}`;
|
|
162
|
+
}
|
|
163
|
+
try {
|
|
164
|
+
const u = new URL(input);
|
|
165
|
+
const parts = u.pathname.split("/").filter(Boolean);
|
|
166
|
+
const kind = parts[0] || expectedKind;
|
|
167
|
+
const realId = parts[1] || id;
|
|
168
|
+
return `https://open.spotify.com/${kind}/${realId}`;
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
return `https://open.spotify.com/${expectedKind}/${id}`;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
async fetchOEmbed(pageUrl) {
|
|
175
|
+
const endpoint = `https://open.spotify.com/oembed?url=${encodeURIComponent(pageUrl)}`;
|
|
176
|
+
const res = await fetch(endpoint);
|
|
177
|
+
if (!res.ok)
|
|
178
|
+
throw new Error(`oEmbed HTTP ${res.status}`);
|
|
179
|
+
return res.json();
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
exports.SpotifyPlugin = SpotifyPlugin;
|
|
183
|
+
//# sourceMappingURL=SpotifyPlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpotifyPlugin.js","sourceRoot":"","sources":["../../src/plugins/SpotifyPlugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { BasePlugin } from "./BasePlugin";
|
|
2
|
+
import { Track, SearchResult, StreamInfo } from "../types";
|
|
3
|
+
export declare class YouTubePlugin extends BasePlugin {
|
|
4
|
+
name: string;
|
|
5
|
+
version: string;
|
|
6
|
+
private client;
|
|
7
|
+
private searchClient;
|
|
8
|
+
private ready;
|
|
9
|
+
constructor();
|
|
10
|
+
private init;
|
|
11
|
+
canHandle(query: string): boolean;
|
|
12
|
+
validate(url: string): boolean;
|
|
13
|
+
search(query: string, requestedBy: string): Promise<SearchResult>;
|
|
14
|
+
extractPlaylist(url: string, requestedBy: string): Promise<Track[]>;
|
|
15
|
+
getStream(track: Track): Promise<StreamInfo>;
|
|
16
|
+
getRelatedTracks(trackURL: string, opts?: {
|
|
17
|
+
limit?: number;
|
|
18
|
+
offset?: number;
|
|
19
|
+
history?: Track[];
|
|
20
|
+
}): Promise<Track[]>;
|
|
21
|
+
getFallback(track: Track): Promise<StreamInfo>;
|
|
22
|
+
private extractVideoId;
|
|
23
|
+
private extractListId;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=YouTubePlugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"YouTubePlugin.d.ts","sourceRoot":"","sources":["../../src/plugins/YouTubePlugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAI3D,qBAAa,aAAc,SAAQ,UAAU;IAC3C,IAAI,SAAa;IACjB,OAAO,SAAW;IAElB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,KAAK,CAAgB;;YAOf,IAAI;IAclB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAUjC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAKxB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAiHjE,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAoCnE,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;IAoE5C,gBAAgB,CACpB,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAA;KAAO,GAChE,OAAO,CAAC,KAAK,EAAE,CAAC;IA+Bb,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC;IAWpD,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,aAAa;CAQtB"}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.YouTubePlugin = void 0;
|
|
4
|
+
const BasePlugin_1 = require("./BasePlugin");
|
|
5
|
+
const youtubei_js_1 = require("youtubei.js");
|
|
6
|
+
class YouTubePlugin extends BasePlugin_1.BasePlugin {
|
|
7
|
+
constructor() {
|
|
8
|
+
super();
|
|
9
|
+
this.name = "youtube";
|
|
10
|
+
this.version = "1.0.0";
|
|
11
|
+
this.ready = this.init();
|
|
12
|
+
}
|
|
13
|
+
async init() {
|
|
14
|
+
this.client = await youtubei_js_1.Innertube.create({
|
|
15
|
+
client_type: "ANDROID",
|
|
16
|
+
retrieve_player: false,
|
|
17
|
+
});
|
|
18
|
+
// Use a separate web client for search to avoid mobile parser issues
|
|
19
|
+
this.searchClient = await youtubei_js_1.Innertube.create({
|
|
20
|
+
client_type: "WEB",
|
|
21
|
+
retrieve_player: false,
|
|
22
|
+
});
|
|
23
|
+
youtubei_js_1.Log.setLevel(0);
|
|
24
|
+
}
|
|
25
|
+
canHandle(query) {
|
|
26
|
+
const q = query.toLowerCase();
|
|
27
|
+
const isUrl = q.startsWith("http://") || q.startsWith("https://");
|
|
28
|
+
return (q.includes("youtube.com") ||
|
|
29
|
+
q.includes("youtu.be") ||
|
|
30
|
+
(!isUrl && q.includes("youtube")));
|
|
31
|
+
}
|
|
32
|
+
validate(url) {
|
|
33
|
+
const u = url.toLowerCase();
|
|
34
|
+
return u.includes("youtube.com") || u.includes("youtu.be");
|
|
35
|
+
}
|
|
36
|
+
async search(query, requestedBy) {
|
|
37
|
+
await this.ready;
|
|
38
|
+
if (this.validate(query)) {
|
|
39
|
+
const listId = this.extractListId(query);
|
|
40
|
+
if (listId) {
|
|
41
|
+
try {
|
|
42
|
+
const playlist = await this.client.getPlaylist(listId);
|
|
43
|
+
const videos = playlist?.videos || playlist?.items || [];
|
|
44
|
+
const tracks = videos.map((v) => {
|
|
45
|
+
const id = v.id || v.video_id || v.videoId;
|
|
46
|
+
const title = v.title?.text ?? v.title;
|
|
47
|
+
const duration = toSeconds(v.duration?.text ?? v.duration);
|
|
48
|
+
const thumb = v.thumbnails?.[0]?.url || v.thumbnail?.url;
|
|
49
|
+
const author = v.author?.name ?? v.channel?.name;
|
|
50
|
+
const views = v.view_count ?? v.views;
|
|
51
|
+
return {
|
|
52
|
+
id: String(id),
|
|
53
|
+
title,
|
|
54
|
+
url: `https://www.youtube.com/watch?v=${id}`,
|
|
55
|
+
duration: Number(duration) || 0,
|
|
56
|
+
thumbnail: thumb,
|
|
57
|
+
requestedBy,
|
|
58
|
+
source: this.name,
|
|
59
|
+
metadata: { author, views, playlist: listId },
|
|
60
|
+
};
|
|
61
|
+
});
|
|
62
|
+
return {
|
|
63
|
+
tracks,
|
|
64
|
+
playlist: {
|
|
65
|
+
name: playlist?.title ||
|
|
66
|
+
playlist?.metadata?.title ||
|
|
67
|
+
`Playlist ${listId}`,
|
|
68
|
+
url: query,
|
|
69
|
+
thumbnail: playlist?.thumbnails?.[0]?.url || playlist?.thumbnail?.url,
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
const withoutList = query
|
|
75
|
+
.replace(/[?&]list=[^&]+/, "")
|
|
76
|
+
.replace(/[?&]$/, "");
|
|
77
|
+
return await this.search(withoutList, requestedBy);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const videoId = this.extractVideoId(query);
|
|
81
|
+
if (!videoId)
|
|
82
|
+
throw new Error("Invalid YouTube URL");
|
|
83
|
+
const info = await this.client.getBasicInfo(videoId);
|
|
84
|
+
const basic = info.basic_info ?? {};
|
|
85
|
+
const track = {
|
|
86
|
+
id: videoId,
|
|
87
|
+
title: basic.title ?? info.title ?? "Unknown title",
|
|
88
|
+
url: `https://www.youtube.com/watch?v=${videoId}`,
|
|
89
|
+
duration: toSeconds(basic.duration ?? info.duration) ?? 0,
|
|
90
|
+
thumbnail: basic.thumbnail?.[0]?.url ||
|
|
91
|
+
basic.thumbnail?.[basic.thumbnail?.length - 1]?.url ||
|
|
92
|
+
info.thumbnails?.[0]?.url,
|
|
93
|
+
requestedBy,
|
|
94
|
+
source: this.name,
|
|
95
|
+
metadata: {
|
|
96
|
+
author: basic.author ?? info.author?.name,
|
|
97
|
+
views: info.basic_info?.view_count ?? info.view_count,
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
return { tracks: [track] };
|
|
101
|
+
}
|
|
102
|
+
// Text search → return up to 10 video tracks
|
|
103
|
+
const res = await this.searchClient.search(query, {
|
|
104
|
+
type: "video",
|
|
105
|
+
});
|
|
106
|
+
const items = res?.items || res?.videos || res?.results || [];
|
|
107
|
+
const tracks = items.slice(0, 10).map((v) => {
|
|
108
|
+
const id = v.id || v.video_id || v.videoId || v.identifier;
|
|
109
|
+
const title = v.title?.text ?? v.title ?? v.headline ?? "Unknown title";
|
|
110
|
+
const duration = toSeconds(v.duration?.text ?? v.duration?.seconds ?? v.duration ?? v.length_text);
|
|
111
|
+
const thumbnail = v.thumbnails?.[0]?.url ||
|
|
112
|
+
v.thumbnail?.url ||
|
|
113
|
+
v.thumbnail?.thumbnails?.[0]?.url;
|
|
114
|
+
const author = v.author?.name ?? v.channel?.name ?? v.owner?.name;
|
|
115
|
+
const views = v.view_count ?? v.views ?? v.short_view_count ?? v.stats?.view_count;
|
|
116
|
+
const track = {
|
|
117
|
+
id: String(id),
|
|
118
|
+
title,
|
|
119
|
+
url: `https://www.youtube.com/watch?v=${id}`,
|
|
120
|
+
duration: Number(duration) || 0,
|
|
121
|
+
thumbnail,
|
|
122
|
+
requestedBy,
|
|
123
|
+
source: this.name,
|
|
124
|
+
metadata: { author, views },
|
|
125
|
+
};
|
|
126
|
+
return track;
|
|
127
|
+
});
|
|
128
|
+
return { tracks };
|
|
129
|
+
}
|
|
130
|
+
async extractPlaylist(url, requestedBy) {
|
|
131
|
+
await this.ready;
|
|
132
|
+
const listId = this.extractListId(url);
|
|
133
|
+
if (!listId)
|
|
134
|
+
return [];
|
|
135
|
+
try {
|
|
136
|
+
const playlist = await this.client.getPlaylist(listId);
|
|
137
|
+
const videos = playlist?.videos || playlist?.items || [];
|
|
138
|
+
return videos.map((v) => {
|
|
139
|
+
const id = v.id || v.video_id || v.videoId;
|
|
140
|
+
const title = v.title?.text ?? v.title;
|
|
141
|
+
const duration = toSeconds(v.duration?.text ?? v.duration);
|
|
142
|
+
const thumb = v.thumbnails?.[0]?.url || v.thumbnail?.url;
|
|
143
|
+
const author = v.author?.name ?? v.channel?.name;
|
|
144
|
+
const views = v.view_count ?? v.views;
|
|
145
|
+
const track = {
|
|
146
|
+
id: String(id),
|
|
147
|
+
title,
|
|
148
|
+
url: `https://www.youtube.com/watch?v=${id}`,
|
|
149
|
+
duration: Number(duration) || 0,
|
|
150
|
+
thumbnail: thumb,
|
|
151
|
+
requestedBy,
|
|
152
|
+
source: this.name,
|
|
153
|
+
metadata: { author, views, playlist: listId },
|
|
154
|
+
};
|
|
155
|
+
return track;
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
// If playlist fetch fails, return empty to keep optional contract intact
|
|
160
|
+
return [];
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
async getStream(track) {
|
|
164
|
+
await this.ready;
|
|
165
|
+
const id = this.extractVideoId(track.url) || track.id;
|
|
166
|
+
if (!id)
|
|
167
|
+
throw new Error("Invalid track id");
|
|
168
|
+
try {
|
|
169
|
+
const stream = await this.client.download(id, {
|
|
170
|
+
type: "audio",
|
|
171
|
+
quality: "best",
|
|
172
|
+
});
|
|
173
|
+
return {
|
|
174
|
+
stream,
|
|
175
|
+
type: "arbitrary",
|
|
176
|
+
metadata: track.metadata,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
catch (e) {
|
|
180
|
+
try {
|
|
181
|
+
const info = await this.client.getBasicInfo(id);
|
|
182
|
+
// Prefer m4a audio-only formats first
|
|
183
|
+
let format = info?.chooseFormat?.({
|
|
184
|
+
type: "audio",
|
|
185
|
+
quality: "best",
|
|
186
|
+
});
|
|
187
|
+
if (!format && info?.formats?.length) {
|
|
188
|
+
const audioOnly = info.formats.filter((f) => f.mime_type?.includes("audio"));
|
|
189
|
+
audioOnly.sort((a, b) => (b.bitrate || 0) - (a.bitrate || 0));
|
|
190
|
+
format = audioOnly[0];
|
|
191
|
+
}
|
|
192
|
+
if (!format)
|
|
193
|
+
throw new Error("No audio format available");
|
|
194
|
+
let url = undefined;
|
|
195
|
+
if (typeof format.decipher === "function") {
|
|
196
|
+
url = format.decipher(this.client.session.player);
|
|
197
|
+
}
|
|
198
|
+
if (!url)
|
|
199
|
+
url = format.url;
|
|
200
|
+
if (!url)
|
|
201
|
+
throw new Error("No valid URL to decipher");
|
|
202
|
+
const res = await fetch(url);
|
|
203
|
+
if (!res.ok || !res.body) {
|
|
204
|
+
throw new Error(`HTTP ${res.status}`);
|
|
205
|
+
}
|
|
206
|
+
return {
|
|
207
|
+
stream: res.body,
|
|
208
|
+
type: "arbitrary",
|
|
209
|
+
metadata: {
|
|
210
|
+
...track.metadata,
|
|
211
|
+
itag: format.itag,
|
|
212
|
+
mime: format.mime_type,
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
catch (inner) {
|
|
217
|
+
throw new Error(`Failed to get YouTube stream: ${inner?.message || inner}`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
async getRelatedTracks(trackURL, opts = {}) {
|
|
222
|
+
await this.ready;
|
|
223
|
+
const videoId = this.extractVideoId(trackURL);
|
|
224
|
+
const info = await await this.searchClient.getInfo(videoId);
|
|
225
|
+
const related = info?.watch_next_feed || [];
|
|
226
|
+
const offset = opts.offset ?? 0;
|
|
227
|
+
const limit = opts.limit ?? 5;
|
|
228
|
+
const relatedfilter = related.filter((tr) => !(opts?.history ?? []).some((t) => t.url === tr.url));
|
|
229
|
+
return relatedfilter.slice(offset, offset + limit).map((v) => {
|
|
230
|
+
const id = v.id || v.video_id || v.videoId || v.content_id;
|
|
231
|
+
const videometa = v?.metadata;
|
|
232
|
+
return {
|
|
233
|
+
id: String(id),
|
|
234
|
+
title: videometa.title.text ?? "Unknown title",
|
|
235
|
+
url: `https://www.youtube.com/watch?v=${id}`,
|
|
236
|
+
duration: Number(v.length_seconds || toSeconds(v.duration)) || 0,
|
|
237
|
+
thumbnail: v.thumbnails?.[0]?.url ||
|
|
238
|
+
v.thumbnail?.url ||
|
|
239
|
+
v.content_image?.image[0]?.url,
|
|
240
|
+
requestedBy: "auto",
|
|
241
|
+
source: this.name,
|
|
242
|
+
metadata: { author: v.author, views: v.view_count },
|
|
243
|
+
};
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
async getFallback(track) {
|
|
247
|
+
try {
|
|
248
|
+
const result = await this.search(track.title, track.requestedBy);
|
|
249
|
+
const first = result.tracks[0];
|
|
250
|
+
if (!first)
|
|
251
|
+
throw new Error("No fallback track found");
|
|
252
|
+
return await this.getStream(first);
|
|
253
|
+
}
|
|
254
|
+
catch (e) {
|
|
255
|
+
throw new Error(`YouTube fallback search failed: ${e?.message || e}`);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
extractVideoId(input) {
|
|
259
|
+
try {
|
|
260
|
+
const u = new URL(input);
|
|
261
|
+
if (u.hostname.includes("youtu.be")) {
|
|
262
|
+
return u.pathname.split("/").filter(Boolean)[0] || null;
|
|
263
|
+
}
|
|
264
|
+
if (u.hostname.includes("youtube.com")) {
|
|
265
|
+
// watch?v=, shorts/, embed/
|
|
266
|
+
if (u.searchParams.get("v"))
|
|
267
|
+
return u.searchParams.get("v");
|
|
268
|
+
const path = u.pathname;
|
|
269
|
+
if (path.startsWith("/shorts/"))
|
|
270
|
+
return path.replace("/shorts/", "");
|
|
271
|
+
if (path.startsWith("/embed/"))
|
|
272
|
+
return path.replace("/embed/", "");
|
|
273
|
+
}
|
|
274
|
+
return null;
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
return null;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
extractListId(input) {
|
|
281
|
+
try {
|
|
282
|
+
const u = new URL(input);
|
|
283
|
+
return u.searchParams.get("list");
|
|
284
|
+
}
|
|
285
|
+
catch {
|
|
286
|
+
return null;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
exports.YouTubePlugin = YouTubePlugin;
|
|
291
|
+
function toSeconds(d) {
|
|
292
|
+
if (typeof d === "number")
|
|
293
|
+
return d;
|
|
294
|
+
if (typeof d === "string") {
|
|
295
|
+
// mm:ss or hh:mm:ss
|
|
296
|
+
const parts = d.split(":").map(Number);
|
|
297
|
+
if (parts.some((n) => Number.isNaN(n)))
|
|
298
|
+
return undefined;
|
|
299
|
+
if (parts.length === 3)
|
|
300
|
+
return parts[0] * 3600 + parts[1] * 60 + parts[2];
|
|
301
|
+
if (parts.length === 2)
|
|
302
|
+
return parts[0] * 60 + parts[1];
|
|
303
|
+
const asNum = Number(d);
|
|
304
|
+
return Number.isFinite(asNum) ? asNum : undefined;
|
|
305
|
+
}
|
|
306
|
+
if (d && typeof d === "object") {
|
|
307
|
+
if (typeof d.seconds === "number")
|
|
308
|
+
return d.seconds;
|
|
309
|
+
if (typeof d.milliseconds === "number")
|
|
310
|
+
return Math.floor(d.milliseconds / 1000);
|
|
311
|
+
}
|
|
312
|
+
return undefined;
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=YouTubePlugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"YouTubePlugin.js","sourceRoot":"","sources":["../../src/plugins/YouTubePlugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -135,17 +135,20 @@ export declare class Player extends EventEmitter {
|
|
|
135
135
|
*/
|
|
136
136
|
search(query: string, requestedBy: string): Promise<SearchResult>;
|
|
137
137
|
/**
|
|
138
|
-
* Play a track
|
|
138
|
+
* Play a track, search query, search result, or play from queue
|
|
139
139
|
*
|
|
140
|
-
* @param {string | Track} query - Track URL, search query, or
|
|
140
|
+
* @param {string | Track | SearchResult | null} query - Track URL, search query, Track object, SearchResult, or null for play
|
|
141
141
|
* @param {string} requestedBy - User ID who requested the track
|
|
142
142
|
* @returns {Promise<boolean>} True if playback started successfully
|
|
143
143
|
* @example
|
|
144
|
-
* await player.play("Never Gonna Give You Up", userId);
|
|
145
|
-
* await player.play("https://youtube.com/watch?v=dQw4w9WgXcQ", userId);
|
|
146
|
-
* await player.play("tts: Hello everyone!", userId);
|
|
144
|
+
* await player.play("Never Gonna Give You Up", userId); // Search query
|
|
145
|
+
* await player.play("https://youtube.com/watch?v=dQw4w9WgXcQ", userId); // Direct URL
|
|
146
|
+
* await player.play("tts: Hello everyone!", userId); // Text-to-Speech
|
|
147
|
+
* await player.play(trackObject, userId); // Track object
|
|
148
|
+
* await player.play(searchResult, userId); // SearchResult object
|
|
149
|
+
* await player.play(null); // play from queue
|
|
147
150
|
*/
|
|
148
|
-
play(query: string | Track, requestedBy?: string): Promise<boolean>;
|
|
151
|
+
play(query: string | Track | SearchResult | null, requestedBy?: string): Promise<boolean>;
|
|
149
152
|
/**
|
|
150
153
|
* Interrupt current music with a TTS track. Pauses music, swaps the
|
|
151
154
|
* subscription to a dedicated TTS player, plays TTS, then resumes.
|
|
@@ -269,14 +272,16 @@ export declare class Player extends EventEmitter {
|
|
|
269
272
|
*/
|
|
270
273
|
stop(): boolean;
|
|
271
274
|
/**
|
|
272
|
-
* Skip to the next track
|
|
275
|
+
* Skip to the next track or skip to a specific index
|
|
273
276
|
*
|
|
277
|
+
* @param {number} index - Optional index to skip to (0 = next track)
|
|
274
278
|
* @returns {boolean} True if skipped successfully
|
|
275
279
|
* @example
|
|
276
|
-
* const skipped = player.skip();
|
|
280
|
+
* const skipped = player.skip(); // Skip to next track
|
|
281
|
+
* const skippedToIndex = player.skip(2); // Skip to track at index 2
|
|
277
282
|
* console.log(`Skipped: ${skipped}`);
|
|
278
283
|
*/
|
|
279
|
-
skip(): boolean;
|
|
284
|
+
skip(index?: number): boolean;
|
|
280
285
|
/**
|
|
281
286
|
* Go back to the previous track in history and play it.
|
|
282
287
|
*
|
|
@@ -287,15 +292,20 @@ export declare class Player extends EventEmitter {
|
|
|
287
292
|
*/
|
|
288
293
|
previous(): Promise<boolean>;
|
|
289
294
|
/**
|
|
290
|
-
* Loop the current track
|
|
295
|
+
* Loop the current track or queue
|
|
291
296
|
*
|
|
292
|
-
* @param {LoopMode} mode - The loop mode to set
|
|
297
|
+
* @param {LoopMode | number} mode - The loop mode to set ("off", "track", "queue") or number (0=off, 1=track, 2=queue)
|
|
293
298
|
* @returns {LoopMode} The loop mode
|
|
294
299
|
* @example
|
|
295
|
-
* const loopMode = player.loop("track");
|
|
300
|
+
* const loopMode = player.loop("track"); // Loop current track
|
|
301
|
+
* const loopQueue = player.loop("queue"); // Loop entire queue
|
|
302
|
+
* const loopTrack = player.loop(1); // Loop current track (same as "track")
|
|
303
|
+
* const loopQueueNum = player.loop(2); // Loop entire queue (same as "queue")
|
|
304
|
+
* const noLoop = player.loop("off"); // No loop
|
|
305
|
+
* const noLoopNum = player.loop(0); // No loop (same as "off")
|
|
296
306
|
* console.log(`Loop mode: ${loopMode}`);
|
|
297
307
|
*/
|
|
298
|
-
loop(mode?: LoopMode): LoopMode;
|
|
308
|
+
loop(mode?: LoopMode | number): LoopMode;
|
|
299
309
|
/**
|
|
300
310
|
* Set the auto-play mode
|
|
301
311
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Player.d.ts","sourceRoot":"","sources":["../../src/structures/Player.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAKN,eAAe,EACf,WAAW,IAAI,kBAAkB,EAMjC,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EACN,KAAK,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,QAAQ,EAER,MAAM,UAAU,CAAC;AASlB,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,MAAM,CAAC,OAAO,WAAW,MAAM;IAC9B,EAAE,CAAC,CAAC,SAAS,MAAM,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAC/F,IAAI,CAAC,CAAC,SAAS,MAAM,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;CAChF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,qBAAa,MAAO,SAAQ,YAAY;IACvC,SAAgB,OAAO,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,eAAe,GAAG,IAAI,CAAQ;IAC1C,WAAW,EAAE,kBAAkB,CAAC;IAChC,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,MAAM,CAAO;IACrB,SAAS,EAAE,OAAO,CAAS;IAC3B,QAAQ,EAAE,OAAO,CAAS;IAC1B,OAAO,EAAE,aAAa,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,gBAAgB,CAAoB;IAG5C,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiB;IAClD,OAAO,CAAC,qBAAqB,CAA6B;IAG1D,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiB;IAClD,OAAO,CAAC,qBAAqB,CAA6B;IAE1D;;;;;;OAMG;IACI,eAAe,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI;IAOtD;;;;;;OAMG;IACI,eAAe,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI;IAUtD;;;;;;;OAOG;IACI,aAAa,IAAI,SAAS,aAAa,EAAE;IAIhD,OAAO,CAAC,wBAAwB;YAalB,kBAAkB;YA0ClB,iBAAiB;YAkBjB,uBAAuB;YAkBvB,uBAAuB;IAkBrC;;OAEG;YACW,UAAU;
|
|
1
|
+
{"version":3,"file":"Player.d.ts","sourceRoot":"","sources":["../../src/structures/Player.ts"],"names":[],"mappings":"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"}
|