yukimu 2.0.0 → 2.0.8

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.
Files changed (97) hide show
  1. package/package.json +1 -1
  2. package/dist/BitrateOptimizer.d.ts +0 -52
  3. package/dist/BitrateOptimizer.d.ts.map +0 -1
  4. package/dist/BitrateOptimizer.js +0 -115
  5. package/dist/BitrateOptimizer.js.map +0 -1
  6. package/dist/ConnectionPool.d.ts +0 -84
  7. package/dist/ConnectionPool.d.ts.map +0 -1
  8. package/dist/ConnectionPool.js +0 -203
  9. package/dist/ConnectionPool.js.map +0 -1
  10. package/dist/Constants.d.ts +0 -45
  11. package/dist/Constants.d.ts.map +0 -1
  12. package/dist/Constants.js +0 -168
  13. package/dist/Constants.js.map +0 -1
  14. package/dist/Logger.d.ts +0 -22
  15. package/dist/Logger.d.ts.map +0 -1
  16. package/dist/Logger.js +0 -74
  17. package/dist/Logger.js.map +0 -1
  18. package/dist/Node.d.ts +0 -61
  19. package/dist/Node.d.ts.map +0 -1
  20. package/dist/Node.js +0 -446
  21. package/dist/Node.js.map +0 -1
  22. package/dist/Player.d.ts +0 -135
  23. package/dist/Player.d.ts.map +0 -1
  24. package/dist/Player.js +0 -530
  25. package/dist/Player.js.map +0 -1
  26. package/dist/Plugin.d.ts +0 -25
  27. package/dist/Plugin.d.ts.map +0 -1
  28. package/dist/Plugin.js +0 -15
  29. package/dist/Plugin.js.map +0 -1
  30. package/dist/Queue.d.ts +0 -89
  31. package/dist/Queue.d.ts.map +0 -1
  32. package/dist/Queue.js +0 -188
  33. package/dist/Queue.js.map +0 -1
  34. package/dist/Resolver.d.ts +0 -44
  35. package/dist/Resolver.d.ts.map +0 -1
  36. package/dist/Resolver.js +0 -289
  37. package/dist/Resolver.js.map +0 -1
  38. package/dist/Rest.d.ts +0 -46
  39. package/dist/Rest.d.ts.map +0 -1
  40. package/dist/Rest.js +0 -246
  41. package/dist/Rest.js.map +0 -1
  42. package/dist/TrackCache.d.ts +0 -41
  43. package/dist/TrackCache.d.ts.map +0 -1
  44. package/dist/TrackCache.js +0 -144
  45. package/dist/TrackCache.js.map +0 -1
  46. package/dist/WsQueue.d.ts +0 -41
  47. package/dist/WsQueue.d.ts.map +0 -1
  48. package/dist/WsQueue.js +0 -116
  49. package/dist/WsQueue.js.map +0 -1
  50. package/dist/Yukimu.d.ts +0 -84
  51. package/dist/Yukimu.d.ts.map +0 -1
  52. package/dist/Yukimu.js +0 -290
  53. package/dist/Yukimu.js.map +0 -1
  54. package/dist/connector/Connector.d.ts +0 -34
  55. package/dist/connector/Connector.d.ts.map +0 -1
  56. package/dist/connector/Connector.js +0 -39
  57. package/dist/connector/Connector.js.map +0 -1
  58. package/dist/connector/DiscordJS.d.ts +0 -27
  59. package/dist/connector/DiscordJS.d.ts.map +0 -1
  60. package/dist/connector/DiscordJS.js +0 -69
  61. package/dist/connector/DiscordJS.js.map +0 -1
  62. package/dist/connector/Eris.d.ts +0 -19
  63. package/dist/connector/Eris.d.ts.map +0 -1
  64. package/dist/connector/Eris.js +0 -62
  65. package/dist/connector/Eris.js.map +0 -1
  66. package/dist/connector/Oceanic.d.ts +0 -19
  67. package/dist/connector/Oceanic.d.ts.map +0 -1
  68. package/dist/connector/Oceanic.js +0 -60
  69. package/dist/connector/Oceanic.js.map +0 -1
  70. package/dist/errors/YukimuError.d.ts +0 -51
  71. package/dist/errors/YukimuError.d.ts.map +0 -1
  72. package/dist/errors/YukimuError.js +0 -105
  73. package/dist/errors/YukimuError.js.map +0 -1
  74. package/dist/index.d.ts +0 -29
  75. package/dist/index.d.ts.map +0 -1
  76. package/dist/index.js +0 -70
  77. package/dist/index.js.map +0 -1
  78. package/dist/plugins/AutoResume.d.ts +0 -25
  79. package/dist/plugins/AutoResume.d.ts.map +0 -1
  80. package/dist/plugins/AutoResume.js +0 -132
  81. package/dist/plugins/AutoResume.js.map +0 -1
  82. package/dist/plugins/AutoplayPlugin.d.ts +0 -35
  83. package/dist/plugins/AutoplayPlugin.d.ts.map +0 -1
  84. package/dist/plugins/AutoplayPlugin.js +0 -111
  85. package/dist/plugins/AutoplayPlugin.js.map +0 -1
  86. package/dist/plugins/InactivityPlugin.d.ts +0 -30
  87. package/dist/plugins/InactivityPlugin.d.ts.map +0 -1
  88. package/dist/plugins/InactivityPlugin.js +0 -86
  89. package/dist/plugins/InactivityPlugin.js.map +0 -1
  90. package/dist/plugins/PlayerMoved.d.ts +0 -29
  91. package/dist/plugins/PlayerMoved.d.ts.map +0 -1
  92. package/dist/plugins/PlayerMoved.js +0 -75
  93. package/dist/plugins/PlayerMoved.js.map +0 -1
  94. package/dist/types.d.ts +0 -309
  95. package/dist/types.d.ts.map +0 -1
  96. package/dist/types.js +0 -4
  97. package/dist/types.js.map +0 -1
package/dist/WsQueue.js DELETED
@@ -1,116 +0,0 @@
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
- };
6
- Object.defineProperty(exports, "__esModule", { value: true });
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
- */
20
- class WsQueue {
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;
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
- */
34
- setSocket(ws) {
35
- this.ws = ws;
36
- }
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) {
43
- return new Promise((resolve, reject) => {
44
- const serialized = JSON.stringify(data);
45
- // If socket is open, send immediately
46
- if (this.ws?.readyState === ws_1.default.OPEN) {
47
- this.ws.send(serialized, (err) => {
48
- if (err)
49
- reject(err);
50
- else
51
- resolve();
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);
72
- }
73
- else {
74
- this.queue.push(msg);
75
- }
76
- });
77
- }
78
- /**
79
- * Flush all queued messages. Called by Node after WebSocket is confirmed open.
80
- */
81
- flush() {
82
- if (!this.ws || this.ws.readyState !== ws_1.default.OPEN)
83
- return;
84
- const toSend = [...this.queue];
85
- this.queue = [];
86
- for (const msg of toSend) {
87
- clearTimeout(msg.timeout);
88
- if (this.ws.readyState !== ws_1.default.OPEN) {
89
- // Socket closed mid-flush — re-queue remaining
90
- this.queue.unshift(msg);
91
- return;
92
- }
93
- this.ws.send(msg.data, (err) => {
94
- if (err)
95
- msg.reject(err);
96
- else
97
- msg.resolve();
98
- });
99
- }
100
- }
101
- /**
102
- * Clear the queue and reject all pending messages.
103
- */
104
- clear() {
105
- for (const msg of this.queue) {
106
- clearTimeout(msg.timeout);
107
- msg.reject(new Error("WsQueue cleared"));
108
- }
109
- this.queue = [];
110
- }
111
- get size() {
112
- return this.queue.length;
113
- }
114
- }
115
- exports.WsQueue = WsQueue;
116
- //# sourceMappingURL=WsQueue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WsQueue.js","sourceRoot":"","sources":["../src/WsQueue.ts"],"names":[],"mappings":"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"}
package/dist/Yukimu.d.ts DELETED
@@ -1,84 +0,0 @@
1
- /** Yukimu v2.0.0 — Main Manager Class */
2
- import { EventEmitter } from "events";
3
- import { Node } from "./Node";
4
- import { Player } from "./Player";
5
- import { Resolver } from "./Resolver";
6
- import { ConnectionPool } from "./ConnectionPool";
7
- import { TrackCache } from "./TrackCache";
8
- import { Logger } from "./Logger";
9
- import type { Plugin } from "./Plugin";
10
- import type { Connector } from "./connector/Connector";
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
- */
23
- export declare class Yukimu extends EventEmitter {
24
- readonly options: YukimuOptions;
25
- readonly nodes: Map<string, Node>;
26
- readonly players: Map<string, Player>;
27
- readonly connector: Connector;
28
- readonly resolver: Resolver;
29
- readonly pool: ConnectionPool;
30
- readonly trackCache: TrackCache;
31
- readonly logger: Logger;
32
- private readonly plugins;
33
- nodeResolver?: (nodes: Map<string, Node>) => Node | undefined;
34
- constructor(options: YukimuOptions, connector: Connector, nodes: NodeOptions[], plugins?: Plugin[]);
35
- /** Whether at least one node is connected and ready */
36
- get isReady(): boolean;
37
- use(plugin: Plugin): this;
38
- unuse(name: string): this;
39
- getPlugin<T extends Plugin>(name: string): T | undefined;
40
- addNode(options: NodeOptions): Node;
41
- removeNode(name: string): void;
42
- getNode(name?: string): Node;
43
- getBestNode(): Node;
44
- createPlayer(options: PlayerOptions): Player;
45
- getPlayer(guildId: string): Player | null;
46
- destroyPlayer(guildId: string): Promise<void>;
47
- search(query: string, options?: {
48
- source?: SearchSource;
49
- requester?: unknown;
50
- node?: Node;
51
- }): Promise<SearchResult>;
52
- handleVoiceStateUpdate(data: Record<string, unknown>): void;
53
- handleVoiceServerUpdate(data: Record<string, unknown>): void;
54
- detectSource(url: string): SearchSource | null;
55
- getStats(): {
56
- nodes: number;
57
- connectedNodes: number;
58
- players: number;
59
- playingPlayers: number;
60
- cache: {
61
- tracks: number;
62
- searches: number;
63
- hits: number;
64
- misses: number;
65
- hitRate: number;
66
- };
67
- };
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>;
79
- on<K extends keyof YukimuEvents>(event: K, listener: (...args: YukimuEvents[K]) => void): this;
80
- once<K extends keyof YukimuEvents>(event: K, listener: (...args: YukimuEvents[K]) => void): this;
81
- off<K extends keyof YukimuEvents>(event: K, listener: (...args: YukimuEvents[K]) => void): this;
82
- emit<K extends keyof YukimuEvents>(event: K, ...args: YukimuEvents[K]): boolean;
83
- }
84
- //# sourceMappingURL=Yukimu.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Yukimu.d.ts","sourceRoot":"","sources":["../src/Yukimu.ts"],"names":[],"mappings":"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"}
package/dist/Yukimu.js DELETED
@@ -1,290 +0,0 @@
1
- "use strict";
2
- /** Yukimu v2.0.0 — Main Manager Class */
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.Yukimu = void 0;
5
- const events_1 = require("events");
6
- const Node_1 = require("./Node");
7
- const Player_1 = require("./Player");
8
- const Resolver_1 = require("./Resolver");
9
- const ConnectionPool_1 = require("./ConnectionPool");
10
- const TrackCache_1 = require("./TrackCache");
11
- const Logger_1 = require("./Logger");
12
- const Constants_1 = require("./Constants");
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
- */
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;
36
- constructor(options, connector, nodes, plugins = []) {
37
- super();
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
46
- this.connector = connector.set(this);
47
- this.resolver = new Resolver_1.Resolver(this);
48
- this.pool = new ConnectionPool_1.ConnectionPool(this);
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
51
- for (const plugin of plugins)
52
- this.use(plugin);
53
- // Start listening for voice events
54
- this.connector.listen();
55
- // Connect to all nodes
56
- for (const node of nodes)
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);
64
- }
65
- // ─── Plugin System ────────────────────────────────────────────────────
66
- use(plugin) {
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
- }
70
- plugin.load(this);
71
- this.plugins.set(plugin.name, plugin);
72
- this.logger.info(`Plugin "${plugin.name}" loaded`);
73
- return this;
74
- }
75
- unuse(name) {
76
- const plugin = this.plugins.get(name);
77
- if (!plugin) {
78
- throw new YukimuError_1.YukimuError(`Plugin "${name}" not found`, YukimuError_1.ErrorCode.PLUGIN_NOT_FOUND);
79
- }
80
- plugin.unload?.(this);
81
- this.plugins.delete(name);
82
- this.logger.info(`Plugin "${name}" unloaded`);
83
- return this;
84
- }
85
- getPlugin(name) {
86
- return this.plugins.get(name);
87
- }
88
- // ─── Node Management ──────────────────────────────────────────────────
89
- addNode(options) {
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
- }
93
- const node = new Node_1.Node(this, options);
94
- this.nodes.set(options.name, node);
95
- node.connect();
96
- return node;
97
- }
98
- removeNode(name) {
99
- const node = this.nodes.get(name);
100
- if (!node) {
101
- throw new YukimuError_1.YukimuError(`Node "${name}" not found`, YukimuError_1.ErrorCode.NODE_NOT_FOUND);
102
- }
103
- node.destroy();
104
- this.nodes.delete(name);
105
- this.logger.info(`Node "${name}" removed`);
106
- }
107
- getNode(name) {
108
- if (name) {
109
- const node = this.nodes.get(name);
110
- if (!node)
111
- throw new YukimuError_1.YukimuError(`Node "${name}" not found`, YukimuError_1.ErrorCode.NODE_NOT_FOUND);
112
- return node;
113
- }
114
- return this.getBestNode();
115
- }
116
- getBestNode() {
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
122
- if (this.nodeResolver) {
123
- const resolved = this.nodeResolver(this.nodes);
124
- if (resolved?.connected)
125
- return resolved;
126
- }
127
- // Sort by penalties (lowest = best)
128
- return connected.sort((a, b) => a.calculatePenalties() - b.calculatePenalties())[0];
129
- }
130
- // ─── Player Management ────────────────────────────────────────────────
131
- createPlayer(options) {
132
- const existing = this.players.get(options.guildId);
133
- if (existing)
134
- return existing;
135
- const node = options.nodeName ? this.getNode(options.nodeName) : this.getBestNode();
136
- const player = new Player_1.Player(this, node, options);
137
- this.players.set(options.guildId, player);
138
- this.pool.add(options.guildId, options.voiceChannelId);
139
- this.emit("playerCreate", player);
140
- return player;
141
- }
142
- getPlayer(guildId) {
143
- return this.players.get(guildId) ?? null;
144
- }
145
- async destroyPlayer(guildId) {
146
- const player = this.players.get(guildId);
147
- if (!player)
148
- return;
149
- await player.destroy();
150
- this.players.delete(guildId);
151
- this.pool.remove(guildId);
152
- this.emit("playerDestroy", player);
153
- }
154
- // ─── Search ───────────────────────────────────────────────────────────
155
- async search(query, options) {
156
- return this.resolver.resolve(query, options?.source ?? this.options.defaultSource ?? "youtube", options?.requester, options?.node);
157
- }
158
- // ─── Voice Gateway ────────────────────────────────────────────────────
159
- handleVoiceStateUpdate(data) {
160
- const userId = data["user_id"];
161
- const guildId = data["guild_id"];
162
- if (userId !== this.options.clientId)
163
- return;
164
- if (!guildId)
165
- return;
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);
171
- if (player && this.options.moveOnDisconnect) {
172
- this.destroyPlayer(guildId).catch(() => { });
173
- }
174
- return;
175
- }
176
- // Update session — null-safe for partial updates
177
- const sessionId = data["session_id"];
178
- this.pool.updateSession(guildId, sessionId, channelId);
179
- if (player) {
180
- const oldChannel = player.voiceChannelId;
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);
187
- }
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
- }
197
- }
198
- }
199
- }
200
- handleVoiceServerUpdate(data) {
201
- const endpoint = data["endpoint"];
202
- const guildId = data["guild_id"];
203
- const token = data["token"];
204
- if (!endpoint || !guildId || !token)
205
- return;
206
- this.pool.updateServer(guildId, token, endpoint);
207
- const player = this.players.get(guildId);
208
- if (!player)
209
- return;
210
- player.voiceToken = token;
211
- player.voiceEndpoint = endpoint;
212
- if (this.pool.isReady(guildId)) {
213
- player.checkVoiceReady();
214
- this.pool.markConnected(guildId);
215
- }
216
- }
217
- // ─── Utility ─────────────────────────────────────────────────────────
218
- detectSource(url) {
219
- for (const [source, patterns] of Object.entries(Constants_1.URL_PATTERNS)) {
220
- if (patterns.some((p) => p.test(url)))
221
- return source;
222
- }
223
- return null;
224
- }
225
- getStats() {
226
- const nodes = [...this.nodes.values()];
227
- return {
228
- nodes: nodes.length,
229
- connectedNodes: nodes.filter((n) => n.connected).length,
230
- players: this.players.size,
231
- playingPlayers: [...this.players.values()].filter((p) => p.playing).length,
232
- cache: this.trackCache.stats,
233
- };
234
- }
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()) {
265
- node.destroy();
266
- }
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");
274
- }
275
- // ─── Typed EventEmitter ───────────────────────────────────────────────
276
- on(event, listener) {
277
- return super.on(event, listener);
278
- }
279
- once(event, listener) {
280
- return super.once(event, listener);
281
- }
282
- off(event, listener) {
283
- return super.off(event, listener);
284
- }
285
- emit(event, ...args) {
286
- return super.emit(event, ...args);
287
- }
288
- }
289
- exports.Yukimu = Yukimu;
290
- //# sourceMappingURL=Yukimu.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Yukimu.js","sourceRoot":"","sources":["../src/Yukimu.ts"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- /** Yukimu v2.0.0 — Base Connector */
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
- */
14
- export declare abstract class Connector {
15
- protected manager: Yukimu;
16
- set(manager: Yukimu): this;
17
- /** Start listening for voice gateway events (VOICE_STATE_UPDATE, VOICE_SERVER_UPDATE) */
18
- abstract listen(): void;
19
- /** Send a voice gateway payload to Discord */
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;
33
- }
34
- //# sourceMappingURL=Connector.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,39 +0,0 @@
1
- "use strict";
2
- /** Yukimu v2.0.0 — Base Connector */
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.Connector = void 0;
5
- /**
6
- * Abstract base class for Discord library connectors.
7
- *
8
- * Connectors bridge Yukimu to a specific Discord library (discord.js, Eris, Oceanic)
9
- * by forwarding voice gateway events and sending voice payloads.
10
- *
11
- * v2 additions:
12
- * - getGuildBoostTier(): Get the boost level for bitrate optimization
13
- * - getChannelBitrate(): Get the current voice channel bitrate
14
- */
15
- class Connector {
16
- manager;
17
- set(manager) {
18
- this.manager = manager;
19
- return this;
20
- }
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) {
27
- return 0;
28
- }
29
- /**
30
- * Get the current bitrate of a voice channel in kbps.
31
- * Override in subclass for accurate bitrate information.
32
- * @returns Bitrate in kbps, or null if unavailable
33
- */
34
- getChannelBitrate(_guildId, _channelId) {
35
- return null;
36
- }
37
- }
38
- exports.Connector = Connector;
39
- //# sourceMappingURL=Connector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Connector.js","sourceRoot":"","sources":["../../src/connector/Connector.ts"],"names":[],"mappings":";AAAA,qCAAqC;;;AAKrC;;;;;;;;;GASG;AACH,MAAsB,SAAS;IACnB,OAAO,CAAU;IAEpB,GAAG,CAAC,OAAe;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAQD;;;;OAIG;IACI,iBAAiB,CAAC,QAAgB;QACvC,OAAO,CAAC,CAAC;IACX,CAAC;IAED;;;;OAIG;IACI,iBAAiB,CAAC,QAAgB,EAAE,UAAkB;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AA/BD,8BA+BC"}
@@ -1,27 +0,0 @@
1
- /** Yukimu v2.0.0 — Discord.js Connector */
2
- import { Connector } from "./Connector";
3
- import type { BoostTier } from "../types";
4
- /**
5
- * Connector for discord.js v14+.
6
- *
7
- * Improvements from v1:
8
- * - Safe shard access (handles undefined guild/shard)
9
- * - Boost tier detection for adaptive bitrate
10
- * - Channel bitrate detection
11
- */
12
- export declare class DiscordJS extends Connector {
13
- private readonly client;
14
- constructor(client: any);
15
- listen(): void;
16
- sendPayload(guildId: string, payload: unknown): void;
17
- /**
18
- * Get the Discord server boost tier (0–3).
19
- * Uses discord.js Guild.premiumTier.
20
- */
21
- getGuildBoostTier(guildId: string): BoostTier;
22
- /**
23
- * Get the current bitrate of a voice channel in kbps.
24
- */
25
- getChannelBitrate(guildId: string, channelId: string): number | null;
26
- }
27
- //# sourceMappingURL=DiscordJS.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DiscordJS.d.ts","sourceRoot":"","sources":["../../src/connector/DiscordJS.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C;;;;;;;GAOG;AACH,qBAAa,SAAU,SAAQ,SAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAM;gBAEjB,MAAM,EAAE,GAAG;IAKhB,MAAM,IAAI,IAAI;IAWd,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAa3D;;;OAGG;IACa,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS;IAO7D;;OAEG;IACa,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAQrF"}