yukimu 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cache/replit/env/latest +88 -0
- package/.cache/replit/env/latest.json +1 -0
- package/.cache/replit/modules/python-3.11.res +1 -0
- package/.cache/replit/nix/dotreplitenv.json +1 -1
- package/.cache/replit/toolchain.json +1 -1
- package/.local/state/workflow-logs/KRgHXizaECjWI5nWtS7Dj/configure_your_app.packager.installForAll.0 +1 -0
- package/.local/state/workflow-logs/KRgHXizaECjWI5nWtS7Dj/configure_your_app.shell.exec.1 +1 -0
- package/.local/state/workflow-logs/jVavLOnv1MqxUvxhMmqER/configure_your_app.packager.installForAll.0 +1 -0
- package/.local/state/workflow-logs/jVavLOnv1MqxUvxhMmqER/configure_your_app.shell.exec.1 +1 -0
- package/.replit +4 -1
- package/.upm/store.json +1 -1
- package/dist/ConnectionPool.d.ts +34 -0
- package/dist/ConnectionPool.d.ts.map +1 -0
- package/dist/ConnectionPool.js +124 -0
- package/dist/ConnectionPool.js.map +1 -0
- package/dist/Constants.d.ts +66 -0
- package/dist/Constants.d.ts.map +1 -0
- package/dist/Constants.js +101 -0
- package/dist/Constants.js.map +1 -0
- package/dist/Node.d.ts +26 -10
- package/dist/Node.d.ts.map +1 -1
- package/dist/Node.js +203 -81
- package/dist/Node.js.map +1 -1
- package/dist/Player.d.ts +30 -29
- package/dist/Player.d.ts.map +1 -1
- package/dist/Player.js +178 -97
- package/dist/Player.js.map +1 -1
- package/dist/Plugin.d.ts +21 -0
- package/dist/Plugin.d.ts.map +1 -0
- package/dist/Plugin.js +19 -0
- package/dist/Plugin.js.map +1 -0
- package/dist/Queue.d.ts +10 -16
- package/dist/Queue.d.ts.map +1 -1
- package/dist/Queue.js +39 -32
- package/dist/Queue.js.map +1 -1
- package/dist/Resolver.d.ts +4 -21
- package/dist/Resolver.d.ts.map +1 -1
- package/dist/Resolver.js +28 -66
- package/dist/Resolver.js.map +1 -1
- package/dist/Rest.d.ts +24 -0
- package/dist/Rest.d.ts.map +1 -0
- package/dist/Rest.js +104 -0
- package/dist/Rest.js.map +1 -0
- package/dist/TrackCache.d.ts +21 -0
- package/dist/TrackCache.d.ts.map +1 -0
- package/dist/TrackCache.js +57 -0
- package/dist/TrackCache.js.map +1 -0
- package/dist/WsQueue.d.ts +20 -0
- package/dist/WsQueue.d.ts.map +1 -0
- package/dist/WsQueue.js +74 -0
- package/dist/WsQueue.js.map +1 -0
- package/dist/Yukimu.d.ts +33 -32
- package/dist/Yukimu.d.ts.map +1 -1
- package/dist/Yukimu.js +133 -65
- package/dist/Yukimu.js.map +1 -1
- package/dist/connector/Connector.d.ts +8 -0
- package/dist/connector/Connector.d.ts.map +1 -0
- package/dist/connector/Connector.js +11 -0
- package/dist/connector/Connector.js.map +1 -0
- package/dist/connector/DiscordJS.d.ts +25 -0
- package/dist/connector/DiscordJS.d.ts.map +1 -0
- package/dist/connector/DiscordJS.js +27 -0
- package/dist/connector/DiscordJS.js.map +1 -0
- package/dist/connector/Eris.d.ts +23 -0
- package/dist/connector/Eris.d.ts.map +1 -0
- package/dist/connector/Eris.js +30 -0
- package/dist/connector/Eris.js.map +1 -0
- package/dist/connector/Oceanic.d.ts +20 -0
- package/dist/connector/Oceanic.d.ts.map +1 -0
- package/dist/connector/Oceanic.js +27 -0
- package/dist/connector/Oceanic.js.map +1 -0
- package/dist/errors/YukimuError.d.ts +15 -0
- package/dist/errors/YukimuError.d.ts.map +1 -0
- package/dist/errors/YukimuError.js +35 -0
- package/dist/errors/YukimuError.js.map +1 -0
- package/dist/index.d.ts +14 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -2
- package/dist/index.js.map +1 -1
- package/dist/plugins/AutoResume.d.ts +21 -0
- package/dist/plugins/AutoResume.d.ts.map +1 -0
- package/dist/plugins/AutoResume.js +52 -0
- package/dist/plugins/AutoResume.js.map +1 -0
- package/dist/plugins/PlayerMoved.d.ts +7 -0
- package/dist/plugins/PlayerMoved.d.ts.map +1 -0
- package/dist/plugins/PlayerMoved.js +30 -0
- package/dist/plugins/PlayerMoved.js.map +1 -0
- package/dist/types.d.ts +92 -38
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -12
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
- package/src/ConnectionPool.ts +131 -0
- package/src/Constants.ts +101 -0
- package/src/Node.ts +157 -174
- package/src/Player.ts +200 -108
- package/src/Plugin.ts +23 -0
- package/src/Queue.ts +43 -34
- package/src/Resolver.ts +29 -77
- package/src/Rest.ts +121 -0
- package/src/TrackCache.ts +69 -0
- package/src/WsQueue.ts +78 -0
- package/src/Yukimu.ts +156 -85
- package/src/connector/Connector.ts +13 -0
- package/src/connector/DiscordJS.ts +33 -0
- package/src/connector/Eris.ts +35 -0
- package/src/connector/Oceanic.ts +32 -0
- package/src/errors/YukimuError.ts +33 -0
- package/src/index.ts +41 -1
- package/src/plugins/AutoResume.ts +61 -0
- package/src/plugins/PlayerMoved.ts +26 -0
- package/src/types.ts +50 -83
- package/tsconfig.json +4 -2
- package/README.md +0 -152
package/dist/Queue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Queue.js","sourceRoot":"","sources":["../src/Queue.ts"],"names":[],"mappings":";;;AAEA,MAAa,KAAK;IAAlB;QACS,YAAO,GAAiB,IAAI,CAAC;QAC7B,aAAQ,
|
|
1
|
+
{"version":3,"file":"Queue.js","sourceRoot":"","sources":["../src/Queue.ts"],"names":[],"mappings":"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"}
|
package/dist/Resolver.d.ts
CHANGED
|
@@ -1,30 +1,13 @@
|
|
|
1
|
-
import { SearchResult, SearchSource } from "./types";
|
|
2
1
|
import type { Yukimu } from "./Yukimu";
|
|
2
|
+
import type { SearchResult, SearchSource } from "./types";
|
|
3
3
|
export declare class Resolver {
|
|
4
4
|
private manager;
|
|
5
5
|
private spotifyToken;
|
|
6
6
|
private spotifyExpiry;
|
|
7
7
|
constructor(manager: Yukimu);
|
|
8
|
-
|
|
9
|
-
* Resolve a query or URL to Lavalink tracks
|
|
10
|
-
*/
|
|
11
|
-
resolve(query: string, source: SearchSource): Promise<SearchResult>;
|
|
12
|
-
/**
|
|
13
|
-
* Detect what platform a URL belongs to
|
|
14
|
-
*/
|
|
8
|
+
resolve(query: string, source: SearchSource, requester?: unknown): Promise<SearchResult>;
|
|
15
9
|
detectSource(url: string): SearchSource | null;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
* Only needed if you're NOT using the LavaSrc Lavalink plugin
|
|
19
|
-
*/
|
|
20
|
-
getSpotifyToken(): Promise<string | null>;
|
|
21
|
-
/**
|
|
22
|
-
* Resolve a Spotify URL to track metadata (title + artist for YouTube fallback search)
|
|
23
|
-
* Used when LavaSrc plugin is NOT installed
|
|
24
|
-
*/
|
|
25
|
-
resolveSpotifyFallback(url: string): Promise<{
|
|
26
|
-
title: string;
|
|
27
|
-
artist: string;
|
|
28
|
-
} | null>;
|
|
10
|
+
private getSpotifyToken;
|
|
11
|
+
private resolveSpotifyMeta;
|
|
29
12
|
}
|
|
30
13
|
//# sourceMappingURL=Resolver.d.ts.map
|
package/dist/Resolver.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Resolver.d.ts","sourceRoot":"","sources":["../src/Resolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Resolver.d.ts","sourceRoot":"","sources":["../src/Resolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAS,MAAM,SAAS,CAAC;AAEjE,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,aAAa,CAAa;gBAEtB,OAAO,EAAE,MAAM;IAId,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;IA2B9F,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;YAOvC,eAAe;YAoBf,kBAAkB;CAWjC"}
|
package/dist/Resolver.js
CHANGED
|
@@ -1,71 +1,44 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Resolver = void 0;
|
|
4
|
-
const
|
|
5
|
-
// ─── URL Patterns ─────────────────────────────────────────────────────────────
|
|
6
|
-
const URL_PATTERNS = {
|
|
7
|
-
youtube: [
|
|
8
|
-
/^https?:\/\/(www\.)?(youtube\.com|youtu\.be)\/.+/,
|
|
9
|
-
/^https?:\/\/music\.youtube\.com\/.+/,
|
|
10
|
-
],
|
|
11
|
-
spotify: [
|
|
12
|
-
/^https?:\/\/open\.spotify\.com\/(track|album|playlist|artist)\/.+/,
|
|
13
|
-
],
|
|
14
|
-
soundcloud: [
|
|
15
|
-
/^https?:\/\/(www\.)?soundcloud\.com\/.+/,
|
|
16
|
-
],
|
|
17
|
-
deezer: [
|
|
18
|
-
/^https?:\/\/(www\.)?deezer\.com\/(track|album|playlist)\/.+/,
|
|
19
|
-
],
|
|
20
|
-
applemusic: [
|
|
21
|
-
/^https?:\/\/music\.apple\.com\/.+/,
|
|
22
|
-
],
|
|
23
|
-
tidal: [
|
|
24
|
-
/^https?:\/\/(www\.)?tidal\.com\/(browse\/)?(track|album|playlist)\/.+/,
|
|
25
|
-
],
|
|
26
|
-
jiosaavn: [
|
|
27
|
-
/^https?:\/\/(www\.)?jiosaavn\.com\/.+/,
|
|
28
|
-
],
|
|
29
|
-
yandexmusic: [
|
|
30
|
-
/^https?:\/\/music\.yandex\.(ru|com)\/.+/,
|
|
31
|
-
],
|
|
32
|
-
};
|
|
4
|
+
const Constants_1 = require("./Constants");
|
|
33
5
|
class Resolver {
|
|
34
6
|
constructor(manager) {
|
|
35
7
|
this.spotifyToken = null;
|
|
36
8
|
this.spotifyExpiry = 0;
|
|
37
9
|
this.manager = manager;
|
|
38
10
|
}
|
|
39
|
-
|
|
40
|
-
* Resolve a query or URL to Lavalink tracks
|
|
41
|
-
*/
|
|
42
|
-
async resolve(query, source) {
|
|
11
|
+
async resolve(query, source, requester) {
|
|
43
12
|
const node = this.manager.getBestNode();
|
|
44
|
-
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
13
|
+
const isUrl = /^https?:\/\//.test(query);
|
|
14
|
+
const identifier = isUrl ? query : `${Constants_1.SOURCE_PREFIXES[source] ?? "ytsearch"}:${query}`;
|
|
15
|
+
const result = await node.loadTracks(identifier);
|
|
16
|
+
// Attach requester
|
|
17
|
+
if (requester)
|
|
18
|
+
result.tracks.forEach(t => { t.requester = requester; });
|
|
19
|
+
// Spotify fallback — if LavaSrc not installed
|
|
20
|
+
if ((result.loadType === "error" || result.loadType === "empty") && isUrl) {
|
|
21
|
+
const spotifyMatch = query.match(/spotify\.com\/track\/([a-zA-Z0-9]+)/);
|
|
22
|
+
if (spotifyMatch) {
|
|
23
|
+
const meta = await this.resolveSpotifyMeta(spotifyMatch[1]);
|
|
24
|
+
if (meta)
|
|
25
|
+
return this.resolve(`${meta.title} ${meta.artist}`, "youtube", requester);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// Cache all returned tracks
|
|
29
|
+
for (const track of result.tracks) {
|
|
30
|
+
if (track.encoded)
|
|
31
|
+
this.manager.trackCache.set(track.encoded, track);
|
|
49
32
|
}
|
|
50
|
-
|
|
51
|
-
const prefix = types_1.SourcePrefixes[source];
|
|
52
|
-
return node.loadTracks(`${prefix}:${query}`);
|
|
33
|
+
return result;
|
|
53
34
|
}
|
|
54
|
-
/**
|
|
55
|
-
* Detect what platform a URL belongs to
|
|
56
|
-
*/
|
|
57
35
|
detectSource(url) {
|
|
58
|
-
for (const [source, patterns] of Object.entries(URL_PATTERNS)) {
|
|
59
|
-
if (patterns.some(p => p.test(url)))
|
|
36
|
+
for (const [source, patterns] of Object.entries(Constants_1.URL_PATTERNS)) {
|
|
37
|
+
if (patterns.some(p => p.test(url)))
|
|
60
38
|
return source;
|
|
61
|
-
}
|
|
62
39
|
}
|
|
63
40
|
return null;
|
|
64
41
|
}
|
|
65
|
-
/**
|
|
66
|
-
* Get Spotify API token (for resolving Spotify metadata without LavaSrc)
|
|
67
|
-
* Only needed if you're NOT using the LavaSrc Lavalink plugin
|
|
68
|
-
*/
|
|
69
42
|
async getSpotifyToken() {
|
|
70
43
|
const opts = this.manager.options.spotify;
|
|
71
44
|
if (!opts)
|
|
@@ -86,31 +59,20 @@ class Resolver {
|
|
|
86
59
|
this.spotifyExpiry = Date.now() + data.expires_in * 1000 - 5000;
|
|
87
60
|
return this.spotifyToken;
|
|
88
61
|
}
|
|
89
|
-
catch
|
|
90
|
-
console.error("[Yukimu] Failed to fetch Spotify token:", err);
|
|
62
|
+
catch {
|
|
91
63
|
return null;
|
|
92
64
|
}
|
|
93
65
|
}
|
|
94
|
-
|
|
95
|
-
* Resolve a Spotify URL to track metadata (title + artist for YouTube fallback search)
|
|
96
|
-
* Used when LavaSrc plugin is NOT installed
|
|
97
|
-
*/
|
|
98
|
-
async resolveSpotifyFallback(url) {
|
|
66
|
+
async resolveSpotifyMeta(trackId) {
|
|
99
67
|
const token = await this.getSpotifyToken();
|
|
100
68
|
if (!token)
|
|
101
69
|
return null;
|
|
102
|
-
const match = url.match(/spotify\.com\/track\/([a-zA-Z0-9]+)/);
|
|
103
|
-
if (!match)
|
|
104
|
-
return null;
|
|
105
70
|
try {
|
|
106
|
-
const res = await fetch(`https://api.spotify.com/v1/tracks/${
|
|
71
|
+
const res = await fetch(`https://api.spotify.com/v1/tracks/${trackId}`, {
|
|
107
72
|
headers: { Authorization: `Bearer ${token}` },
|
|
108
73
|
});
|
|
109
74
|
const data = await res.json();
|
|
110
|
-
return {
|
|
111
|
-
title: data.name,
|
|
112
|
-
artist: data.artists[0]?.name ?? "Unknown",
|
|
113
|
-
};
|
|
75
|
+
return { title: data.name, artist: data.artists[0]?.name ?? "Unknown" };
|
|
114
76
|
}
|
|
115
77
|
catch {
|
|
116
78
|
return null;
|
package/dist/Resolver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Resolver.js","sourceRoot":"","sources":["../src/Resolver.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"Resolver.js","sourceRoot":"","sources":["../src/Resolver.ts"],"names":[],"mappings":"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"}
|
package/dist/Rest.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Node } from "./Node";
|
|
2
|
+
import type { SearchResult, Track, NodeStats, NodeInfo } from "./types";
|
|
3
|
+
export declare class Rest {
|
|
4
|
+
private node;
|
|
5
|
+
constructor(node: Node);
|
|
6
|
+
get baseUrl(): string;
|
|
7
|
+
get prefix(): string;
|
|
8
|
+
get headers(): Record<string, string>;
|
|
9
|
+
request<T = unknown>(method: string, path: string, body?: unknown): Promise<T>;
|
|
10
|
+
loadTracks(identifier: string): Promise<SearchResult>;
|
|
11
|
+
decodeTrack(encoded: string): Promise<Track>;
|
|
12
|
+
decodeTracks(encoded: string[]): Promise<Track[]>;
|
|
13
|
+
getInfo(): Promise<NodeInfo>;
|
|
14
|
+
getStats(): Promise<NodeStats>;
|
|
15
|
+
getVersion(): Promise<string>;
|
|
16
|
+
updatePlayer(guildId: string, body: unknown, noReplace?: boolean): Promise<unknown>;
|
|
17
|
+
destroyPlayer(guildId: string): Promise<void>;
|
|
18
|
+
updateSession(body: {
|
|
19
|
+
resuming?: boolean;
|
|
20
|
+
timeout?: number;
|
|
21
|
+
}): Promise<unknown>;
|
|
22
|
+
private normalizeV3;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=Rest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Rest.d.ts","sourceRoot":"","sources":["../src/Rest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAIxE,qBAAa,IAAI;IACf,OAAO,CAAC,IAAI,CAAO;gBAEP,IAAI,EAAE,IAAI;IAItB,IAAI,OAAO,IAAI,MAAM,CAGpB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQpC;IAEY,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IA6B9E,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAKrD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAI5C,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAIjD,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;IAI5B,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC;IAI9B,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAK7B,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAOjF,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7C,aAAa,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAK5F,OAAO,CAAC,WAAW;CAcpB"}
|
package/dist/Rest.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Rest = void 0;
|
|
4
|
+
const YukimuError_1 = require("./errors/YukimuError");
|
|
5
|
+
const TIMEOUT_MS = 15000;
|
|
6
|
+
class Rest {
|
|
7
|
+
constructor(node) {
|
|
8
|
+
this.node = node;
|
|
9
|
+
}
|
|
10
|
+
get baseUrl() {
|
|
11
|
+
const protocol = this.node.options.secure ? "https" : "http";
|
|
12
|
+
return `${protocol}://${this.node.options.host}:${this.node.options.port}`;
|
|
13
|
+
}
|
|
14
|
+
get prefix() {
|
|
15
|
+
return this.node.version === 4 ? "/v4" : "";
|
|
16
|
+
}
|
|
17
|
+
get headers() {
|
|
18
|
+
return {
|
|
19
|
+
Authorization: this.node.options.password,
|
|
20
|
+
"User-Id": this.node.manager.options.clientId,
|
|
21
|
+
"Client-Name": "Yukimu/1.2.0",
|
|
22
|
+
"Content-Type": "application/json",
|
|
23
|
+
...(this.node.version === 3 ? { "Num-Shards": "1" } : {}),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
async request(method, path, body) {
|
|
27
|
+
const url = `${this.baseUrl}${this.prefix}${path}`;
|
|
28
|
+
const controller = new AbortController();
|
|
29
|
+
const timeout = setTimeout(() => controller.abort(), TIMEOUT_MS);
|
|
30
|
+
try {
|
|
31
|
+
const res = await globalThis.fetch(url, {
|
|
32
|
+
method,
|
|
33
|
+
headers: this.headers,
|
|
34
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
35
|
+
signal: controller.signal,
|
|
36
|
+
});
|
|
37
|
+
clearTimeout(timeout);
|
|
38
|
+
if (!res.ok) {
|
|
39
|
+
const text = await res.text().catch(() => "Unknown error");
|
|
40
|
+
throw new YukimuError_1.RestError(`REST ${res.status} on ${method} ${path}: ${text}`, res.status, path);
|
|
41
|
+
}
|
|
42
|
+
if (res.status === 204)
|
|
43
|
+
return undefined;
|
|
44
|
+
return res.json();
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
clearTimeout(timeout);
|
|
48
|
+
if (err.name === "AbortError")
|
|
49
|
+
throw new YukimuError_1.RestError(`REST timeout on ${method} ${path}`, 408, path);
|
|
50
|
+
throw err;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async loadTracks(identifier) {
|
|
54
|
+
const raw = await this.request("GET", `/loadtracks?identifier=${encodeURIComponent(identifier)}`);
|
|
55
|
+
return this.node.version === 3 ? this.normalizeV3(raw) : raw;
|
|
56
|
+
}
|
|
57
|
+
async decodeTrack(encoded) {
|
|
58
|
+
return this.request("GET", `/decodetrack?encodedTrack=${encodeURIComponent(encoded)}`);
|
|
59
|
+
}
|
|
60
|
+
async decodeTracks(encoded) {
|
|
61
|
+
return this.request("POST", `/decodetracks`, encoded);
|
|
62
|
+
}
|
|
63
|
+
async getInfo() {
|
|
64
|
+
return this.request("GET", "/info");
|
|
65
|
+
}
|
|
66
|
+
async getStats() {
|
|
67
|
+
return this.request("GET", "/stats");
|
|
68
|
+
}
|
|
69
|
+
async getVersion() {
|
|
70
|
+
const res = await globalThis.fetch(`${this.baseUrl}/version`, { headers: this.headers });
|
|
71
|
+
return res.text();
|
|
72
|
+
}
|
|
73
|
+
async updatePlayer(guildId, body, noReplace = false) {
|
|
74
|
+
const path = this.node.version === 4
|
|
75
|
+
? `/sessions/${this.node.sessionId}/players/${guildId}?noReplace=${noReplace}`
|
|
76
|
+
: `/players/${guildId}`;
|
|
77
|
+
return this.request("PATCH", path, body);
|
|
78
|
+
}
|
|
79
|
+
async destroyPlayer(guildId) {
|
|
80
|
+
const path = this.node.version === 4
|
|
81
|
+
? `/sessions/${this.node.sessionId}/players/${guildId}`
|
|
82
|
+
: `/players/${guildId}`;
|
|
83
|
+
await this.request("DELETE", path);
|
|
84
|
+
}
|
|
85
|
+
async updateSession(body) {
|
|
86
|
+
if (this.node.version !== 4)
|
|
87
|
+
return;
|
|
88
|
+
return this.request("PATCH", `/sessions/${this.node.sessionId}`, body);
|
|
89
|
+
}
|
|
90
|
+
normalizeV3(raw) {
|
|
91
|
+
const loadType = (raw.loadType ?? "").toLowerCase();
|
|
92
|
+
const norm = (tracks) => (tracks ?? []).map((t) => ({ encoded: t.track ?? t.encoded, info: t.info, pluginInfo: t.pluginInfo ?? {} }));
|
|
93
|
+
switch (loadType) {
|
|
94
|
+
case "track_loaded": return { loadType: "track", tracks: norm(raw.tracks) };
|
|
95
|
+
case "playlist_loaded": return { loadType: "playlist", tracks: norm(raw.tracks), playlistInfo: raw.playlistInfo };
|
|
96
|
+
case "search_result": return { loadType: "search", tracks: norm(raw.tracks) };
|
|
97
|
+
case "no_matches": return { loadType: "empty", tracks: [] };
|
|
98
|
+
case "load_failed": return { loadType: "error", tracks: [], exception: raw.exception };
|
|
99
|
+
default: return { loadType: "empty", tracks: [] };
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
exports.Rest = Rest;
|
|
104
|
+
//# sourceMappingURL=Rest.js.map
|
package/dist/Rest.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Rest.js","sourceRoot":"","sources":["../src/Rest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Track } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Track Decode Cache
|
|
4
|
+
* Caches decoded tracks to avoid repeated Lavalink decode calls.
|
|
5
|
+
* TTL-based expiry — default 1 hour.
|
|
6
|
+
*/
|
|
7
|
+
export declare class TrackCache {
|
|
8
|
+
private cache;
|
|
9
|
+
private readonly ttl;
|
|
10
|
+
private sweepInterval;
|
|
11
|
+
constructor(ttlMs?: number);
|
|
12
|
+
set(encoded: string, track: Track): void;
|
|
13
|
+
get(encoded: string): Track | null;
|
|
14
|
+
has(encoded: string): boolean;
|
|
15
|
+
delete(encoded: string): void;
|
|
16
|
+
clear(): void;
|
|
17
|
+
private sweep;
|
|
18
|
+
destroy(): void;
|
|
19
|
+
get size(): number;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=TrackCache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrackCache.d.ts","sourceRoot":"","sources":["../src/TrackCache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAOrC;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAsC;IACnD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAiC;gBAE1C,KAAK,GAAE,MAAgB;IAO5B,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAOxC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAUlC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI7B,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI7B,KAAK,IAAI,IAAI;IAIpB,OAAO,CAAC,KAAK;IAON,OAAO,IAAI,IAAI;IAKtB,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TrackCache = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Track Decode Cache
|
|
6
|
+
* Caches decoded tracks to avoid repeated Lavalink decode calls.
|
|
7
|
+
* TTL-based expiry — default 1 hour.
|
|
8
|
+
*/
|
|
9
|
+
class TrackCache {
|
|
10
|
+
constructor(ttlMs = 3600000 /* 1 hour */) {
|
|
11
|
+
this.cache = new Map();
|
|
12
|
+
this.ttl = ttlMs;
|
|
13
|
+
// Sweep expired entries every 10 minutes
|
|
14
|
+
this.sweepInterval = setInterval(() => this.sweep(), 600000);
|
|
15
|
+
}
|
|
16
|
+
set(encoded, track) {
|
|
17
|
+
this.cache.set(encoded, {
|
|
18
|
+
track,
|
|
19
|
+
expiresAt: Date.now() + this.ttl,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
get(encoded) {
|
|
23
|
+
const entry = this.cache.get(encoded);
|
|
24
|
+
if (!entry)
|
|
25
|
+
return null;
|
|
26
|
+
if (Date.now() > entry.expiresAt) {
|
|
27
|
+
this.cache.delete(encoded);
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
return entry.track;
|
|
31
|
+
}
|
|
32
|
+
has(encoded) {
|
|
33
|
+
return this.get(encoded) !== null;
|
|
34
|
+
}
|
|
35
|
+
delete(encoded) {
|
|
36
|
+
this.cache.delete(encoded);
|
|
37
|
+
}
|
|
38
|
+
clear() {
|
|
39
|
+
this.cache.clear();
|
|
40
|
+
}
|
|
41
|
+
sweep() {
|
|
42
|
+
const now = Date.now();
|
|
43
|
+
for (const [key, entry] of this.cache) {
|
|
44
|
+
if (now > entry.expiresAt)
|
|
45
|
+
this.cache.delete(key);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
destroy() {
|
|
49
|
+
clearInterval(this.sweepInterval);
|
|
50
|
+
this.cache.clear();
|
|
51
|
+
}
|
|
52
|
+
get size() {
|
|
53
|
+
return this.cache.size;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.TrackCache = TrackCache;
|
|
57
|
+
//# sourceMappingURL=TrackCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrackCache.js","sourceRoot":"","sources":["../src/TrackCache.ts"],"names":[],"mappings":";;;AAOA;;;;GAIG;AACH,MAAa,UAAU;IAKrB,YAAY,QAAgB,OAAO,CAAC,YAAY;QAJxC,UAAK,GAA4B,IAAI,GAAG,EAAE,CAAC;QAKjD,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;QAEjB,yCAAyC;QACzC,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;IAEM,GAAG,CAAC,OAAe,EAAE,KAAY;QACtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE;YACtB,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG;SACjC,CAAC,CAAC;IACL,CAAC;IAEM,GAAG,CAAC,OAAe;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAEM,GAAG,CAAC,OAAe;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IACpC,CAAC;IAEM,MAAM,CAAC,OAAe;QAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAEO,KAAK;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACtC,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAEM,OAAO;QACZ,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;CACF;AAxDD,gCAwDC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type WebSocket from "ws";
|
|
2
|
+
/**
|
|
3
|
+
* WebSocket Message Queue
|
|
4
|
+
* Queues outgoing WS messages and flushes them on reconnect.
|
|
5
|
+
* Prevents message loss when node briefly disconnects.
|
|
6
|
+
*/
|
|
7
|
+
export declare class WsQueue {
|
|
8
|
+
private queue;
|
|
9
|
+
private flushing;
|
|
10
|
+
private ws;
|
|
11
|
+
setSocket(ws: WebSocket | null): void;
|
|
12
|
+
/** Send immediately if connected, else queue */
|
|
13
|
+
send(data: Record<string, unknown>): Promise<void>;
|
|
14
|
+
/** Flush all queued messages after reconnect */
|
|
15
|
+
flush(): void;
|
|
16
|
+
/** Drop all queued messages (on intentional destroy) */
|
|
17
|
+
clear(): void;
|
|
18
|
+
get size(): number;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=WsQueue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WsQueue.d.ts","sourceRoot":"","sources":["../src/WsQueue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,IAAI,CAAC;AAQhC;;;;GAIG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,EAAE,CAA0B;IAE7B,SAAS,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IAO5C,gDAAgD;IACzC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBzD,gDAAgD;IACzC,KAAK,IAAI,IAAI;IAuBpB,wDAAwD;IACjD,KAAK,IAAI,IAAI;IAOpB,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|
package/dist/WsQueue.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WsQueue = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* WebSocket Message Queue
|
|
6
|
+
* Queues outgoing WS messages and flushes them on reconnect.
|
|
7
|
+
* Prevents message loss when node briefly disconnects.
|
|
8
|
+
*/
|
|
9
|
+
class WsQueue {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.queue = [];
|
|
12
|
+
this.flushing = false;
|
|
13
|
+
this.ws = null;
|
|
14
|
+
}
|
|
15
|
+
setSocket(ws) {
|
|
16
|
+
this.ws = ws;
|
|
17
|
+
if (ws) {
|
|
18
|
+
ws.on("open", () => this.flush());
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/** Send immediately if connected, else queue */
|
|
22
|
+
send(data) {
|
|
23
|
+
return new Promise((resolve, reject) => {
|
|
24
|
+
const serialized = JSON.stringify(data);
|
|
25
|
+
if (this.ws?.readyState === 1 /* OPEN */) {
|
|
26
|
+
this.ws.send(serialized, (err) => {
|
|
27
|
+
if (err)
|
|
28
|
+
reject(err);
|
|
29
|
+
else
|
|
30
|
+
resolve();
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
// Queue for later when reconnected
|
|
35
|
+
this.queue.push({ data: serialized, resolve, reject });
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/** Flush all queued messages after reconnect */
|
|
40
|
+
flush() {
|
|
41
|
+
if (this.flushing || !this.ws)
|
|
42
|
+
return;
|
|
43
|
+
this.flushing = true;
|
|
44
|
+
const toSend = [...this.queue];
|
|
45
|
+
this.queue = [];
|
|
46
|
+
for (const msg of toSend) {
|
|
47
|
+
if (this.ws.readyState !== 1 /* OPEN */) {
|
|
48
|
+
// Re-queue if disconnected again
|
|
49
|
+
this.queue.unshift(msg);
|
|
50
|
+
this.flushing = false;
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
this.ws.send(msg.data, (err) => {
|
|
54
|
+
if (err)
|
|
55
|
+
msg.reject(err);
|
|
56
|
+
else
|
|
57
|
+
msg.resolve();
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
this.flushing = false;
|
|
61
|
+
}
|
|
62
|
+
/** Drop all queued messages (on intentional destroy) */
|
|
63
|
+
clear() {
|
|
64
|
+
for (const msg of this.queue) {
|
|
65
|
+
msg.reject(new Error("WsQueue cleared — node destroyed"));
|
|
66
|
+
}
|
|
67
|
+
this.queue = [];
|
|
68
|
+
}
|
|
69
|
+
get size() {
|
|
70
|
+
return this.queue.length;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.WsQueue = WsQueue;
|
|
74
|
+
//# sourceMappingURL=WsQueue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WsQueue.js","sourceRoot":"","sources":["../src/WsQueue.ts"],"names":[],"mappings":";;;AAQA;;;;GAIG;AACH,MAAa,OAAO;IAApB;QACU,UAAK,GAAoB,EAAE,CAAC;QAC5B,aAAQ,GAAG,KAAK,CAAC;QACjB,OAAE,GAAqB,IAAI,CAAC;IA6DtC,CAAC;IA3DQ,SAAS,CAAC,EAAoB;QACnC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,EAAE,EAAE,CAAC;YACP,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,gDAAgD;IACzC,IAAI,CAAC,IAA6B;QACvC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAExC,IAAI,IAAI,CAAC,EAAE,EAAE,UAAU,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;gBACzC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;oBAC/B,IAAI,GAAG;wBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;wBAChB,OAAO,EAAE,CAAC;gBACjB,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,mCAAmC;gBACnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gDAAgD;IACzC,KAAK;QACV,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO;QACtC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAEhB,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;gBACxC,iCAAiC;gBACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACtB,OAAO;YACT,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC7B,IAAI,GAAG;oBAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;oBACpB,GAAG,CAAC,OAAO,EAAE,CAAC;YACrB,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IACxB,CAAC;IAED,wDAAwD;IACjD,KAAK;QACV,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC7B,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;CACF;AAhED,0BAgEC"}
|
package/dist/Yukimu.d.ts
CHANGED
|
@@ -2,58 +2,59 @@ import { EventEmitter } from "events";
|
|
|
2
2
|
import { Node } from "./Node";
|
|
3
3
|
import { Player } from "./Player";
|
|
4
4
|
import { Resolver } from "./Resolver";
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
*/
|
|
5
|
+
import { ConnectionPool } from "./ConnectionPool";
|
|
6
|
+
import { TrackCache } from "./TrackCache";
|
|
7
|
+
import type { Plugin } from "./Plugin";
|
|
8
|
+
import type { Connector } from "./connector/Connector";
|
|
9
|
+
import type { YukimuOptions, NodeOptions, PlayerOptions, YukimuEvents, SearchSource, SearchResult } from "./types";
|
|
11
10
|
export declare class Yukimu extends EventEmitter {
|
|
12
11
|
readonly options: YukimuOptions;
|
|
13
12
|
readonly nodes: Map<string, Node>;
|
|
14
13
|
readonly players: Map<string, Player>;
|
|
14
|
+
readonly connector: Connector;
|
|
15
15
|
readonly resolver: Resolver;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
readonly pool: ConnectionPool;
|
|
17
|
+
readonly trackCache: TrackCache;
|
|
18
|
+
private readonly plugins;
|
|
19
|
+
nodeResolver?: (nodes: Map<string, Node>) => Node | undefined;
|
|
20
|
+
constructor(options: YukimuOptions, connector: Connector, nodes: NodeOptions[], plugins?: Plugin[]);
|
|
21
|
+
use(plugin: Plugin): this;
|
|
22
|
+
unuse(name: string): this;
|
|
23
|
+
getPlugin<T extends Plugin>(name: string): T | undefined;
|
|
24
|
+
addNode(options: NodeOptions): Node;
|
|
22
25
|
removeNode(name: string): void;
|
|
23
|
-
|
|
26
|
+
getNode(name?: string): Node;
|
|
24
27
|
getBestNode(): Node;
|
|
25
|
-
/** Create a new player for a guild */
|
|
26
28
|
createPlayer(options: PlayerOptions): Player;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
* @param query - Search query or direct URL
|
|
34
|
-
* @param source - Where to search (youtube, spotify, deezer, etc.)
|
|
35
|
-
*/
|
|
36
|
-
search(query: string, source?: SearchSource): Promise<SearchResult>;
|
|
37
|
-
/**
|
|
38
|
-
* Handle Discord voice state updates — call this in your bot's
|
|
39
|
-
* voiceStateUpdate event handler
|
|
40
|
-
*/
|
|
29
|
+
getPlayer(guildId: string): Player | null;
|
|
30
|
+
destroyPlayer(guildId: string): Promise<void>;
|
|
31
|
+
search(query: string, options?: {
|
|
32
|
+
source?: SearchSource;
|
|
33
|
+
requester?: unknown;
|
|
34
|
+
}): Promise<SearchResult>;
|
|
41
35
|
handleVoiceStateUpdate(data: {
|
|
42
36
|
guild_id?: string;
|
|
43
37
|
user_id: string;
|
|
44
38
|
session_id: string;
|
|
45
39
|
channel_id?: string | null;
|
|
46
40
|
}): void;
|
|
47
|
-
/**
|
|
48
|
-
* Handle Discord voice server updates — call this in your bot's
|
|
49
|
-
* voiceServerUpdate event handler
|
|
50
|
-
*/
|
|
51
41
|
handleVoiceServerUpdate(data: {
|
|
52
42
|
guild_id: string;
|
|
53
43
|
token: string;
|
|
54
44
|
endpoint?: string | null;
|
|
55
45
|
}): void;
|
|
46
|
+
detectSource(url: string): SearchSource | null;
|
|
47
|
+
getStats(): {
|
|
48
|
+
nodes: number;
|
|
49
|
+
connectedNodes: number;
|
|
50
|
+
players: number;
|
|
51
|
+
playingPlayers: number;
|
|
52
|
+
cachedTracks: number;
|
|
53
|
+
};
|
|
54
|
+
destroy(): void;
|
|
56
55
|
on<K extends keyof YukimuEvents>(event: K, listener: (...args: YukimuEvents[K]) => void): this;
|
|
56
|
+
once<K extends keyof YukimuEvents>(event: K, listener: (...args: YukimuEvents[K]) => void): this;
|
|
57
|
+
off<K extends keyof YukimuEvents>(event: K, listener: (...args: YukimuEvents[K]) => void): this;
|
|
57
58
|
emit<K extends keyof YukimuEvents>(event: K, ...args: YukimuEvents[K]): boolean;
|
|
58
59
|
}
|
|
59
60
|
//# sourceMappingURL=Yukimu.d.ts.map
|