@evolvejs/evolava
Version:
a lavalink client for evolvejs
200 lines • 7.61 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.EvolavaPlayer = void 0;
const Utils_1 = require("src/Utils");
const EvoLavaQueue_1 = require("./EvoLavaQueue");
class EvolavaPlayer {
constructor(evolava, options, queueOption, node) {
var _a;
this.evolava = evolava;
this.options = options;
this.queueOption = queueOption;
this.node = node;
this.state = false;
this.position = 0;
this.paused = false;
this.volume = options.volume || 100;
this.queue = new EvoLavaQueue_1.Queue(this, queueOption);
(_a = this.evolava.client.shardConnections.get(0)) === null || _a === void 0 ? void 0 : _a.gateway.sendVoiceStateUpdate(options.guild.id, options.voiceChannel.id, {
self_deaf: options.self.deaf,
self_mute: options.self.mute
});
this.evolava.players.set(options.guild.id, this);
this.evolava.emit("createPlayer", this);
}
get playing() {
return this.playing;
}
movePlayer(channel) {
var _a;
if (!channel)
throw new Error(`Player#movePlayer() No voice channel provided!`);
(_a = this.evolava.client.shardConnections.get(0)) === null || _a === void 0 ? void 0 : _a.gateway.sendVoiceStateUpdate(this.options.guild.id, this.options.voiceChannel.id, {
self_deaf: this.options.self.deaf,
self_mute: this.options.self.mute
});
}
play() {
if (this.queue.empty)
throw new RangeError(`Player#play() No tracks in the queue.`);
if (this.playing) {
return this.stop();
}
const track = this.queue.get(0);
this.node
.wsSend({
op: "play",
track: track.trackString,
guildId: this.options.guild.id,
volume: this.volume,
})
.catch((err) => {
if (err)
throw new Error(err);
});
}
search(query, user, options) {
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
const search = new RegExp(/^https?:\/\//g).test(query)
? encodeURI(query)
: `${options.source || "yt"}search:${query}`;
const { loadType, playlistInfo, tracks, exception } = yield (yield fetch(`http://${this.node.node.host}:${this.node.node.port}/loadtracks?identifier=${search}`, {
headers: { Authorization: this.node.node.password },
})).json();
switch (loadType) {
case "TRACK_LOADED":
const arr = [];
const trackData = Utils_1.Utils.newTrack(tracks[0], user);
arr.push(trackData);
if (options.add === true)
return resolve(arr);
this.queue.add(trackData);
resolve(arr);
break;
case "PLAYLIST_LOADED":
const data = {
name: playlistInfo.name,
trackCount: tracks.length,
tracks: tracks,
};
const playlist = Utils_1.Utils.newPlaylist(data, user);
resolve(playlist);
break;
case "SEARCH_RESULT":
const res = tracks.map((t) => Utils_1.Utils.newTrack(t, user));
resolve(res);
break;
case "NO_MATCHES":
reject(new Error(`Player#lavaSearch() No result found for the search query.`));
break;
case "LOAD_FAILED":
const { message, severity } = exception;
reject(new Error(`Player#lavaSearch() ${message} (Severity: ${severity}).`));
break;
}
}));
}
stop() {
this.node
.wsSend({
op: "stop",
guildId: this.options.guild.id,
})
.catch((err) => {
if (err)
throw new Error(err);
});
}
pause() {
if (this.paused)
throw new Error(`Player#pause() The player is already paused.`);
this.node
.wsSend({
op: "pause",
guildId: this.options.guild.id,
pause: true,
})
.catch((err) => {
if (err)
throw new Error(err);
});
this.paused = true;
}
resume() {
if (!this.paused)
throw new Error(`Player#resume() The player is already resumed.`);
this.node
.wsSend({
op: "pause",
guildId: this.options.guild.id,
pause: false,
})
.catch((err) => {
if (err)
throw new Error(err);
});
this.paused = false;
}
seek(position) {
if (this.queue.empty)
throw new RangeError(`Player#seek() No tracks in queue.`);
if (isNaN(position))
throw new RangeError(`Player#seek() The provided position is not a number.`);
if (position < 0 || position > this.queue.first.length)
throw new RangeError(`Player#seek() The provided position must be in between 0 and ${this.queue.first.length}.`);
this.position = position;
this.node
.wsSend({
op: "seek",
guildId: this.options.guild.id,
position: position,
})
.catch((err) => {
if (err)
throw new Error(err);
});
}
setVolume(volume = 100) {
if (isNaN(volume))
throw new RangeError(`Player#volume() The provided volume is not a number.`);
if (volume < 0 || volume > 1000)
throw new RangeError(`Player#setVolume() Provided volume must be in between 0 and 1000.`);
this.volume = volume;
this.node
.wsSend({
op: "volume",
guildId: this.options.guild.id,
volume: volume,
})
.catch((err) => {
if (err)
throw new Error(err);
});
}
destroy() {
var _a;
(_a = this.evolava.client.shardConnections.get(0)) === null || _a === void 0 ? void 0 : _a.gateway.sendVoiceStateUpdate(this.options.guild.id, "");
this.node
.wsSend({
op: "destroy",
guildId: this.options.guild.id,
})
.catch((err) => {
if (err)
throw new Error(err);
});
this.evolava.players.delete(this.options.guild.id);
this.evolava.emit("playerDestroyed", this);
}
}
exports.EvolavaPlayer = EvolavaPlayer;
//# sourceMappingURL=EvoLavaPlayer.js.map