yukimu 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cache/replit/modules/nodejs-20.res +1 -0
- package/.cache/replit/modules/replit.res +1 -0
- package/.cache/replit/modules.stamp +0 -0
- package/.cache/replit/nix/dotreplitenv.json +1 -0
- package/.cache/replit/toolchain.json +1 -0
- package/.local/state/workflow-logs/7zVU0iVo-fBL1ccMCmELy/configure_your_app.packager.installForAll.0 +9 -0
- package/.local/state/workflow-logs/7zVU0iVo-fBL1ccMCmELy/configure_your_app.shell.exec.1 +1 -0
- package/.local/state/workflow-logs/U0AinJQVHonnwGjj0RXLn/configure_your_app.packager.installForAll.0 +2 -0
- package/.replit +4 -0
- package/.upm/store.json +1 -0
- package/README.md +152 -0
- package/dist/Node.d.ts +32 -0
- package/dist/Node.d.ts.map +1 -0
- package/dist/Node.js +186 -0
- package/dist/Node.js.map +1 -0
- package/dist/Player.d.ts +63 -0
- package/dist/Player.d.ts.map +1 -0
- package/dist/Player.js +205 -0
- package/dist/Player.js.map +1 -0
- package/dist/Queue.d.ts +29 -0
- package/dist/Queue.d.ts.map +1 -0
- package/dist/Queue.js +75 -0
- package/dist/Queue.js.map +1 -0
- package/dist/Resolver.d.ts +30 -0
- package/dist/Resolver.d.ts.map +1 -0
- package/dist/Resolver.js +121 -0
- package/dist/Resolver.js.map +1 -0
- package/dist/Yukimu.d.ts +59 -0
- package/dist/Yukimu.d.ts.map +1 -0
- package/dist/Yukimu.js +135 -0
- package/dist/Yukimu.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +137 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -0
- package/package.json +24 -0
- package/src/Node.ts +326 -0
- package/src/Player.ts +245 -0
- package/src/Queue.ts +82 -0
- package/src/Resolver.ts +127 -0
- package/src/Yukimu.ts +177 -0
- package/src/index.ts +6 -0
- package/src/types.ts +178 -0
- package/tsconfig.json +18 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"resolve","resolvedModuleId":"nodejs-20","inputHash":"","resolutionPath":["nodejs-20"],"error":"","Changed":true}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"resolve","resolvedModuleId":"replit","inputHash":"","resolutionPath":["replit"],"error":"","Changed":true}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"channel":"","channel_nix_path":"/nix/store/42iv6n6l2izliq7lhy3gsaqsycj6np1h-nixpkgs/nixpkgs","env":null,"packages":null}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"runs":[{"id":"module:nodejs-20/runner:nodeJS", "name":"Node.js", "fileParam":true, "language":"javascript", "fileTypeAttrs":{}, "displayVersion":"20.20.0", "run":{"command":{"args":["sh", "-c", "/nix/store/1lagpgadaybvs1n2312gysg2phjk89y8-nodejs-20.20.0-wrapped/bin/node $file"]}}, "defaultEntrypoints":["index.js", "main.js"]}], "languageServers":[{"id":"module:nodejs-20/languageServer:typescript-language-server", "name":"TypeScript Language Server", "language":"javascript", "fileTypeAttrs":{"extensions":[".js", ".jsx", ".ts", ".tsx", ".mjs", ".mts", ".cjs", ".cts", ".es6", ".json"]}, "config":{"startCommand":{"args":["sh", "-c", "/nix/store/pkx0287w1vx971gahfkggqa59v35d4bm-typescript-language-server-5.1.3/bin/typescript-language-server --stdio"]}, "initializationOptionsJson":"{\"disableAutomaticTypingAcquisition\":true,\"maxTsServerMemory\":1536,\"tsserver\":{\"fallbackPath\":\"/nix/store/6wjhsy7rpyxbpl65grd5a8aq96b50i8a-typescript-5.9.3/lib/node_modules/typescript/lib\"}}"}, "displayVersion":"5.1.3"}, {"id":"module:replit/languageServer:dotreplit-lsp", "name":".replit LSP", "language":"dotreplit", "fileTypeAttrs":{}, "config":{"startCommand":{"args":["sh", "-c", "/nix/store/qq4mijbp008lc0r1h42jy3fhwakqz6nf-taplo-0.patched/bin/taplo lsp -c /nix/store/7nplpw32gfk08i6d1v3wmwj3b1qd0apw-taplo-config.toml stdio"]}}}], "packagers":[{"id":"module:nodejs-20/packager:upmNodejs", "name":"Node.js packager (npm, yarn, pnpm, bun)", "language":"nodejs", "packageSearch":true, "guessImports":true}], "formatters":[{"id":"module:nodejs-20/formatter:prettier", "name":"Prettier", "startCommand":{"args":["/nix/store/h0yq53vj17w8bqs8bdldg2kg1llkqi7i-run-prettier/bin/run-prettier"], "lifecycle":"STDIN", "splitStderr":true}, "fileTypeAttrs":{"extensions":[".js", ".jsx", ".ts", ".tsx", ".json", ".html"]}, "displayVersion":"3.6.2", "supportsRangeFormatting":true}, {"id":"module:nodejs-20/languageServer:typescript-language-server", "name":"TypeScript Language Server", "fileTypeAttrs":{"extensions":[".js", ".jsx", ".ts", ".tsx", ".mjs", ".mts", ".cjs", ".cts", ".es6", ".json"]}, "displayVersion":"5.1.3"}, {"id":"module:replit/languageServer:dotreplit-lsp", "name":".replit LSP", "fileTypeAttrs":{}}]}
|
package/.local/state/workflow-logs/7zVU0iVo-fBL1ccMCmELy/configure_your_app.packager.installForAll.0
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
--> npm install
|
|
2
|
+
[1G[0Kβ [1G[0Kβ Ή[1G[0Kβ Έ[1G[0Kβ Ό[1G[0Kβ ΄[1G[0K
|
|
3
|
+
up to date, audited 28 packages in 657ms
|
|
4
|
+
[1G[0Kβ ΄[1G[0K
|
|
5
|
+
[1G[0Kβ ΄[1G[0K7 packages are looking for funding
|
|
6
|
+
[1G[0Kβ ΄[1G[0K run `npm fund` for details
|
|
7
|
+
[1G[0Kβ ΄[1G[0K
|
|
8
|
+
found [32m[1m0[22m[39m vulnerabilities
|
|
9
|
+
[1G[0Kβ ΄[1G[0K
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Please use the [1;93mξΊ§Workflows[0m pane to configure your app. For more info, see: https://docs.replit.com/replit-workspace/workflows#creating-workflows
|
package/.replit
ADDED
package/.upm/store.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":2,"languages":{"nodejs-npm":{"specfileHash":"305f2ee63ccbb188aa67eb515c9baf60","lockfileHash":"993e663e31dc86082c38db12d1e2c218"}}}
|
package/README.md
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Yukimu π΅
|
|
2
|
+
|
|
3
|
+
A powerful **Lavalink v4** wrapper for Discord bots β built like Shoukaku.
|
|
4
|
+
|
|
5
|
+
Supports: YouTube Β· YouTube Music Β· Spotify Β· Deezer Β· Apple Music Β· JioSaavn Β· Tidal Β· SoundCloud Β· Yandex Music
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Requirements
|
|
10
|
+
|
|
11
|
+
- Node.js 18+
|
|
12
|
+
- A running **Lavalink v4** server
|
|
13
|
+
- **LavaSrc plugin** on your Lavalink server (for Spotify, Deezer, Apple Music, Tidal, JioSaavn)
|
|
14
|
+
|
|
15
|
+
## Install
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install yukimu ws
|
|
19
|
+
npm install -D typescript @types/node @types/ws
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Lavalink Setup
|
|
23
|
+
|
|
24
|
+
Your `application.yml` needs the LavaSrc plugin for multi-source support:
|
|
25
|
+
|
|
26
|
+
```yaml
|
|
27
|
+
lavalink:
|
|
28
|
+
plugins:
|
|
29
|
+
- dependency: "com.github.topi314.lavasrc:lavasrc-plugin:4.3.0"
|
|
30
|
+
repository: "https://maven.topi.wtf/releases"
|
|
31
|
+
|
|
32
|
+
plugins:
|
|
33
|
+
lavasrc:
|
|
34
|
+
providers:
|
|
35
|
+
- "ytsearch:\"%ISRC%\""
|
|
36
|
+
- "ytsearch:%QUERY%"
|
|
37
|
+
sources:
|
|
38
|
+
spotify: true
|
|
39
|
+
appleMusic: true
|
|
40
|
+
deezer: true
|
|
41
|
+
yandexMusic: true
|
|
42
|
+
jiosaavn: true
|
|
43
|
+
spotify:
|
|
44
|
+
clientId: "YOUR_SPOTIFY_CLIENT_ID"
|
|
45
|
+
clientSecret: "YOUR_SPOTIFY_CLIENT_SECRET"
|
|
46
|
+
appleMusic:
|
|
47
|
+
mediaAPIToken: "YOUR_APPLE_MUSIC_TOKEN"
|
|
48
|
+
deezer:
|
|
49
|
+
masterDecryptionKey: "YOUR_DEEZER_KEY"
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Quick Start
|
|
53
|
+
|
|
54
|
+
```ts
|
|
55
|
+
import { Client, GatewayIntentBits } from "discord.js";
|
|
56
|
+
import { Yukimu } from "yukimu";
|
|
57
|
+
|
|
58
|
+
const client = new Client({ intents: [...] });
|
|
59
|
+
|
|
60
|
+
const yukimu = new Yukimu({
|
|
61
|
+
clientId: "BOT_ID",
|
|
62
|
+
token: "BOT_TOKEN",
|
|
63
|
+
nodes: [{
|
|
64
|
+
name: "main",
|
|
65
|
+
host: "localhost",
|
|
66
|
+
port: 2333,
|
|
67
|
+
password: "youshallnotpass",
|
|
68
|
+
}],
|
|
69
|
+
defaultSource: "youtube",
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// Required: forward voice payloads
|
|
73
|
+
yukimu.sendPayload = (guildId, payload) => {
|
|
74
|
+
client.guilds.cache.get(guildId)?.shard.send(payload);
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// Required: forward voice events
|
|
78
|
+
client.on("raw", (packet) => {
|
|
79
|
+
if (packet.t === "VOICE_STATE_UPDATE") yukimu.handleVoiceStateUpdate(packet.d);
|
|
80
|
+
if (packet.t === "VOICE_SERVER_UPDATE") yukimu.handleVoiceServerUpdate(packet.d);
|
|
81
|
+
});
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Search Examples
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
// Search YouTube (default)
|
|
88
|
+
const result = await yukimu.search("never gonna give you up");
|
|
89
|
+
|
|
90
|
+
// Search Spotify
|
|
91
|
+
const result = await yukimu.search("blinding lights", "spotify");
|
|
92
|
+
|
|
93
|
+
// Direct URL (any platform)
|
|
94
|
+
const result = await yukimu.search("https://open.spotify.com/track/...");
|
|
95
|
+
const result = await yukimu.search("https://www.jiosaavn.com/song/...");
|
|
96
|
+
const result = await yukimu.search("https://tidal.com/browse/track/...");
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Player API
|
|
100
|
+
|
|
101
|
+
```ts
|
|
102
|
+
const player = yukimu.createPlayer({
|
|
103
|
+
guildId: "123",
|
|
104
|
+
voiceChannelId: "456",
|
|
105
|
+
selfDeaf: true,
|
|
106
|
+
volume: 80,
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
await player.add(track); // Add & auto-play
|
|
110
|
+
await player.pause(); // Pause
|
|
111
|
+
await player.resume(); // Resume
|
|
112
|
+
await player.skip(); // Skip
|
|
113
|
+
await player.seek(30000); // Seek to 30s
|
|
114
|
+
await player.setVolume(80); // Volume 0-1000
|
|
115
|
+
await player.setBassBoost("high"); // Bass boost
|
|
116
|
+
await player.setNightcore(true); // Nightcore
|
|
117
|
+
await player.set8D(true); // 8D audio
|
|
118
|
+
await player.clearFilters(); // Clear all filters
|
|
119
|
+
player.queue.shuffle(); // Shuffle queue
|
|
120
|
+
player.setLoop("track"); // Loop: none | track | queue
|
|
121
|
+
yukimu.destroyPlayer(guildId); // Disconnect
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Events
|
|
125
|
+
|
|
126
|
+
```ts
|
|
127
|
+
yukimu.on("nodeReady", (node) => {});
|
|
128
|
+
yukimu.on("trackStart", (player, track) => {});
|
|
129
|
+
yukimu.on("trackEnd", (player, track, reason) => {});
|
|
130
|
+
yukimu.on("trackError", (player, track, exception) => {});
|
|
131
|
+
yukimu.on("queueEnd", (player) => {});
|
|
132
|
+
yukimu.on("nodeDisconnect", (node, code, reason) => {});
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Supported Sources
|
|
136
|
+
|
|
137
|
+
| Source | Search | Direct URL | Requires |
|
|
138
|
+
|--------|--------|------------|---------|
|
|
139
|
+
| YouTube | β
| β
| Lavalink default |
|
|
140
|
+
| YouTube Music | β
| β
| Lavalink default |
|
|
141
|
+
| SoundCloud | β
| β
| Lavalink default |
|
|
142
|
+
| Spotify | β
| β
| LavaSrc plugin |
|
|
143
|
+
| Deezer | β
| β
| LavaSrc plugin |
|
|
144
|
+
| Apple Music | β
| β
| LavaSrc plugin |
|
|
145
|
+
| Tidal | β
| β
| LavaSrc plugin |
|
|
146
|
+
| JioSaavn | β
| β
| LavaSrc plugin |
|
|
147
|
+
| Yandex Music | β
| β
| LavaSrc plugin |
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
MIT License
|
|
152
|
+
|
package/dist/Node.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import WebSocket from "ws";
|
|
2
|
+
import { NodeOptions, NodeStats, Track } from "./types";
|
|
3
|
+
import type { Yukimu } from "./Yukimu";
|
|
4
|
+
export declare class Node {
|
|
5
|
+
readonly manager: Yukimu;
|
|
6
|
+
readonly options: NodeOptions;
|
|
7
|
+
ws: WebSocket | null;
|
|
8
|
+
connected: boolean;
|
|
9
|
+
stats: NodeStats | null;
|
|
10
|
+
sessionId: string | null;
|
|
11
|
+
private reconnectAttempts;
|
|
12
|
+
private reconnectTimeout?;
|
|
13
|
+
constructor(manager: Yukimu, options: NodeOptions);
|
|
14
|
+
get wsUrl(): string;
|
|
15
|
+
get restUrl(): string;
|
|
16
|
+
get headers(): Record<string, string>;
|
|
17
|
+
connect(): void;
|
|
18
|
+
destroy(): void;
|
|
19
|
+
private onOpen;
|
|
20
|
+
private onMessage;
|
|
21
|
+
private onClose;
|
|
22
|
+
private onError;
|
|
23
|
+
private scheduleReconnect;
|
|
24
|
+
private handlePlayerUpdate;
|
|
25
|
+
private handleEvent;
|
|
26
|
+
request<T = unknown>(method: string, path: string, body?: unknown): Promise<T>;
|
|
27
|
+
/** Load tracks from Lavalink */
|
|
28
|
+
loadTracks(identifier: string): Promise<import("./types").SearchResult>;
|
|
29
|
+
/** Decode a single track */
|
|
30
|
+
decodeTrack(encoded: string): Promise<Track>;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=Node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Node.d.ts","sourceRoot":"","sources":["../src/Node.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAqB,MAAM,SAAS,CAAC;AAC3E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIvC,qBAAa,IAAI;IACf,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,OAAO,EAAE,WAAW,CAAC;IAC9B,EAAE,EAAE,SAAS,GAAG,IAAI,CAAQ;IAC5B,SAAS,EAAE,OAAO,CAAS;IAC3B,KAAK,EAAE,SAAS,GAAG,IAAI,CAAQ;IAC/B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEvC,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,gBAAgB,CAAC,CAAgC;gBAE7C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW;IAWjD,IAAI,KAAK,IAAI,MAAM,CAGlB;IAED,IAAI,OAAO,IAAI,MAAM,CAGpB;IAED,IAAI,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMpC;IAEM,OAAO,IAAI,IAAI;IAWf,OAAO,IAAI,IAAI;IAUtB,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,SAAS;IA6BjB,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,WAAW;IAyCN,OAAO,CAAC,CAAC,GAAG,OAAO,EAC9B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC,CAAC,CAAC;IAsBb,gCAAgC;IACnB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,SAAS,EAAE,YAAY,CAAC;IAIpF,4BAA4B;IACf,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;CAG1D"}
|
package/dist/Node.js
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Node = void 0;
|
|
7
|
+
const ws_1 = __importDefault(require("ws"));
|
|
8
|
+
const LAVALINK_API_VERSION = "v4";
|
|
9
|
+
class Node {
|
|
10
|
+
constructor(manager, options) {
|
|
11
|
+
this.ws = null;
|
|
12
|
+
this.connected = false;
|
|
13
|
+
this.stats = null;
|
|
14
|
+
this.sessionId = null;
|
|
15
|
+
this.reconnectAttempts = 0;
|
|
16
|
+
this.manager = manager;
|
|
17
|
+
this.options = {
|
|
18
|
+
secure: false,
|
|
19
|
+
retries: 5,
|
|
20
|
+
...options,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
// βββ Connection βββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
24
|
+
get wsUrl() {
|
|
25
|
+
const protocol = this.options.secure ? "wss" : "ws";
|
|
26
|
+
return `${protocol}://${this.options.host}:${this.options.port}/${LAVALINK_API_VERSION}/websocket`;
|
|
27
|
+
}
|
|
28
|
+
get restUrl() {
|
|
29
|
+
const protocol = this.options.secure ? "https" : "http";
|
|
30
|
+
return `${protocol}://${this.options.host}:${this.options.port}`;
|
|
31
|
+
}
|
|
32
|
+
get headers() {
|
|
33
|
+
return {
|
|
34
|
+
Authorization: this.options.password,
|
|
35
|
+
"User-Id": this.manager.options.clientId,
|
|
36
|
+
"Client-Name": "Yukimu/1.0.0",
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
connect() {
|
|
40
|
+
if (this.ws?.readyState === ws_1.default.OPEN)
|
|
41
|
+
return;
|
|
42
|
+
this.ws = new ws_1.default(this.wsUrl, { headers: this.headers });
|
|
43
|
+
this.ws.on("open", () => this.onOpen());
|
|
44
|
+
this.ws.on("message", (data) => this.onMessage(data));
|
|
45
|
+
this.ws.on("close", (code, reason) => this.onClose(code, reason.toString()));
|
|
46
|
+
this.ws.on("error", (err) => this.onError(err));
|
|
47
|
+
}
|
|
48
|
+
destroy() {
|
|
49
|
+
if (this.reconnectTimeout)
|
|
50
|
+
clearTimeout(this.reconnectTimeout);
|
|
51
|
+
this.ws?.removeAllListeners();
|
|
52
|
+
this.ws?.close();
|
|
53
|
+
this.ws = null;
|
|
54
|
+
this.connected = false;
|
|
55
|
+
}
|
|
56
|
+
// βββ WebSocket Events βββββββββββββββββββββββββββββββββββββββββββββ
|
|
57
|
+
onOpen() {
|
|
58
|
+
this.connected = true;
|
|
59
|
+
this.reconnectAttempts = 0;
|
|
60
|
+
this.manager.emit("nodeConnect", this);
|
|
61
|
+
console.log(`[Yukimu] Node "${this.options.name}" connected`);
|
|
62
|
+
}
|
|
63
|
+
onMessage(raw) {
|
|
64
|
+
let payload;
|
|
65
|
+
try {
|
|
66
|
+
payload = JSON.parse(raw.toString());
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
switch (payload.op) {
|
|
72
|
+
case "ready":
|
|
73
|
+
this.sessionId = payload.sessionId;
|
|
74
|
+
this.manager.emit("nodeReady", this);
|
|
75
|
+
console.log(`[Yukimu] Node "${this.options.name}" ready | session: ${this.sessionId}`);
|
|
76
|
+
break;
|
|
77
|
+
case "stats":
|
|
78
|
+
this.stats = payload;
|
|
79
|
+
break;
|
|
80
|
+
case "playerUpdate":
|
|
81
|
+
this.handlePlayerUpdate(payload);
|
|
82
|
+
break;
|
|
83
|
+
case "event":
|
|
84
|
+
this.handleEvent(payload);
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
onClose(code, reason) {
|
|
89
|
+
this.connected = false;
|
|
90
|
+
this.manager.emit("nodeDisconnect", this, code, reason);
|
|
91
|
+
console.warn(`[Yukimu] Node "${this.options.name}" disconnected (${code}): ${reason}`);
|
|
92
|
+
this.scheduleReconnect();
|
|
93
|
+
}
|
|
94
|
+
onError(error) {
|
|
95
|
+
this.manager.emit("nodeError", this, error);
|
|
96
|
+
console.error(`[Yukimu] Node "${this.options.name}" error:`, error.message);
|
|
97
|
+
}
|
|
98
|
+
// βββ Reconnect ββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
99
|
+
scheduleReconnect() {
|
|
100
|
+
const maxRetries = this.options.retries ?? 5;
|
|
101
|
+
if (this.reconnectAttempts >= maxRetries) {
|
|
102
|
+
console.error(`[Yukimu] Node "${this.options.name}" max reconnect attempts reached`);
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
const delay = Math.min(1000 * 2 ** this.reconnectAttempts, 30000);
|
|
106
|
+
this.reconnectAttempts++;
|
|
107
|
+
console.log(`[Yukimu] Reconnecting node "${this.options.name}" in ${delay}ms (attempt ${this.reconnectAttempts})`);
|
|
108
|
+
this.reconnectTimeout = setTimeout(() => this.connect(), delay);
|
|
109
|
+
}
|
|
110
|
+
// βββ Event Handlers βββββββββββββββββββββββββββββββββββββββββββββββ
|
|
111
|
+
handlePlayerUpdate(payload) {
|
|
112
|
+
const player = this.manager.players.get(payload.guildId);
|
|
113
|
+
if (!player)
|
|
114
|
+
return;
|
|
115
|
+
const state = payload.state;
|
|
116
|
+
player.position = state.position ?? 0;
|
|
117
|
+
player.ping = state.ping ?? -1;
|
|
118
|
+
this.manager.emit("playerUpdate", player);
|
|
119
|
+
}
|
|
120
|
+
handleEvent(payload) {
|
|
121
|
+
const player = this.manager.players.get(payload.guildId);
|
|
122
|
+
if (!player)
|
|
123
|
+
return;
|
|
124
|
+
switch (payload.type) {
|
|
125
|
+
case "TrackStartEvent":
|
|
126
|
+
player.playing = true;
|
|
127
|
+
this.manager.emit("trackStart", player, payload.track);
|
|
128
|
+
break;
|
|
129
|
+
case "TrackEndEvent":
|
|
130
|
+
player.playing = false;
|
|
131
|
+
player.position = 0;
|
|
132
|
+
this.manager.emit("trackEnd", player, payload.track, payload.reason);
|
|
133
|
+
// Auto-play next in queue
|
|
134
|
+
if (payload.reason !== "replaced" && payload.reason !== "stopped") {
|
|
135
|
+
player.queue.next();
|
|
136
|
+
if (player.queue.current) {
|
|
137
|
+
player.play(player.queue.current);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
this.manager.emit("queueEnd", player);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
break;
|
|
144
|
+
case "TrackExceptionEvent":
|
|
145
|
+
this.manager.emit("trackError", player, payload.track, payload.exception);
|
|
146
|
+
break;
|
|
147
|
+
case "TrackStuckEvent":
|
|
148
|
+
this.manager.emit("trackStuck", player, payload.track, payload.thresholdMs);
|
|
149
|
+
break;
|
|
150
|
+
case "WebSocketClosedEvent":
|
|
151
|
+
this.manager.emit("socketClosed", player, payload.code, payload.reason);
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// βββ REST API βββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
156
|
+
async request(method, path, body) {
|
|
157
|
+
if (!this.sessionId)
|
|
158
|
+
throw new Error("Node is not ready (no session ID)");
|
|
159
|
+
const url = `${this.restUrl}/${LAVALINK_API_VERSION}${path}`;
|
|
160
|
+
const res = await fetch(url, {
|
|
161
|
+
method,
|
|
162
|
+
headers: {
|
|
163
|
+
...this.headers,
|
|
164
|
+
"Content-Type": "application/json",
|
|
165
|
+
},
|
|
166
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
167
|
+
});
|
|
168
|
+
if (!res.ok) {
|
|
169
|
+
const text = await res.text();
|
|
170
|
+
throw new Error(`[Yukimu] REST error ${res.status} on ${method} ${path}: ${text}`);
|
|
171
|
+
}
|
|
172
|
+
if (res.status === 204)
|
|
173
|
+
return undefined;
|
|
174
|
+
return res.json();
|
|
175
|
+
}
|
|
176
|
+
/** Load tracks from Lavalink */
|
|
177
|
+
async loadTracks(identifier) {
|
|
178
|
+
return this.request("GET", `/loadtracks?identifier=${encodeURIComponent(identifier)}`);
|
|
179
|
+
}
|
|
180
|
+
/** Decode a single track */
|
|
181
|
+
async decodeTrack(encoded) {
|
|
182
|
+
return this.request("GET", `/decodetrack?encodedTrack=${encodeURIComponent(encoded)}`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
exports.Node = Node;
|
|
186
|
+
//# sourceMappingURL=Node.js.map
|
package/dist/Node.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Node.js","sourceRoot":"","sources":["../src/Node.ts"],"names":[],"mappings":"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"}
|
package/dist/Player.d.ts
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Queue } from "./Queue";
|
|
2
|
+
import { Track, PlayerOptions } from "./types";
|
|
3
|
+
import type { Yukimu } from "./Yukimu";
|
|
4
|
+
import type { Node } from "./Node";
|
|
5
|
+
export declare class Player {
|
|
6
|
+
readonly manager: Yukimu;
|
|
7
|
+
readonly node: Node;
|
|
8
|
+
readonly queue: Queue;
|
|
9
|
+
readonly guildId: string;
|
|
10
|
+
voiceChannelId: string | null;
|
|
11
|
+
textChannelId?: string;
|
|
12
|
+
playing: boolean;
|
|
13
|
+
paused: boolean;
|
|
14
|
+
connected: boolean;
|
|
15
|
+
position: number;
|
|
16
|
+
ping: number;
|
|
17
|
+
volume: number;
|
|
18
|
+
sessionId: string | null;
|
|
19
|
+
voiceToken: string | null;
|
|
20
|
+
voiceEndpoint: string | null;
|
|
21
|
+
filters: Record<string, unknown>;
|
|
22
|
+
loop: "none" | "track" | "queue";
|
|
23
|
+
constructor(manager: Yukimu, node: Node, options: PlayerOptions);
|
|
24
|
+
private sendVoicePayload;
|
|
25
|
+
/** Called when both sessionId and voiceToken/endpoint are available */
|
|
26
|
+
checkVoiceReady(): void;
|
|
27
|
+
/** Play a track */
|
|
28
|
+
play(track: Track, options?: {
|
|
29
|
+
startTime?: number;
|
|
30
|
+
endTime?: number;
|
|
31
|
+
}): Promise<void>;
|
|
32
|
+
/** Pause or resume playback */
|
|
33
|
+
pause(state?: boolean): Promise<void>;
|
|
34
|
+
/** Resume playback */
|
|
35
|
+
resume(): Promise<void>;
|
|
36
|
+
/** Stop playback */
|
|
37
|
+
stop(): Promise<void>;
|
|
38
|
+
/** Skip to next track */
|
|
39
|
+
skip(): Promise<Track | null>;
|
|
40
|
+
/** Seek to position in milliseconds */
|
|
41
|
+
seek(position: number): Promise<void>;
|
|
42
|
+
/** Set volume (0β1000, Lavalink default 100) */
|
|
43
|
+
setVolume(volume: number): Promise<void>;
|
|
44
|
+
/** Apply audio filters (bass boost, nightcore, 8D, etc.) */
|
|
45
|
+
setFilters(filters: Record<string, unknown>): Promise<void>;
|
|
46
|
+
/** Enable bass boost */
|
|
47
|
+
setBassBoost(level: "low" | "medium" | "high" | "off"): Promise<void>;
|
|
48
|
+
/** Enable nightcore effect */
|
|
49
|
+
setNightcore(enabled: boolean): Promise<void>;
|
|
50
|
+
/** Enable 8D audio */
|
|
51
|
+
set8D(enabled: boolean): Promise<void>;
|
|
52
|
+
/** Clear all filters */
|
|
53
|
+
clearFilters(): Promise<void>;
|
|
54
|
+
/** Add track(s) to queue and optionally start playing */
|
|
55
|
+
add(tracks: Track | Track[], playNow?: boolean): Promise<void>;
|
|
56
|
+
/** Set loop mode */
|
|
57
|
+
setLoop(mode: "none" | "track" | "queue"): void;
|
|
58
|
+
/** Disconnect from voice and clean up */
|
|
59
|
+
destroy(): Promise<void>;
|
|
60
|
+
/** Move to a different voice channel */
|
|
61
|
+
move(channelId: string, selfDeaf?: boolean): Promise<void>;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=Player.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Player.d.ts","sourceRoot":"","sources":["../src/Player.ts"],"names":[],"mappings":"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"}
|