2020-01-25 10:02:43 +00:00
'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 ;
}
2020-03-09 01:11:33 +00:00
var embed = new Discord . MessageEmbed ( ) ;
2020-01-25 10:02:43 +00:00
embed . setTitle ( ` Queue for: ${ message . guild . name } ` ) ;
embed . setColor ( client . embedColour ( message ) ) ;
2020-03-09 01:11:33 +00:00
var elapsedTime = client . music . getGuild ( message . guild . id ) . dispatcher . streamTime / 1000
2020-01-25 10:02:43 +00:00
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 {
2020-01-25 12:26:02 +00:00
timestamp = client . createTimestamp ( elapsedTime ) + '/' + client . createTimestamp ( queue [ 0 ] . duration ) ;
2020-01-25 10:02:43 +00:00
} ;
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 ) ;
2020-01-25 12:26:02 +00:00
if ( songsInQueue > 1 || songsInQueue == 0 ) {
2020-01-25 10:02:43 +00:00
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>"
} ;