const { google } = require('googleapis');
|
|
const youtube = google.youtube('v3');
|
|
const secrets = require('./secrets.json');
|
|
const ytdl = require("ytdl-core");
|
|
|
|
module.exports = {
|
|
name: 'playlist',
|
|
description: 'Add playlist to the queue.',
|
|
roles: ['732550362199752764', '732345527143759943'],
|
|
async execute(message) {
|
|
var message = message;
|
|
const args = message.content.split(" ");
|
|
try{
|
|
let playlist_id = args[1].match(/https:\/\/www\.youtube\.com\/watch\?.*list=(.{34}).*/)[1]
|
|
youtube.playlistItems.list({
|
|
key: secrets.web.api_key,
|
|
part: 'snippet, contentDetails',
|
|
playlistId: playlist_id,
|
|
maxResults: 50,
|
|
}, async (err, results) => {
|
|
try {
|
|
const queue = message.client.queue;
|
|
const serverQueue = message.client.queue.get(message.guild.id);
|
|
|
|
const voiceChannel = message.member.voice.channel;
|
|
if (!voiceChannel)
|
|
return message.channel.send(
|
|
"You need to be in a voice channel to play music!"
|
|
);
|
|
|
|
const permissions = voiceChannel.permissionsFor(message.client.user);
|
|
if (!permissions.has("CONNECT") || !permissions.has("SPEAK")) {
|
|
return message.channel.send(
|
|
"I need the permissions to join and speak in your voice channel!"
|
|
);
|
|
}
|
|
|
|
if (!serverQueue) {
|
|
const queueContruct = {
|
|
textChannel: message.channel,
|
|
voiceChannel: voiceChannel,
|
|
connection: null,
|
|
songs: [],
|
|
volume: 5,
|
|
playing: true
|
|
};
|
|
|
|
queue.set(message.guild.id, queueContruct);
|
|
|
|
results.data.items.forEach(function(item, index){
|
|
url = "https://www.youtube.com/watch?v=" + item.contentDetails.videoId
|
|
let song = {
|
|
title: item.snippet.title,
|
|
url: url
|
|
};
|
|
queueContruct.songs.push(song);
|
|
});
|
|
|
|
try {
|
|
var connection = await voiceChannel.join();
|
|
queueContruct.connection = connection;
|
|
this.play(message, queueContruct.songs[0]);
|
|
} catch (err) {
|
|
console.log(err);
|
|
queue.delete(message.guild.id);
|
|
return message.channel.send(err);
|
|
}
|
|
return message.channel.send(
|
|
`Playing the first song from the playlist!`
|
|
);
|
|
} else {
|
|
results.data.items.forEach(function(item, index){
|
|
url = "https://www.youtube.com/watch?v=" + item.contentDetails.videoId
|
|
let song = {
|
|
title: item.snippet.title,
|
|
url: url
|
|
};
|
|
serverQueue.songs.push(song);
|
|
});
|
|
return message.channel.send(
|
|
`Added songs from the playlist to the queue!`
|
|
);
|
|
}
|
|
|
|
} catch (error) {
|
|
console.log(error);
|
|
message.channel.send("Sorry, that did not work for some mysterious reason :(");
|
|
}
|
|
});
|
|
} catch (error) {
|
|
console.log(error);
|
|
message.channel.send("Sorry, that did not work for some mysterious reason :(");
|
|
}
|
|
},
|
|
|
|
play(message, song) {
|
|
const queue = message.client.queue;
|
|
const guild = message.guild;
|
|
const serverQueue = queue.get(message.guild.id);
|
|
|
|
if (!song) {
|
|
serverQueue.voiceChannel.leave();
|
|
queue.delete(guild.id);
|
|
return;
|
|
}
|
|
|
|
const dispatcher = serverQueue.connection
|
|
.play(ytdl(song.url, { filter: 'audioonly', highWaterMark: 1024 * 1024 * 10 }))
|
|
.on("finish", () => {
|
|
serverQueue.songs.shift();
|
|
this.play(message, serverQueue.songs[0]);
|
|
})
|
|
.on("error", error => console.error(error));
|
|
dispatcher.setVolumeLogarithmic(serverQueue.volume / 5);
|
|
serverQueue.textChannel.send(`Start playing: **${song.title}**`);
|
|
},
|
|
};
|