woomy/src/commands/queue.js

184 lines
4.1 KiB
JavaScript

'use strict';
const Discord = require("discord.js");
exports.run = (client, message, args) => {
var queue = client.music.getGuild(message.guild.id).queue;
if(queue.length < 1) {
return message.channel.send("<:error:466995152976871434> Nothing is playing.");
}
let lists = [];
function generateList(start, number) {
var list = "";
var timestamp;
var livestream;
if(start == 1 && queue.length == 1) {
return ["There's nothing else waiting to be played!", 1];
}
if(number == 1 && queue.length + 1 < start) {
return false;
};
let q = queue.slice(start);
let i = 0;
for(i = 0; i < q.length; i++) {
let song = q[i];
if(song.duration == 0) {
timestamp = "LIVE";
livestream = true;
} else {
timestamp = client.createTimestamp(song.duration);
};
let aaa = list + `\`${(i + 1) + start - 1}:\` **[${song.title}](https://www.youtube.com/watch?v=${song.id})** added by ${song.requestedBy} \`[${timestamp}]\`\n`;
if(aaa.length > 1024) {
return [list, start + i - 1];
} else {
list = aaa;
}
//totalDuration = totalDuration + song.duration;
};
return [list, start + i + 1];
};
let songsInQueue = queue.length - 1;
let songsInQueueEnglish = "song";
let timeRemaining = 0;
function generatePage(list, page) {
if(!list || list == "") {
return false;
}
var embed = new Discord.MessageEmbed();
embed.setTitle(`Queue for: ${message.guild.name}`);
embed.setColor(client.embedColour(message));
var elapsedTime = client.music.getGuild(message.guild.id).dispatcher.streamTime / 1000
var totalDuration = queue[0].duration - elapsedTime;
let timeRemaining = "";
for(let i = 1; i < queue.length; i++) {
let b = queue[i];
if(b.duration == 0) {
timeRemaining = "∞";
break;
}
totalDuration += b.duration;
}
if(timeRemaining == "") {
let queueDuration = client.createTimestamp(totalDuration);
timeRemaining = queueDuration;
}
let timestamp;
if(queue[0].duration == 0) {
timestamp = "LIVE";
livestream = true;
} else {
timestamp = client.createTimestamp(elapsedTime) + '/' + client.createTimestamp(queue[0].duration);
};
embed.addField(`Now playing:`, `**[${queue[0].title}](https://www.youtube.com/watch?v=${queue[0].id})** added by ${queue[0].requestedBy} \`[${timestamp}]\``)
embed.addField(`Up next:`, list);
if(songsInQueue > 1 || songsInQueue == 0) {
songsInQueueEnglish = "songs";
}
embed.setFooter(`Page ${page}/${lists.length} | ${songsInQueue + " " + songsInQueueEnglish} in queue | ${timeRemaining} time remaining`);
return embed;
};
var myMessage = null;
function displayPage(number) {
let page = generatePage(lists[number - 1], number);
if(page) {
if(myMessage) {
myMessage.edit(page);
} else {
myMessage = message.channel.send(page);
}
return true;
} else {
return false;
}
};
function aFunction(start) {
// start - index of song, which we should start with
// end - index of song, which we ended with
let [list, end] = generateList(start, lists.length + 1);
if(list && list != "") {
lists.push(list);
if(queue[end + 1]) {
aFunction(end + 1);
}
}
};
aFunction(1);
let page = 1;
if(args[0]) {
let userPage = Number(args[0]);
if(userPage) {
page = userPage;
} else {
return message.channel.send(
`<:error:466995152976871434> Invalid page. Usage: \`${client.commands.get(`queue`).help.usage}\``
);
}
};
if(displayPage(page)) {
} else {
return message.channel.send(
`<:error:466995152976871434> Page ${page} doesn't exist!`
);
}
};
exports.conf = {
enabled: true,
guildOnly: true,
aliases: [],
permLevel: "User",
requiredPerms: []
};
exports.help = {
name: "queue",
category: "Music",
description: "Displays what songs are in the queue.",
usage: "queue <page>"
};