},"[-s/-l] <URL/search words>",Arrays.asList("despacito","https://www.youtube.com/watch?v=dQw4w9WgXcQ","-l tpz sega","-s asymmetry reol"),"Queue some music to play!",Arrays.asList(
" * this also supports all opus streams and common audio format as long as you provide the url.",
" * you can specify `-s` when searching to search soundcloud instead of youtube,",
" * or `-l` to search for youtube playlists instead."));
//TODO merge? i dont think it can be though
//TODO guild config for non restricted loop/autoplay
returnnewCommandResult(CommandResultType.INVALIDARGS,"You are currently not alone in the music channel, therefore this feature is disabled.");
}
},"",null,"Auto-queues related tracks when you are alone!",
Arrays.asList(" * Currently only works if the last track in the queue is a youtube video."," Note: it will autoplay indefinitely until you toggle it again or someone joins."));
},"[+/-][hr:]<min:sec>",Arrays.asList("4:52:21","2:00","+30:00","-1:23:45"),"Set the playing position in the current track!",
Arrays.asList("timestamps without signs are absolute, whereas `+`/`-` means go forward or backward from the current position for the amount of time specified respectively."," * the person who requested the current track can always set the position, regardless of perms."),
if(num==1)returnnewCommandResult(CommandResultType.INVALIDARGS,"You cannot remove the current track from the queue with this command. Use !desp music skip instead.");
if(num<1)returnnewCommandResult(CommandResultType.INVALIDARGS,"The index you entered is invalid.");
},"<fromindex> <toindex>",Arrays.asList("2 3"),"Move a track to the specified index.",Arrays.asList(" * you can also run this command regardless of perms if you are alone with the bot.")
},"[search words]",Arrays.asList(""),"Search some lyrics up!",Arrays.asList(" * if you did not specify any search words, the bot will try to fetch the lyrics of the current track playing, if any."));
},"[bandvalues/presetname]",Arrays.asList("","0.09 0.07 0.07 0.01 0 0 -0.02 -0.02 0.03 0.03 0.05 0.07 0.09 0.1 0.1","bassboost"),"Sets the equalizer for the music player in this guild!",
Arrays.asList("Accepts 15 bands with values ranging from -0.25 to 0.25, where -0.25 is muted and 0.25 is double volume.","* presets include: `bassboost`, `default`, `rock`.","Input nothing to return the current settings.","",
"Note: you might experience some audio cracking for band values >0.1, since amplifying volumes remotely does not work well.","It is recommended to use values from -0.25 to 0.1, and turning discord volume up instead.")
if(Arrays.asList("move","clear").contains(sub.getName())){//should always be connected to vc
if(channel.getGuild().getAudioManager().getConnectedChannel().getMembers().size()==2){//alone; no need to check if the other member is requester, since its checked before
CommandResultres=super.execute(channel,author,msg,args);//pass to subcommand handler for perms checking
if(res.getResultType()==CommandResultType.NOPERMS&&Arrays.asList("forceskip","skip","setposition","removetrack").contains(sub.getName())){//add back info to command result
res=newCommandResult(CommandResultType.INVALIDARGS,res.getMessage().getContentRaw().split(" to execute")[0]+", or have requested the track to execute this command.");
//private ExecutorService executor = Executors.newCachedThreadPool(); //unfortunately i need to finish the api search to get the url to start the html scrape, which means i cannot use future for multithread here
publicList<MessageEmbed>getLyrics(Stringsearch)throwsIOException{//DONE dont splice words between embeds; make whole sentence to be spliced instead
//appends metadata portion to the given embed (should be the last one)
privatevoidsetFinalLyricsEmbed(EmbedBuildereb,JSONObjectmain,Elementhtml){//change the format for the supplementary info in artists and albums from italic to sth else?