yukimu 1.2.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.
Files changed (135) hide show
  1. package/dist/BitrateOptimizer.d.ts +52 -0
  2. package/dist/BitrateOptimizer.d.ts.map +1 -0
  3. package/dist/BitrateOptimizer.js +115 -0
  4. package/dist/BitrateOptimizer.js.map +1 -0
  5. package/dist/ConnectionPool.d.ts +52 -2
  6. package/dist/ConnectionPool.d.ts.map +1 -1
  7. package/dist/ConnectionPool.js +123 -44
  8. package/dist/ConnectionPool.js.map +1 -1
  9. package/dist/Constants.d.ts +26 -47
  10. package/dist/Constants.d.ts.map +1 -1
  11. package/dist/Constants.js +134 -67
  12. package/dist/Constants.js.map +1 -1
  13. package/dist/Logger.d.ts +22 -0
  14. package/dist/Logger.d.ts.map +1 -0
  15. package/dist/Logger.js +74 -0
  16. package/dist/Logger.js.map +1 -0
  17. package/dist/Node.d.ts +17 -4
  18. package/dist/Node.d.ts.map +1 -1
  19. package/dist/Node.js +217 -79
  20. package/dist/Node.js.map +1 -1
  21. package/dist/Player.d.ts +77 -6
  22. package/dist/Player.d.ts.map +1 -1
  23. package/dist/Player.js +319 -75
  24. package/dist/Player.js.map +1 -1
  25. package/dist/Plugin.d.ts +16 -12
  26. package/dist/Plugin.d.ts.map +1 -1
  27. package/dist/Plugin.js +5 -9
  28. package/dist/Plugin.js.map +1 -1
  29. package/dist/Queue.d.ts +69 -3
  30. package/dist/Queue.d.ts.map +1 -1
  31. package/dist/Queue.js +123 -17
  32. package/dist/Queue.js.map +1 -1
  33. package/dist/Resolver.d.ts +33 -2
  34. package/dist/Resolver.d.ts.map +1 -1
  35. package/dist/Resolver.js +233 -27
  36. package/dist/Resolver.js.map +1 -1
  37. package/dist/Rest.d.ts +25 -3
  38. package/dist/Rest.d.ts.map +1 -1
  39. package/dist/Rest.js +165 -23
  40. package/dist/Rest.js.map +1 -1
  41. package/dist/TrackCache.d.ts +28 -8
  42. package/dist/TrackCache.d.ts.map +1 -1
  43. package/dist/TrackCache.js +111 -24
  44. package/dist/TrackCache.js.map +1 -1
  45. package/dist/WsQueue.d.ts +30 -9
  46. package/dist/WsQueue.d.ts.map +1 -1
  47. package/dist/WsQueue.js +66 -24
  48. package/dist/WsQueue.js.map +1 -1
  49. package/dist/Yukimu.d.ts +37 -13
  50. package/dist/Yukimu.d.ts.map +1 -1
  51. package/dist/Yukimu.js +146 -59
  52. package/dist/Yukimu.js.map +1 -1
  53. package/dist/connector/Connector.d.ts +26 -0
  54. package/dist/connector/Connector.d.ts.map +1 -1
  55. package/dist/connector/Connector.js +28 -0
  56. package/dist/connector/Connector.js.map +1 -1
  57. package/dist/connector/DiscordJS.d.ts +21 -19
  58. package/dist/connector/DiscordJS.d.ts.map +1 -1
  59. package/dist/connector/DiscordJS.js +44 -2
  60. package/dist/connector/DiscordJS.js.map +1 -1
  61. package/dist/connector/Eris.d.ts +13 -17
  62. package/dist/connector/Eris.d.ts.map +1 -1
  63. package/dist/connector/Eris.js +36 -4
  64. package/dist/connector/Eris.js.map +1 -1
  65. package/dist/connector/Oceanic.d.ts +13 -14
  66. package/dist/connector/Oceanic.d.ts.map +1 -1
  67. package/dist/connector/Oceanic.js +35 -2
  68. package/dist/connector/Oceanic.js.map +1 -1
  69. package/dist/errors/YukimuError.d.ts +40 -4
  70. package/dist/errors/YukimuError.d.ts.map +1 -1
  71. package/dist/errors/YukimuError.js +79 -9
  72. package/dist/errors/YukimuError.js.map +1 -1
  73. package/dist/index.d.ts +13 -4
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +30 -21
  76. package/dist/index.js.map +1 -1
  77. package/dist/plugins/AutoResume.d.ts +18 -14
  78. package/dist/plugins/AutoResume.d.ts.map +1 -1
  79. package/dist/plugins/AutoResume.js +101 -21
  80. package/dist/plugins/AutoResume.js.map +1 -1
  81. package/dist/plugins/AutoplayPlugin.d.ts +35 -0
  82. package/dist/plugins/AutoplayPlugin.d.ts.map +1 -0
  83. package/dist/plugins/AutoplayPlugin.js +111 -0
  84. package/dist/plugins/AutoplayPlugin.js.map +1 -0
  85. package/dist/plugins/InactivityPlugin.d.ts +30 -0
  86. package/dist/plugins/InactivityPlugin.d.ts.map +1 -0
  87. package/dist/plugins/InactivityPlugin.js +86 -0
  88. package/dist/plugins/InactivityPlugin.js.map +1 -0
  89. package/dist/plugins/PlayerMoved.d.ts +23 -1
  90. package/dist/plugins/PlayerMoved.d.ts.map +1 -1
  91. package/dist/plugins/PlayerMoved.js +57 -12
  92. package/dist/plugins/PlayerMoved.js.map +1 -1
  93. package/dist/types.d.ts +196 -78
  94. package/dist/types.d.ts.map +1 -1
  95. package/dist/types.js +1 -0
  96. package/dist/types.js.map +1 -1
  97. package/package.json +49 -5
  98. package/.cache/replit/env/latest +0 -88
  99. package/.cache/replit/env/latest.json +0 -1
  100. package/.cache/replit/modules/nodejs-20.res +0 -1
  101. package/.cache/replit/modules/python-3.11.res +0 -1
  102. package/.cache/replit/modules/replit.res +0 -1
  103. package/.cache/replit/modules.stamp +0 -0
  104. package/.cache/replit/nix/dotreplitenv.json +0 -1
  105. package/.cache/replit/toolchain.json +0 -1
  106. package/.local/state/workflow-logs/7zVU0iVo-fBL1ccMCmELy/configure_your_app.packager.installForAll.0 +0 -9
  107. package/.local/state/workflow-logs/7zVU0iVo-fBL1ccMCmELy/configure_your_app.shell.exec.1 +0 -1
  108. package/.local/state/workflow-logs/KRgHXizaECjWI5nWtS7Dj/configure_your_app.packager.installForAll.0 +0 -1
  109. package/.local/state/workflow-logs/KRgHXizaECjWI5nWtS7Dj/configure_your_app.shell.exec.1 +0 -1
  110. package/.local/state/workflow-logs/U0AinJQVHonnwGjj0RXLn/configure_your_app.packager.installForAll.0 +0 -2
  111. package/.local/state/workflow-logs/jVavLOnv1MqxUvxhMmqER/configure_your_app.packager.installForAll.0 +0 -1
  112. package/.local/state/workflow-logs/jVavLOnv1MqxUvxhMmqER/configure_your_app.shell.exec.1 +0 -1
  113. package/.replit +0 -7
  114. package/.upm/store.json +0 -1
  115. package/src/ConnectionPool.ts +0 -131
  116. package/src/Constants.ts +0 -101
  117. package/src/Node.ts +0 -309
  118. package/src/Player.ts +0 -337
  119. package/src/Plugin.ts +0 -23
  120. package/src/Queue.ts +0 -91
  121. package/src/Resolver.ts +0 -79
  122. package/src/Rest.ts +0 -121
  123. package/src/TrackCache.ts +0 -69
  124. package/src/WsQueue.ts +0 -78
  125. package/src/Yukimu.ts +0 -248
  126. package/src/connector/Connector.ts +0 -13
  127. package/src/connector/DiscordJS.ts +0 -33
  128. package/src/connector/Eris.ts +0 -35
  129. package/src/connector/Oceanic.ts +0 -32
  130. package/src/errors/YukimuError.ts +0 -33
  131. package/src/index.ts +0 -46
  132. package/src/plugins/AutoResume.ts +0 -61
  133. package/src/plugins/PlayerMoved.ts +0 -26
  134. package/src/types.ts +0 -145
  135. package/tsconfig.json +0 -20
package/dist/Player.js CHANGED
@@ -1,29 +1,47 @@
1
1
  "use strict";
2
+ /** Yukimu v2.0.0 — Player with State Safety & Bitrate Optimization */
2
3
  Object.defineProperty(exports, "__esModule", { value: true });
3
4
  exports.Player = void 0;
4
5
  const Queue_1 = require("./Queue");
6
+ const BitrateOptimizer_1 = require("./BitrateOptimizer");
5
7
  const Constants_1 = require("./Constants");
6
8
  const YukimuError_1 = require("./errors/YukimuError");
9
+ /**
10
+ * Represents an audio player for a specific Discord guild.
11
+ *
12
+ * Critical fixes from v1:
13
+ * 1. play() — only sets playing=true AFTER the REST call succeeds
14
+ * 2. pause() — paused tracks are still "playing" from Lavalink's perspective
15
+ * 3. moveToNode() — properly re-sends voice state to the new node
16
+ * 4. sendVoicePayload() — deferred until connector is ready (safe for startup)
17
+ * 5. Proper cleanup in destroy() — all state, timers, and references
18
+ * 6. Input validation on filter values
19
+ * 7. Boost-tier-aware audio optimization
20
+ */
7
21
  class Player {
22
+ manager;
23
+ node;
24
+ queue;
25
+ guildId;
26
+ voiceChannelId;
27
+ textChannelId;
28
+ state = Constants_1.PlayerState.DISCONNECTED;
29
+ playing = false;
30
+ paused = false;
31
+ position = 0;
32
+ ping = -1;
33
+ lastUpdated = Date.now();
34
+ volume;
35
+ loop = "none";
36
+ autoplay = false;
37
+ sessionId = null;
38
+ voiceToken = null;
39
+ voiceEndpoint = null;
40
+ selfDeaf;
41
+ selfMute;
42
+ filters = {};
43
+ data = new Map();
8
44
  constructor(manager, node, options) {
9
- // State
10
- this.state = Constants_1.PlayerState.DISCONNECTED;
11
- this.playing = false;
12
- this.paused = false;
13
- this.position = 0;
14
- this.ping = -1;
15
- this.lastUpdated = Date.now();
16
- this.loop = "none";
17
- // Voice
18
- this.sessionId = null;
19
- this.voiceToken = null;
20
- this.voiceEndpoint = null;
21
- // Filters
22
- this.filters = {};
23
- // Data store (like Kazagumo's player.data)
24
- this.data = new Map();
25
- // Autoplay
26
- this.autoplay = false;
27
45
  this.manager = manager;
28
46
  this.node = node;
29
47
  this.queue = new Queue_1.Queue();
@@ -33,26 +51,46 @@ class Player {
33
51
  this.volume = options.volume ?? 100;
34
52
  this.selfDeaf = options.selfDeaf ?? true;
35
53
  this.selfMute = options.selfMute ?? false;
54
+ // Send the voice state update to Discord (join the channel)
55
+ // This is safe — connector.sendPayload handles missing guilds gracefully
36
56
  this.sendVoicePayload(options.voiceChannelId, this.selfDeaf, this.selfMute);
37
57
  this.state = Constants_1.PlayerState.CONNECTING;
38
58
  }
39
- // ─── Getters ──────────────────────────────────────────────────────
59
+ // ─── Getters ────────────────────────────────────────────────────────────
40
60
  get connected() {
41
61
  return this.state === Constants_1.PlayerState.CONNECTED;
42
62
  }
43
- /** Real-time position estimate */
63
+ /**
64
+ * Estimated real-time position accounting for time since last update.
65
+ * Returns the actual position (capped at track length).
66
+ */
44
67
  get realPosition() {
45
68
  if (!this.playing || this.paused)
46
69
  return this.position;
47
- return Math.min(this.position + (Date.now() - this.lastUpdated), this.queue.current?.info.length ?? this.position);
70
+ const trackLength = this.queue.current?.info?.length ?? Infinity;
71
+ return Math.min(this.position + (Date.now() - this.lastUpdated), trackLength);
72
+ }
73
+ /**
74
+ * Get the current boost tier of the guild this player is in.
75
+ */
76
+ get boostTier() {
77
+ return this.manager.connector.getGuildBoostTier(this.guildId);
48
78
  }
49
- // ─── Voice ───────────────────────────────────────────────────────
79
+ // ─── Voice ──────────────────────────────────────────────────────────────
50
80
  sendVoicePayload(channelId, selfDeaf, selfMute) {
51
81
  this.manager.connector.sendPayload(this.guildId, {
52
82
  op: 4,
53
- d: { guild_id: this.guildId, channel_id: channelId, self_deaf: selfDeaf, self_mute: selfMute },
83
+ d: {
84
+ guild_id: this.guildId,
85
+ channel_id: channelId,
86
+ self_deaf: selfDeaf,
87
+ self_mute: selfMute,
88
+ },
54
89
  });
55
90
  }
91
+ /**
92
+ * Check if we have all voice connection data and send it to Lavalink.
93
+ */
56
94
  checkVoiceReady() {
57
95
  if (!this.sessionId || !this.voiceToken || !this.voiceEndpoint)
58
96
  return;
@@ -60,25 +98,41 @@ class Player {
60
98
  token: this.voiceToken,
61
99
  endpoint: this.voiceEndpoint,
62
100
  sessionId: this.sessionId,
101
+ channelId: this.voiceChannelId,
63
102
  };
64
103
  if (this.node.version === 4) {
65
- this.node.rest.updatePlayer(this.guildId, { voice: voiceState }).catch(console.error);
104
+ this.node.rest.updatePlayer(this.guildId, { voice: voiceState }).catch((err) => {
105
+ this.manager.logger.error(`Failed to send voice update for guild ${this.guildId}: ${err}`);
106
+ });
66
107
  }
67
108
  else {
68
109
  this.node.send({
69
110
  op: "voiceUpdate",
70
111
  guildId: this.guildId,
71
112
  sessionId: this.sessionId,
72
- event: { token: this.voiceToken, guild_id: this.guildId, endpoint: this.voiceEndpoint },
113
+ event: {
114
+ token: this.voiceToken,
115
+ guild_id: this.guildId,
116
+ endpoint: this.voiceEndpoint,
117
+ },
118
+ }).catch((err) => {
119
+ this.manager.logger.error(`Failed to send voice update for guild ${this.guildId}: ${err}`);
73
120
  });
74
121
  }
75
122
  this.state = Constants_1.PlayerState.CONNECTED;
76
123
  }
77
- // ─── Playback ─────────────────────────────────────────────────────
124
+ // ─── Playback ───────────────────────────────────────────────────────────
125
+ /**
126
+ * Play a track. If no track is provided, plays the current queue track.
127
+ *
128
+ * FIX: Only sets `playing = true` after the REST call succeeds.
129
+ * In v1, state was set before the REST call, causing ghost playing state on failure.
130
+ */
78
131
  async play(track, options) {
79
132
  const toPlay = track ?? this.queue.current;
80
- if (!toPlay)
81
- throw new YukimuError_1.PlayerError("No track to play");
133
+ if (!toPlay) {
134
+ throw new YukimuError_1.PlayerError("No track to play", YukimuError_1.ErrorCode.PLAYER_NO_TRACK);
135
+ }
82
136
  this.queue.current = toPlay;
83
137
  if (this.node.version === 4) {
84
138
  await this.node.rest.updatePlayer(this.guildId, {
@@ -89,37 +143,45 @@ class Player {
89
143
  }, options?.noReplace ?? false);
90
144
  }
91
145
  else {
92
- this.node.send({
146
+ await this.node.send({
93
147
  op: "play",
94
148
  guildId: this.guildId,
95
149
  track: toPlay.encoded,
96
150
  volume: String(this.volume),
97
151
  ...(options?.startTime !== undefined && { startTime: String(options.startTime) }),
98
152
  ...(options?.endTime !== undefined && { endTime: String(options.endTime) }),
99
- ...(options?.noReplace !== undefined && { noReplace: options.noReplace }),
100
153
  });
101
154
  }
155
+ // Only update state AFTER the call succeeds
102
156
  this.playing = true;
103
157
  this.paused = false;
104
158
  this.lastUpdated = Date.now();
105
159
  }
160
+ /**
161
+ * Pause or unpause playback.
162
+ *
163
+ * FIX: `playing` now reflects "has an active track" independently of pause state.
164
+ * A paused player is still "playing" (it has an active track, just paused).
165
+ */
106
166
  async pause(state = true) {
107
167
  if (this.node.version === 4) {
108
168
  await this.node.rest.updatePlayer(this.guildId, { paused: state });
109
169
  }
110
170
  else {
111
- this.node.send({ op: "pause", guildId: this.guildId, pause: state });
171
+ await this.node.send({ op: "pause", guildId: this.guildId, pause: state });
112
172
  }
113
173
  this.paused = state;
114
- this.playing = !state;
174
+ // `playing` stays true — the track is still loaded, just paused
175
+ }
176
+ async resume() {
177
+ return this.pause(false);
115
178
  }
116
- async resume() { return this.pause(false); }
117
179
  async stop() {
118
180
  if (this.node.version === 4) {
119
181
  await this.node.rest.updatePlayer(this.guildId, { track: { encoded: null } });
120
182
  }
121
183
  else {
122
- this.node.send({ op: "stop", guildId: this.guildId });
184
+ await this.node.send({ op: "stop", guildId: this.guildId });
123
185
  }
124
186
  this.playing = false;
125
187
  this.paused = false;
@@ -137,46 +199,76 @@ class Player {
137
199
  }
138
200
  return next;
139
201
  }
202
+ /**
203
+ * Play the previous track (from history).
204
+ * @returns The previous track, or null if no history exists
205
+ */
206
+ async previous() {
207
+ const prev = this.queue.previous[0];
208
+ if (!prev)
209
+ return null;
210
+ // Move current back to front of queue
211
+ if (this.queue.current) {
212
+ this.queue.add(this.queue.current, 0);
213
+ }
214
+ // Remove from previous history
215
+ this.queue.previous.shift();
216
+ await this.play(prev);
217
+ return prev;
218
+ }
219
+ /**
220
+ * Restart the currently playing track from the beginning.
221
+ */
222
+ async replay() {
223
+ if (!this.queue.current) {
224
+ throw new YukimuError_1.PlayerError("No track to replay", YukimuError_1.ErrorCode.PLAYER_NO_TRACK);
225
+ }
226
+ await this.play(this.queue.current, { startTime: 0 });
227
+ }
140
228
  async seek(position) {
141
- if (!this.queue.current?.info.isSeekable)
142
- throw new YukimuError_1.PlayerError("Current track is not seekable");
143
- if (position < 0 || position > (this.queue.current.info.length ?? Infinity)) {
144
- throw new YukimuError_1.PlayerError(`Seek position out of range: ${position}`);
229
+ if (!this.queue.current?.info?.isSeekable) {
230
+ throw new YukimuError_1.PlayerError("Current track is not seekable", YukimuError_1.ErrorCode.PLAYER_NOT_SEEKABLE);
145
231
  }
232
+ if (position < 0)
233
+ position = 0;
146
234
  if (this.node.version === 4) {
147
235
  await this.node.rest.updatePlayer(this.guildId, { position });
148
236
  }
149
237
  else {
150
- this.node.send({ op: "seek", guildId: this.guildId, position });
238
+ await this.node.send({ op: "seek", guildId: this.guildId, position });
151
239
  }
152
240
  this.position = position;
153
241
  this.lastUpdated = Date.now();
154
242
  }
243
+ // ─── Volume ─────────────────────────────────────────────────────────────
155
244
  async setVolume(volume) {
156
- if (volume < 0 || volume > 1000)
157
- throw new YukimuError_1.PlayerError("Volume must be between 0 and 1000");
245
+ if (typeof volume !== "number" || isNaN(volume)) {
246
+ throw new YukimuError_1.PlayerError("Volume must be a number", YukimuError_1.ErrorCode.PLAYER_INVALID_VOLUME);
247
+ }
248
+ volume = Math.floor(Math.max(0, Math.min(1000, volume)));
158
249
  if (this.node.version === 4) {
159
250
  await this.node.rest.updatePlayer(this.guildId, { volume });
160
251
  }
161
252
  else {
162
- this.node.send({ op: "volume", guildId: this.guildId, volume });
253
+ await this.node.send({ op: "volume", guildId: this.guildId, volume });
163
254
  }
164
255
  this.volume = volume;
165
256
  }
166
- // ─── Filters ──────────────────────────────────────────────────────
257
+ // ─── Filters ────────────────────────────────────────────────────────────
167
258
  async setFilters(filters) {
168
259
  this.filters = { ...this.filters, ...filters };
169
260
  if (this.node.version === 4) {
170
261
  await this.node.rest.updatePlayer(this.guildId, { filters: this.filters });
171
262
  }
172
263
  else {
264
+ // v3: equalizer is sent separately
173
265
  if (filters.equalizer) {
174
- this.node.send({ op: "equalizer", guildId: this.guildId, bands: filters.equalizer });
266
+ await this.node.send({ op: "equalizer", guildId: this.guildId, bands: filters.equalizer });
175
267
  }
176
268
  const rest = { ...filters };
177
269
  delete rest.equalizer;
178
270
  if (Object.keys(rest).length > 0) {
179
- this.node.send({ op: "filters", guildId: this.guildId, ...rest });
271
+ await this.node.send({ op: "filters", guildId: this.guildId, ...rest });
180
272
  }
181
273
  }
182
274
  }
@@ -186,52 +278,117 @@ class Player {
186
278
  await this.node.rest.updatePlayer(this.guildId, { filters: {} });
187
279
  }
188
280
  else {
189
- this.node.send({ op: "filters", guildId: this.guildId });
281
+ await this.node.send({ op: "filters", guildId: this.guildId });
190
282
  }
191
283
  }
192
- // ─── Preset Filters ───────────────────────────────────────────────
284
+ // ─── Filter Presets ─────────────────────────────────────────────────────
193
285
  async setBassBoost(level) {
194
- const presets = {
195
- off: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
196
- low: [0.2, 0.15, 0.1, 0.05, 0.0, -0.05, 0, 0, 0, 0, 0, 0, 0, 0, 0],
197
- medium: [0.4, 0.3, 0.2, 0.1, 0.05, -0.05, 0, 0, 0, 0, 0, 0, 0, 0, 0],
198
- high: [0.6, 0.5, 0.4, 0.25, 0.1, -0.1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
199
- extreme: [1.0, 0.8, 0.6, 0.4, 0.2, -0.2, 0, 0, 0, 0, 0, 0, 0, 0, 0],
200
- };
201
- await this.setFilters({ equalizer: presets[level].map((gain, band) => ({ band, gain })) });
286
+ const tier = this.boostTier;
287
+ if (level === "off") {
288
+ await this.setFilters({ equalizer: BitrateOptimizer_1.BitrateOptimizer.getFlatEQ() });
289
+ return;
290
+ }
291
+ // Scale bass based on boost tier to prevent clipping
292
+ const scales = { low: 0.3, medium: 0.5, high: 0.75, extreme: 1.0 };
293
+ const scale = scales[level] ?? 0.5;
294
+ const tierScale = tier >= 2 ? 1.0 : tier === 1 ? 0.8 : 0.6;
295
+ const effectiveScale = scale * tierScale;
296
+ const eq = [
297
+ { band: 0, gain: 0.6 * effectiveScale },
298
+ { band: 1, gain: 0.5 * effectiveScale },
299
+ { band: 2, gain: 0.4 * effectiveScale },
300
+ { band: 3, gain: 0.25 * effectiveScale },
301
+ { band: 4, gain: 0.1 * effectiveScale },
302
+ { band: 5, gain: -0.05 * effectiveScale },
303
+ ...Array.from({ length: 9 }, (_, i) => ({ band: i + 6, gain: 0 })),
304
+ ];
305
+ await this.setFilters({ equalizer: eq });
202
306
  }
203
307
  async setNightcore(enabled) {
204
- await this.setFilters({ timescale: enabled ? { speed: 1.2, pitch: 1.2, rate: 1.0 } : undefined });
308
+ await this.setFilters({
309
+ timescale: enabled ? { speed: 1.2, pitch: 1.2, rate: 1.0 } : {},
310
+ });
205
311
  }
206
312
  async setVaporwave(enabled) {
207
- await this.setFilters({ timescale: enabled ? { speed: 0.8, pitch: 0.8, rate: 1.0 } : undefined });
313
+ await this.setFilters({
314
+ timescale: enabled ? { speed: 0.8, pitch: 0.8, rate: 1.0 } : {},
315
+ });
208
316
  }
209
317
  async set8D(enabled) {
210
- await this.setFilters({ rotation: enabled ? { rotationHz: 0.2 } : undefined });
318
+ await this.setFilters({
319
+ rotation: enabled ? { rotationHz: 0.2 } : {},
320
+ });
211
321
  }
212
322
  async setKaraoke(enabled) {
213
323
  await this.setFilters({
214
- karaoke: enabled ? { level: 1.0, monoLevel: 1.0, filterBand: 220.0, filterWidth: 100.0 } : undefined,
324
+ karaoke: enabled
325
+ ? { level: 1.0, monoLevel: 1.0, filterBand: 220.0, filterWidth: 100.0 }
326
+ : {},
215
327
  });
216
328
  }
217
329
  async setTremolo(enabled, frequency = 2.0, depth = 0.5) {
218
- await this.setFilters({ tremolo: enabled ? { frequency, depth } : undefined });
330
+ if (enabled) {
331
+ if (frequency <= 0 || frequency > 14) {
332
+ throw new YukimuError_1.PlayerError("Tremolo frequency must be between 0 and 14", YukimuError_1.ErrorCode.PLAYER_INVALID_FILTER);
333
+ }
334
+ if (depth <= 0 || depth > 1) {
335
+ throw new YukimuError_1.PlayerError("Tremolo depth must be between 0 and 1", YukimuError_1.ErrorCode.PLAYER_INVALID_FILTER);
336
+ }
337
+ }
338
+ await this.setFilters({ tremolo: enabled ? { frequency, depth } : {} });
219
339
  }
220
340
  async setVibrato(enabled, frequency = 2.0, depth = 0.5) {
221
- await this.setFilters({ vibrato: enabled ? { frequency, depth } : undefined });
341
+ if (enabled) {
342
+ if (frequency <= 0 || frequency > 14) {
343
+ throw new YukimuError_1.PlayerError("Vibrato frequency must be between 0 and 14", YukimuError_1.ErrorCode.PLAYER_INVALID_FILTER);
344
+ }
345
+ if (depth <= 0 || depth > 1) {
346
+ throw new YukimuError_1.PlayerError("Vibrato depth must be between 0 and 1", YukimuError_1.ErrorCode.PLAYER_INVALID_FILTER);
347
+ }
348
+ }
349
+ await this.setFilters({ vibrato: enabled ? { frequency, depth } : {} });
222
350
  }
223
351
  async setLowPass(enabled, smoothing = 20.0) {
224
- await this.setFilters({ lowPass: enabled ? { smoothing } : undefined });
352
+ if (enabled && smoothing <= 0) {
353
+ throw new YukimuError_1.PlayerError("LowPass smoothing must be greater than 0", YukimuError_1.ErrorCode.PLAYER_INVALID_FILTER);
354
+ }
355
+ await this.setFilters({ lowPass: enabled ? { smoothing } : {} });
356
+ }
357
+ /** Set playback speed (1.0 = normal, 2.0 = double speed) */
358
+ async setSpeed(speed) {
359
+ if (speed <= 0 || speed > 10) {
360
+ throw new YukimuError_1.PlayerError("Speed must be between 0 and 10", YukimuError_1.ErrorCode.PLAYER_INVALID_FILTER);
361
+ }
362
+ const existing = (this.filters.timescale ?? {});
363
+ await this.setFilters({
364
+ timescale: { ...existing, speed },
365
+ });
366
+ }
367
+ /** Set playback pitch (1.0 = normal) */
368
+ async setPitch(pitch) {
369
+ if (pitch <= 0 || pitch > 10) {
370
+ throw new YukimuError_1.PlayerError("Pitch must be between 0 and 10", YukimuError_1.ErrorCode.PLAYER_INVALID_FILTER);
371
+ }
372
+ const existing = (this.filters.timescale ?? {});
373
+ await this.setFilters({
374
+ timescale: { ...existing, pitch },
375
+ });
225
376
  }
226
- // ─── Queue Helpers ────────────────────────────────────────────────
377
+ // ─── Queue Shortcuts ───────────────────────────────────────────────────
378
+ /**
379
+ * Add track(s) to the queue. If nothing is currently playing, plays immediately.
380
+ */
227
381
  async add(tracks, requester) {
228
- const arr = Array.isArray(tracks) ? tracks : [tracks];
229
- // Attach requester to each track
230
- if (requester)
231
- arr.forEach(t => { t.requester = requester; });
382
+ const arr = Array.isArray(tracks) ? [...tracks] : [tracks];
383
+ if (requester) {
384
+ for (const t of arr) {
385
+ t["requester"] = requester;
386
+ }
387
+ }
232
388
  if (!this.queue.current && arr.length > 0) {
233
389
  const first = arr.shift();
234
- this.queue.add(arr);
390
+ if (arr.length > 0)
391
+ this.queue.add(arr);
235
392
  await this.play(first);
236
393
  }
237
394
  else {
@@ -244,20 +401,27 @@ class Player {
244
401
  setAutoplay(enabled) {
245
402
  this.autoplay = enabled;
246
403
  }
247
- // ─── Node Moving ──────────────────────────────────────────────────
248
- /** Move player to a different Lavalink node */
404
+ // ─── Node Movement ─────────────────────────────────────────────────────
405
+ /**
406
+ * Move this player to a different Lavalink node.
407
+ *
408
+ * FIX: Now properly re-sends the voice state to the new node.
409
+ * In v1, the new node didn't know about the voice connection.
410
+ */
249
411
  async moveToNode(node) {
250
412
  if (this.node === node)
251
413
  return;
252
414
  const oldNode = this.node;
253
415
  this.node = node;
254
- // Destroy on old node
416
+ // Clean up on old node
255
417
  await oldNode.rest.destroyPlayer(this.guildId).catch(() => { });
256
- // Recreate on new node with current state
418
+ // Re-send voice state to new node
419
+ this.checkVoiceReady();
420
+ // Resume playback on new node
257
421
  if (this.queue.current) {
258
422
  await this.play(this.queue.current, { startTime: this.realPosition });
259
423
  }
260
- // Reapply filters and volume
424
+ // Re-apply filters and volume
261
425
  if (Object.keys(this.filters).length > 0) {
262
426
  await this.setFilters(this.filters).catch(() => { });
263
427
  }
@@ -265,20 +429,100 @@ class Player {
265
429
  await this.setVolume(this.volume).catch(() => { });
266
430
  }
267
431
  }
268
- // ─── Voice Channel Moves ──────────────────────────────────────────
432
+ /** Move the bot to a different voice channel */
269
433
  async move(channelId) {
270
434
  this.voiceChannelId = channelId;
271
435
  this.sendVoicePayload(channelId, this.selfDeaf, this.selfMute);
272
436
  }
273
- // ─── Destroy ──────────────────────────────────────────────────────
437
+ // ─── Audio Quality ──────────────────────────────────────────────────────
438
+ /**
439
+ * Apply optimal audio settings based on the guild's boost tier.
440
+ * Automatically adjusts EQ and filters for best clarity at the available bitrate.
441
+ */
442
+ async applyOptimalQuality() {
443
+ const tier = this.boostTier;
444
+ const filters = BitrateOptimizer_1.BitrateOptimizer.getOptimalFilters(tier);
445
+ await this.setFilters(filters);
446
+ this.manager.logger.debug(`Applied optimal quality for guild ${this.guildId} (boost tier ${tier}, max ${BitrateOptimizer_1.BitrateOptimizer.getMaxBitrate(tier)}kbps)`);
447
+ }
448
+ /** Maximum audio quality — crystal clear, enhanced bass & treble */
449
+ async setHighQuality() {
450
+ const tier = this.boostTier;
451
+ const scale = tier >= 2 ? 1.0 : tier === 1 ? 0.8 : 0.6;
452
+ await this.setFilters({
453
+ equalizer: [
454
+ { band: 0, gain: 0.25 * scale },
455
+ { band: 1, gain: 0.20 * scale },
456
+ { band: 2, gain: 0.15 * scale },
457
+ { band: 3, gain: 0.05 * scale },
458
+ { band: 4, gain: 0.0 },
459
+ { band: 5, gain: 0.0 },
460
+ { band: 6, gain: 0.0 },
461
+ { band: 7, gain: 0.05 * scale },
462
+ { band: 8, gain: 0.10 * scale },
463
+ { band: 9, gain: 0.15 * scale },
464
+ { band: 10, gain: 0.15 * scale },
465
+ { band: 11, gain: 0.10 * scale },
466
+ { band: 12, gain: 0.05 * scale },
467
+ { band: 13, gain: 0.0 },
468
+ { band: 14, gain: 0.0 },
469
+ ],
470
+ lowPass: tier >= 2 ? { smoothing: 5.0 } : {},
471
+ });
472
+ }
473
+ /** Studio quality — flat, neutral, most accurate */
474
+ async setStudioQuality() {
475
+ await this.clearFilters();
476
+ await this.setFilters({
477
+ equalizer: BitrateOptimizer_1.BitrateOptimizer.getFlatEQ(),
478
+ });
479
+ }
480
+ /** Concert hall effect — scaled for boost tier */
481
+ async setConcertHall() {
482
+ const tier = this.boostTier;
483
+ const scale = tier >= 2 ? 1.0 : 0.6;
484
+ await this.setFilters({
485
+ equalizer: [
486
+ { band: 0, gain: 0.1 * scale },
487
+ { band: 1, gain: 0.1 * scale },
488
+ { band: 2, gain: 0.05 * scale },
489
+ { band: 3, gain: 0.0 },
490
+ { band: 4, gain: -0.05 * scale },
491
+ { band: 5, gain: 0.0 },
492
+ { band: 6, gain: 0.05 * scale },
493
+ { band: 7, gain: 0.1 * scale },
494
+ { band: 8, gain: 0.1 * scale },
495
+ { band: 9, gain: 0.05 * scale },
496
+ { band: 10, gain: 0.0 },
497
+ { band: 11, gain: 0.0 },
498
+ { band: 12, gain: 0.0 },
499
+ { band: 13, gain: 0.0 },
500
+ { band: 14, gain: 0.0 },
501
+ ],
502
+ rotation: { rotationHz: 0.05 },
503
+ });
504
+ }
505
+ // ─── Lifecycle ──────────────────────────────────────────────────────────
506
+ /**
507
+ * Destroy this player and clean up all resources.
508
+ */
274
509
  async destroy() {
275
510
  this.state = Constants_1.PlayerState.DISCONNECTING;
511
+ // Leave voice channel
276
512
  this.sendVoicePayload(null, false, false);
513
+ // Destroy on Lavalink
277
514
  await this.node.rest.destroyPlayer(this.guildId).catch(() => { });
515
+ // Clean up all state
278
516
  this.playing = false;
279
517
  this.paused = false;
518
+ this.position = 0;
280
519
  this.queue.clear();
281
520
  this.data.clear();
521
+ this.filters = {};
522
+ this.sessionId = null;
523
+ this.voiceToken = null;
524
+ this.voiceEndpoint = null;
525
+ this.voiceChannelId = null;
282
526
  this.state = Constants_1.PlayerState.DISCONNECTED;
283
527
  }
284
528
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Player.js","sourceRoot":"","sources":["../src/Player.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Player.js","sourceRoot":"","sources":["../src/Player.ts"],"names":[],"mappings":"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"}