@stella_project/stellalib 1.1.3 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +239 -1
- package/dist/Structures/Filters.d.ts.map +1 -1
- package/dist/Structures/Filters.js +15 -14
- package/dist/Structures/Filters.js.map +1 -1
- package/dist/Structures/Manager.d.ts +44 -1
- package/dist/Structures/Manager.d.ts.map +1 -1
- package/dist/Structures/Manager.js +184 -1
- package/dist/Structures/Manager.js.map +1 -1
- package/dist/Structures/Node.d.ts +2 -0
- package/dist/Structures/Node.d.ts.map +1 -1
- package/dist/Structures/Node.js +57 -5
- package/dist/Structures/Node.js.map +1 -1
- package/dist/Structures/Player.d.ts +101 -6
- package/dist/Structures/Player.d.ts.map +1 -1
- package/dist/Structures/Player.js +240 -10
- package/dist/Structures/Player.js.map +1 -1
- package/dist/Structures/Queue.d.ts +22 -0
- package/dist/Structures/Queue.d.ts.map +1 -1
- package/dist/Structures/Queue.js +87 -0
- package/dist/Structures/Queue.js.map +1 -1
- package/dist/Structures/Rest.d.ts +48 -1
- package/dist/Structures/Rest.d.ts.map +1 -1
- package/dist/Structures/Rest.js +171 -0
- package/dist/Structures/Rest.js.map +1 -1
- package/dist/Structures/Types.d.ts +117 -1
- package/dist/Structures/Types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -33,9 +33,14 @@
|
|
|
33
33
|
- [Inactivity Timeout](#inactivity-timeout)
|
|
34
34
|
- [Queue Limits & Deduplication](#queue-limits--deduplication)
|
|
35
35
|
- [Node Health Monitoring](#node-health-monitoring)
|
|
36
|
+
- [Zombie Node Detection](#zombie-node-detection)
|
|
37
|
+
- [REST Backpressure](#rest-backpressure)
|
|
38
|
+
- [Track Serialization (Memory Protection)](#track-serialization-memory-protection)
|
|
39
|
+
- [Voice Hot-Swapping](#voice-hot-swapping)
|
|
36
40
|
- [Smart Autoplay](#smart-autoplay)
|
|
37
41
|
- [Search with Fallback](#search-with-fallback)
|
|
38
42
|
- [Audio Filters](#audio-filters)
|
|
43
|
+
- [Plugin Support](#plugin-support)
|
|
39
44
|
- [Events Reference](#events-reference)
|
|
40
45
|
- [Configuration Reference](#configuration-reference)
|
|
41
46
|
- [Requirements](#requirements)
|
|
@@ -56,6 +61,11 @@ Unlike other Lavalink clients, StellaLib:
|
|
|
56
61
|
- **Has a smart autoplay engine** that picks the best next track based on listening history
|
|
57
62
|
- **Auto-failover** — when a node dies, players move to healthy nodes automatically
|
|
58
63
|
- **Proactive health monitoring** — detects overloaded nodes and migrates players *before* they crash
|
|
64
|
+
- **Zombie node detection** — catches frozen Lavalink processes that pass heartbeat checks but stop sending player updates
|
|
65
|
+
- **REST backpressure** — token bucket rate limiter prevents self-DDoS when 100+ users `/play` simultaneously
|
|
66
|
+
- **Voice hot-swapping** — silently reconnects voice when Discord rotates servers, instead of dropping audio
|
|
67
|
+
- **Memory protection** — compact queue serialization reduces RAM by 50-70% at scale
|
|
68
|
+
- **Plugin support** — SponsorBlock, LavaSearch, RoutePlanner, Crossfade, Auto-ducking, and Opus priority
|
|
59
69
|
- **Handles failures gracefully** with fast first reconnect, exponential backoff, rate limit retries, and search fallback
|
|
60
70
|
|
|
61
71
|
## How it Works
|
|
@@ -605,6 +615,137 @@ const manager = new StellaManager({
|
|
|
605
615
|
|
|
606
616
|
This is **proactive** failover — it moves players before they experience audio issues, unlike the reactive auto-failover which only triggers when a node dies.
|
|
607
617
|
|
|
618
|
+
## Zombie Node Detection
|
|
619
|
+
|
|
620
|
+
A Lavalink process can freeze internally (deadlock, GC pause, thread starvation) while its TCP connection stays alive — heartbeat pings still return, but `playerUpdate` messages stop. Players hear silence with no errors. StellaLib detects this:
|
|
621
|
+
|
|
622
|
+
```ts
|
|
623
|
+
const manager = new StellaManager({
|
|
624
|
+
zombieDetection: {
|
|
625
|
+
enabled: true, // Default: true
|
|
626
|
+
checkInterval: 20000, // Check every 20 seconds
|
|
627
|
+
maxSilence: 30000, // Flag as zombie after 30s without playerUpdate
|
|
628
|
+
},
|
|
629
|
+
// ...
|
|
630
|
+
});
|
|
631
|
+
|
|
632
|
+
manager.on("NodeZombie", (node, playersAffected, lastUpdate) => {
|
|
633
|
+
console.log(`🧟 Node ${node.options.identifier} is zombie! ${playersAffected} players affected`);
|
|
634
|
+
});
|
|
635
|
+
```
|
|
636
|
+
|
|
637
|
+
```
|
|
638
|
+
Zombie Detection (every 20s)
|
|
639
|
+
│
|
|
640
|
+
Node A: last playerUpdate 45s ago, 3 playing players ──► ZOMBIE!
|
|
641
|
+
Node B: last playerUpdate 2s ago ──► healthy
|
|
642
|
+
│
|
|
643
|
+
Move 3 players A → B, terminate A's socket → triggers reconnect
|
|
644
|
+
```
|
|
645
|
+
|
|
646
|
+
**How it works:**
|
|
647
|
+
1. Every `playerUpdate` WebSocket message updates `node.lastPlayerUpdate` timestamp
|
|
648
|
+
2. The Manager checks all connected nodes every 20s (configurable)
|
|
649
|
+
3. If a node has playing players but no `playerUpdate` in 30s → zombie
|
|
650
|
+
4. Players are seamlessly moved to healthy (non-zombie) nodes
|
|
651
|
+
5. The zombie node's socket is terminated, triggering the reconnect cycle
|
|
652
|
+
6. If no healthy nodes exist, the zombie socket is terminated to force reconnect
|
|
653
|
+
|
|
654
|
+
## REST Backpressure
|
|
655
|
+
|
|
656
|
+
When 100+ users run `/play` simultaneously, StellaLib can fire hundreds of REST requests at Lavalink in milliseconds. This causes 429 rate limits or even crashes. The token bucket rate limiter prevents this:
|
|
657
|
+
|
|
658
|
+
```ts
|
|
659
|
+
const manager = new StellaManager({
|
|
660
|
+
restBackpressure: {
|
|
661
|
+
enabled: true,
|
|
662
|
+
maxRequestsPerSecond: 20, // Sustained rate cap
|
|
663
|
+
bucketSize: 40, // Burst allowance
|
|
664
|
+
},
|
|
665
|
+
// ...
|
|
666
|
+
});
|
|
667
|
+
|
|
668
|
+
// Monitor queue depth
|
|
669
|
+
const stats = manager.getStats();
|
|
670
|
+
for (const node of stats.nodes) {
|
|
671
|
+
console.log(`Node ${node.identifier}: ${node.restRequests} requests, pending: ...`);
|
|
672
|
+
}
|
|
673
|
+
```
|
|
674
|
+
|
|
675
|
+
**How the token bucket works:**
|
|
676
|
+
- The bucket starts full with `bucketSize` tokens (default: 40)
|
|
677
|
+
- Each REST request consumes 1 token
|
|
678
|
+
- Tokens refill at `maxRequestsPerSecond` rate (default: 20/s)
|
|
679
|
+
- If the bucket is empty, requests wait in a FIFO queue until a token is available
|
|
680
|
+
- Bursts are allowed (up to 40 requests instantly), but sustained rate is capped at 20/s
|
|
681
|
+
|
|
682
|
+
```
|
|
683
|
+
Burst of 50 requests arrives:
|
|
684
|
+
[1-40] → sent immediately (bucket had 40 tokens)
|
|
685
|
+
[41-50] → queued, released at ~50ms intervals (20/s)
|
|
686
|
+
```
|
|
687
|
+
|
|
688
|
+
## Track Serialization (Memory Protection)
|
|
689
|
+
|
|
690
|
+
At scale (700+ servers, 50-track queues), each guild's queue holds full Track objects with artwork URLs, plugin metadata, ISRC codes, and custom data. This wastes RAM. `compactQueue()` strips heavy metadata, keeping only what Lavalink needs:
|
|
691
|
+
|
|
692
|
+
```ts
|
|
693
|
+
// Compact the queue to save memory
|
|
694
|
+
const compacted = player.queue.compactQueue();
|
|
695
|
+
console.log(`Compacted ${compacted} tracks`);
|
|
696
|
+
|
|
697
|
+
// Monitor memory usage
|
|
698
|
+
console.log(`Queue RAM: ~${(player.queue.memoryEstimate / 1024).toFixed(1)} KB`);
|
|
699
|
+
|
|
700
|
+
// Check if a specific track is compacted
|
|
701
|
+
if (StellaQueue.isCompacted(player.queue[0])) {
|
|
702
|
+
console.log("Track is in compact form");
|
|
703
|
+
}
|
|
704
|
+
```
|
|
705
|
+
|
|
706
|
+
**What's kept (playback essentials):**
|
|
707
|
+
- `track` (base64 encoded — the only thing Lavalink needs)
|
|
708
|
+
- `title`, `author`, `duration`, `uri`, `sourceName`, `identifier`
|
|
709
|
+
- `requester`, `isSeekable`, `isStream`
|
|
710
|
+
|
|
711
|
+
**What's stripped (heavy metadata):**
|
|
712
|
+
- `pluginInfo` (album art URLs, artist URLs, preview URLs)
|
|
713
|
+
- `customData` (user-attached data)
|
|
714
|
+
- `artworkUrl`, `thumbnail`, `isrc`
|
|
715
|
+
|
|
716
|
+
**Typical savings:** A 50-track queue drops from ~120KB to ~35KB per guild (~70% reduction).
|
|
717
|
+
|
|
718
|
+
## Voice Hot-Swapping
|
|
719
|
+
|
|
720
|
+
Discord periodically rotates voice servers (code 4015) or UDP connections desync (code 4000). Without handling, the player goes silent at 0:00 with no errors. StellaLib now silently re-identifies:
|
|
721
|
+
|
|
722
|
+
```ts
|
|
723
|
+
manager.on("VoiceReconnect", (player, code) => {
|
|
724
|
+
console.log(`🔄 Player ${player.guild} voice re-identified after code ${code}`);
|
|
725
|
+
});
|
|
726
|
+
```
|
|
727
|
+
|
|
728
|
+
**How it works:**
|
|
729
|
+
1. `socketClosed` event fires with code 4015 or 4000
|
|
730
|
+
2. Instead of cleaning up, StellaLib calls `player.reconnectVoice()`
|
|
731
|
+
3. A fresh voice state is sent to Discord (re-identify)
|
|
732
|
+
4. Discord responds with new token + endpoint
|
|
733
|
+
5. Playback resumes at the current position (~1s gap)
|
|
734
|
+
|
|
735
|
+
**Close code handling:**
|
|
736
|
+
|
|
737
|
+
| Code | Meaning | Action |
|
|
738
|
+
|---|---|---|
|
|
739
|
+
| **4000** | Unknown error (UDP desync) | Auto-reconnect voice |
|
|
740
|
+
| **4006** | Session invalid | Try reconnect, fall back to cleanup |
|
|
741
|
+
| **4014** | Disconnected (kicked from VC) | Clean up player |
|
|
742
|
+
| **4015** | Voice server changed | Auto-reconnect voice |
|
|
743
|
+
|
|
744
|
+
```ts
|
|
745
|
+
// You can also manually trigger a voice reconnect:
|
|
746
|
+
await player.reconnectVoice();
|
|
747
|
+
```
|
|
748
|
+
|
|
608
749
|
## Smart Autoplay
|
|
609
750
|
|
|
610
751
|
When the queue ends and autoplay is enabled, StellaLib's auto-mix engine picks the best next track.
|
|
@@ -661,6 +802,88 @@ const result = await manager.search("natori セレナーデ", userId);
|
|
|
661
802
|
| `tv` | Tinny speaker simulation |
|
|
662
803
|
| `distort` | Audio distortion effect |
|
|
663
804
|
|
|
805
|
+
## Plugin Support
|
|
806
|
+
|
|
807
|
+
### SponsorBlock (requires [SponsorBlock plugin](https://github.com/topi314/Sponsorblock-Plugin))
|
|
808
|
+
|
|
809
|
+
Auto-skip sponsor segments, intros, outros, and more:
|
|
810
|
+
|
|
811
|
+
```ts
|
|
812
|
+
// Enable SponsorBlock for a player
|
|
813
|
+
await player.setSponsorBlock(["sponsor", "selfpromo", "intro", "outro"]);
|
|
814
|
+
|
|
815
|
+
// Get current segments
|
|
816
|
+
const segments = await player.getSponsorBlock();
|
|
817
|
+
|
|
818
|
+
// Disable
|
|
819
|
+
await player.clearSponsorBlock();
|
|
820
|
+
|
|
821
|
+
manager.on("SegmentSkipped", (player, segment) => {
|
|
822
|
+
console.log(`Skipped ${segment.category} segment (${segment.start}ms - ${segment.end}ms)`);
|
|
823
|
+
});
|
|
824
|
+
```
|
|
825
|
+
|
|
826
|
+
### LavaSearch (requires [LavaSearch plugin](https://github.com/topi314/LavaSearch))
|
|
827
|
+
|
|
828
|
+
Structured search returning tracks, albums, artists, playlists, and text suggestions:
|
|
829
|
+
|
|
830
|
+
```ts
|
|
831
|
+
const results = await manager.lavaSearch({
|
|
832
|
+
query: "natori",
|
|
833
|
+
types: ["track", "album", "artist"],
|
|
834
|
+
source: "spsearch",
|
|
835
|
+
});
|
|
836
|
+
|
|
837
|
+
console.log(results.tracks); // Track[]
|
|
838
|
+
console.log(results.albums); // Album[]
|
|
839
|
+
console.log(results.artists); // Artist[]
|
|
840
|
+
```
|
|
841
|
+
|
|
842
|
+
### RoutePlanner API
|
|
843
|
+
|
|
844
|
+
IP rotation management for anti-429 monitoring:
|
|
845
|
+
|
|
846
|
+
```ts
|
|
847
|
+
const status = await manager.getRoutePlannerStatus();
|
|
848
|
+
await manager.freeRoutePlannerAddress("1.2.3.4");
|
|
849
|
+
await manager.freeAllRoutePlannerAddresses();
|
|
850
|
+
```
|
|
851
|
+
|
|
852
|
+
### Crossfade
|
|
853
|
+
|
|
854
|
+
Smooth volume fade-out transitions between tracks:
|
|
855
|
+
|
|
856
|
+
```ts
|
|
857
|
+
player.setCrossfade(3000); // 3 second crossfade
|
|
858
|
+
|
|
859
|
+
manager.on("CrossfadeStart", (player, currentTrack, nextTrack) => {
|
|
860
|
+
console.log(`Crossfading: ${currentTrack.title} → ${nextTrack.title}`);
|
|
861
|
+
});
|
|
862
|
+
```
|
|
863
|
+
|
|
864
|
+
### Auto-Ducking
|
|
865
|
+
|
|
866
|
+
Temporarily reduce music volume during TTS or voice announcements:
|
|
867
|
+
|
|
868
|
+
```ts
|
|
869
|
+
player.duck(10); // Reduce to volume 10
|
|
870
|
+
// ... play TTS ...
|
|
871
|
+
player.unduck(); // Restore original volume
|
|
872
|
+
|
|
873
|
+
console.log(player.isDucked); // true/false
|
|
874
|
+
```
|
|
875
|
+
|
|
876
|
+
### Opus Priority
|
|
877
|
+
|
|
878
|
+
Prefer Opus-native sources (SoundCloud, YouTube Music) in search results to reduce Lavalink CPU:
|
|
879
|
+
|
|
880
|
+
```ts
|
|
881
|
+
const manager = new StellaManager({
|
|
882
|
+
opusPriority: true, // Opus-native sources appear first in search results
|
|
883
|
+
// ...
|
|
884
|
+
});
|
|
885
|
+
```
|
|
886
|
+
|
|
664
887
|
## Events Reference
|
|
665
888
|
|
|
666
889
|
| Event | Parameters | Description |
|
|
@@ -672,6 +895,7 @@ const result = await manager.search("natori セレナーデ", userId);
|
|
|
672
895
|
| `NodeDestroy` | `(node)` | Node destroyed |
|
|
673
896
|
| `NodeError` | `(node, error)` | Error on node |
|
|
674
897
|
| `NodeRaw` | `(payload)` | Raw WebSocket message |
|
|
898
|
+
| `NodeZombie` | `(node, playersAffected, lastUpdate)` | Node detected as zombie (frozen) |
|
|
675
899
|
| `TrackStart` | `(player, track, payload)` | Track started playing |
|
|
676
900
|
| `TrackEnd` | `(player, track, payload)` | Track finished |
|
|
677
901
|
| `TrackStuck` | `(player, track, payload)` | Track got stuck |
|
|
@@ -684,6 +908,9 @@ const result = await manager.search("natori セレナーデ", userId);
|
|
|
684
908
|
| `PlayerStateUpdate` | `(oldPlayer, newPlayer)` | Player state changed |
|
|
685
909
|
| `PlayerFailover` | `(player, oldNode, newNode)` | Player seamlessly moved to a new node |
|
|
686
910
|
| `SocketClosed` | `(player, payload)` | Discord voice WebSocket closed for player |
|
|
911
|
+
| `SegmentSkipped` | `(player, segment)` | SponsorBlock segment auto-skipped |
|
|
912
|
+
| `CrossfadeStart` | `(player, currentTrack, nextTrack)` | Crossfade transition started |
|
|
913
|
+
| `VoiceReconnect` | `(player, code)` | Voice connection silently re-identified |
|
|
687
914
|
| `Debug` | `(message)` | Debug log message |
|
|
688
915
|
|
|
689
916
|
## Configuration Reference
|
|
@@ -700,13 +927,24 @@ interface ManagerOptions {
|
|
|
700
927
|
autoPlay?: boolean; // Enable autoplay on queue end
|
|
701
928
|
defaultSearchPlatform?: SearchPlatform;// Default search source
|
|
702
929
|
searchFallback?: string[]; // Fallback platforms
|
|
930
|
+
opusPriority?: boolean; // Prefer Opus-native sources in search results
|
|
703
931
|
sessionStore?: SessionStore; // Session persistence store
|
|
704
|
-
playerStateStore?: PlayerStateStore; // Full player state persistence
|
|
932
|
+
playerStateStore?: PlayerStateStore; // Full player state persistence
|
|
705
933
|
nodeHealthThresholds?: { // Proactive node health monitoring
|
|
706
934
|
maxCpuLoad?: number; // Max CPU load (0-1), default: 0.9
|
|
707
935
|
maxFrameDeficit?: number; // Max frame deficit, default: 500
|
|
708
936
|
checkInterval?: number; // Check interval (ms), default: 60000
|
|
709
937
|
};
|
|
938
|
+
zombieDetection?: { // Frozen node detection
|
|
939
|
+
enabled?: boolean; // Default: true
|
|
940
|
+
checkInterval?: number; // Check interval (ms), default: 20000
|
|
941
|
+
maxSilence?: number; // Max silence before zombie flag (ms), default: 30000
|
|
942
|
+
};
|
|
943
|
+
restBackpressure?: { // REST rate limiting (token bucket)
|
|
944
|
+
enabled?: boolean; // Default: false
|
|
945
|
+
maxRequestsPerSecond?: number; // Sustained rate cap, default: 20
|
|
946
|
+
bucketSize?: number; // Burst allowance, default: 40
|
|
947
|
+
};
|
|
710
948
|
caches?: {
|
|
711
949
|
enabled: boolean;
|
|
712
950
|
time: number; // TTL in ms
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Filters.d.ts","sourceRoot":"","sources":["../../src/Structures/Filters.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACN,IAAI,EAMJ,MAAM,4BAA4B,CAAC;AACpC,cAAM,OAAO;IACL,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,IAAI,EAAE,CAAC;IAClB,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,GAAG,CAAC;IACZ,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;IACjC,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACnC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IAEtB,OAAO,CAAC,YAAY,CAA0B;gBAElC,MAAM,EAAE,GAAG;YAwBT,aAAa;IAqB3B,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,eAAe;IAKvB;;;OAGG;IACI,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI;IAIzC,2CAA2C;IACpC,OAAO,IAAI,IAAI;IAatB,2DAA2D;IACpD,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI;IAOlE,6DAA6D;IACtD,YAAY,CAAC,SAAS,CAAC,EAAE,gBAAgB,GAAG,IAAI,GAAG,IAAI;IAI9D,2DAA2D;IACpD,UAAU,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI;IAIxD,4DAA4D;IACrD,WAAW,CAAC,QAAQ,CAAC,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IAI3D,8DAA8D;IACvD,aAAa,CAAC,UAAU,CAAC,EAAE,iBAAiB,GAAG,IAAI,GAAG,IAAI;IAIjE;;;OAGG;IACI,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAQvC;;;OAGG;IACI,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAY1C;;;OAGG;IACI,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAYvC;;;OAGG;IACI,OAAO,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAQrC;;;OAGG;IACI,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAQ3C;;;OAGG;IACI,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAQnC;;;OAGG;IACI,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAY1C;;;OAGG;IACI,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAQ1C;;;OAGG;IACI,UAAU,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAiBxC;;;;OAIG;IACU,SAAS,CAAC,MAAM,EAAE,MAAM,gBAAgB,GAAG,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"Filters.d.ts","sourceRoot":"","sources":["../../src/Structures/Filters.ts"],"names":[],"mappings":"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"}
|
|
@@ -198,14 +198,14 @@ class Filters {
|
|
|
198
198
|
*/
|
|
199
199
|
setVaporwave(status) {
|
|
200
200
|
if (status) {
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
201
|
+
this.applyFilter({ property: "equalizer", value: FiltersEqualizers_1.vaporwaveEqualizer }, false);
|
|
202
|
+
this.applyFilter({ property: "timescale", value: { pitch: 0.55 } }, true);
|
|
203
|
+
return this.setFilterStatus("vaporwave", status);
|
|
204
204
|
}
|
|
205
205
|
else {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
206
|
+
this.applyFilter({ property: "equalizer", value: [] }, false);
|
|
207
|
+
this.applyFilter({ property: "timescale", value: null }, true);
|
|
208
|
+
return this.setFilterStatus("vaporwave", status);
|
|
209
209
|
}
|
|
210
210
|
}
|
|
211
211
|
/**
|
|
@@ -279,7 +279,8 @@ class Filters {
|
|
|
279
279
|
break;
|
|
280
280
|
default: throw new Error(`Invalid filter: "${filter}"`);
|
|
281
281
|
}
|
|
282
|
-
|
|
282
|
+
// Note: individual filter methods already call updateFilters() via applyFilter(),
|
|
283
|
+
// so we don't need to call it again here.
|
|
283
284
|
return this;
|
|
284
285
|
}
|
|
285
286
|
/** Removes all audio effects and resets the filter status. */
|
|
@@ -296,13 +297,13 @@ class Filters {
|
|
|
296
297
|
tv: false,
|
|
297
298
|
vaporwave: false,
|
|
298
299
|
};
|
|
299
|
-
this.
|
|
300
|
-
this.
|
|
301
|
-
this.
|
|
302
|
-
this.
|
|
303
|
-
this.
|
|
304
|
-
this.
|
|
305
|
-
this.
|
|
300
|
+
this.distortion = null;
|
|
301
|
+
this.equalizer = [];
|
|
302
|
+
this.karaoke = null;
|
|
303
|
+
this.rotation = null;
|
|
304
|
+
this.timescale = null;
|
|
305
|
+
this.vibrato = null;
|
|
306
|
+
this.volume = 1.0;
|
|
306
307
|
await this.updateFilters();
|
|
307
308
|
return this;
|
|
308
309
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Filters.js","sourceRoot":"","sources":["../../src/Structures/Filters.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Filters.js","sourceRoot":"","sources":["../../src/Structures/Filters.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Derived from LithiumX — Copyright (c) 2025 Anantix Network (MIT)
|
|
5
5
|
* See LICENSE and THIRD-PARTY-NOTICES.md for full license details.
|
|
6
6
|
*/
|
|
7
|
-
import type { NodeOptions, PlayerOptions, TrackData, VoicePacket, VoiceServer, VoiceStateUpdate, SearchPlatform, SearchQuery, SearchResult, ManagerOptions, ManagerEvents, PlayerStateStore } from "./Types";
|
|
7
|
+
import type { NodeOptions, PlayerOptions, TrackData, VoicePacket, VoiceServer, VoiceStateUpdate, SearchPlatform, SearchQuery, SearchResult, ManagerOptions, ManagerEvents, PlayerStateStore, LavaSearchQuery, LavaSearchResult, RoutePlannerStatus } from "./Types";
|
|
8
8
|
import type { StellaNode } from "./Node";
|
|
9
9
|
import type { StellaPlayer } from "./Player";
|
|
10
10
|
import { LRUCache } from "./LRUCache";
|
|
@@ -29,6 +29,8 @@ declare class StellaManager extends TypedEmitter<ManagerEvents> {
|
|
|
29
29
|
private pruneInterval?;
|
|
30
30
|
/** Reference to node health check interval for cleanup. */
|
|
31
31
|
private healthCheckInterval?;
|
|
32
|
+
/** Reference to zombie detection interval for cleanup. */
|
|
33
|
+
private zombieCheckInterval?;
|
|
32
34
|
/** Returns the nodes sorted by least CPU load. */
|
|
33
35
|
get leastLoadNode(): Map<string, StellaNode>;
|
|
34
36
|
/** Returns the nodes sorted by least amount of players. */
|
|
@@ -49,6 +51,12 @@ declare class StellaManager extends TypedEmitter<ManagerEvents> {
|
|
|
49
51
|
* @param clientId
|
|
50
52
|
*/
|
|
51
53
|
init(clientId?: string): this;
|
|
54
|
+
/**
|
|
55
|
+
* Detects "zombie" nodes: connected but no longer sending playerUpdates.
|
|
56
|
+
* This catches frozen Lavalink processes that pass TCP/heartbeat checks but
|
|
57
|
+
* have internally deadlocked. Players on zombie nodes hear silence.
|
|
58
|
+
*/
|
|
59
|
+
private checkZombieNodes;
|
|
52
60
|
/**
|
|
53
61
|
* Checks node health and preemptively migrates players from overloaded nodes.
|
|
54
62
|
* Called periodically when `nodeHealthThresholds` is configured.
|
|
@@ -71,6 +79,40 @@ declare class StellaManager extends TypedEmitter<ManagerEvents> {
|
|
|
71
79
|
version: string;
|
|
72
80
|
}[];
|
|
73
81
|
}>;
|
|
82
|
+
/**
|
|
83
|
+
* Performs a structured search using the LavaSearch Lavalink plugin.
|
|
84
|
+
* Returns rich results including tracks, albums, artists, playlists, and text suggestions.
|
|
85
|
+
* Requires the LavaSearch plugin to be installed on the Lavalink server.
|
|
86
|
+
*
|
|
87
|
+
* @param query The search query or LavaSearchQuery object.
|
|
88
|
+
* @param requester The user who requested the search.
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* const results = await manager.lavaSearch({ query: "Daft Punk", source: "spotify", types: ["track", "album", "artist"] });
|
|
92
|
+
* console.log(results.tracks, results.albums, results.artists);
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
lavaSearch(query: string | LavaSearchQuery, requester?: string): Promise<LavaSearchResult>;
|
|
96
|
+
/**
|
|
97
|
+
* Gets the current RoutePlanner status from the Lavalink server.
|
|
98
|
+
* Useful for monitoring IP rotation and identifying failing addresses.
|
|
99
|
+
*
|
|
100
|
+
* @param nodeIdentifier Optional specific node to query. Defaults to best available.
|
|
101
|
+
*/
|
|
102
|
+
getRoutePlannerStatus(nodeIdentifier?: string): Promise<RoutePlannerStatus>;
|
|
103
|
+
/**
|
|
104
|
+
* Unmarks a specific IP address as failing in the RoutePlanner.
|
|
105
|
+
*
|
|
106
|
+
* @param address The IP address to free.
|
|
107
|
+
* @param nodeIdentifier Optional specific node. Defaults to best available.
|
|
108
|
+
*/
|
|
109
|
+
freeRoutePlannerAddress(address: string, nodeIdentifier?: string): Promise<void>;
|
|
110
|
+
/**
|
|
111
|
+
* Unmarks all failing IP addresses in the RoutePlanner.
|
|
112
|
+
*
|
|
113
|
+
* @param nodeIdentifier Optional specific node. Defaults to best available.
|
|
114
|
+
*/
|
|
115
|
+
freeAllRoutePlannerAddresses(nodeIdentifier?: string): Promise<void>;
|
|
74
116
|
/**
|
|
75
117
|
* Decodes the base64 encoded tracks and returns a TrackData array.
|
|
76
118
|
* @param tracks
|
|
@@ -93,6 +135,7 @@ declare class StellaManager extends TypedEmitter<ManagerEvents> {
|
|
|
93
135
|
get(guild: string): StellaPlayer | undefined;
|
|
94
136
|
/**
|
|
95
137
|
* Destroys a player if it exists.
|
|
138
|
+
* Properly cleans up the player (disconnects, stops timers) before removing.
|
|
96
139
|
* @param guild
|
|
97
140
|
*/
|
|
98
141
|
destroy(guild: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Manager.d.ts","sourceRoot":"","sources":["../../src/Structures/Manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAEX,WAAW,EACX,aAAa,EAGb,SAAS,EAKT,WAAW,EACX,WAAW,EACX,gBAAgB,EAEhB,cAAc,EACd,WAAW,EACX,YAAY,EAIZ,cAAc,EACd,aAAa,EAEb,gBAAgB,EAChB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD;;GAEG;AACH,cAAM,aAAc,SAAQ,YAAY,CAAC,aAAa,CAAC;IACtD,gBAAuB,eAAe,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAUpE;IAEF,0BAA0B;IAC1B,SAAgB,OAAO,4BAAmC;IAC1D,wBAAwB;IACxB,SAAgB,KAAK,0BAAiC;IACtD,iCAAiC;IACjC,SAAgB,OAAO,EAAE,cAAc,CAAC;IACxC,OAAO,CAAC,SAAS,CAAS;IAC1B,wDAAwD;IACjD,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC9C,4CAA4C;IAC5C,OAAO,CAAC,YAAY,CAAS;IAC7B,qDAAqD;IACrD,OAAO,CAAC,aAAa,CAAC,CAAiC;IACvD,2DAA2D;IAC3D,OAAO,CAAC,mBAAmB,CAAC,CAAiC;IAE7D,kDAAkD;IAClD,IAAW,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAalD;IAED,2DAA2D;IAC3D,OAAO,KAAK,gBAAgB,GAK3B;IAED,yEAAyE;IACzE,IAAW,gBAAgB,IAAI,UAAU,GAAG,SAAS,CAMpD;IAED,wCAAwC;IACxC,OAAO,KAAK,YAAY,GAqBvB;IAED,2DAA2D;IAC3D,IAAW,YAAY,IAAI,UAAU,CAYpC;IAED;;;OAGG;gBACS,OAAO,EAAE,cAAc;IAkEnC;;;OAGG;IACI,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"Manager.d.ts","sourceRoot":"","sources":["../../src/Structures/Manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAEX,WAAW,EACX,aAAa,EAGb,SAAS,EAKT,WAAW,EACX,WAAW,EACX,gBAAgB,EAEhB,cAAc,EACd,WAAW,EACX,YAAY,EAIZ,cAAc,EACd,aAAa,EAEb,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAIhB,kBAAkB,EAClB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD;;GAEG;AACH,cAAM,aAAc,SAAQ,YAAY,CAAC,aAAa,CAAC;IACtD,gBAAuB,eAAe,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAUpE;IAEF,0BAA0B;IAC1B,SAAgB,OAAO,4BAAmC;IAC1D,wBAAwB;IACxB,SAAgB,KAAK,0BAAiC;IACtD,iCAAiC;IACjC,SAAgB,OAAO,EAAE,cAAc,CAAC;IACxC,OAAO,CAAC,SAAS,CAAS;IAC1B,wDAAwD;IACjD,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC9C,4CAA4C;IAC5C,OAAO,CAAC,YAAY,CAAS;IAC7B,qDAAqD;IACrD,OAAO,CAAC,aAAa,CAAC,CAAiC;IACvD,2DAA2D;IAC3D,OAAO,CAAC,mBAAmB,CAAC,CAAiC;IAC7D,0DAA0D;IAC1D,OAAO,CAAC,mBAAmB,CAAC,CAAiC;IAE7D,kDAAkD;IAClD,IAAW,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAalD;IAED,2DAA2D;IAC3D,OAAO,KAAK,gBAAgB,GAK3B;IAED,yEAAyE;IACzE,IAAW,gBAAgB,IAAI,UAAU,GAAG,SAAS,CAMpD;IAED,wCAAwC;IACxC,OAAO,KAAK,YAAY,GAqBvB;IAED,2DAA2D;IAC3D,IAAW,YAAY,IAAI,UAAU,CAYpC;IAED;;;OAGG;gBACS,OAAO,EAAE,cAAc;IAkEnC;;;OAGG;IACI,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAsCpC;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAyExB;;;OAGG;IACH,OAAO,CAAC,eAAe;IA8CvB;;;;OAIG;IACU,MAAM,CAClB,KAAK,EAAE,MAAM,GAAG,WAAW,EAC3B,SAAS,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC;IA0JxB;;;OAGG;IACU,mBAAmB,IAAI,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC;IAgBvH;;;;;;;;;;;;OAYG;IACU,UAAU,CACtB,KAAK,EAAE,MAAM,GAAG,eAAe,EAC/B,SAAS,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,CAAC;IAwC5B;;;;;OAKG;IACU,qBAAqB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQxF;;;;;OAKG;IACU,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ7F;;;;OAIG;IACU,4BAA4B,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjF;;;OAGG;IACU,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IASjE;;;OAGG;IACU,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAK3D;;;OAGG;IACI,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,YAAY;IAOnD;;;OAGG;IACI,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAInD;;;;OAIG;IACI,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IASnC;;;OAGG;IACI,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU;IAOnD;;;;OAIG;IACI,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAM5C;;;OAGG;IACI,mBAAmB,IAAI,gBAAgB,GAAG,IAAI;IAUrD;;;;;OAKG;IACU,gBAAgB,CAC5B,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,gBAAgB,GAChD,OAAO,CAAC,IAAI,CAAC;IAqFhB;;;;;;;;;;;OAWG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAuDtC;;OAEG;IACI,QAAQ,IAAI;QAClB,KAAK,EAAE;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,OAAO,CAAC;YAAC,OAAO,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAC;gBAAC,SAAS,EAAE,MAAM,CAAA;aAAE,CAAC;YAAC,YAAY,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACrO,YAAY,EAAE,MAAM,CAAC;QACrB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,SAAS,EAAE,MAAM,CAAC;QAClB,mBAAmB,EAAE,MAAM,CAAC;KAC5B;CAyBD;AAED,OAAO,EAAE,aAAa,EAAE,CAAC"}
|