lavalink-player
Version:
A simple lib to play music in Discord based on erela.js
153 lines • 5.82 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Player = void 0;
const erela_js_1 = require("erela.js");
const events_1 = require("events");
const erela_js_spotify_1 = __importDefault(require("erela.js-spotify"));
const erela_js_deezer_1 = __importDefault(require("erela.js-deezer"));
const index_1 = require("./structures/index");
class Player extends events_1.EventEmitter {
constructor(client, options) {
super();
this.client = client;
this.options = options;
this.player = this;
this.clientID = options.clientId;
this.clientSecret = options.clientSecret;
if (!options.retryDelay) {
this.options.retryDelay = 5000;
}
const clientID = this.clientID;
const clientSecret = this.clientSecret;
this.client.on("raw", (d) => {
this.manager.updateVoiceState(d);
});
this.manager = new erela_js_1.Manager({
nodes: [
{
host: this.options.host,
password: this.options.password,
retryDelay: this.options.retryDelay,
identifier: this.options.identifier,
},
],
plugins: [
new erela_js_spotify_1.default({
clientID,
clientSecret,
albumLimit: this.options.albumLimit,
playlistLimit: this.options.playlistLimit,
convertUnresolved: this.options.convertUnresolved,
}),
new erela_js_deezer_1.default({
albumLimit: this.options.albumLimit,
playlistLimit: this.options.playlistLimit,
convertUnresolved: this.options.convertUnresolved,
}),
],
autoPlay: true,
send: (id, payload) => {
const guild = this.client.guilds.cache.get(id);
if (guild)
guild.shard.send(payload);
},
})
.on("nodeCreate", (node) => {
this.emit("NODE_CREATE", node);
})
.on("nodeDestroy", (node) => {
this.emit("NODE_DESTROY", node);
})
.on("nodeConnect", (node) => {
this.emit("NODE_CONNECT", node);
})
.on("nodeReconnect", (node) => {
this.emit("NODE_RECONNECT", node);
})
.on("nodeDisconnect", (node, reason) => {
this.emit("NODE_DISCONNECT", node, reason);
})
.on("nodeError", (node, error) => {
this.emit("NODE_ERROR", node, error);
})
.on("nodeRaw", (payload) => {
this.emit("NODE_RAW", payload);
})
.on("playerCreate", (player) => {
this.emit("PLAYER_CREATE", player);
})
.on("playerDestroy", (player) => {
this.emit("PLAYER_DESTROY", player);
})
.on("playerMove", (player, oldChannel, newChannel) => {
this.emit("PLAYER_MOVE", player, oldChannel, newChannel);
})
.on("queueEnd", (player) => {
this.emit("QUEUE_END", player);
})
.on("trackStart", (player, track, payload) => {
this.emit("TRACK_START", player, track, payload);
})
.on("trackEnd", (player, track, payload) => {
this.emit("TRACK_END", player, track, payload);
})
.on("trackStuck", (player, track, payload) => {
this.emit("TRACK_STUCK", player, track, payload);
})
.on("trackError", (player, track, payload) => {
this.emit("TRACK_ERROR", player, track, payload);
})
.on("socketClosed", (player, payload) => {
this.emit("SOCKET_CLOSED", player, payload);
});
this.client.once("ready", () => {
this.manager.init(this.options.id);
});
this.client.on("message", (message) => {
if (!message.guild)
return;
const player = this.manager.players.get(message.guild.id);
if (!player)
return;
this.op = {
textChannel: player.textChannel,
voiceChannel: player.voiceChannel,
position: player.position,
volume: player.volume,
paused: player.paused,
playing: player.playing,
state: player.state,
queue: player.queue,
trackRepeat: player.trackRepeat,
queueRepeat: player.queueRepeat,
voiceState: player.voiceState,
};
});
}
join(message) {
index_1.join(this.manager, message, this.options.selfDeafen);
}
searchAndPlay(message, searchQuery) {
index_1.searchAndPlay(this.player, this.manager, this.options.selfDeafen, message, searchQuery);
}
pause(message) {
index_1.pauseResume(this.manager, message, true);
}
resume(message) {
index_1.pauseResume(this.manager, message, false);
}
skip(message) {
index_1.skip(this.manager, message);
}
stop(message) {
index_1.stop(this.manager, message);
}
setVolume(message, volume) {
index_1.setVolume(this.manager, message, volume);
}
}
exports.Player = Player;
//# sourceMappingURL=Player.js.map