UNPKG

@evolvejs/evolava

Version:

a lavalink client for evolvejs

200 lines 7.61 kB
"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