lavaclient
Version:
A simple, easy-to-use, and flexible lavalink client for node.js
172 lines • 13.3 kB
JavaScript
"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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BsYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBa0JBLG9FQUE4QztBQUk5QywrQ0FBZ0Q7QUFFaEQscURBQStDO0FBRy9DLDJEQUFrRDtBQUdsRCxNQUFhLE1BQWtDLFNBQVEsaUNBQTBCO0lBNkRoRTtJQXpESixLQUFLLENBQWM7SUFLNUIsR0FBRyxDQUFnQjtJQUtuQixJQUFJLENBQVE7SUFLWixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBS2hCLGdCQUFnQixDQUFVO0lBSzFCLEtBQUssR0FBMEIsSUFBSSxDQUFDO0lBS3BDLE9BQU8sR0FBcUIsRUFBRSxDQUFDO0lBSy9CLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFLYixNQUFNLEdBQUcsR0FBRyxDQUFDO0lBS2IsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUtmLFVBQVUsQ0FBVTtJQUtwQixZQUNJLElBQVcsRUFDRixFQUFVO1FBRW5CLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDVixNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7U0FDOUQ7UUFFRCxLQUFLLEVBQUUsQ0FBQztRQVBDLE9BQUUsR0FBRixFQUFFLENBQVE7UUFTbkIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLDRCQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksT0FBTztRQUVQLE9BQU8sSUFBSSxDQUFDLElBQUksWUFBWSxxQkFBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENB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