yukimu 1.3.0 → 2.0.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/dist/BitrateOptimizer.d.ts +52 -0
- package/dist/BitrateOptimizer.d.ts.map +1 -0
- package/dist/BitrateOptimizer.js +115 -0
- package/dist/BitrateOptimizer.js.map +1 -0
- package/dist/ConnectionPool.d.ts +52 -3
- package/dist/ConnectionPool.d.ts.map +1 -1
- package/dist/ConnectionPool.js +124 -32
- package/dist/ConnectionPool.js.map +1 -1
- package/dist/Constants.d.ts +27 -2
- package/dist/Constants.d.ts.map +1 -1
- package/dist/Constants.js +133 -11
- package/dist/Constants.js.map +1 -1
- package/dist/Logger.d.ts +22 -0
- package/dist/Logger.d.ts.map +1 -0
- package/dist/Logger.js +74 -0
- package/dist/Logger.js.map +1 -0
- package/dist/Node.d.ts +17 -4
- package/dist/Node.d.ts.map +1 -1
- package/dist/Node.js +226 -88
- package/dist/Node.js.map +1 -1
- package/dist/Player.d.ts +74 -7
- package/dist/Player.d.ts.map +1 -1
- package/dist/Player.js +317 -92
- package/dist/Player.js.map +1 -1
- package/dist/Plugin.d.ts +19 -1
- package/dist/Plugin.d.ts.map +1 -1
- package/dist/Plugin.js +8 -0
- package/dist/Plugin.js.map +1 -1
- package/dist/Queue.d.ts +69 -2
- package/dist/Queue.d.ts.map +1 -1
- package/dist/Queue.js +138 -17
- package/dist/Queue.js.map +1 -1
- package/dist/Resolver.d.ts +33 -2
- package/dist/Resolver.d.ts.map +1 -1
- package/dist/Resolver.js +225 -33
- package/dist/Resolver.js.map +1 -1
- package/dist/Rest.d.ts +27 -4
- package/dist/Rest.d.ts.map +1 -1
- package/dist/Rest.js +157 -25
- package/dist/Rest.js.map +1 -1
- package/dist/TrackCache.d.ts +30 -5
- package/dist/TrackCache.d.ts.map +1 -1
- package/dist/TrackCache.js +119 -15
- package/dist/TrackCache.js.map +1 -1
- package/dist/WsQueue.d.ts +31 -1
- package/dist/WsQueue.d.ts.map +1 -1
- package/dist/WsQueue.js +70 -12
- package/dist/WsQueue.js.map +1 -1
- package/dist/Yukimu.d.ts +38 -5
- package/dist/Yukimu.d.ts.map +1 -1
- package/dist/Yukimu.js +150 -57
- package/dist/Yukimu.js.map +1 -1
- package/dist/connector/Connector.d.ts +26 -0
- package/dist/connector/Connector.d.ts.map +1 -1
- package/dist/connector/Connector.js +28 -0
- package/dist/connector/Connector.js.map +1 -1
- package/dist/connector/DiscordJS.d.ts +20 -1
- package/dist/connector/DiscordJS.d.ts.map +1 -1
- package/dist/connector/DiscordJS.js +44 -2
- package/dist/connector/DiscordJS.js.map +1 -1
- package/dist/connector/Eris.d.ts +12 -1
- package/dist/connector/Eris.d.ts.map +1 -1
- package/dist/connector/Eris.js +40 -6
- package/dist/connector/Eris.js.map +1 -1
- package/dist/connector/Oceanic.d.ts +12 -1
- package/dist/connector/Oceanic.d.ts.map +1 -1
- package/dist/connector/Oceanic.js +39 -4
- package/dist/connector/Oceanic.js.map +1 -1
- package/dist/errors/YukimuError.d.ts +40 -4
- package/dist/errors/YukimuError.d.ts.map +1 -1
- package/dist/errors/YukimuError.js +79 -8
- package/dist/errors/YukimuError.js.map +1 -1
- package/dist/index.d.ts +13 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -16
- package/dist/index.js.map +1 -1
- package/dist/plugins/AutoResume.d.ts +18 -1
- package/dist/plugins/AutoResume.d.ts.map +1 -1
- package/dist/plugins/AutoResume.js +109 -21
- package/dist/plugins/AutoResume.js.map +1 -1
- package/dist/plugins/AutoplayPlugin.d.ts +35 -0
- package/dist/plugins/AutoplayPlugin.d.ts.map +1 -0
- package/dist/plugins/AutoplayPlugin.js +111 -0
- package/dist/plugins/AutoplayPlugin.js.map +1 -0
- package/dist/plugins/InactivityPlugin.d.ts +30 -0
- package/dist/plugins/InactivityPlugin.d.ts.map +1 -0
- package/dist/plugins/InactivityPlugin.js +86 -0
- package/dist/plugins/InactivityPlugin.js.map +1 -0
- package/dist/plugins/PlayerMoved.d.ts +23 -1
- package/dist/plugins/PlayerMoved.d.ts.map +1 -1
- package/dist/plugins/PlayerMoved.js +57 -12
- package/dist/plugins/PlayerMoved.js.map +1 -1
- package/dist/types.d.ts +198 -71
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/package.json +49 -5
- package/.cache/replit/env/latest +0 -88
- package/.cache/replit/env/latest.json +0 -1
- package/.cache/replit/modules/nodejs-20.res +0 -1
- package/.cache/replit/modules/python-3.11.res +0 -1
- package/.cache/replit/modules/replit.res +0 -1
- package/.cache/replit/modules.stamp +0 -0
- package/.cache/replit/nix/dotreplitenv.json +0 -1
- package/.cache/replit/toolchain.json +0 -1
- package/.local/state/workflow-logs/7zVU0iVo-fBL1ccMCmELy/configure_your_app.packager.installForAll.0 +0 -9
- package/.local/state/workflow-logs/7zVU0iVo-fBL1ccMCmELy/configure_your_app.shell.exec.1 +0 -1
- package/.local/state/workflow-logs/KRgHXizaECjWI5nWtS7Dj/configure_your_app.packager.installForAll.0 +0 -1
- package/.local/state/workflow-logs/KRgHXizaECjWI5nWtS7Dj/configure_your_app.shell.exec.1 +0 -1
- package/.local/state/workflow-logs/U0AinJQVHonnwGjj0RXLn/configure_your_app.packager.installForAll.0 +0 -2
- package/.local/state/workflow-logs/jVavLOnv1MqxUvxhMmqER/configure_your_app.packager.installForAll.0 +0 -1
- package/.local/state/workflow-logs/jVavLOnv1MqxUvxhMmqER/configure_your_app.shell.exec.1 +0 -1
- package/.replit +0 -7
- package/.upm/store.json +0 -1
- package/src/ConnectionPool.ts +0 -114
- package/src/Constants.ts +0 -45
- package/src/Node.ts +0 -302
- package/src/Player.ts +0 -332
- package/src/Plugin.ts +0 -7
- package/src/Queue.ts +0 -66
- package/src/Resolver.ts +0 -90
- package/src/Rest.ts +0 -127
- package/src/TrackCache.ts +0 -46
- package/src/WsQueue.ts +0 -58
- package/src/Yukimu.ts +0 -213
- package/src/connector/Connector.ts +0 -13
- package/src/connector/DiscordJS.ts +0 -26
- package/src/connector/Eris.ts +0 -24
- package/src/connector/Oceanic.ts +0 -22
- package/src/errors/YukimuError.ts +0 -31
- package/src/index.ts +0 -24
- package/src/plugins/AutoResume.ts +0 -37
- package/src/plugins/PlayerMoved.ts +0 -26
- package/src/types.ts +0 -145
- package/tsconfig.json +0 -22
package/dist/WsQueue.js
CHANGED
|
@@ -1,40 +1,92 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/** Yukimu v2.0.0 — WebSocket Message Queue with Timeouts & Priority */
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
2
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
7
|
exports.WsQueue = void 0;
|
|
8
|
+
const ws_1 = __importDefault(require("ws"));
|
|
9
|
+
const Constants_1 = require("./Constants");
|
|
10
|
+
/**
|
|
11
|
+
* Manages a WebSocket message queue that buffers messages when the socket
|
|
12
|
+
* is not open and flushes them once it becomes available.
|
|
13
|
+
*
|
|
14
|
+
* Fixes from v1:
|
|
15
|
+
* - Messages are rejected after a configurable timeout (prevents hanging promises)
|
|
16
|
+
* - Max queue size prevents unbounded memory growth
|
|
17
|
+
* - Priority messages (voice updates) are sent first
|
|
18
|
+
* - No duplicate "open" listener — flush is called externally
|
|
19
|
+
*/
|
|
4
20
|
class WsQueue {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
21
|
+
queue = [];
|
|
22
|
+
ws = null;
|
|
23
|
+
sendTimeout;
|
|
24
|
+
maxQueueSize;
|
|
25
|
+
constructor(sendTimeout = Constants_1.DEFAULTS.WS_SEND_TIMEOUT, maxQueueSize = Constants_1.DEFAULTS.WS_MAX_QUEUE) {
|
|
26
|
+
this.sendTimeout = sendTimeout;
|
|
27
|
+
this.maxQueueSize = maxQueueSize;
|
|
8
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Set the underlying WebSocket.
|
|
31
|
+
* Unlike v1, does NOT add an "open" listener to avoid race conditions.
|
|
32
|
+
* The caller (Node) is responsible for calling flush() at the right time.
|
|
33
|
+
*/
|
|
9
34
|
setSocket(ws) {
|
|
10
35
|
this.ws = ws;
|
|
11
|
-
if (ws) {
|
|
12
|
-
ws.on("open", () => this.flush());
|
|
13
|
-
}
|
|
14
36
|
}
|
|
15
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Send data through the WebSocket, or queue it if not ready.
|
|
39
|
+
* @param data - The payload to send (will be JSON-serialized)
|
|
40
|
+
* @param priority - If true, message is prepended to the queue (used for voice updates)
|
|
41
|
+
*/
|
|
42
|
+
send(data, priority = false) {
|
|
16
43
|
return new Promise((resolve, reject) => {
|
|
17
44
|
const serialized = JSON.stringify(data);
|
|
18
|
-
|
|
45
|
+
// If socket is open, send immediately
|
|
46
|
+
if (this.ws?.readyState === ws_1.default.OPEN) {
|
|
19
47
|
this.ws.send(serialized, (err) => {
|
|
20
48
|
if (err)
|
|
21
49
|
reject(err);
|
|
22
50
|
else
|
|
23
51
|
resolve();
|
|
24
52
|
});
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
// Enforce max queue size
|
|
56
|
+
if (this.queue.length >= this.maxQueueSize) {
|
|
57
|
+
reject(new Error(`WsQueue full (${this.maxQueueSize} messages)`));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
// Set a timeout so the promise doesn't hang forever
|
|
61
|
+
const timeout = setTimeout(() => {
|
|
62
|
+
const idx = this.queue.findIndex((m) => m.timeout === timeout);
|
|
63
|
+
if (idx !== -1) {
|
|
64
|
+
this.queue.splice(idx, 1);
|
|
65
|
+
}
|
|
66
|
+
reject(new Error(`WsQueue send timeout after ${this.sendTimeout}ms`));
|
|
67
|
+
}, this.sendTimeout);
|
|
68
|
+
const msg = { data: serialized, resolve, reject, timeout, priority };
|
|
69
|
+
// Priority messages go to the front of the queue
|
|
70
|
+
if (priority) {
|
|
71
|
+
this.queue.unshift(msg);
|
|
25
72
|
}
|
|
26
73
|
else {
|
|
27
|
-
this.queue.push(
|
|
74
|
+
this.queue.push(msg);
|
|
28
75
|
}
|
|
29
76
|
});
|
|
30
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Flush all queued messages. Called by Node after WebSocket is confirmed open.
|
|
80
|
+
*/
|
|
31
81
|
flush() {
|
|
32
|
-
if (!this.ws)
|
|
82
|
+
if (!this.ws || this.ws.readyState !== ws_1.default.OPEN)
|
|
33
83
|
return;
|
|
34
84
|
const toSend = [...this.queue];
|
|
35
85
|
this.queue = [];
|
|
36
86
|
for (const msg of toSend) {
|
|
37
|
-
|
|
87
|
+
clearTimeout(msg.timeout);
|
|
88
|
+
if (this.ws.readyState !== ws_1.default.OPEN) {
|
|
89
|
+
// Socket closed mid-flush — re-queue remaining
|
|
38
90
|
this.queue.unshift(msg);
|
|
39
91
|
return;
|
|
40
92
|
}
|
|
@@ -46,13 +98,19 @@ class WsQueue {
|
|
|
46
98
|
});
|
|
47
99
|
}
|
|
48
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* Clear the queue and reject all pending messages.
|
|
103
|
+
*/
|
|
49
104
|
clear() {
|
|
50
105
|
for (const msg of this.queue) {
|
|
106
|
+
clearTimeout(msg.timeout);
|
|
51
107
|
msg.reject(new Error("WsQueue cleared"));
|
|
52
108
|
}
|
|
53
109
|
this.queue = [];
|
|
54
110
|
}
|
|
55
|
-
get size() {
|
|
111
|
+
get size() {
|
|
112
|
+
return this.queue.length;
|
|
113
|
+
}
|
|
56
114
|
}
|
|
57
115
|
exports.WsQueue = WsQueue;
|
|
58
116
|
//# sourceMappingURL=WsQueue.js.map
|
package/dist/WsQueue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WsQueue.js","sourceRoot":"","sources":["../src/WsQueue.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"WsQueue.js","sourceRoot":"","sources":["../src/WsQueue.ts"],"names":[],"mappings":"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"}
|
package/dist/Yukimu.d.ts
CHANGED
|
@@ -1,12 +1,25 @@
|
|
|
1
|
+
/** Yukimu v2.0.0 — Main Manager Class */
|
|
1
2
|
import { EventEmitter } from "events";
|
|
2
3
|
import { Node } from "./Node";
|
|
3
4
|
import { Player } from "./Player";
|
|
4
5
|
import { Resolver } from "./Resolver";
|
|
5
6
|
import { ConnectionPool } from "./ConnectionPool";
|
|
6
7
|
import { TrackCache } from "./TrackCache";
|
|
8
|
+
import { Logger } from "./Logger";
|
|
7
9
|
import type { Plugin } from "./Plugin";
|
|
8
10
|
import type { Connector } from "./connector/Connector";
|
|
9
11
|
import type { YukimuOptions, NodeOptions, PlayerOptions, YukimuEvents, SearchSource, SearchResult } from "./types";
|
|
12
|
+
/**
|
|
13
|
+
* Main manager class — the entry point for Yukimu.
|
|
14
|
+
*
|
|
15
|
+
* Fixes from v1:
|
|
16
|
+
* 1. destroy() — properly destroys all players, cleans pool, removes listeners
|
|
17
|
+
* 2. handleVoiceStateUpdate — null-safe for partial updates (missing session_id)
|
|
18
|
+
* 3. Uses logger system instead of bare console calls
|
|
19
|
+
* 4. Graceful shutdown with timeout
|
|
20
|
+
* 5. isReady getter
|
|
21
|
+
* 6. Aggregated node stats
|
|
22
|
+
*/
|
|
10
23
|
export declare class Yukimu extends EventEmitter {
|
|
11
24
|
readonly options: YukimuOptions;
|
|
12
25
|
readonly nodes: Map<string, Node>;
|
|
@@ -15,9 +28,12 @@ export declare class Yukimu extends EventEmitter {
|
|
|
15
28
|
readonly resolver: Resolver;
|
|
16
29
|
readonly pool: ConnectionPool;
|
|
17
30
|
readonly trackCache: TrackCache;
|
|
31
|
+
readonly logger: Logger;
|
|
18
32
|
private readonly plugins;
|
|
19
33
|
nodeResolver?: (nodes: Map<string, Node>) => Node | undefined;
|
|
20
34
|
constructor(options: YukimuOptions, connector: Connector, nodes: NodeOptions[], plugins?: Plugin[]);
|
|
35
|
+
/** Whether at least one node is connected and ready */
|
|
36
|
+
get isReady(): boolean;
|
|
21
37
|
use(plugin: Plugin): this;
|
|
22
38
|
unuse(name: string): this;
|
|
23
39
|
getPlugin<T extends Plugin>(name: string): T | undefined;
|
|
@@ -30,19 +46,36 @@ export declare class Yukimu extends EventEmitter {
|
|
|
30
46
|
destroyPlayer(guildId: string): Promise<void>;
|
|
31
47
|
search(query: string, options?: {
|
|
32
48
|
source?: SearchSource;
|
|
33
|
-
requester?:
|
|
49
|
+
requester?: unknown;
|
|
50
|
+
node?: Node;
|
|
34
51
|
}): Promise<SearchResult>;
|
|
35
|
-
handleVoiceStateUpdate(data:
|
|
36
|
-
handleVoiceServerUpdate(data:
|
|
52
|
+
handleVoiceStateUpdate(data: Record<string, unknown>): void;
|
|
53
|
+
handleVoiceServerUpdate(data: Record<string, unknown>): void;
|
|
37
54
|
detectSource(url: string): SearchSource | null;
|
|
38
55
|
getStats(): {
|
|
39
56
|
nodes: number;
|
|
40
57
|
connectedNodes: number;
|
|
41
58
|
players: number;
|
|
42
59
|
playingPlayers: number;
|
|
43
|
-
|
|
60
|
+
cache: {
|
|
61
|
+
tracks: number;
|
|
62
|
+
searches: number;
|
|
63
|
+
hits: number;
|
|
64
|
+
misses: number;
|
|
65
|
+
hitRate: number;
|
|
66
|
+
};
|
|
44
67
|
};
|
|
45
|
-
|
|
68
|
+
/**
|
|
69
|
+
* Gracefully destroy the manager and all its resources.
|
|
70
|
+
* Unlike v1, this properly:
|
|
71
|
+
* - Destroys all players (leave voice, clean up on Lavalink)
|
|
72
|
+
* - Destroys all nodes (close WebSockets, clear timers)
|
|
73
|
+
* - Cleans up the connection pool
|
|
74
|
+
* - Clears the track cache
|
|
75
|
+
* - Unloads all plugins
|
|
76
|
+
* - Removes all event listeners
|
|
77
|
+
*/
|
|
78
|
+
destroy(): Promise<void>;
|
|
46
79
|
on<K extends keyof YukimuEvents>(event: K, listener: (...args: YukimuEvents[K]) => void): this;
|
|
47
80
|
once<K extends keyof YukimuEvents>(event: K, listener: (...args: YukimuEvents[K]) => void): this;
|
|
48
81
|
off<K extends keyof YukimuEvents>(event: K, listener: (...args: YukimuEvents[K]) => void): this;
|
package/dist/Yukimu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Yukimu.d.ts","sourceRoot":"","sources":["../src/Yukimu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Yukimu.d.ts","sourceRoot":"","sources":["../src/Yukimu.ts"],"names":[],"mappings":"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"}
|
package/dist/Yukimu.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/** Yukimu v2.0.0 — Main Manager Class */
|
|
2
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
4
|
exports.Yukimu = void 0;
|
|
4
5
|
const events_1 = require("events");
|
|
@@ -7,49 +8,88 @@ const Player_1 = require("./Player");
|
|
|
7
8
|
const Resolver_1 = require("./Resolver");
|
|
8
9
|
const ConnectionPool_1 = require("./ConnectionPool");
|
|
9
10
|
const TrackCache_1 = require("./TrackCache");
|
|
11
|
+
const Logger_1 = require("./Logger");
|
|
10
12
|
const Constants_1 = require("./Constants");
|
|
11
13
|
const YukimuError_1 = require("./errors/YukimuError");
|
|
14
|
+
/**
|
|
15
|
+
* Main manager class — the entry point for Yukimu.
|
|
16
|
+
*
|
|
17
|
+
* Fixes from v1:
|
|
18
|
+
* 1. destroy() — properly destroys all players, cleans pool, removes listeners
|
|
19
|
+
* 2. handleVoiceStateUpdate — null-safe for partial updates (missing session_id)
|
|
20
|
+
* 3. Uses logger system instead of bare console calls
|
|
21
|
+
* 4. Graceful shutdown with timeout
|
|
22
|
+
* 5. isReady getter
|
|
23
|
+
* 6. Aggregated node stats
|
|
24
|
+
*/
|
|
12
25
|
class Yukimu extends events_1.EventEmitter {
|
|
26
|
+
options;
|
|
27
|
+
nodes = new Map();
|
|
28
|
+
players = new Map();
|
|
29
|
+
connector;
|
|
30
|
+
resolver;
|
|
31
|
+
pool;
|
|
32
|
+
trackCache;
|
|
33
|
+
logger;
|
|
34
|
+
plugins = new Map();
|
|
35
|
+
nodeResolver;
|
|
13
36
|
constructor(options, connector, nodes, plugins = []) {
|
|
14
37
|
super();
|
|
15
|
-
this.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
38
|
+
this.options = {
|
|
39
|
+
moveOnDisconnect: true,
|
|
40
|
+
voiceConnectionTimeout: Constants_1.DEFAULTS.VOICE_CONNECTION_TIMEOUT,
|
|
41
|
+
...options,
|
|
42
|
+
};
|
|
43
|
+
// Initialize logger
|
|
44
|
+
this.logger = new Logger_1.Logger(options.logLevel ?? "info", options.logger);
|
|
45
|
+
// Initialize subsystems
|
|
19
46
|
this.connector = connector.set(this);
|
|
20
47
|
this.resolver = new Resolver_1.Resolver(this);
|
|
21
48
|
this.pool = new ConnectionPool_1.ConnectionPool(this);
|
|
22
|
-
this.trackCache = new TrackCache_1.TrackCache();
|
|
49
|
+
this.trackCache = new TrackCache_1.TrackCache(options.cacheTTL ?? Constants_1.DEFAULTS.CACHE_TTL, options.maxCacheSize ?? Constants_1.DEFAULTS.MAX_CACHE_SIZE);
|
|
50
|
+
// Load plugins
|
|
23
51
|
for (const plugin of plugins)
|
|
24
52
|
this.use(plugin);
|
|
53
|
+
// Start listening for voice events
|
|
25
54
|
this.connector.listen();
|
|
55
|
+
// Connect to all nodes
|
|
26
56
|
for (const node of nodes)
|
|
27
57
|
this.addNode(node);
|
|
58
|
+
this.logger.info(`Yukimu v2.0.0 initialized with ${nodes.length} node(s) and ${plugins.length} plugin(s)`);
|
|
59
|
+
}
|
|
60
|
+
// ─── State ──────────────────────────────────────────────────────────────
|
|
61
|
+
/** Whether at least one node is connected and ready */
|
|
62
|
+
get isReady() {
|
|
63
|
+
return [...this.nodes.values()].some((n) => n.connected);
|
|
28
64
|
}
|
|
29
|
-
// ─── Plugin System
|
|
65
|
+
// ─── Plugin System ────────────────────────────────────────────────────
|
|
30
66
|
use(plugin) {
|
|
31
|
-
if (this.plugins.has(plugin.name))
|
|
32
|
-
throw new YukimuError_1.YukimuError(`Plugin "${plugin.name}" already loaded
|
|
67
|
+
if (this.plugins.has(plugin.name)) {
|
|
68
|
+
throw new YukimuError_1.YukimuError(`Plugin "${plugin.name}" already loaded`, YukimuError_1.ErrorCode.PLUGIN_ALREADY_LOADED);
|
|
69
|
+
}
|
|
33
70
|
plugin.load(this);
|
|
34
71
|
this.plugins.set(plugin.name, plugin);
|
|
35
|
-
|
|
72
|
+
this.logger.info(`Plugin "${plugin.name}" loaded`);
|
|
36
73
|
return this;
|
|
37
74
|
}
|
|
38
75
|
unuse(name) {
|
|
39
76
|
const plugin = this.plugins.get(name);
|
|
40
|
-
if (!plugin)
|
|
41
|
-
throw new YukimuError_1.YukimuError(`Plugin "${name}" not found
|
|
77
|
+
if (!plugin) {
|
|
78
|
+
throw new YukimuError_1.YukimuError(`Plugin "${name}" not found`, YukimuError_1.ErrorCode.PLUGIN_NOT_FOUND);
|
|
79
|
+
}
|
|
42
80
|
plugin.unload?.(this);
|
|
43
81
|
this.plugins.delete(name);
|
|
82
|
+
this.logger.info(`Plugin "${name}" unloaded`);
|
|
44
83
|
return this;
|
|
45
84
|
}
|
|
46
85
|
getPlugin(name) {
|
|
47
86
|
return this.plugins.get(name);
|
|
48
87
|
}
|
|
49
|
-
// ─── Node Management
|
|
88
|
+
// ─── Node Management ──────────────────────────────────────────────────
|
|
50
89
|
addNode(options) {
|
|
51
|
-
if (this.nodes.has(options.name))
|
|
52
|
-
throw new YukimuError_1.YukimuError(`Node "${options.name}" already exists
|
|
90
|
+
if (this.nodes.has(options.name)) {
|
|
91
|
+
throw new YukimuError_1.YukimuError(`Node "${options.name}" already exists`, YukimuError_1.ErrorCode.NODE_ALREADY_EXISTS);
|
|
92
|
+
}
|
|
53
93
|
const node = new Node_1.Node(this, options);
|
|
54
94
|
this.nodes.set(options.name, node);
|
|
55
95
|
node.connect();
|
|
@@ -57,32 +97,37 @@ class Yukimu extends events_1.EventEmitter {
|
|
|
57
97
|
}
|
|
58
98
|
removeNode(name) {
|
|
59
99
|
const node = this.nodes.get(name);
|
|
60
|
-
if (!node)
|
|
61
|
-
throw new YukimuError_1.YukimuError(`Node "${name}" not found
|
|
100
|
+
if (!node) {
|
|
101
|
+
throw new YukimuError_1.YukimuError(`Node "${name}" not found`, YukimuError_1.ErrorCode.NODE_NOT_FOUND);
|
|
102
|
+
}
|
|
62
103
|
node.destroy();
|
|
63
104
|
this.nodes.delete(name);
|
|
105
|
+
this.logger.info(`Node "${name}" removed`);
|
|
64
106
|
}
|
|
65
107
|
getNode(name) {
|
|
66
108
|
if (name) {
|
|
67
109
|
const node = this.nodes.get(name);
|
|
68
110
|
if (!node)
|
|
69
|
-
throw new YukimuError_1.YukimuError(`Node "${name}" not found
|
|
111
|
+
throw new YukimuError_1.YukimuError(`Node "${name}" not found`, YukimuError_1.ErrorCode.NODE_NOT_FOUND);
|
|
70
112
|
return node;
|
|
71
113
|
}
|
|
72
114
|
return this.getBestNode();
|
|
73
115
|
}
|
|
74
116
|
getBestNode() {
|
|
75
|
-
const connected = [...this.nodes.values()].filter(n => n.connected);
|
|
76
|
-
if (!connected.length)
|
|
77
|
-
throw new YukimuError_1.YukimuError("No connected Lavalink nodes available");
|
|
117
|
+
const connected = [...this.nodes.values()].filter((n) => n.connected);
|
|
118
|
+
if (!connected.length) {
|
|
119
|
+
throw new YukimuError_1.YukimuError("No connected Lavalink nodes available", YukimuError_1.ErrorCode.NODE_DISCONNECTED);
|
|
120
|
+
}
|
|
121
|
+
// Try custom resolver first
|
|
78
122
|
if (this.nodeResolver) {
|
|
79
123
|
const resolved = this.nodeResolver(this.nodes);
|
|
80
124
|
if (resolved?.connected)
|
|
81
125
|
return resolved;
|
|
82
126
|
}
|
|
127
|
+
// Sort by penalties (lowest = best)
|
|
83
128
|
return connected.sort((a, b) => a.calculatePenalties() - b.calculatePenalties())[0];
|
|
84
129
|
}
|
|
85
|
-
// ─── Player Management
|
|
130
|
+
// ─── Player Management ────────────────────────────────────────────────
|
|
86
131
|
createPlayer(options) {
|
|
87
132
|
const existing = this.players.get(options.guildId);
|
|
88
133
|
if (existing)
|
|
@@ -106,59 +151,73 @@ class Yukimu extends events_1.EventEmitter {
|
|
|
106
151
|
this.pool.remove(guildId);
|
|
107
152
|
this.emit("playerDestroy", player);
|
|
108
153
|
}
|
|
109
|
-
// ─── Search
|
|
154
|
+
// ─── Search ───────────────────────────────────────────────────────────
|
|
110
155
|
async search(query, options) {
|
|
111
|
-
return this.resolver.resolve(query, options?.source ?? this.options.defaultSource ?? "youtube", options?.requester);
|
|
156
|
+
return this.resolver.resolve(query, options?.source ?? this.options.defaultSource ?? "youtube", options?.requester, options?.node);
|
|
112
157
|
}
|
|
113
|
-
// ─── Voice Gateway
|
|
158
|
+
// ─── Voice Gateway ────────────────────────────────────────────────────
|
|
114
159
|
handleVoiceStateUpdate(data) {
|
|
115
|
-
|
|
160
|
+
const userId = data["user_id"];
|
|
161
|
+
const guildId = data["guild_id"];
|
|
162
|
+
if (userId !== this.options.clientId)
|
|
116
163
|
return;
|
|
117
|
-
if (!
|
|
164
|
+
if (!guildId)
|
|
118
165
|
return;
|
|
119
|
-
const player = this.players.get(
|
|
120
|
-
|
|
121
|
-
|
|
166
|
+
const player = this.players.get(guildId);
|
|
167
|
+
const channelId = data["channel_id"];
|
|
168
|
+
// Bot left the voice channel
|
|
169
|
+
if (!channelId) {
|
|
170
|
+
this.pool.remove(guildId);
|
|
122
171
|
if (player && this.options.moveOnDisconnect) {
|
|
123
|
-
this.destroyPlayer(
|
|
172
|
+
this.destroyPlayer(guildId).catch(() => { });
|
|
124
173
|
}
|
|
125
174
|
return;
|
|
126
175
|
}
|
|
127
|
-
|
|
176
|
+
// Update session — null-safe for partial updates
|
|
177
|
+
const sessionId = data["session_id"];
|
|
178
|
+
this.pool.updateSession(guildId, sessionId, channelId);
|
|
128
179
|
if (player) {
|
|
129
180
|
const oldChannel = player.voiceChannelId;
|
|
130
|
-
player.voiceChannelId =
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
181
|
+
player.voiceChannelId = channelId;
|
|
182
|
+
if (sessionId)
|
|
183
|
+
player.sessionId = sessionId;
|
|
184
|
+
// Detect channel move
|
|
185
|
+
if (oldChannel && oldChannel !== channelId) {
|
|
186
|
+
this.emit("playerMove", player, oldChannel, channelId);
|
|
134
187
|
}
|
|
135
|
-
if
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
188
|
+
// Check if voice connection is fully ready
|
|
189
|
+
if (this.pool.isReady(guildId)) {
|
|
190
|
+
const vs = this.pool.getVoiceState(guildId);
|
|
191
|
+
if (vs) {
|
|
192
|
+
player.voiceToken = vs.token;
|
|
193
|
+
player.voiceEndpoint = vs.endpoint;
|
|
194
|
+
player.checkVoiceReady();
|
|
195
|
+
this.pool.markConnected(guildId);
|
|
196
|
+
}
|
|
141
197
|
}
|
|
142
198
|
}
|
|
143
199
|
}
|
|
144
200
|
handleVoiceServerUpdate(data) {
|
|
145
|
-
|
|
201
|
+
const endpoint = data["endpoint"];
|
|
202
|
+
const guildId = data["guild_id"];
|
|
203
|
+
const token = data["token"];
|
|
204
|
+
if (!endpoint || !guildId || !token)
|
|
146
205
|
return;
|
|
147
|
-
this.pool.updateServer(
|
|
148
|
-
const player = this.players.get(
|
|
206
|
+
this.pool.updateServer(guildId, token, endpoint);
|
|
207
|
+
const player = this.players.get(guildId);
|
|
149
208
|
if (!player)
|
|
150
209
|
return;
|
|
151
|
-
player.voiceToken =
|
|
152
|
-
player.voiceEndpoint =
|
|
153
|
-
if (this.pool.isReady(
|
|
210
|
+
player.voiceToken = token;
|
|
211
|
+
player.voiceEndpoint = endpoint;
|
|
212
|
+
if (this.pool.isReady(guildId)) {
|
|
154
213
|
player.checkVoiceReady();
|
|
155
|
-
this.pool.markConnected(
|
|
214
|
+
this.pool.markConnected(guildId);
|
|
156
215
|
}
|
|
157
216
|
}
|
|
158
|
-
// ─── Utility
|
|
217
|
+
// ─── Utility ─────────────────────────────────────────────────────────
|
|
159
218
|
detectSource(url) {
|
|
160
219
|
for (const [source, patterns] of Object.entries(Constants_1.URL_PATTERNS)) {
|
|
161
|
-
if (patterns.some(p => p.test(url)))
|
|
220
|
+
if (patterns.some((p) => p.test(url)))
|
|
162
221
|
return source;
|
|
163
222
|
}
|
|
164
223
|
return null;
|
|
@@ -167,19 +226,53 @@ class Yukimu extends events_1.EventEmitter {
|
|
|
167
226
|
const nodes = [...this.nodes.values()];
|
|
168
227
|
return {
|
|
169
228
|
nodes: nodes.length,
|
|
170
|
-
connectedNodes: nodes.filter(n => n.connected).length,
|
|
229
|
+
connectedNodes: nodes.filter((n) => n.connected).length,
|
|
171
230
|
players: this.players.size,
|
|
172
|
-
playingPlayers: [...this.players.values()].filter(p => p.playing).length,
|
|
173
|
-
|
|
231
|
+
playingPlayers: [...this.players.values()].filter((p) => p.playing).length,
|
|
232
|
+
cache: this.trackCache.stats,
|
|
174
233
|
};
|
|
175
234
|
}
|
|
176
|
-
|
|
177
|
-
|
|
235
|
+
/**
|
|
236
|
+
* Gracefully destroy the manager and all its resources.
|
|
237
|
+
* Unlike v1, this properly:
|
|
238
|
+
* - Destroys all players (leave voice, clean up on Lavalink)
|
|
239
|
+
* - Destroys all nodes (close WebSockets, clear timers)
|
|
240
|
+
* - Cleans up the connection pool
|
|
241
|
+
* - Clears the track cache
|
|
242
|
+
* - Unloads all plugins
|
|
243
|
+
* - Removes all event listeners
|
|
244
|
+
*/
|
|
245
|
+
async destroy() {
|
|
246
|
+
this.logger.info("Destroying Yukimu instance...");
|
|
247
|
+
// Destroy all players first
|
|
248
|
+
const destroyPromises = [];
|
|
249
|
+
for (const guildId of this.players.keys()) {
|
|
250
|
+
destroyPromises.push(this.destroyPlayer(guildId).catch(() => { }));
|
|
251
|
+
}
|
|
252
|
+
await Promise.allSettled(destroyPromises);
|
|
253
|
+
// Unload all plugins
|
|
254
|
+
for (const [name, plugin] of this.plugins) {
|
|
255
|
+
try {
|
|
256
|
+
plugin.unload?.(this);
|
|
257
|
+
}
|
|
258
|
+
catch (err) {
|
|
259
|
+
this.logger.warn(`Error unloading plugin "${name}": ${err}`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
this.plugins.clear();
|
|
263
|
+
// Destroy all nodes
|
|
264
|
+
for (const node of this.nodes.values()) {
|
|
178
265
|
node.destroy();
|
|
179
|
-
|
|
266
|
+
}
|
|
180
267
|
this.nodes.clear();
|
|
268
|
+
// Clean up pool and cache
|
|
269
|
+
this.pool.destroy();
|
|
270
|
+
this.trackCache.destroy();
|
|
271
|
+
// Remove all event listeners
|
|
272
|
+
this.removeAllListeners();
|
|
273
|
+
this.logger.info("Yukimu destroyed");
|
|
181
274
|
}
|
|
182
|
-
// ─── Typed EventEmitter
|
|
275
|
+
// ─── Typed EventEmitter ───────────────────────────────────────────────
|
|
183
276
|
on(event, listener) {
|
|
184
277
|
return super.on(event, listener);
|
|
185
278
|
}
|
package/dist/Yukimu.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Yukimu.js","sourceRoot":"","sources":["../src/Yukimu.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Yukimu.js","sourceRoot":"","sources":["../src/Yukimu.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,34 @@
|
|
|
1
|
+
/** Yukimu v2.0.0 — Base Connector */
|
|
1
2
|
import type { Yukimu } from "../Yukimu";
|
|
3
|
+
import type { BoostTier } from "../types";
|
|
4
|
+
/**
|
|
5
|
+
* Abstract base class for Discord library connectors.
|
|
6
|
+
*
|
|
7
|
+
* Connectors bridge Yukimu to a specific Discord library (discord.js, Eris, Oceanic)
|
|
8
|
+
* by forwarding voice gateway events and sending voice payloads.
|
|
9
|
+
*
|
|
10
|
+
* v2 additions:
|
|
11
|
+
* - getGuildBoostTier(): Get the boost level for bitrate optimization
|
|
12
|
+
* - getChannelBitrate(): Get the current voice channel bitrate
|
|
13
|
+
*/
|
|
2
14
|
export declare abstract class Connector {
|
|
3
15
|
protected manager: Yukimu;
|
|
4
16
|
set(manager: Yukimu): this;
|
|
17
|
+
/** Start listening for voice gateway events (VOICE_STATE_UPDATE, VOICE_SERVER_UPDATE) */
|
|
5
18
|
abstract listen(): void;
|
|
19
|
+
/** Send a voice gateway payload to Discord */
|
|
6
20
|
abstract sendPayload(guildId: string, payload: unknown): void;
|
|
21
|
+
/**
|
|
22
|
+
* Get the Discord server's boost tier.
|
|
23
|
+
* Override in subclass for boost-tier-aware bitrate optimization.
|
|
24
|
+
* @returns 0 | 1 | 2 | 3
|
|
25
|
+
*/
|
|
26
|
+
getGuildBoostTier(_guildId: string): BoostTier;
|
|
27
|
+
/**
|
|
28
|
+
* Get the current bitrate of a voice channel in kbps.
|
|
29
|
+
* Override in subclass for accurate bitrate information.
|
|
30
|
+
* @returns Bitrate in kbps, or null if unavailable
|
|
31
|
+
*/
|
|
32
|
+
getChannelBitrate(_guildId: string, _channelId: string): number | null;
|
|
7
33
|
}
|
|
8
34
|
//# sourceMappingURL=Connector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Connector.d.ts","sourceRoot":"","sources":["../../src/connector/Connector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"Connector.d.ts","sourceRoot":"","sources":["../../src/connector/Connector.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C;;;;;;;;;GASG;AACH,8BAAsB,SAAS;IAC7B,SAAS,CAAC,OAAO,EAAG,MAAM,CAAC;IAEpB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAKjC,yFAAyF;aACzE,MAAM,IAAI,IAAI;IAE9B,8CAA8C;aAC9B,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAEpE;;;;OAIG;IACI,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS;IAIrD;;;;OAIG;IACI,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAG9E"}
|