UNPKG

lavaclient

Version:

A simple, easy-to-use, and flexible lavalink client for node.js

172 lines 13.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Player = void 0; const tslib_1 = require("tslib"); const Protocol = tslib_1.__importStar(require("lavalink-protocol")); const node_js_1 = require("./cluster/node.js"); const playerVoice_js_1 = require("./playerVoice.js"); const tiny_typed_emitter_1 = require("tiny-typed-emitter"); class Player extends tiny_typed_emitter_1.TypedEmitter { id; voice; api; node; playing = false; playingTimestamp; track = null; filters = {}; position = 0; volume = 100; paused = false; lastUpdate; constructor(node, id) { const session = node.ws.session; if (!session) { throw new Error("Cannot create player without a session."); } super(); this.id = id; this.id = id; this.api = session.player(id); this.node = node; this.voice = new playerVoice_js_1.PlayerVoice(this); } get cluster() { return this.node instanceof node_js_1.ClusterNode ? this.node.cluster : null; } get adjustedPosition() { if (this.position === 0) { return 0; } const length = this.track?.info?.length, last = this.lastUpdate; if (this.paused || !length || !last) { return this.position; } return Math.min(this.position + (Date.now() - last), length); } async play(track, options = {}) { const update = {}; if (typeof track !== "string") { update.userData = "userDataSchema" in track ? Protocol.encode(track.userDataSchema, track.userData, "Failed to validate given user data") : track.userData; update.encoded = track.encoded; } else { update.encoded = track; } return this.update({ track: update, ...options }); } stop(other = {}) { return this.update({ track: { encoded: null }, ...other }); } pause(paused = true, other = {}) { return this.update({ paused, ...other }); } resume(other = {}) { return this.pause(false, other); } seek(position, other = {}) { return this.update({ position, ...other }); } setVolume(volume, other = {}) { return this.update({ volume, ...other }); } setFilters(arg0, value, plugin = false) { if (typeof arg0 === "object") { return this.update({ filters: arg0 }); } const filters = this.filters; if (plugin) { filters.pluginFilters ??= {}; filters.pluginFilters[arg0] = value; } else { filters[arg0] = value; } return this.update({ filters }); } async fetch() { const data = await this.api.fetchOrNull(); if (data) this.patch(data); return !!data; } async update(body, noReplace = false) { const data = await this.api.update(body, noReplace); return this.patch(data); } patch(data) { this.voice.server = data.voice; if (data.track) { this.playingTimestamp = this.track === data.track ? this.playingTimestamp : Date.now(); this.playing = data.track != null; this.track = data.track; } else { delete this.playingTimestamp; this.playing = false; this.track = null; } this.filters = data.filters; this.volume = data.volume; this.paused = data.paused; return this.patchWithState(data.state); } patchWithState(data) { this.voice.latency = data.ping; this.voice.connected = data.connected; this.position = data.position; this.lastUpdate = data.time; return this; } async transfer(to) { const api = to.ws.session?.player(this.id); if (!api) throw new Error("The given node is not ready."); try { await this.api.remove(); } catch { } this.api = api; this.node = to; await this.update({ position: this.adjustedPosition, filters: this.filters, volume: this.volume, voice: this.voice.server ?? { endpoint: "", sessionId: "", token: "" }, track: this.track ? { encoded: this.track.encoded } : undefined, }); } handleEvent(event) { switch (event.type) { case "TrackStartEvent": this.playing = true; this.playingTimestamp = Date.now(); this.track = event.track; this.emit("trackStart", event.track); break; case "TrackEndEvent": if (event.reason !== "replaced") { this.playing = false; delete this.playingTimestamp; } this.track = null; this.emit("trackEnd", event.track, event.reason); break; case "TrackExceptionEvent": this.emit("trackException", event.track, event.exception); break; case "TrackStuckEvent": this.emit("trackStuck", event.track, event.thresholdMs); break; case "WebSocketClosedEvent": this.emit("disconnected", event.code, event.reason, event.byRemote); break; } } } exports.Player = Player; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBa0JBLG9FQUE4QztBQUk5QywrQ0FBZ0Q7QUFFaEQscURBQStDO0FBRy9DLDJEQUFrRDtBQUdsRCxNQUFhLE1BQWtDLFNBQVEsaUNBQTBCO0lBNkRoRTtJQXpESixLQUFLLENBQWM7SUFLNUIsR0FBRyxDQUFnQjtJQUtuQixJQUFJLENBQVE7SUFLWixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBS2hCLGdCQUFnQixDQUFVO0lBSzFCLEtBQUssR0FBMEIsSUFBSSxDQUFDO0lBS3BDLE9BQU8sR0FBcUIsRUFBRSxDQUFDO0lBSy9CLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFLYixNQUFNLEdBQUcsR0FBRyxDQUFDO0lBS2IsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUtmLFVBQVUsQ0FBVTtJQUtwQixZQUNJLElBQVcsRUFDRixFQUFVO1FBRW5CLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDVixNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7U0FDOUQ7UUFFRCxLQUFLLEVBQUUsQ0FBQztRQVBDLE9BQUUsR0FBRixFQUFFLENBQVE7UUFTbkIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLDRCQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksT0FBTztRQUVQLE9BQU8sSUFBSSxDQUFDLElBQUksWUFBWSxxQkFBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3ZFLENBQUM7SUFLRCxJQUFJLGdCQUFnQjtRQUNoQixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFO1lBQ3JCLE9BQU8sQ0FBQyxDQUFDO1NBQ1o7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQ25DLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzNCLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRTtZQUNqQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDeEI7UUFFRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBZ0NELEtBQUssQ0FBQyxJQUFJLENBQ04sS0FBdUYsRUFDdkYsVUFBd0UsRUFBRTtRQUUxRSxNQUFNLE1BQU0sR0FBc0QsRUFBRSxDQUFDO1FBQ3JFLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzNCLE1BQU0sQ0FBQyxRQUFRO2dCQUNYLGdCQUFnQixJQUFJLEtBQUs7b0JBQ3JCLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUNYLEtBQUssQ0FBQyxjQUFvQyxFQUMxQyxLQUFLLENBQUMsUUFBUSxFQUNkLG9DQUFvQyxDQUN2QztvQkFDSCxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUV6QixNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7U0FDbEM7YUFBTTtZQUNILE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1NBQzFCO1FBR0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQU1ELElBQUksQ0FBQyxRQUFzRSxFQUFFO1FBQ3pFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQVFELEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLFFBQXVFLEVBQUU7UUFDMUYsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBT0QsTUFBTSxDQUFDLFFBQXVFLEVBQUU7UUFDNUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBUUQsSUFBSSxDQUFDLFFBQWdCLEVBQUUsUUFBeUUsRUFBRTtRQUM5RixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFRRCxTQUFTLENBQUMsTUFBYyxFQUFFLFFBQXVFLEVBQUU7UUFDL0YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBNkJELFVBQVUsQ0FBQyxJQUErQixFQUFFLEtBQWUsRUFBRSxNQUFNLEdBQUcsS0FBSztRQUN2RSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUMxQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUN6QztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUF5QyxDQUFDO1FBQy9ELElBQUksTUFBTSxFQUFFO1lBQ1IsT0FBTyxDQUFDLGFBQWEsS0FBSyxFQUFFLENBQUM7WUFDN0IsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7U0FDdkM7YUFBTTtZQUVILE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7U0FDekI7UUFFRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFTRCxLQUFLLENBQUMsS0FBSztRQUNQLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQyxJQUFJLElBQUk7WUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNsQixDQUFDO0lBU0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUF5QyxFQUFFLFNBQVMsR0FBRyxLQUFLO1FBQ3JFLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBUUQsS0FBSyxDQUFDLElBQXFCO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFFL0IsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1osSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdkYsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQztZQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7U0FDM0I7YUFBTTtZQUNILE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQ3JCO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFMUIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBUUQsY0FBYyxDQUFDLElBQTBCO1FBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzVCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFRRCxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQVM7UUFDcEIsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsR0FBRztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUcxRCxJQUFJO1lBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQzNCO1FBQUMsTUFBTTtTQUVQO1FBR0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUdmLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNkLFFBQVEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQy9CLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDdEUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDbEUsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQVFELFdBQVcsQ0FBQyxLQUFxQjtRQUM3QixRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDaEIsS0FBSyxpQkFBaUI7Z0JBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBRXpCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckMsTUFBTTtZQUNWLEtBQUssZUFBZTtnQkFDaEIsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRTtvQkFDN0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQ3JCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO2lCQUNoQztnQkFFRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFFbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2pELE1BQU07WUFDVixLQUFLLHFCQUFxQjtnQkFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDMUQsTUFBTTtZQUNWLEtBQUssaUJBQWlCO2dCQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDeEQsTUFBTTtZQUNWLEtBQUssc0JBQXNCO2dCQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwRSxNQUFNO1NBQ2I7SUFDTCxDQUFDO0NBQ0o7QUF2WEQsd0JBdVhDIn0=