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.
Files changed (114) hide show
  1. package/.cache/replit/env/latest +88 -0
  2. package/.cache/replit/env/latest.json +1 -0
  3. package/.cache/replit/modules/python-3.11.res +1 -0
  4. package/.cache/replit/nix/dotreplitenv.json +1 -1
  5. package/.cache/replit/toolchain.json +1 -1
  6. package/.local/state/workflow-logs/KRgHXizaECjWI5nWtS7Dj/configure_your_app.packager.installForAll.0 +1 -0
  7. package/.local/state/workflow-logs/KRgHXizaECjWI5nWtS7Dj/configure_your_app.shell.exec.1 +1 -0
  8. package/.local/state/workflow-logs/jVavLOnv1MqxUvxhMmqER/configure_your_app.packager.installForAll.0 +1 -0
  9. package/.local/state/workflow-logs/jVavLOnv1MqxUvxhMmqER/configure_your_app.shell.exec.1 +1 -0
  10. package/.replit +4 -1
  11. package/.upm/store.json +1 -1
  12. package/dist/ConnectionPool.d.ts +34 -0
  13. package/dist/ConnectionPool.d.ts.map +1 -0
  14. package/dist/ConnectionPool.js +124 -0
  15. package/dist/ConnectionPool.js.map +1 -0
  16. package/dist/Constants.d.ts +66 -0
  17. package/dist/Constants.d.ts.map +1 -0
  18. package/dist/Constants.js +101 -0
  19. package/dist/Constants.js.map +1 -0
  20. package/dist/Node.d.ts +26 -10
  21. package/dist/Node.d.ts.map +1 -1
  22. package/dist/Node.js +203 -81
  23. package/dist/Node.js.map +1 -1
  24. package/dist/Player.d.ts +30 -29
  25. package/dist/Player.d.ts.map +1 -1
  26. package/dist/Player.js +178 -97
  27. package/dist/Player.js.map +1 -1
  28. package/dist/Plugin.d.ts +21 -0
  29. package/dist/Plugin.d.ts.map +1 -0
  30. package/dist/Plugin.js +19 -0
  31. package/dist/Plugin.js.map +1 -0
  32. package/dist/Queue.d.ts +10 -16
  33. package/dist/Queue.d.ts.map +1 -1
  34. package/dist/Queue.js +39 -32
  35. package/dist/Queue.js.map +1 -1
  36. package/dist/Resolver.d.ts +4 -21
  37. package/dist/Resolver.d.ts.map +1 -1
  38. package/dist/Resolver.js +28 -66
  39. package/dist/Resolver.js.map +1 -1
  40. package/dist/Rest.d.ts +24 -0
  41. package/dist/Rest.d.ts.map +1 -0
  42. package/dist/Rest.js +104 -0
  43. package/dist/Rest.js.map +1 -0
  44. package/dist/TrackCache.d.ts +21 -0
  45. package/dist/TrackCache.d.ts.map +1 -0
  46. package/dist/TrackCache.js +57 -0
  47. package/dist/TrackCache.js.map +1 -0
  48. package/dist/WsQueue.d.ts +20 -0
  49. package/dist/WsQueue.d.ts.map +1 -0
  50. package/dist/WsQueue.js +74 -0
  51. package/dist/WsQueue.js.map +1 -0
  52. package/dist/Yukimu.d.ts +33 -32
  53. package/dist/Yukimu.d.ts.map +1 -1
  54. package/dist/Yukimu.js +133 -65
  55. package/dist/Yukimu.js.map +1 -1
  56. package/dist/connector/Connector.d.ts +8 -0
  57. package/dist/connector/Connector.d.ts.map +1 -0
  58. package/dist/connector/Connector.js +11 -0
  59. package/dist/connector/Connector.js.map +1 -0
  60. package/dist/connector/DiscordJS.d.ts +25 -0
  61. package/dist/connector/DiscordJS.d.ts.map +1 -0
  62. package/dist/connector/DiscordJS.js +27 -0
  63. package/dist/connector/DiscordJS.js.map +1 -0
  64. package/dist/connector/Eris.d.ts +23 -0
  65. package/dist/connector/Eris.d.ts.map +1 -0
  66. package/dist/connector/Eris.js +30 -0
  67. package/dist/connector/Eris.js.map +1 -0
  68. package/dist/connector/Oceanic.d.ts +20 -0
  69. package/dist/connector/Oceanic.d.ts.map +1 -0
  70. package/dist/connector/Oceanic.js +27 -0
  71. package/dist/connector/Oceanic.js.map +1 -0
  72. package/dist/errors/YukimuError.d.ts +15 -0
  73. package/dist/errors/YukimuError.d.ts.map +1 -0
  74. package/dist/errors/YukimuError.js +35 -0
  75. package/dist/errors/YukimuError.js.map +1 -0
  76. package/dist/index.d.ts +14 -1
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +34 -2
  79. package/dist/index.js.map +1 -1
  80. package/dist/plugins/AutoResume.d.ts +21 -0
  81. package/dist/plugins/AutoResume.d.ts.map +1 -0
  82. package/dist/plugins/AutoResume.js +52 -0
  83. package/dist/plugins/AutoResume.js.map +1 -0
  84. package/dist/plugins/PlayerMoved.d.ts +7 -0
  85. package/dist/plugins/PlayerMoved.d.ts.map +1 -0
  86. package/dist/plugins/PlayerMoved.js +30 -0
  87. package/dist/plugins/PlayerMoved.js.map +1 -0
  88. package/dist/types.d.ts +92 -38
  89. package/dist/types.d.ts.map +1 -1
  90. package/dist/types.js +0 -12
  91. package/dist/types.js.map +1 -1
  92. package/package.json +1 -1
  93. package/src/ConnectionPool.ts +131 -0
  94. package/src/Constants.ts +101 -0
  95. package/src/Node.ts +157 -174
  96. package/src/Player.ts +200 -108
  97. package/src/Plugin.ts +23 -0
  98. package/src/Queue.ts +43 -34
  99. package/src/Resolver.ts +29 -77
  100. package/src/Rest.ts +121 -0
  101. package/src/TrackCache.ts +69 -0
  102. package/src/WsQueue.ts +78 -0
  103. package/src/Yukimu.ts +156 -85
  104. package/src/connector/Connector.ts +13 -0
  105. package/src/connector/DiscordJS.ts +33 -0
  106. package/src/connector/Eris.ts +35 -0
  107. package/src/connector/Oceanic.ts +32 -0
  108. package/src/errors/YukimuError.ts +33 -0
  109. package/src/index.ts +41 -1
  110. package/src/plugins/AutoResume.ts +61 -0
  111. package/src/plugins/PlayerMoved.ts +26 -0
  112. package/src/types.ts +50 -83
  113. package/tsconfig.json +4 -2
  114. package/README.md +0 -152
package/dist/Player.js CHANGED
@@ -2,22 +2,28 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Player = void 0;
4
4
  const Queue_1 = require("./Queue");
5
+ const Constants_1 = require("./Constants");
6
+ const YukimuError_1 = require("./errors/YukimuError");
5
7
  class Player {
6
8
  constructor(manager, node, options) {
7
9
  // State
10
+ this.state = Constants_1.PlayerState.DISCONNECTED;
8
11
  this.playing = false;
9
12
  this.paused = false;
10
- this.connected = false;
11
13
  this.position = 0;
12
14
  this.ping = -1;
13
- // Voice connection
15
+ this.lastUpdated = Date.now();
16
+ this.loop = "none";
17
+ // Voice
14
18
  this.sessionId = null;
15
19
  this.voiceToken = null;
16
20
  this.voiceEndpoint = null;
17
21
  // Filters
18
22
  this.filters = {};
19
- // Loop mode
20
- this.loop = "none";
23
+ // Data store (like Kazagumo's player.data)
24
+ this.data = new Map();
25
+ // Autoplay
26
+ this.autoplay = false;
21
27
  this.manager = manager;
22
28
  this.node = node;
23
29
  this.queue = new Queue_1.Queue();
@@ -25,22 +31,28 @@ class Player {
25
31
  this.voiceChannelId = options.voiceChannelId;
26
32
  this.textChannelId = options.textChannelId;
27
33
  this.volume = options.volume ?? 100;
28
- // Send voice channel join payload to Discord
29
- this.sendVoicePayload(options.voiceChannelId, options.selfDeaf ?? true, options.selfMute ?? false);
34
+ this.selfDeaf = options.selfDeaf ?? true;
35
+ this.selfMute = options.selfMute ?? false;
36
+ this.sendVoicePayload(options.voiceChannelId, this.selfDeaf, this.selfMute);
37
+ this.state = Constants_1.PlayerState.CONNECTING;
38
+ }
39
+ // ─── Getters ──────────────────────────────────────────────────────
40
+ get connected() {
41
+ return this.state === Constants_1.PlayerState.CONNECTED;
42
+ }
43
+ /** Real-time position estimate */
44
+ get realPosition() {
45
+ if (!this.playing || this.paused)
46
+ return this.position;
47
+ return Math.min(this.position + (Date.now() - this.lastUpdated), this.queue.current?.info.length ?? this.position);
30
48
  }
31
49
  // ─── Voice ───────────────────────────────────────────────────────
32
50
  sendVoicePayload(channelId, selfDeaf, selfMute) {
33
- this.manager.sendPayload(this.guildId, {
51
+ this.manager.connector.sendPayload(this.guildId, {
34
52
  op: 4,
35
- d: {
36
- guild_id: this.guildId,
37
- channel_id: channelId,
38
- self_deaf: selfDeaf,
39
- self_mute: selfMute,
40
- },
53
+ d: { guild_id: this.guildId, channel_id: channelId, self_deaf: selfDeaf, self_mute: selfMute },
41
54
  });
42
55
  }
43
- /** Called when both sessionId and voiceToken/endpoint are available */
44
56
  checkVoiceReady() {
45
57
  if (!this.sessionId || !this.voiceToken || !this.voiceEndpoint)
46
58
  return;
@@ -49,48 +61,71 @@ class Player {
49
61
  endpoint: this.voiceEndpoint,
50
62
  sessionId: this.sessionId,
51
63
  };
52
- this.node
53
- .request("PATCH", `/sessions/${this.node.sessionId}/players/${this.guildId}`, {
54
- voice: voiceState,
55
- })
56
- .catch(console.error);
64
+ if (this.node.version === 4) {
65
+ this.node.rest.updatePlayer(this.guildId, { voice: voiceState }).catch(console.error);
66
+ }
67
+ else {
68
+ this.node.send({
69
+ op: "voiceUpdate",
70
+ guildId: this.guildId,
71
+ sessionId: this.sessionId,
72
+ event: { token: this.voiceToken, guild_id: this.guildId, endpoint: this.voiceEndpoint },
73
+ });
74
+ }
75
+ this.state = Constants_1.PlayerState.CONNECTED;
57
76
  }
58
77
  // ─── Playback ─────────────────────────────────────────────────────
59
- /** Play a track */
60
78
  async play(track, options) {
61
- this.queue.current = track;
62
- await this.node.request("PATCH", `/sessions/${this.node.sessionId}/players/${this.guildId}?noReplace=false`, {
63
- track: { encoded: track.encoded },
64
- volume: this.volume,
65
- ...(options?.startTime && { position: options.startTime }),
66
- ...(options?.endTime && { endTime: options.endTime }),
67
- });
79
+ const toPlay = track ?? this.queue.current;
80
+ if (!toPlay)
81
+ throw new YukimuError_1.PlayerError("No track to play");
82
+ this.queue.current = toPlay;
83
+ if (this.node.version === 4) {
84
+ await this.node.rest.updatePlayer(this.guildId, {
85
+ track: { encoded: toPlay.encoded },
86
+ volume: this.volume,
87
+ ...(options?.startTime !== undefined && { position: options.startTime }),
88
+ ...(options?.endTime !== undefined && { endTime: options.endTime }),
89
+ }, options?.noReplace ?? false);
90
+ }
91
+ else {
92
+ this.node.send({
93
+ op: "play",
94
+ guildId: this.guildId,
95
+ track: toPlay.encoded,
96
+ volume: String(this.volume),
97
+ ...(options?.startTime !== undefined && { startTime: String(options.startTime) }),
98
+ ...(options?.endTime !== undefined && { endTime: String(options.endTime) }),
99
+ ...(options?.noReplace !== undefined && { noReplace: options.noReplace }),
100
+ });
101
+ }
68
102
  this.playing = true;
69
103
  this.paused = false;
104
+ this.lastUpdated = Date.now();
70
105
  }
71
- /** Pause or resume playback */
72
106
  async pause(state = true) {
73
- await this.node.request("PATCH", `/sessions/${this.node.sessionId}/players/${this.guildId}`, {
74
- paused: state,
75
- });
107
+ if (this.node.version === 4) {
108
+ await this.node.rest.updatePlayer(this.guildId, { paused: state });
109
+ }
110
+ else {
111
+ this.node.send({ op: "pause", guildId: this.guildId, pause: state });
112
+ }
76
113
  this.paused = state;
77
114
  this.playing = !state;
78
115
  }
79
- /** Resume playback */
80
- async resume() {
81
- return this.pause(false);
82
- }
83
- /** Stop playback */
116
+ async resume() { return this.pause(false); }
84
117
  async stop() {
85
- await this.node.request("PATCH", `/sessions/${this.node.sessionId}/players/${this.guildId}`, {
86
- track: { encoded: null },
87
- });
118
+ if (this.node.version === 4) {
119
+ await this.node.rest.updatePlayer(this.guildId, { track: { encoded: null } });
120
+ }
121
+ else {
122
+ this.node.send({ op: "stop", guildId: this.guildId });
123
+ }
88
124
  this.playing = false;
89
125
  this.paused = false;
90
126
  this.position = 0;
91
127
  this.queue.current = null;
92
128
  }
93
- /** Skip to next track */
94
129
  async skip() {
95
130
  const next = this.queue.next();
96
131
  if (next) {
@@ -102,103 +137,149 @@ class Player {
102
137
  }
103
138
  return next;
104
139
  }
105
- /** Seek to position in milliseconds */
106
140
  async seek(position) {
107
141
  if (!this.queue.current?.info.isSeekable)
108
- throw new Error("Current track is not seekable");
109
- await this.node.request("PATCH", `/sessions/${this.node.sessionId}/players/${this.guildId}`, {
110
- position,
111
- });
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}`);
145
+ }
146
+ if (this.node.version === 4) {
147
+ await this.node.rest.updatePlayer(this.guildId, { position });
148
+ }
149
+ else {
150
+ this.node.send({ op: "seek", guildId: this.guildId, position });
151
+ }
112
152
  this.position = position;
153
+ this.lastUpdated = Date.now();
113
154
  }
114
- /** Set volume (0–1000, Lavalink default 100) */
115
155
  async setVolume(volume) {
116
156
  if (volume < 0 || volume > 1000)
117
- throw new Error("Volume must be between 0 and 1000");
118
- await this.node.request("PATCH", `/sessions/${this.node.sessionId}/players/${this.guildId}`, {
119
- volume,
120
- });
157
+ throw new YukimuError_1.PlayerError("Volume must be between 0 and 1000");
158
+ if (this.node.version === 4) {
159
+ await this.node.rest.updatePlayer(this.guildId, { volume });
160
+ }
161
+ else {
162
+ this.node.send({ op: "volume", guildId: this.guildId, volume });
163
+ }
121
164
  this.volume = volume;
122
165
  }
123
166
  // ─── Filters ──────────────────────────────────────────────────────
124
- /** Apply audio filters (bass boost, nightcore, 8D, etc.) */
125
167
  async setFilters(filters) {
126
- this.filters = filters;
127
- await this.node.request("PATCH", `/sessions/${this.node.sessionId}/players/${this.guildId}`, {
128
- filters,
129
- });
168
+ this.filters = { ...this.filters, ...filters };
169
+ if (this.node.version === 4) {
170
+ await this.node.rest.updatePlayer(this.guildId, { filters: this.filters });
171
+ }
172
+ else {
173
+ if (filters.equalizer) {
174
+ this.node.send({ op: "equalizer", guildId: this.guildId, bands: filters.equalizer });
175
+ }
176
+ const rest = { ...filters };
177
+ delete rest.equalizer;
178
+ if (Object.keys(rest).length > 0) {
179
+ this.node.send({ op: "filters", guildId: this.guildId, ...rest });
180
+ }
181
+ }
182
+ }
183
+ async clearFilters() {
184
+ this.filters = {};
185
+ if (this.node.version === 4) {
186
+ await this.node.rest.updatePlayer(this.guildId, { filters: {} });
187
+ }
188
+ else {
189
+ this.node.send({ op: "filters", guildId: this.guildId });
190
+ }
130
191
  }
131
- /** Enable bass boost */
192
+ // ─── Preset Filters ───────────────────────────────────────────────
132
193
  async setBassBoost(level) {
133
- const bands = [];
134
- const gains = {
194
+ const presets = {
135
195
  off: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
136
- low: [0.2, 0.15, 0.1, 0.05, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
137
- medium: [0.4, 0.3, 0.2, 0.1, 0.05, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
138
- high: [0.6, 0.5, 0.4, 0.25, 0.1, 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],
139
200
  };
140
- for (let i = 0; i < 15; i++) {
141
- bands.push({ band: i, gain: gains[level][i] });
142
- }
143
- await this.setFilters({ ...this.filters, equalizer: bands });
201
+ await this.setFilters({ equalizer: presets[level].map((gain, band) => ({ band, gain })) });
144
202
  }
145
- /** Enable nightcore effect */
146
203
  async setNightcore(enabled) {
147
- await this.setFilters({
148
- ...this.filters,
149
- timescale: enabled ? { speed: 1.2, pitch: 1.2, rate: 1.0 } : {},
150
- });
204
+ await this.setFilters({ timescale: enabled ? { speed: 1.2, pitch: 1.2, rate: 1.0 } : undefined });
205
+ }
206
+ async setVaporwave(enabled) {
207
+ await this.setFilters({ timescale: enabled ? { speed: 0.8, pitch: 0.8, rate: 1.0 } : undefined });
151
208
  }
152
- /** Enable 8D audio */
153
209
  async set8D(enabled) {
210
+ await this.setFilters({ rotation: enabled ? { rotationHz: 0.2 } : undefined });
211
+ }
212
+ async setKaraoke(enabled) {
154
213
  await this.setFilters({
155
- ...this.filters,
156
- rotation: enabled ? { rotationHz: 0.2 } : {},
214
+ karaoke: enabled ? { level: 1.0, monoLevel: 1.0, filterBand: 220.0, filterWidth: 100.0 } : undefined,
157
215
  });
158
216
  }
159
- /** Clear all filters */
160
- async clearFilters() {
161
- this.filters = {};
162
- await this.node.request("PATCH", `/sessions/${this.node.sessionId}/players/${this.guildId}`, {
163
- filters: {},
164
- });
217
+ async setTremolo(enabled, frequency = 2.0, depth = 0.5) {
218
+ await this.setFilters({ tremolo: enabled ? { frequency, depth } : undefined });
219
+ }
220
+ async setVibrato(enabled, frequency = 2.0, depth = 0.5) {
221
+ await this.setFilters({ vibrato: enabled ? { frequency, depth } : undefined });
222
+ }
223
+ async setLowPass(enabled, smoothing = 20.0) {
224
+ await this.setFilters({ lowPass: enabled ? { smoothing } : undefined });
165
225
  }
166
226
  // ─── Queue Helpers ────────────────────────────────────────────────
167
- /** Add track(s) to queue and optionally start playing */
168
- async add(tracks, playNow = false) {
227
+ async add(tracks, requester) {
169
228
  const arr = Array.isArray(tracks) ? tracks : [tracks];
229
+ // Attach requester to each track
230
+ if (requester)
231
+ arr.forEach(t => { t.requester = requester; });
170
232
  if (!this.queue.current && arr.length > 0) {
171
233
  const first = arr.shift();
172
- this.queue.current = first;
173
234
  this.queue.add(arr);
174
235
  await this.play(first);
175
236
  }
176
237
  else {
177
238
  this.queue.add(arr);
178
- if (playNow && arr.length > 0) {
179
- await this.play(arr[0]);
180
- }
181
239
  }
182
240
  }
183
- /** Set loop mode */
184
241
  setLoop(mode) {
185
242
  this.loop = mode;
186
243
  }
187
- // ─── Disconnect ───────────────────────────────────────────────────
188
- /** Disconnect from voice and clean up */
244
+ setAutoplay(enabled) {
245
+ this.autoplay = enabled;
246
+ }
247
+ // ─── Node Moving ──────────────────────────────────────────────────
248
+ /** Move player to a different Lavalink node */
249
+ async moveToNode(node) {
250
+ if (this.node === node)
251
+ return;
252
+ const oldNode = this.node;
253
+ this.node = node;
254
+ // Destroy on old node
255
+ await oldNode.rest.destroyPlayer(this.guildId).catch(() => { });
256
+ // Recreate on new node with current state
257
+ if (this.queue.current) {
258
+ await this.play(this.queue.current, { startTime: this.realPosition });
259
+ }
260
+ // Reapply filters and volume
261
+ if (Object.keys(this.filters).length > 0) {
262
+ await this.setFilters(this.filters).catch(() => { });
263
+ }
264
+ if (this.volume !== 100) {
265
+ await this.setVolume(this.volume).catch(() => { });
266
+ }
267
+ }
268
+ // ─── Voice Channel Moves ──────────────────────────────────────────
269
+ async move(channelId) {
270
+ this.voiceChannelId = channelId;
271
+ this.sendVoicePayload(channelId, this.selfDeaf, this.selfMute);
272
+ }
273
+ // ─── Destroy ──────────────────────────────────────────────────────
189
274
  async destroy() {
275
+ this.state = Constants_1.PlayerState.DISCONNECTING;
190
276
  this.sendVoicePayload(null, false, false);
191
- await this.node
192
- .request("DELETE", `/sessions/${this.node.sessionId}/players/${this.guildId}`)
193
- .catch(() => { });
277
+ await this.node.rest.destroyPlayer(this.guildId).catch(() => { });
194
278
  this.playing = false;
195
- this.connected = false;
279
+ this.paused = false;
196
280
  this.queue.clear();
197
- }
198
- /** Move to a different voice channel */
199
- async move(channelId, selfDeaf = true) {
200
- this.voiceChannelId = channelId;
201
- this.sendVoicePayload(channelId, selfDeaf, false);
281
+ this.data.clear();
282
+ this.state = Constants_1.PlayerState.DISCONNECTED;
202
283
  }
203
284
  }
204
285
  exports.Player = Player;
@@ -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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"}
@@ -0,0 +1,21 @@
1
+ import type { Yukimu } from "./Yukimu";
2
+ /**
3
+ * Base Plugin class — extend this to create Yukimu plugins.
4
+ * Similar to Kazagumo's plugin system.
5
+ *
6
+ * Example:
7
+ * class MyPlugin extends Plugin {
8
+ * public name = "MyPlugin";
9
+ * public load(manager: Yukimu) {
10
+ * manager.on("trackStart", (player, track) => { ... });
11
+ * }
12
+ * }
13
+ */
14
+ export declare abstract class Plugin {
15
+ abstract name: string;
16
+ /** Called when plugin is loaded into Yukimu */
17
+ abstract load(manager: Yukimu): void;
18
+ /** Called when plugin is unloaded */
19
+ unload?(manager: Yukimu): void;
20
+ }
21
+ //# sourceMappingURL=Plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../src/Plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC;;;;;;;;;;;GAWG;AACH,8BAAsB,MAAM;IAC1B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B,+CAA+C;aAC/B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAE3C,qCAAqC;IAC9B,MAAM,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CACtC"}
package/dist/Plugin.js ADDED
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Plugin = void 0;
4
+ /**
5
+ * Base Plugin class — extend this to create Yukimu plugins.
6
+ * Similar to Kazagumo's plugin system.
7
+ *
8
+ * Example:
9
+ * class MyPlugin extends Plugin {
10
+ * public name = "MyPlugin";
11
+ * public load(manager: Yukimu) {
12
+ * manager.on("trackStart", (player, track) => { ... });
13
+ * }
14
+ * }
15
+ */
16
+ class Plugin {
17
+ }
18
+ exports.Plugin = Plugin;
19
+ //# sourceMappingURL=Plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Plugin.js","sourceRoot":"","sources":["../src/Plugin.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;;;;GAWG;AACH,MAAsB,MAAM;CAQ3B;AARD,wBAQC"}
package/dist/Queue.d.ts CHANGED
@@ -1,29 +1,23 @@
1
- import { Track } from "./types";
1
+ import type { Track } from "./types";
2
2
  export declare class Queue {
3
3
  current: Track | null;
4
- previous: Track | null;
4
+ previous: Track[];
5
5
  private tracks;
6
- /** Add tracks to the end of the queue */
7
- add(tracks: Track | Track[]): void;
8
- /** Remove and return the next track */
6
+ add(tracks: Track | Track[], position?: number): void;
9
7
  next(): Track | null;
10
- /** Peek at upcoming tracks without modifying queue */
11
- peek(count?: number): Track[];
12
- /** Remove a track at a specific index */
13
8
  remove(index: number): Track | null;
14
- /** Clear all queued tracks (does not affect current) */
9
+ removeRange(start: number, end: number): Track[];
15
10
  clear(): void;
16
- /** Fisher-Yates shuffle */
17
11
  shuffle(): void;
18
- /** Move a track from one position to another */
19
12
  move(from: number, to: number): void;
20
- /** Total tracks in queue (not including current) */
13
+ /** Skip to a specific position in queue */
14
+ skipto(index: number): Track | null;
15
+ peek(count?: number): Track[];
16
+ find(predicate: (track: Track) => boolean): Track | undefined;
17
+ filter(predicate: (track: Track) => boolean): Track[];
21
18
  get size(): number;
22
- /** Total duration of all queued tracks in ms */
23
- get totalDuration(): number;
24
- /** Whether the queue is empty */
25
19
  get isEmpty(): boolean;
26
- /** All tracks as array (read-only view) */
20
+ get totalDuration(): number;
27
21
  get list(): ReadonlyArray<Track>;
28
22
  }
29
23
  //# sourceMappingURL=Queue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Queue.d.ts","sourceRoot":"","sources":["../src/Queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,qBAAa,KAAK;IACT,OAAO,EAAE,KAAK,GAAG,IAAI,CAAQ;IAC7B,QAAQ,EAAE,KAAK,GAAG,IAAI,CAAQ;IACrC,OAAO,CAAC,MAAM,CAAe;IAI7B,yCAAyC;IAClC,GAAG,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,IAAI;IAKzC,uCAAuC;IAChC,IAAI,IAAI,KAAK,GAAG,IAAI;IAM3B,sDAAsD;IAC/C,IAAI,CAAC,KAAK,GAAE,MAAU,GAAG,KAAK,EAAE;IAIvC,yCAAyC;IAClC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAM1C,wDAAwD;IACjD,KAAK,IAAI,IAAI;IAQpB,2BAA2B;IACpB,OAAO,IAAI,IAAI;IAStB,gDAAgD;IACzC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAQ3C,oDAAoD;IACpD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,gDAAgD;IAChD,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,iCAAiC;IACjC,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,2CAA2C;IAC3C,IAAI,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,CAE/B;CACF"}
1
+ {"version":3,"file":"Queue.d.ts","sourceRoot":"","sources":["../src/Queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,qBAAa,KAAK;IACT,OAAO,EAAE,KAAK,GAAG,IAAI,CAAQ;IAC7B,QAAQ,EAAE,KAAK,EAAE,CAAM;IAC9B,OAAO,CAAC,MAAM,CAAe;IAItB,GAAG,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IASrD,IAAI,IAAI,KAAK,GAAG,IAAI;IASpB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAMnC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,EAAE;IAIhD,KAAK,IAAI,IAAI;IAQb,OAAO,IAAI,IAAI;IAOf,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAM3C,2CAA2C;IACpC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI;IAQnC,IAAI,CAAC,KAAK,GAAE,MAAW,GAAG,KAAK,EAAE;IAIjC,IAAI,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,GAAG,KAAK,GAAG,SAAS;IAI7D,MAAM,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,GAAG,KAAK,EAAE;IAM5D,IAAI,IAAI,IAAI,MAAM,CAA+B;IAEjD,IAAI,OAAO,IAAI,OAAO,CAAqC;IAE3D,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,CAAwB;CACzD"}
package/dist/Queue.js CHANGED
@@ -4,72 +4,79 @@ exports.Queue = void 0;
4
4
  class Queue {
5
5
  constructor() {
6
6
  this.current = null;
7
- this.previous = null;
7
+ this.previous = [];
8
8
  this.tracks = [];
9
9
  }
10
- // ─── Basic Operations ─────────────────────────────────────────────
11
- /** Add tracks to the end of the queue */
12
- add(tracks) {
10
+ // ─── Add / Remove ─────────────────────────────────────────────────
11
+ add(tracks, position) {
13
12
  const arr = Array.isArray(tracks) ? tracks : [tracks];
14
- this.tracks.push(...arr);
13
+ if (position !== undefined) {
14
+ this.tracks.splice(position, 0, ...arr);
15
+ }
16
+ else {
17
+ this.tracks.push(...arr);
18
+ }
15
19
  }
16
- /** Remove and return the next track */
17
20
  next() {
18
- if (this.current)
19
- this.previous = this.current;
21
+ if (this.current) {
22
+ this.previous.unshift(this.current);
23
+ if (this.previous.length > 10)
24
+ this.previous.pop(); // keep last 10
25
+ }
20
26
  this.current = this.tracks.shift() ?? null;
21
27
  return this.current;
22
28
  }
23
- /** Peek at upcoming tracks without modifying queue */
24
- peek(count = 5) {
25
- return this.tracks.slice(0, count);
26
- }
27
- /** Remove a track at a specific index */
28
29
  remove(index) {
29
30
  if (index < 0 || index >= this.tracks.length)
30
31
  return null;
31
32
  const [removed] = this.tracks.splice(index, 1);
32
33
  return removed;
33
34
  }
34
- /** Clear all queued tracks (does not affect current) */
35
+ removeRange(start, end) {
36
+ return this.tracks.splice(start, end - start);
37
+ }
35
38
  clear() {
36
39
  this.tracks = [];
37
40
  this.current = null;
38
- this.previous = null;
41
+ this.previous = [];
39
42
  }
40
- // ─── Shuffle ──────────────────────────────────────────────────────
41
- /** Fisher-Yates shuffle */
43
+ // ─── Reorder ──────────────────────────────────────────────────────
42
44
  shuffle() {
43
45
  for (let i = this.tracks.length - 1; i > 0; i--) {
44
46
  const j = Math.floor(Math.random() * (i + 1));
45
47
  [this.tracks[i], this.tracks[j]] = [this.tracks[j], this.tracks[i]];
46
48
  }
47
49
  }
48
- // ─── Move / Reorder ───────────────────────────────────────────────
49
- /** Move a track from one position to another */
50
50
  move(from, to) {
51
51
  if (from < 0 || to < 0 || from >= this.tracks.length || to >= this.tracks.length)
52
52
  return;
53
53
  const [track] = this.tracks.splice(from, 1);
54
54
  this.tracks.splice(to, 0, track);
55
55
  }
56
- // ─── Getters ──────────────────────────────────────────────────────
57
- /** Total tracks in queue (not including current) */
58
- get size() {
59
- return this.tracks.length;
56
+ /** Skip to a specific position in queue */
57
+ skipto(index) {
58
+ if (index < 0 || index >= this.tracks.length)
59
+ return null;
60
+ this.tracks.splice(0, index);
61
+ return this.next();
60
62
  }
61
- /** Total duration of all queued tracks in ms */
62
- get totalDuration() {
63
- return this.tracks.reduce((acc, t) => acc + (t.info.length ?? 0), 0);
63
+ // ─── Peek / Find ──────────────────────────────────────────────────
64
+ peek(count = 10) {
65
+ return this.tracks.slice(0, count);
64
66
  }
65
- /** Whether the queue is empty */
66
- get isEmpty() {
67
- return this.tracks.length === 0;
67
+ find(predicate) {
68
+ return this.tracks.find(predicate);
68
69
  }
69
- /** All tracks as array (read-only view) */
70
- get list() {
71
- return this.tracks;
70
+ filter(predicate) {
71
+ return this.tracks.filter(predicate);
72
+ }
73
+ // ─── Getters ──────────────────────────────────────────────────────
74
+ get size() { return this.tracks.length; }
75
+ get isEmpty() { return this.tracks.length === 0; }
76
+ get totalDuration() {
77
+ return this.tracks.reduce((acc, t) => acc + (t.info?.length ?? 0), 0);
72
78
  }
79
+ get list() { return this.tracks; }
73
80
  }
74
81
  exports.Queue = Queue;
75
82
  //# sourceMappingURL=Queue.js.map