@ramkrishna-js/framelink 1.0.0 → 1.0.2

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/README.md CHANGED
@@ -1,46 +1,46 @@
1
1
  <div align="center">
2
+ <img src="https://capsule-render.vercel.app/render?type=waving&color=gradient&height=200&section=header&text=FrameLink&fontSize=80" />
2
3
 
3
- <img src="https://capsule-render.vercel.app/render?type=waving&color=auto&height=250&section=header&text=FrameLink&fontSize=90&animation=fadeIn&fontAlignY=38" />
4
+ **A lightweight, robust, and plugin-ready Lavalink client (v3 & v4) for Node.js.**
4
5
 
5
- **🚀 A lightweight, robust, and plugin-ready Lavalink client (v3 & v4) for Node.js.**
6
-
7
- [![npm version](https://img.shields.io/npm/v/framelink.svg?style=flat-square)](https://www.npmjs.com/package/framelink)
8
- [![npm downloads](https://img.shields.io/npm/dm/framelink.svg?style=flat-square)](https://www.npmjs.com/package/framelink)
6
+ [![npm version](https://img.shields.io/npm/v/@ramkrishna-js/framelink.svg?style=flat-square)](https://www.npmjs.com/package/@ramkrishna-js/framelink)
7
+ [![npm downloads](https://img.shields.io/npm/dm/@ramkrishna-js/framelink.svg?style=flat-square)](https://www.npmjs.com/package/@ramkrishna-js/framelink)
9
8
  [![license](https://img.shields.io/github/license/ramkrishna-js/framelink.svg?style=flat-square)](https://github.com/ramkrishna-js/framelink/blob/master/LICENSE)
10
9
  [![stars](https://img.shields.io/github/stars/ramkrishna-js/framelink.svg?style=flat-square)](https://github.com/ramkrishna-js/framelink/stargazers)
11
10
 
12
11
  ---
13
12
 
14
- [📄 Documentation](https://github.com/ramkrishna-js/framelink#readme) | [💬 Discord Support](https://discord.gg/your-invite-link) | [📦 NPM](https://www.npmjs.com/package/framelink)
13
+ [📄 Documentation](https://github.com/ramkrishna-js/framelink#readme) | [💬 Discord Support](https://discord.gg/your-invite-link) | [📦 NPM](https://www.npmjs.com/package/@ramkrishna-js/framelink)
15
14
 
16
15
  </div>
17
16
 
18
17
  <hr />
19
18
 
20
- ## Features
21
- - 🎵 **Universal Support:** Seamlessly works with Lavalink v3 and v4.
22
- - 🎼 **Multi-Platform:** Built-in support for YouTube, Spotify, Apple Music, Deezer, and more.
23
- - 🚀 **Performance:** Optimized for speed with minimal memory footprint.
24
- - 🔄 **Smart Queue:** Advanced queue system with automated autoplay logic.
25
- - 🧩 **Extensible:** Robust plugin system to customize your experience.
26
- - 🛡️ **Type-Safe:** Written entirely in TypeScript for a superior DX.
19
+ ## Features
20
+ - **Universal Support:** Seamlessly works with Lavalink v3 and v4.
21
+ - **Multi-Platform:** Built-in support for YouTube, Spotify, Apple Music, Deezer, and more.
22
+ - **Performance:** Optimized for speed with minimal memory footprint.
23
+ - **Advanced Queue:** Smart queue system with shuffling, moving, and track manipulation.
24
+ - **Aggressive Autoplay:** Intelligent recommendation system for continuous playback.
25
+ - **Extensible:** Robust plugin system to customize your experience.
26
+ - **Type-Safe:** Written entirely in TypeScript for a superior DX.
27
27
 
28
28
  <hr />
29
29
 
30
- ## 📦 Installation
30
+ ## Installation
31
31
 
32
32
  ```bash
33
- npm install framelink
33
+ npm install @ramkrishna-js/framelink
34
34
  ```
35
35
 
36
36
  <hr />
37
37
 
38
- ## ╰┈1️⃣ Quick Start
38
+ ## Quick Start
39
39
 
40
40
  ### Initializing the Manager
41
41
 
42
42
  ```typescript
43
- import { LavalinkManager } from 'framelink';
43
+ import { LavalinkManager } from '@ramkrishna-js/framelink';
44
44
 
45
45
  const manager = new LavalinkManager({
46
46
  nodes: [
@@ -79,7 +79,7 @@ player.play();
79
79
 
80
80
  <hr />
81
81
 
82
- ## ╰┈2️⃣ Event Handling
82
+ ## Event Handling
83
83
 
84
84
  ```typescript
85
85
  manager.on('nodeConnect', (node) => {
@@ -97,7 +97,39 @@ manager.on('queueEnd', (player) => {
97
97
 
98
98
  <hr />
99
99
 
100
- ## ╰┈3️⃣ Supported Platforms
100
+ ## Player & Queue Controls
101
+
102
+ FrameLink provides comprehensive control over your music session:
103
+
104
+ ### Player Methods
105
+ - `player.pause(state: boolean)` - Pause or resume playback.
106
+ - `player.resume()` - Alias for `player.pause(false)`.
107
+ - `player.skip()` - Skip the current track.
108
+ - `player.previous()` - Play the previous track.
109
+ - `player.seek(position: number)` - Seek to a specific position (ms).
110
+ - `player.setVolume(volume: number)` - Set the player volume (0-1000).
111
+ - `player.setFilters(filters: any)` - Apply Lavalink filters.
112
+ - `player.connect(options)` - Join a voice channel.
113
+ - `player.disconnect()` - Leave a voice channel.
114
+
115
+ ### Queue Methods
116
+ - `player.queue.add(track | track[])` - Add tracks to the queue.
117
+ - `player.queue.remove(index)` - Remove a track by index.
118
+ - `player.queue.move(from, to)` - Move a track within the queue.
119
+ - `player.queue.shuffle()` - Randomize the queue order.
120
+ - `player.queue.clear()` - Clear all tracks from the queue.
121
+ - `player.queue.skipTo(index)` - Skip directly to a specific track index.
122
+ - `player.queue.removeDuplicates()` - Remove duplicate tracks from the queue.
123
+
124
+ <hr />
125
+
126
+ ## Aggressive Autoplay
127
+
128
+ Enable `autoplay: true` in your player options to automatically play related tracks when the queue ends. FrameLink uses an aggressive strategy to ensure the music never stops by fetching recommendations based on the previous track's source.
129
+
130
+ <hr />
131
+
132
+ ## Supported Platforms
101
133
 
102
134
  FrameLink supports any platform compatible with Lavalink and its plugins (like LavaSrc):
103
135
  - YouTube / YouTube Music
@@ -110,12 +142,12 @@ FrameLink supports any platform compatible with Lavalink and its plugins (like L
110
142
 
111
143
  <hr />
112
144
 
113
- ## 🧩 Plugins
145
+ ## Plugins
114
146
 
115
147
  FrameLink is built with extensibility in mind. You can easily create and load plugins to extend the manager's functionality.
116
148
 
117
149
  ```typescript
118
- import { Plugin } from 'framelink';
150
+ import { Plugin } from '@ramkrishna-js/framelink';
119
151
 
120
152
  class MyCustomPlugin extends Plugin {
121
153
  name = 'MyPlugin';
@@ -134,7 +166,7 @@ const manager = new LavalinkManager({
134
166
 
135
167
  <hr />
136
168
 
137
- ## 🤝 Contributing
169
+ ## Contributing
138
170
 
139
171
  Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.
140
172
 
@@ -142,7 +174,7 @@ Please see [CONTRIBUTING.md](CONTRIBUTING.md) for more details.
142
174
 
143
175
  <hr />
144
176
 
145
- ## 📜 License
177
+ ## License
146
178
 
147
179
  Distributed under the MIT License. See [LICENSE](LICENSE) for more information.
148
180
 
@@ -1 +1 @@
1
- {"version":3,"file":"LavalinkManager.d.ts","sourceRoot":"","sources":["../../src/structures/LavalinkManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,WAAW,sBAAsB;IACnC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;IAC9C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,qBAAa,eAAgB,SAAQ,YAAY;IACtC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,EAAE,sBAAsB,CAAC;IAChC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAM;gBAElB,OAAO,EAAE,sBAAsB;IAWpC,IAAI,CAAC,MAAM,EAAE,MAAM;IAOnB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,YAAY;IAO9C,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM;IAS5C,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IASvC,WAAW,IAAI,YAAY,GAAG,SAAS;IAS9C;;;;;OAKG;IACU,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAa;IAYtF,iBAAiB,CAAC,MAAM,EAAE,GAAG;CAgC7C"}
1
+ {"version":3,"file":"LavalinkManager.d.ts","sourceRoot":"","sources":["../../src/structures/LavalinkManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,WAAW,sBAAsB;IACnC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;IAC9C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,qBAAa,eAAgB,SAAQ,YAAY;IACtC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACjC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,EAAE,sBAAsB,CAAC;IAChC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAM;gBAElB,OAAO,EAAE,sBAAsB;IAWpC,IAAI,CAAC,MAAM,EAAE,MAAM;IAOnB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,YAAY;IAO9C,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM;IAS5C,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IASvC,WAAW,IAAI,YAAY,GAAG,SAAS;IAS9C;;;;;OAKG;IACU,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAa;IAkCtF,iBAAiB,CAAC,MAAM,EAAE,GAAG;CA8C7C"}
@@ -64,10 +64,29 @@ class LavalinkManager extends events_1.EventEmitter {
64
64
  const node = this.getBestNode();
65
65
  if (!node)
66
66
  throw new Error("No available nodes.");
67
+ const prefixes = {
68
+ yt: 'ytsearch:',
69
+ ytm: 'ytmsearch:',
70
+ sc: 'scsearch:',
71
+ sp: 'spsearch:',
72
+ am: 'amsearch:',
73
+ dz: 'dzsearch:',
74
+ js: 'jssearch:'
75
+ };
67
76
  const identifier = /^(https?:\/\/)/.test(query)
68
77
  ? query
69
- : `${source}search:${query}`;
70
- return node.loadTracks(identifier);
78
+ : `${prefixes[source] || source + 'search:'}${query}`;
79
+ const res = await node.loadTracks(identifier);
80
+ // Add helper properties to tracks
81
+ if (res.tracks) {
82
+ res.tracks = res.tracks.map((track) => ({
83
+ ...track,
84
+ displayThumbnail: track.info.uri.includes('youtube.com')
85
+ ? `https://img.youtube.com/vi/${track.info.identifier}/hqdefault.jpg`
86
+ : track.info.artworkUrl || null
87
+ }));
88
+ }
89
+ return res;
71
90
  }
72
91
  // Handle voice state updates from Discord
73
92
  async handleVoiceUpdate(update) {
@@ -84,12 +103,24 @@ class LavalinkManager extends events_1.EventEmitter {
84
103
  player.voiceUpdateState.event = data;
85
104
  }
86
105
  else {
87
- if (data.user_id !== this.userId)
106
+ if (data.user_id !== this.userId) {
107
+ // Potential player move (if the user is moving someone else or just seeing movement)
108
+ // But typically we only care about our own moves for Lavalink
88
109
  return;
110
+ }
111
+ if (player.voiceChannelId && data.channel_id && player.voiceChannelId !== data.channel_id) {
112
+ this.emit('playerMove', player, player.voiceChannelId, data.channel_id);
113
+ }
89
114
  player.voiceUpdateState.sessionId = data.session_id;
90
115
  if (data.channel_id) {
91
116
  player.voiceChannelId = data.channel_id;
92
117
  }
118
+ else {
119
+ // Disconnected from voice
120
+ player.voiceChannelId = null;
121
+ player.voiceUpdateState.event = null;
122
+ this.emit('playerDisconnect', player);
123
+ }
93
124
  }
94
125
  if (player.voiceUpdateState.sessionId && player.voiceUpdateState.event) {
95
126
  player.node.send({
@@ -1 +1 @@
1
- {"version":3,"file":"LavalinkManager.js","sourceRoot":"","sources":["../../src/structures/LavalinkManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LavalinkManager.js","sourceRoot":"","sources":["../../src/structures/LavalinkManager.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,8 @@ export interface NodeOptions {
9
9
  retryAmount?: number;
10
10
  retryDelay?: number;
11
11
  version?: 'v3' | 'v4';
12
+ resumeKey?: string;
13
+ resumeTimeout?: number;
12
14
  }
13
15
  export declare class LavalinkNode {
14
16
  manager: LavalinkManager;
@@ -16,6 +18,7 @@ export declare class LavalinkNode {
16
18
  socket: WebSocket | null;
17
19
  stats: any;
18
20
  connected: boolean;
21
+ sessionId: string | null;
19
22
  constructor(manager: LavalinkManager, options: NodeOptions);
20
23
  connect(): void;
21
24
  send(payload: any): void;
@@ -1 +1 @@
1
- {"version":3,"file":"LavalinkNode.d.ts","sourceRoot":"","sources":["../../src/structures/LavalinkNode.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,WAAW,WAAW;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACzB;AAED,qBAAa,YAAY;IACd,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,SAAS,GAAG,IAAI,CAAQ;IAChC,KAAK,EAAE,GAAG,CAAM;IAChB,SAAS,EAAE,OAAO,CAAS;gBAEtB,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,WAAW;IAQnD,OAAO;IA0BP,IAAI,CAAC,OAAO,EAAE,GAAG;IAKX,UAAU,CAAC,UAAU,EAAE,MAAM;IAoB1C,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,SAAS;IAuBjB,OAAO,CAAC,WAAW;IAkCnB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,OAAO;CAKlB"}
1
+ {"version":3,"file":"LavalinkNode.d.ts","sourceRoot":"","sources":["../../src/structures/LavalinkNode.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,WAAW,WAAW;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,YAAY;IACd,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,SAAS,GAAG,IAAI,CAAQ;IAChC,KAAK,EAAE,GAAG,CAAM;IAChB,SAAS,EAAE,OAAO,CAAS;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAE3B,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,WAAW;IASnD,OAAO;IA8BP,IAAI,CAAC,OAAO,EAAE,GAAG;IAKX,UAAU,CAAC,UAAU,EAAE,MAAM;IAoB1C,OAAO,CAAC,MAAM;IAYd,OAAO,CAAC,SAAS;IA2BjB,OAAO,CAAC,WAAW;IA8CnB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,OAAO;CAKlB"}
@@ -10,9 +10,11 @@ class LavalinkNode {
10
10
  this.socket = null;
11
11
  this.stats = {};
12
12
  this.connected = false;
13
+ this.sessionId = null;
13
14
  this.manager = manager;
14
15
  this.options = {
15
16
  version: 'v4',
17
+ resumeTimeout: 60,
16
18
  ...options
17
19
  };
18
20
  }
@@ -22,8 +24,11 @@ class LavalinkNode {
22
24
  const headers = {
23
25
  Authorization: this.options.password || 'youshallnotpass',
24
26
  'User-Id': this.manager.userId || '0',
25
- 'Client-Name': 'framelink/1.0.0'
27
+ 'Client-Name': '@ramkrishna-js/framelink/1.0.0'
26
28
  };
29
+ if (this.options.resumeKey) {
30
+ headers['Resume-Key'] = this.options.resumeKey;
31
+ }
27
32
  const protocol = this.options.secure ? 'wss' : 'ws';
28
33
  let endpoint = '';
29
34
  if (this.options.version === 'v4') {
@@ -58,10 +63,20 @@ class LavalinkNode {
58
63
  }
59
64
  onOpen() {
60
65
  this.connected = true;
66
+ if (this.options.resumeKey) {
67
+ this.send({
68
+ op: 'configureResuming',
69
+ key: this.options.resumeKey,
70
+ timeout: this.options.resumeTimeout
71
+ });
72
+ }
61
73
  this.manager.emit('nodeConnect', this);
62
74
  }
63
75
  onMessage(data) {
64
76
  const payload = JSON.parse(data.toString());
77
+ if (payload.op === 'ready') {
78
+ this.sessionId = payload.sessionId;
79
+ }
65
80
  switch (payload.op) {
66
81
  case 'stats':
67
82
  this.stats = payload;
@@ -90,9 +105,18 @@ class LavalinkNode {
90
105
  case 'TrackEndEvent':
91
106
  this.manager.emit('trackEnd', player, payload.track, payload.reason);
92
107
  if (payload.reason === 'FINISHED' || payload.reason === 'LOAD_FAILED') {
93
- // Auto-play next track in queue or trigger autoplay
94
- if (player.queue.tracks.length > 0) {
95
- player.play();
108
+ // Handle repeat modes
109
+ if (player.repeatMode === 'track' && player.queue.current) {
110
+ player.play(player.queue.current);
111
+ return;
112
+ }
113
+ if (player.repeatMode === 'queue' && player.queue.current) {
114
+ player.queue.add(player.queue.current);
115
+ }
116
+ // Transition to next track
117
+ const nextTrack = player.queue.next();
118
+ if (nextTrack) {
119
+ player.play(nextTrack);
96
120
  }
97
121
  else if (player.autoplay) {
98
122
  player.triggerAutoplay();
@@ -1 +1 @@
1
- {"version":3,"file":"LavalinkNode.js","sourceRoot":"","sources":["../../src/structures/LavalinkNode.ts"],"names":[],"mappings":";;;;;;AAAA,4CAA2B;AAc3B,MAAa,YAAY;IAOrB,YAAY,OAAwB,EAAE,OAAoB;QAJnD,WAAM,GAAqB,IAAI,CAAC;QAChC,UAAK,GAAQ,EAAE,CAAC;QAChB,cAAS,GAAY,KAAK,CAAC;QAG9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG;YACX,OAAO,EAAE,IAAI;YACb,GAAG,OAAO;SACb,CAAC;IACN,CAAC;IAEM,OAAO;QACV,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QAExB,MAAM,OAAO,GAA2B;YACpC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,iBAAiB;YACzD,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG;YACrC,aAAa,EAAE,iBAAiB;SACnC,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACpD,IAAI,QAAQ,GAAG,EAAE,CAAC;QAElB,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAChC,QAAQ,GAAG,eAAe,CAAC;QAC/B,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,QAAQ,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;QAEzF,IAAI,CAAC,MAAM,GAAG,IAAI,YAAS,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAE9C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,CAAC;IAEM,IAAI,CAAC,OAAY;QACpB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAC5C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9C,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,UAAkB;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QACxD,IAAI,QAAQ,GAAG,aAAa,CAAC;QAE7B,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAChC,QAAQ,GAAG,gBAAgB,CAAC;QAChC,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,QAAQ,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC,CAAC;QAClG,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAElD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;YACzC,OAAO,EAAE;gBACL,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,iBAAiB;aAC5D;SACJ,CAAC,CAAC;QAEH,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IAEO,MAAM;QACV,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAEO,SAAS,CAAC,IAAoB;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE5C,QAAQ,OAAO,CAAC,EAAE,EAAE,CAAC;YACjB,KAAK,OAAO;gBACR,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC;gBACrB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC9C,MAAM;YAEV,KAAK,cAAc;gBACf,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACzD,IAAI,MAAM;oBAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACzC,MAAM;YAEV,KAAK,OAAO;gBACR,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC1B,MAAM;YAEV;gBACI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACxD,CAAC;IACL,CAAC;IAEO,WAAW,CAAC,OAAY;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,iBAAiB;gBAClB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;gBACvD,MAAM;YACV,KAAK,eAAe;gBAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;gBACrE,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,OAAO,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;oBACnE,oDAAoD;oBACpD,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACjC,MAAM,CAAC,IAAI,EAAE,CAAC;oBAClB,CAAC;yBAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;wBACzB,MAAM,CAAC,eAAe,EAAE,CAAC;oBAC7B,CAAC;yBAAM,CAAC;wBACL,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;wBACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;oBACzC,CAAC;gBACN,CAAC;gBACD,MAAM;YACV,KAAK,qBAAqB;gBACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC1E,MAAM;YACV,KAAK,iBAAiB;gBAClB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;gBAC5E,MAAM;YACV,KAAK,sBAAsB;gBACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBACnD,MAAM;QACd,CAAC;IACL,CAAC;IAEO,OAAO,CAAC,KAAY;QACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;IAEO,OAAO,CAAC,IAAY,EAAE,MAAc;QACxC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;CACJ;AAzID,oCAyIC"}
1
+ {"version":3,"file":"LavalinkNode.js","sourceRoot":"","sources":["../../src/structures/LavalinkNode.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ export interface PlayerOptions {
9
9
  selfMute?: boolean;
10
10
  autoplay?: boolean;
11
11
  }
12
+ export type RepeatMode = 'off' | 'track' | 'queue';
12
13
  export declare class Player {
13
14
  manager: LavalinkManager;
14
15
  node: LavalinkNode;
@@ -19,15 +20,49 @@ export declare class Player {
19
20
  paused: boolean;
20
21
  isPlaying: boolean;
21
22
  timestamp: number;
23
+ volume: number;
22
24
  voiceUpdateState: {
23
25
  sessionId?: string;
24
26
  event?: any;
25
27
  };
26
28
  queue: Queue;
27
29
  autoplay: boolean;
30
+ repeatMode: RepeatMode;
31
+ filters: any;
28
32
  constructor(manager: LavalinkManager, node: LavalinkNode, options: PlayerOptions);
33
+ setRepeatMode(mode: RepeatMode): this;
34
+ setFilters(filters: any): this;
35
+ setBassboost(value: boolean): this;
36
+ setNightcore(value: boolean): this;
29
37
  play(track?: string | any, options?: any): Promise<void>;
38
+ skip(): this;
39
+ previous(): this;
40
+ pause(state?: boolean): this;
41
+ resume(): this;
42
+ seek(position: number): this;
30
43
  triggerAutoplay(): Promise<void>;
44
+ connect(options: {
45
+ voiceChannelId: string;
46
+ textChannelId?: string;
47
+ selfDeaf?: boolean;
48
+ selfMute?: boolean;
49
+ }): this;
50
+ disconnect(): this;
51
+ toJSON(): {
52
+ guildId: string;
53
+ voiceChannelId: string | null;
54
+ textChannelId: string | null;
55
+ paused: boolean;
56
+ isPlaying: boolean;
57
+ volume: number;
58
+ repeatMode: RepeatMode;
59
+ autoplay: boolean;
60
+ queue: {
61
+ current: any;
62
+ tracks: any[];
63
+ previous: any[];
64
+ };
65
+ };
31
66
  stop(): void;
32
67
  setVolume(volume: number): void;
33
68
  update(state: any): void;
@@ -1 +1 @@
1
- {"version":3,"file":"Player.d.ts","sourceRoot":"","sources":["../../src/structures/Player.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,qBAAa,MAAM;IACR,OAAO,EAAE,eAAe,CAAC;IACzB,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IACrC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;IACpC,QAAQ,EAAE,MAAM,CAAK;IACrB,MAAM,EAAE,OAAO,CAAS;IACxB,SAAS,EAAE,OAAO,CAAS;IAC3B,SAAS,EAAE,MAAM,CAAK;IACtB,gBAAgB,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,GAAG,CAAA;KAAE,CAAM;IAC3D,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,OAAO,CAAS;gBAErB,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa;IAUnE,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,GAAE,GAAQ;IA4B5C,eAAe;IAgCrB,IAAI;IAQJ,SAAS,CAAC,MAAM,EAAE,MAAM;IAQxB,MAAM,CAAC,KAAK,EAAE,GAAG;IAKjB,OAAO;CAQjB"}
1
+ {"version":3,"file":"Player.d.ts","sourceRoot":"","sources":["../../src/structures/Player.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,MAAM,WAAW,aAAa;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;AAEnD,qBAAa,MAAM;IACR,OAAO,EAAE,eAAe,CAAC;IACzB,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IACrC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;IACpC,QAAQ,EAAE,MAAM,CAAK;IACrB,MAAM,EAAE,OAAO,CAAS;IACxB,SAAS,EAAE,OAAO,CAAS;IAC3B,SAAS,EAAE,MAAM,CAAK;IACtB,MAAM,EAAE,MAAM,CAAO;IACrB,gBAAgB,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,GAAG,CAAA;KAAE,CAAM;IAC3D,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,OAAO,CAAS;IAC1B,UAAU,EAAE,UAAU,CAAS;IAC/B,OAAO,EAAE,GAAG,CAAM;gBAEb,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa;IAUzE,aAAa,CAAC,IAAI,EAAE,UAAU;IAK9B,UAAU,CAAC,OAAO,EAAE,GAAG;IAUvB,YAAY,CAAC,KAAK,EAAE,OAAO;IAgB3B,YAAY,CAAC,KAAK,EAAE,OAAO;IAWrB,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,GAAE,GAAQ;IAgClD,IAAI;IAQJ,QAAQ;IASR,KAAK,CAAC,KAAK,GAAE,OAAc;IAU3B,MAAM;IAIN,IAAI,CAAC,QAAQ,EAAE,MAAM;IASf,eAAe;IA8BrB,OAAO,CAAC,OAAO,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE;IAgB3G,UAAU;IAcV,MAAM;;;;;;;;;;;;;;;IAcN,IAAI;IAQJ,SAAS,CAAC,MAAM,EAAE,MAAM;IASxB,MAAM,CAAC,KAAK,EAAE,GAAG;IAKjB,OAAO;CAQjB"}
@@ -10,8 +10,11 @@ class Player {
10
10
  this.paused = false;
11
11
  this.isPlaying = false;
12
12
  this.timestamp = 0;
13
+ this.volume = 100;
13
14
  this.voiceUpdateState = {};
14
15
  this.autoplay = false;
16
+ this.repeatMode = 'off';
17
+ this.filters = {};
15
18
  this.manager = manager;
16
19
  this.node = node;
17
20
  this.guildId = options.guildId;
@@ -20,13 +23,56 @@ class Player {
20
23
  this.autoplay = options.autoplay || false;
21
24
  this.queue = new Queue_1.Queue(this);
22
25
  }
26
+ setRepeatMode(mode) {
27
+ this.repeatMode = mode;
28
+ return this;
29
+ }
30
+ setFilters(filters) {
31
+ this.filters = filters;
32
+ this.node.send({
33
+ op: 'filters',
34
+ guildId: this.guildId,
35
+ ...filters
36
+ });
37
+ return this;
38
+ }
39
+ setBassboost(value) {
40
+ if (value) {
41
+ this.setFilters({
42
+ equalizer: [
43
+ { band: 0, gain: 0.25 },
44
+ { band: 1, gain: 0.25 },
45
+ { band: 2, gain: 0.25 },
46
+ { band: 3, gain: 0.25 }
47
+ ]
48
+ });
49
+ }
50
+ else {
51
+ this.setFilters({ equalizer: [] });
52
+ }
53
+ return this;
54
+ }
55
+ setNightcore(value) {
56
+ if (value) {
57
+ this.setFilters({
58
+ timescale: { speed: 1.1, pitch: 1.1, rate: 1.0 }
59
+ });
60
+ }
61
+ else {
62
+ this.setFilters({ timescale: { speed: 1.0, pitch: 1.0, rate: 1.0 } });
63
+ }
64
+ return this;
65
+ }
23
66
  async play(track, options = {}) {
24
67
  if (!track && !this.queue.current && this.queue.tracks.length > 0) {
25
68
  const next = this.queue.next();
26
69
  if (next) {
27
- track = next.track; // Assuming object has .track
70
+ track = next;
28
71
  }
29
72
  }
73
+ if (!track && this.queue.current) {
74
+ track = this.queue.current;
75
+ }
30
76
  if (!track) {
31
77
  if (this.autoplay) {
32
78
  return this.triggerAutoplay();
@@ -34,7 +80,7 @@ class Player {
34
80
  return;
35
81
  }
36
82
  this.isPlaying = true;
37
- // Handle if track is an object (Lavalink track object) or string
83
+ this.queue.current = track;
38
84
  const trackString = typeof track === 'string' ? track : track.track;
39
85
  this.node.send({
40
86
  op: 'play',
@@ -43,35 +89,109 @@ class Player {
43
89
  ...options
44
90
  });
45
91
  }
92
+ skip() {
93
+ this.node.send({
94
+ op: 'stop',
95
+ guildId: this.guildId
96
+ });
97
+ return this;
98
+ }
99
+ previous() {
100
+ if (this.queue.previous.length === 0)
101
+ return this;
102
+ const prev = this.queue.previous.pop();
103
+ if (this.queue.current)
104
+ this.queue.tracks.unshift(this.queue.current);
105
+ this.queue.current = prev;
106
+ this.play(prev);
107
+ return this;
108
+ }
109
+ pause(state = true) {
110
+ this.paused = state;
111
+ this.node.send({
112
+ op: 'pause',
113
+ guildId: this.guildId,
114
+ pause: state
115
+ });
116
+ return this;
117
+ }
118
+ resume() {
119
+ return this.pause(false);
120
+ }
121
+ seek(position) {
122
+ this.node.send({
123
+ op: 'seek',
124
+ guildId: this.guildId,
125
+ position
126
+ });
127
+ return this;
128
+ }
46
129
  async triggerAutoplay() {
47
- const previousTrack = this.queue.previous[this.queue.previous.length - 1];
130
+ const previousTrack = this.queue.previous[this.queue.previous.length - 1] || this.queue.current;
48
131
  if (!previousTrack)
49
- return; // Cannot autoplay without seed
50
- // Use previous track URI or ID for recommendation
51
- // Simple implementation: Search for related tracks or a mix
52
- // Ideally, this uses a specific source feature like "spotify:seed_tracks" or similar via a plugin
53
- // For general usage:
132
+ return;
54
133
  const source = previousTrack.info?.sourceName;
55
134
  let identifier = '';
56
- if (source === 'spotify' || source === 'applemusic' || source === 'deezer') {
57
- // If using Lavasrc, we might get recommendations.
58
- // Common pattern: `sprec:${trackId}` or similar if plugin supports it.
59
- // Fallback to "related" search on YouTube if all else fails?
60
- identifier = `ytsearch:${previousTrack.info.author} - ${previousTrack.info.title}`;
135
+ if (source === 'youtube' || source === 'youtube music') {
136
+ identifier = `https://www.youtube.com/watch?v=${previousTrack.info.identifier}&list=RD${previousTrack.info.identifier}`;
61
137
  }
62
138
  else {
63
139
  identifier = `ytmsearch:${previousTrack.info.author} - ${previousTrack.info.title}`;
64
140
  }
65
141
  const res = await this.node.loadTracks(identifier);
66
142
  if (res && res.tracks && res.tracks.length > 0) {
67
- // Filter out current track?
68
- const nextTrack = res.tracks[0].track === previousTrack.track ? res.tracks[1] : res.tracks[0];
143
+ // Find first track that isn't already in history or queue
144
+ const nextTrack = res.tracks.find((t) => t.track !== previousTrack.track &&
145
+ !this.queue.previous.some(p => p.track === t.track) &&
146
+ !this.queue.tracks.some(q => q.track === t.track)) || res.tracks[0];
69
147
  if (nextTrack) {
70
148
  this.queue.add(nextTrack);
71
- this.play();
149
+ if (!this.isPlaying)
150
+ this.play();
151
+ this.manager.emit('autoplay', this, nextTrack);
72
152
  }
73
153
  }
74
154
  }
155
+ connect(options) {
156
+ this.voiceChannelId = options.voiceChannelId;
157
+ this.textChannelId = options.textChannelId || this.textChannelId;
158
+ this.manager.options.send(this.guildId, {
159
+ op: 4,
160
+ d: {
161
+ guild_id: this.guildId,
162
+ channel_id: this.voiceChannelId,
163
+ self_mute: options.selfMute ?? false,
164
+ self_deaf: options.selfDeaf ?? true
165
+ }
166
+ });
167
+ return this;
168
+ }
169
+ disconnect() {
170
+ this.voiceChannelId = null;
171
+ this.manager.options.send(this.guildId, {
172
+ op: 4,
173
+ d: {
174
+ guild_id: this.guildId,
175
+ channel_id: null,
176
+ self_mute: false,
177
+ self_deaf: false
178
+ }
179
+ });
180
+ return this;
181
+ }
182
+ toJSON() {
183
+ return {
184
+ guildId: this.guildId,
185
+ voiceChannelId: this.voiceChannelId,
186
+ textChannelId: this.textChannelId,
187
+ paused: this.paused,
188
+ isPlaying: this.isPlaying,
189
+ volume: 100, // Should probably track volume in player too
190
+ repeatMode: this.repeatMode,
191
+ autoplay: this.autoplay,
192
+ queue: this.queue.toJSON()
193
+ };
194
+ }
75
195
  stop() {
76
196
  this.isPlaying = false;
77
197
  this.node.send({
@@ -80,10 +200,11 @@ class Player {
80
200
  });
81
201
  }
82
202
  setVolume(volume) {
203
+ this.volume = volume;
83
204
  this.node.send({
84
205
  op: 'volume',
85
206
  guildId: this.guildId,
86
- volume: volume
207
+ volume: this.volume
87
208
  });
88
209
  }
89
210
  update(state) {
@@ -1 +1 @@
1
- {"version":3,"file":"Player.js","sourceRoot":"","sources":["../../src/structures/Player.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Player.js","sourceRoot":"","sources":["../../src/structures/Player.ts"],"names":[],"mappings":";;;AAEA,mCAAgC;AAahC,MAAa,MAAM;IAiBf,YAAY,OAAwB,EAAE,IAAkB,EAAE,OAAsB;QAbzE,mBAAc,GAAkB,IAAI,CAAC;QACrC,kBAAa,GAAkB,IAAI,CAAC;QACpC,aAAQ,GAAW,CAAC,CAAC;QACrB,WAAM,GAAY,KAAK,CAAC;QACxB,cAAS,GAAY,KAAK,CAAC;QAC3B,cAAS,GAAW,CAAC,CAAC;QACtB,WAAM,GAAW,GAAG,CAAC;QACrB,qBAAgB,GAAwC,EAAE,CAAC;QAE3D,aAAQ,GAAY,KAAK,CAAC;QAC1B,eAAU,GAAe,KAAK,CAAC;QAC/B,YAAO,GAAQ,EAAE,CAAC;QAGrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC;QACrD,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC;QACnD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,aAAK,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAEM,aAAa,CAAC,IAAgB;QACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,UAAU,CAAC,OAAY;QAC1B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,SAAS;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,GAAG,OAAO;SACb,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,YAAY,CAAC,KAAc;QAC9B,IAAI,KAAK,EAAE,CAAC;YACR,IAAI,CAAC,UAAU,CAAC;gBACZ,SAAS,EAAE;oBACP,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;oBACvB,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;oBACvB,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;oBACvB,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;iBAC1B;aACJ,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,YAAY,CAAC,KAAc;QAC9B,IAAI,KAAK,EAAE,CAAC;YACR,IAAI,CAAC,UAAU,CAAC;gBACZ,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;aACnD,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,KAAoB,EAAE,UAAe,EAAE;QACrD,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAC/B,IAAI,IAAI,EAAE,CAAC;gBACP,KAAK,GAAG,IAAI,CAAC;YACjB,CAAC;QACL,CAAC;QAED,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YAC/B,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAC/B,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACR,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC;YAClC,CAAC;YACD,OAAO;QACZ,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;QAE3B,MAAM,WAAW,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;QAEpE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,MAAM;YACV,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,WAAW;YAClB,GAAG,OAAO;SACb,CAAC,CAAC;IACP,CAAC;IAEM,IAAI;QACP,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,MAAM;YACV,OAAO,EAAE,IAAI,CAAC,OAAO;SACxB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,QAAQ;QACX,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QACvC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,QAAiB,IAAI;QAC9B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,OAAO;YACX,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,KAAK;SACf,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,MAAM;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAEM,IAAI,CAAC,QAAgB;QACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,MAAM;YACV,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ;SACX,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,eAAe;QACxB,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAChG,IAAI,CAAC,aAAa;YAAE,OAAO;QAE3B,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC;QAC9C,IAAI,UAAU,GAAG,EAAE,CAAC;QAEpB,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;YACrD,UAAU,GAAG,mCAAmC,aAAa,CAAC,IAAI,CAAC,UAAU,WAAW,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC5H,CAAC;aAAM,CAAC;YACJ,UAAU,GAAG,aAAa,aAAa,CAAC,IAAI,CAAC,MAAM,MAAM,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACxF,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,0DAA0D;YAC1D,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CACzC,CAAC,CAAC,KAAK,KAAK,aAAa,CAAC,KAAK;gBAC/B,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC;gBACnD,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,CACpD,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAEnB,IAAI,SAAS,EAAE,CAAC;gBACZ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,SAAS;oBAAE,IAAI,CAAC,IAAI,EAAE,CAAC;gBACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YACnD,CAAC;QACL,CAAC;IACL,CAAC;IAEM,OAAO,CAAC,OAAmG;QAC9G,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC;QAEjE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACpC,EAAE,EAAE,CAAC;YACL,CAAC,EAAE;gBACC,QAAQ,EAAE,IAAI,CAAC,OAAO;gBACtB,UAAU,EAAE,IAAI,CAAC,cAAc;gBAC/B,SAAS,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;gBACpC,SAAS,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI;aACtC;SACJ,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,UAAU;QACb,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACpC,EAAE,EAAE,CAAC;YACL,CAAC,EAAE;gBACC,QAAQ,EAAE,IAAI,CAAC,OAAO;gBACtB,UAAU,EAAE,IAAI;gBAChB,SAAS,EAAE,KAAK;gBAChB,SAAS,EAAE,KAAK;aACnB;SACJ,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,MAAM;QACT,OAAO;YACH,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,MAAM,EAAE,GAAG,EAAE,6CAA6C;YAC1D,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;SAC7B,CAAC;IACN,CAAC;IAEM,IAAI;QACP,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,MAAM;YACV,OAAO,EAAE,IAAI,CAAC,OAAO;SACxB,CAAC,CAAC;IACP,CAAC;IAEM,SAAS,CAAC,MAAc;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,QAAQ;YACZ,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;SACtB,CAAC,CAAC;IACP,CAAC;IAEM,MAAM,CAAC,KAAU;QACpB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IAChC,CAAC;IAEM,OAAO;QACV,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,SAAS;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;SACxB,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;CACJ;AArPD,wBAqPC"}
@@ -7,7 +7,19 @@ export declare class Queue {
7
7
  constructor(player: Player);
8
8
  add(track: any | any[]): void;
9
9
  next(): any | null;
10
+ remove(index: number): any;
11
+ move(from: number, to: number): void;
12
+ skipTo(index: number): any;
10
13
  clear(): void;
11
14
  shuffle(): void;
15
+ get size(): number;
16
+ get totalSize(): number;
17
+ get duration(): any;
18
+ removeDuplicates(): void;
19
+ toJSON(): {
20
+ current: any;
21
+ tracks: any[];
22
+ previous: any[];
23
+ };
12
24
  }
13
25
  //# sourceMappingURL=Queue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Queue.d.ts","sourceRoot":"","sources":["../../src/structures/Queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,qBAAa,KAAK;IACd,SAAgB,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,GAAG,EAAE,CAAM;IACnB,QAAQ,EAAE,GAAG,EAAE,CAAM;IACrB,OAAO,EAAE,GAAG,GAAG,IAAI,CAAQ;gBAEtB,MAAM,EAAE,MAAM;IAInB,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,EAAE;IAQtB,IAAI,IAAI,GAAG,GAAG,IAAI;IAUlB,KAAK;IAML,OAAO;CAMjB"}
1
+ {"version":3,"file":"Queue.d.ts","sourceRoot":"","sources":["../../src/structures/Queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,qBAAa,KAAK;IACd,SAAgB,MAAM,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,GAAG,EAAE,CAAM;IACnB,QAAQ,EAAE,GAAG,EAAE,CAAM;IACrB,OAAO,EAAE,GAAG,GAAG,IAAI,CAAQ;gBAEtB,MAAM,EAAE,MAAM;IAInB,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,EAAE;IAQtB,IAAI,IAAI,GAAG,GAAG,IAAI;IAUlB,MAAM,CAAC,KAAK,EAAE,MAAM;IAKpB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;IAM7B,MAAM,CAAC,KAAK,EAAE,MAAM;IASpB,KAAK;IAML,OAAO;IAOd,IAAW,IAAI,WAEd;IAED,IAAW,SAAS,WAEnB;IAED,IAAW,QAAQ,QAElB;IAEM,gBAAgB;IAMhB,MAAM;;;;;CAOhB"}
@@ -24,6 +24,27 @@ class Queue {
24
24
  this.current = nextTrack || null;
25
25
  return this.current;
26
26
  }
27
+ remove(index) {
28
+ if (index < 0 || index >= this.tracks.length)
29
+ return null;
30
+ return this.tracks.splice(index, 1)[0];
31
+ }
32
+ move(from, to) {
33
+ if (from < 0 || from >= this.tracks.length || to < 0 || to >= this.tracks.length)
34
+ return;
35
+ const [track] = this.tracks.splice(from, 1);
36
+ this.tracks.splice(to, 0, track);
37
+ }
38
+ skipTo(index) {
39
+ if (index < 0 || index >= this.tracks.length)
40
+ return null;
41
+ const skipped = this.tracks.splice(0, index);
42
+ if (this.current)
43
+ this.previous.push(this.current);
44
+ this.previous.push(...skipped);
45
+ this.current = this.tracks.shift() || null;
46
+ return this.current;
47
+ }
27
48
  clear() {
28
49
  this.tracks = [];
29
50
  this.previous = [];
@@ -35,6 +56,25 @@ class Queue {
35
56
  [this.tracks[i], this.tracks[j]] = [this.tracks[j], this.tracks[i]];
36
57
  }
37
58
  }
59
+ get size() {
60
+ return this.tracks.length;
61
+ }
62
+ get totalSize() {
63
+ return this.tracks.length + (this.current ? 1 : 0);
64
+ }
65
+ get duration() {
66
+ return this.tracks.reduce((acc, track) => acc + (track.info?.length || 0), 0) + (this.current?.info?.length || 0);
67
+ }
68
+ removeDuplicates() {
69
+ this.tracks = this.tracks.filter((track, index, self) => index === self.findIndex((t) => t.track === track.track));
70
+ }
71
+ toJSON() {
72
+ return {
73
+ current: this.current,
74
+ tracks: this.tracks,
75
+ previous: this.previous
76
+ };
77
+ }
38
78
  }
39
79
  exports.Queue = Queue;
40
80
  //# sourceMappingURL=Queue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Queue.js","sourceRoot":"","sources":["../../src/structures/Queue.ts"],"names":[],"mappings":";;;AAEA,MAAa,KAAK;IAMd,YAAY,MAAc;QAJnB,WAAM,GAAU,EAAE,CAAC;QACnB,aAAQ,GAAU,EAAE,CAAC;QACrB,YAAO,GAAe,IAAI,CAAC;QAG9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAEM,GAAG,CAAC,KAAkB;QACzB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IAEM,IAAI;QACP,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,SAAS,IAAI,IAAI,CAAC;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC;IAEM,OAAO;QACV,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9C,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,CAAC;IACL,CAAC;CACJ;AAxCD,sBAwCC"}
1
+ {"version":3,"file":"Queue.js","sourceRoot":"","sources":["../../src/structures/Queue.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ramkrishna-js/framelink",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "🚀 A lightweight, robust, and plugin-ready Lavalink client (v3 & v4) for Node.js.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",