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
package/dist/Yukimu.js
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Yukimu = void 0;
|
|
4
|
+
const events_1 = require("events");
|
|
5
|
+
const Node_1 = require("./Node");
|
|
6
|
+
const Player_1 = require("./Player");
|
|
7
|
+
const Resolver_1 = require("./Resolver");
|
|
8
|
+
/**
|
|
9
|
+
* Yukimu - A powerful Lavalink v4 wrapper for Discord bots
|
|
10
|
+
* Supports: YouTube, YouTube Music, Spotify, Deezer, Apple Music,
|
|
11
|
+
* JioSaavn, Tidal, SoundCloud, Yandex Music
|
|
12
|
+
*/
|
|
13
|
+
class Yukimu extends events_1.EventEmitter {
|
|
14
|
+
constructor(options) {
|
|
15
|
+
super();
|
|
16
|
+
this.nodes = new Map();
|
|
17
|
+
this.players = new Map();
|
|
18
|
+
this.options = options;
|
|
19
|
+
this.resolver = new Resolver_1.Resolver(this);
|
|
20
|
+
// Initialize all nodes
|
|
21
|
+
for (const nodeOpts of options.nodes) {
|
|
22
|
+
this.addNode(nodeOpts);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
// ─── Node Management ────────────────────────────────────────────
|
|
26
|
+
/** Add a new Lavalink node */
|
|
27
|
+
addNode(options) {
|
|
28
|
+
const node = new Node_1.Node(this, options);
|
|
29
|
+
this.nodes.set(options.name, node);
|
|
30
|
+
node.connect();
|
|
31
|
+
return node;
|
|
32
|
+
}
|
|
33
|
+
/** Remove a node by name */
|
|
34
|
+
removeNode(name) {
|
|
35
|
+
const node = this.nodes.get(name);
|
|
36
|
+
if (!node)
|
|
37
|
+
throw new Error(`Node "${name}" not found`);
|
|
38
|
+
node.destroy();
|
|
39
|
+
this.nodes.delete(name);
|
|
40
|
+
}
|
|
41
|
+
/** Get the best available node (least load) */
|
|
42
|
+
getBestNode() {
|
|
43
|
+
const connected = [...this.nodes.values()].filter(n => n.connected);
|
|
44
|
+
if (!connected.length)
|
|
45
|
+
throw new Error("No connected Lavalink nodes available");
|
|
46
|
+
return connected.sort((a, b) => {
|
|
47
|
+
const aLoad = a.stats?.cpu?.lavalinkLoad ?? 0;
|
|
48
|
+
const bLoad = b.stats?.cpu?.lavalinkLoad ?? 0;
|
|
49
|
+
return aLoad - bLoad;
|
|
50
|
+
})[0];
|
|
51
|
+
}
|
|
52
|
+
// ─── Player Management ───────────────────────────────────────────
|
|
53
|
+
/** Create a new player for a guild */
|
|
54
|
+
createPlayer(options) {
|
|
55
|
+
const existing = this.players.get(options.guildId);
|
|
56
|
+
if (existing)
|
|
57
|
+
return existing;
|
|
58
|
+
const node = options.nodeName
|
|
59
|
+
? this.nodes.get(options.nodeName) ?? this.getBestNode()
|
|
60
|
+
: this.getBestNode();
|
|
61
|
+
const player = new Player_1.Player(this, node, options);
|
|
62
|
+
this.players.set(options.guildId, player);
|
|
63
|
+
this.emit("playerCreate", player);
|
|
64
|
+
return player;
|
|
65
|
+
}
|
|
66
|
+
/** Get an existing player */
|
|
67
|
+
getPlayer(guildId) {
|
|
68
|
+
return this.players.get(guildId);
|
|
69
|
+
}
|
|
70
|
+
/** Destroy a player */
|
|
71
|
+
destroyPlayer(guildId) {
|
|
72
|
+
const player = this.players.get(guildId);
|
|
73
|
+
if (!player)
|
|
74
|
+
return;
|
|
75
|
+
player.destroy();
|
|
76
|
+
this.players.delete(guildId);
|
|
77
|
+
this.emit("playerDestroy", player);
|
|
78
|
+
}
|
|
79
|
+
// ─── Search ──────────────────────────────────────────────────────
|
|
80
|
+
/**
|
|
81
|
+
* Search for tracks across any supported source
|
|
82
|
+
* @param query - Search query or direct URL
|
|
83
|
+
* @param source - Where to search (youtube, spotify, deezer, etc.)
|
|
84
|
+
*/
|
|
85
|
+
async search(query, source = this.options.defaultSource ?? "youtube") {
|
|
86
|
+
return this.resolver.resolve(query, source);
|
|
87
|
+
}
|
|
88
|
+
// ─── Discord Voice Gateway Handlers ──────────────────────────────
|
|
89
|
+
/**
|
|
90
|
+
* Handle Discord voice state updates — call this in your bot's
|
|
91
|
+
* voiceStateUpdate event handler
|
|
92
|
+
*/
|
|
93
|
+
handleVoiceStateUpdate(data) {
|
|
94
|
+
if (data.user_id !== this.options.clientId)
|
|
95
|
+
return;
|
|
96
|
+
if (!data.guild_id)
|
|
97
|
+
return;
|
|
98
|
+
const player = this.players.get(data.guild_id);
|
|
99
|
+
if (!player)
|
|
100
|
+
return;
|
|
101
|
+
if (!data.channel_id) {
|
|
102
|
+
// Bot was disconnected from voice
|
|
103
|
+
player.voiceChannelId = null;
|
|
104
|
+
player.connected = false;
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
player.voiceChannelId = data.channel_id;
|
|
108
|
+
player.sessionId = data.session_id;
|
|
109
|
+
player.connected = true;
|
|
110
|
+
player.checkVoiceReady();
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Handle Discord voice server updates — call this in your bot's
|
|
114
|
+
* voiceServerUpdate event handler
|
|
115
|
+
*/
|
|
116
|
+
handleVoiceServerUpdate(data) {
|
|
117
|
+
const player = this.players.get(data.guild_id);
|
|
118
|
+
if (!player)
|
|
119
|
+
return;
|
|
120
|
+
if (!data.endpoint)
|
|
121
|
+
return;
|
|
122
|
+
player.voiceToken = data.token;
|
|
123
|
+
player.voiceEndpoint = data.endpoint;
|
|
124
|
+
player.checkVoiceReady();
|
|
125
|
+
}
|
|
126
|
+
// ─── EventEmitter typing ─────────────────────────────────────────
|
|
127
|
+
on(event, listener) {
|
|
128
|
+
return super.on(event, listener);
|
|
129
|
+
}
|
|
130
|
+
emit(event, ...args) {
|
|
131
|
+
return super.emit(event, ...args);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
exports.Yukimu = Yukimu;
|
|
135
|
+
//# sourceMappingURL=Yukimu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Yukimu.js","sourceRoot":"","sources":["../src/Yukimu.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,cAAc,SAAS,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.Resolver = exports.Queue = exports.Player = exports.Node = exports.Yukimu = void 0;
|
|
18
|
+
var Yukimu_1 = require("./Yukimu");
|
|
19
|
+
Object.defineProperty(exports, "Yukimu", { enumerable: true, get: function () { return Yukimu_1.Yukimu; } });
|
|
20
|
+
var Node_1 = require("./Node");
|
|
21
|
+
Object.defineProperty(exports, "Node", { enumerable: true, get: function () { return Node_1.Node; } });
|
|
22
|
+
var Player_1 = require("./Player");
|
|
23
|
+
Object.defineProperty(exports, "Player", { enumerable: true, get: function () { return Player_1.Player; } });
|
|
24
|
+
var Queue_1 = require("./Queue");
|
|
25
|
+
Object.defineProperty(exports, "Queue", { enumerable: true, get: function () { return Queue_1.Queue; } });
|
|
26
|
+
var Resolver_1 = require("./Resolver");
|
|
27
|
+
Object.defineProperty(exports, "Resolver", { enumerable: true, get: function () { return Resolver_1.Resolver; } });
|
|
28
|
+
__exportStar(require("./types"), exports);
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,+BAA8B;AAArB,4FAAA,IAAI,OAAA;AACb,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,iCAAgC;AAAvB,8FAAA,KAAK,OAAA;AACd,uCAAsC;AAA7B,oGAAA,QAAQ,OAAA;AACjB,0CAAwB"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
export interface YukimuOptions {
|
|
2
|
+
/** Your Discord bot token */
|
|
3
|
+
token: string;
|
|
4
|
+
/** Client ID of your bot */
|
|
5
|
+
clientId: string;
|
|
6
|
+
/** Lavalink nodes to connect to */
|
|
7
|
+
nodes: NodeOptions[];
|
|
8
|
+
/** Default search source */
|
|
9
|
+
defaultSource?: SearchSource;
|
|
10
|
+
/** Spotify credentials (for Spotify support) */
|
|
11
|
+
spotify?: SpotifyOptions;
|
|
12
|
+
/** Deezer options */
|
|
13
|
+
deezer?: DeezerOptions;
|
|
14
|
+
/** Apple Music options */
|
|
15
|
+
appleMusic?: AppleMusicOptions;
|
|
16
|
+
}
|
|
17
|
+
export interface NodeOptions {
|
|
18
|
+
/** Node identifier */
|
|
19
|
+
name: string;
|
|
20
|
+
/** Lavalink server host */
|
|
21
|
+
host: string;
|
|
22
|
+
/** Lavalink server port */
|
|
23
|
+
port: number;
|
|
24
|
+
/** Lavalink server password */
|
|
25
|
+
password: string;
|
|
26
|
+
/** Use SSL/TLS */
|
|
27
|
+
secure?: boolean;
|
|
28
|
+
/** Number of retries on disconnect */
|
|
29
|
+
retries?: number;
|
|
30
|
+
}
|
|
31
|
+
export interface SpotifyOptions {
|
|
32
|
+
clientId: string;
|
|
33
|
+
clientSecret: string;
|
|
34
|
+
}
|
|
35
|
+
export interface DeezerOptions {
|
|
36
|
+
/** Deezer master decryption key (from LavaSrc plugin) */
|
|
37
|
+
masterKey?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface AppleMusicOptions {
|
|
40
|
+
/** Apple Music media API token */
|
|
41
|
+
mediaAPIToken?: string;
|
|
42
|
+
countryCode?: string;
|
|
43
|
+
}
|
|
44
|
+
export type SearchSource = "youtube" | "youtubemusic" | "spotify" | "deezer" | "applemusic" | "soundcloud" | "tidal" | "jiosaavn" | "yandexmusic";
|
|
45
|
+
export declare const SourcePrefixes: Record<SearchSource, string>;
|
|
46
|
+
export interface Track {
|
|
47
|
+
encoded: string;
|
|
48
|
+
info: TrackInfo;
|
|
49
|
+
pluginInfo?: Record<string, unknown>;
|
|
50
|
+
}
|
|
51
|
+
export interface TrackInfo {
|
|
52
|
+
identifier: string;
|
|
53
|
+
isSeekable: boolean;
|
|
54
|
+
author: string;
|
|
55
|
+
length: number;
|
|
56
|
+
isStream: boolean;
|
|
57
|
+
position: number;
|
|
58
|
+
title: string;
|
|
59
|
+
uri?: string;
|
|
60
|
+
artworkUrl?: string;
|
|
61
|
+
isrc?: string;
|
|
62
|
+
sourceName: string;
|
|
63
|
+
}
|
|
64
|
+
export interface SearchResult {
|
|
65
|
+
loadType: LoadType;
|
|
66
|
+
tracks: Track[];
|
|
67
|
+
playlistInfo?: PlaylistInfo;
|
|
68
|
+
exception?: LavalinkException;
|
|
69
|
+
}
|
|
70
|
+
export type LoadType = "track" | "playlist" | "search" | "empty" | "error";
|
|
71
|
+
export interface PlaylistInfo {
|
|
72
|
+
name: string;
|
|
73
|
+
selectedTrack: number;
|
|
74
|
+
}
|
|
75
|
+
export interface LavalinkException {
|
|
76
|
+
message?: string;
|
|
77
|
+
severity: "common" | "suspicious" | "fault";
|
|
78
|
+
cause: string;
|
|
79
|
+
}
|
|
80
|
+
export interface PlayerOptions {
|
|
81
|
+
/** Guild ID to create player for */
|
|
82
|
+
guildId: string;
|
|
83
|
+
/** Voice channel ID */
|
|
84
|
+
voiceChannelId: string;
|
|
85
|
+
/** Text channel ID (for sending messages) */
|
|
86
|
+
textChannelId?: string;
|
|
87
|
+
/** Whether to self-deaf */
|
|
88
|
+
selfDeaf?: boolean;
|
|
89
|
+
/** Whether to self-mute */
|
|
90
|
+
selfMute?: boolean;
|
|
91
|
+
/** Node name to use (optional, auto-selected if not set) */
|
|
92
|
+
nodeName?: string;
|
|
93
|
+
/** Default volume 0-100 */
|
|
94
|
+
volume?: number;
|
|
95
|
+
}
|
|
96
|
+
export interface VoiceState {
|
|
97
|
+
token: string;
|
|
98
|
+
endpoint: string;
|
|
99
|
+
sessionId: string;
|
|
100
|
+
}
|
|
101
|
+
export interface NodeStats {
|
|
102
|
+
players: number;
|
|
103
|
+
playingPlayers: number;
|
|
104
|
+
uptime: number;
|
|
105
|
+
memory: {
|
|
106
|
+
free: number;
|
|
107
|
+
used: number;
|
|
108
|
+
allocated: number;
|
|
109
|
+
reservable: number;
|
|
110
|
+
};
|
|
111
|
+
cpu: {
|
|
112
|
+
cores: number;
|
|
113
|
+
systemLoad: number;
|
|
114
|
+
lavalinkLoad: number;
|
|
115
|
+
};
|
|
116
|
+
frameStats?: {
|
|
117
|
+
sent: number;
|
|
118
|
+
nulled: number;
|
|
119
|
+
deficit: number;
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
export type YukimuEvents = {
|
|
123
|
+
nodeConnect: [node: import("./Node").Node];
|
|
124
|
+
nodeDisconnect: [node: import("./Node").Node, code: number, reason: string];
|
|
125
|
+
nodeError: [node: import("./Node").Node, error: Error];
|
|
126
|
+
nodeReady: [node: import("./Node").Node];
|
|
127
|
+
trackStart: [player: import("./Player").Player, track: Track];
|
|
128
|
+
trackEnd: [player: import("./Player").Player, track: Track, reason: string];
|
|
129
|
+
trackError: [player: import("./Player").Player, track: Track, exception: LavalinkException];
|
|
130
|
+
trackStuck: [player: import("./Player").Player, track: Track, threshold: number];
|
|
131
|
+
playerCreate: [player: import("./Player").Player];
|
|
132
|
+
playerDestroy: [player: import("./Player").Player];
|
|
133
|
+
playerUpdate: [player: import("./Player").Player];
|
|
134
|
+
queueEnd: [player: import("./Player").Player];
|
|
135
|
+
socketClosed: [player: import("./Player").Player, code: number, reason: string];
|
|
136
|
+
};
|
|
137
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SourcePrefixes = void 0;
|
|
4
|
+
exports.SourcePrefixes = {
|
|
5
|
+
youtube: "ytsearch",
|
|
6
|
+
youtubemusic: "ytmsearch",
|
|
7
|
+
spotify: "spsearch",
|
|
8
|
+
deezer: "dzsearch",
|
|
9
|
+
applemusic: "amsearch",
|
|
10
|
+
soundcloud: "scsearch",
|
|
11
|
+
tidal: "tdsearch",
|
|
12
|
+
jiosaavn: "jssearch",
|
|
13
|
+
yandexmusic: "ymsearch",
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AA2Da,QAAA,cAAc,GAAiC;IAC1D,OAAO,EAAE,UAAU;IACnB,YAAY,EAAE,WAAW;IACzB,OAAO,EAAE,UAAU;IACnB,MAAM,EAAE,UAAU;IAClB,UAAU,EAAE,UAAU;IACtB,UAAU,EAAE,UAAU;IACtB,KAAK,EAAE,UAAU;IACjB,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,UAAU;CACxB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "yukimu",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A powerful Lavalink v4 wrapper for Discord bots — supports YouTube, Spotify, Deezer, Apple Music, JioSaavn, Tidal, SoundCloud and more",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc",
|
|
9
|
+
"dev": "tsc --watch"
|
|
10
|
+
},
|
|
11
|
+
"keywords": ["lavalink", "discord", "music", "bot", "audio", "spotify", "youtube"],
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"dependencies": {
|
|
14
|
+
"ws": "^8.17.0"
|
|
15
|
+
},
|
|
16
|
+
"devDependencies": {
|
|
17
|
+
"@types/node": "^20.0.0",
|
|
18
|
+
"@types/ws": "^8.5.10",
|
|
19
|
+
"typescript": "^5.4.0"
|
|
20
|
+
},
|
|
21
|
+
"peerDependencies": {
|
|
22
|
+
"discord.js": "^14.0.0"
|
|
23
|
+
}
|
|
24
|
+
}
|