gt: 			List<User> banned = msg.getMentionedUsers();
context: package bot;
  
  import com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler;
  import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
  import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager;
  import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager;
  import com.sedmelluq.discord.lavaplayer.source.AudioSourceManagers;
  import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
  import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist;
  import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
  
  import de.btobastian.sdcf4j.Command;
  import de.btobastian.sdcf4j.CommandExecutor;
  import net.dv8tion.jda.core.EmbedBuilder;
  import net.dv8tion.jda.core.JDA;
  import net.dv8tion.jda.core.Permission;
  import net.dv8tion.jda.core.entities.Guild;
  import net.dv8tion.jda.core.entities.Member;
  import net.dv8tion.jda.core.entities.Message;
  import net.dv8tion.jda.core.entities.TextChannel;
  import net.dv8tion.jda.core.entities.User;
  import net.dv8tion.jda.core.managers.AudioManager;
  
  import java.util.HashMap;
  import java.util.LinkedList;
  import java.util.List;
  import java.util.Map;
  
  public class PlayerControl 
  implements CommandExecutor {
  
  	private final AudioPlayerManager playerManager;
  	private final Map<Long, GuildMusicManager> musicManagers;
  	private Map<Long,LinkedList<Member>> skipvoters;
  	private ESBot bot;
  	
  	public PlayerControl(ESBot bot, JDA jda) {	
  		this.bot = bot;
  		this.musicManagers = new HashMap<>();
  		new AudioTimeoutControl(musicManagers,jda);
  		this.playerManager = new DefaultAudioPlayerManager();
  		this.skipvoters = new HashMap<>();
  		AudioSourceManagers.registerRemoteSources(playerManager);
  		AudioSourceManagers.registerLocalSource(playerManager);
  	}
  
  	private synchronized GuildMusicManager getGuildAudioPlayer(Guild guild) {
  		long guildId = Long.parseLong(guild.getId());
  		GuildMusicManager musicManager = musicManagers.get(guildId);
  
  		if (musicManager == null) {
  			musicManager = new GuildMusicManager(playerManager);
  			musicManagers.put(guildId, musicManager);
  		}
  		guild.getAudioManager().setSendingHandler(musicManager.getSendHandler());
  		return musicManager;
  	}
  
  	private synchronized LinkedList<Member> getGuildSkipvoters(Guild guild) {
  		long guildId = Long.parseLong(guild.getId());
  		LinkedList<Member> sk = skipvoters.get(guildId);
  
  		if (sk == null) {
  			sk = new LinkedList<>();
  			skipvoters.put(guildId, sk);
  		}
  		return sk;
  	}
  
  	@Command(aliases = {"-play"}, description = "Use to request a song while in a voicechannel. If no url is given, it will perform a search on youtube with the given words.", usage = "-play URL", privateMessages = false)
  	public void onPlayCommand(Guild guild,TextChannel channel, String[] args,User author){
  		Member requester = guild.getMember(author);
  		if (guild != null && args.length > 0 && requester.getVoiceState().getChannel() != null && !(requester.getRoles().containsAll(guild.getRolesByName("Anti-DJ", true)))) {		
  			checkVoiceChannel(guild.getAudioManager(), guild.getMember(author));
  			loadAndPlay(channel, normalize(args));
  		} 
  	}
  
  	private String normalize(String[] args) {
  		if(args.length == 1){
  			return args[0];
  		}else{
  			String output = "ytsearch:";
  			for(String s: args){
  				output += " " + s;
  			}
  			return output;
  		}
  	}
  
  	@Command(aliases = {"-skip"}, description = "Skip current song to start the next one. Requires the \"DJ\" role.", usage = "-skip", privateMessages = false)
  	public void onSkipCommand(Guild guild,TextChannel channel, User author){
  		Member requester = guild.getMember(author);
  		List<Permission> perm = requester.getPermissions(channel);
  		if((!(guild.getAudioManager().isAttemptingToConnect()||guild.getAudioManager().isConnected())||(requester.getVoiceState().getChannel() == guild.getAudioManager().getConnectedChannel()))&&(requester.getRoles().containsAll(guild.getRolesByName("DJ", true)) || perm.contains(Permission.ADMINISTRATOR) || requester.isOwner())){
  			if (guild != null) {
  				skipTrack(channel);
  				skipvoters.clear();
  			} 
  		}
  	}
  	
  	@Command(aliases = {"-current"}, description = "Displays the current autiotrack.", usage = "-current", privateMessages = false)
  	public void onCurrentCommand(Guild guild, TextChannel channel){
  		GuildMusicManager mng = getGuildAudioPlayer(guild);
  		AudioPlayer player = mng.player;
  		AudioTrack currentTrack = player.getPlayingTrack();
  		if (currentTrack != null)
  		{
  			String title = currentTrack.getInfo().title;
  			String position = getTimestamp(currentTrack.getPosition());
  			String duration = getTimestamp(currentTrack.getDuration());
  
  			String nowplaying = String.format("**Playing:** %s\n**Time:** [%s / %s]",
  					title, position, duration);
  			EmbedBuilder eb = new EmbedBuilder();
  			eb.setTitle("Audio-Player:", "https://github.com/sedmelluq/lavaplayer");
  			eb.setDescription(nowplaying);
  			eb.setColor(guild.getMember(bot.getSelf()).getColor());
  			eb.setThumbnail("https://raw.githubusercontent.com/Nechochwen-D/EndlessSky-Discord-Bot/master/thumbnails/info.png");
  			channel.sendMessage(eb.build()).queue();
  		}
  		else{
  			EmbedBuilder eb = new EmbedBuilder();
  			eb.setTitle("Audio-Player:", "https://github.com/sedmelluq/lavaplayer");
  			eb.setDescription("The player is not currently playing anything!");
  			eb.setColor(guild.getMember(bot.getSelf()).getColor());
  			eb.setThumbnail("https://raw.githubusercontent.com/Nechochwen-D/EndlessSky-Discord-Bot/master/thumbnails/info.png");
  			channel.sendMessage(eb.build()).queue();
  		}
  	}
  
  	@Command(aliases = {"-playlist"}, description = "Displays the current playlist.", usage = "-playlist", privateMessages = false)
  	public void onplaylistCommand(Guild guild,TextChannel channel){
  		GuildMusicManager mng = getGuildAudioPlayer(guild);
  		TrackScheduler scheduler = mng.scheduler;
  		LinkedList<AudioTrack> queue = scheduler.getQueue();
  		if(!queue.isEmpty()){
  			int trackCount = 0;
  			long queueLength = 0;
  			StringBuilder sb = new StringBuilder();
  			sb.append("Current Queue: Entries: ").append(queue.size()).append("\n");
  			for (AudioTrack track : queue)
  			{
  				queueLength += track.getDuration();
  				if (trackCount < 10)
  				{
  					sb.append("`[").append(getTimestamp(track.getDuration())).append("]` ");
  					sb.append(track.getInfo().title).append("\n");
  					trackCount++;
  				}
  			}
  			sb.append("\n").append("Total Queue Time Length: ").append(getTimestamp(queueLength));
  			EmbedBuilder eb = new EmbedBuilder();
  			eb.setTitle("Audio-Player:", "https://github.com/sedmelluq/lavaplayer");
  			eb.setDescription(sb.toString());
  			eb.setColor(guild.getMember(bot.getSelf()).getColor());
  			eb.setThumbnail("https://raw.githubusercontent.com/Nechochwen-D/EndlessSky-Discord-Bot/master/thumbnails/info.png");
  			channel.sendMessage(eb.build()).queue();
  		}
  	}
  
  	@Command(aliases = {"-shuffle"}, description = "Shuffle the playlist. Requires the \"DJ\" role.", usage = "-shuffle", privateMessages = false)
  	public void onShuffleCommand(Guild guild,TextChannel channel, User author){
  		Member requester = guild.getMember(author);
  		List<Permission> perm = requester.getPermissions(channel);
  		if(!(guild.getAudioManager().isAttemptingToConnect()||guild.getAudioManager().isConnected())||(requester.getRoles().containsAll(guild.getRolesByName("DJ", true)) || perm.contains(Permission.ADMINISTRATOR) || requester.isOwner())){
  			GuildMusicManager mng = getGuildAudioPlayer(guild);
  			TrackScheduler scheduler = mng.scheduler;
  			if(!scheduler.getQueue().isEmpty()){
  				scheduler.shuffle();
  				EmbedBuilder eb = new EmbedBuilder();
  				eb.setTitle("Audio-Player:", "https://github.com/sedmelluq/lavaplayer");
  				eb.setDescription("The queue has been shuffled!");
  				eb.setColor(guild.getMember(bot.getSelf()).getColor());
  				eb.setThumbnail("https://raw.githubusercontent.com/Nechochwen-D/EndlessSky-Discord-Bot/master/thumbnails/shuffle.png");
  				channel.sendMessage(eb.build()).queue();
  			}
  		}
  	}
  
  	@Command(aliases = {"-stop"}, description = "Stop the music, clean playlist and disconnect the bot from the channel. Requires the \"DJ\" role.", usage = "-stop", privateMessages = false)
  	public void onStopCommand(Guild guild,TextChannel channel,User author){
  		Member requester = guild.getMember(author);
  		List<Permission> perm = requester.getPermissions(channel);
  		if(requester.getRoles().containsAll(guild.getRolesByName("DJ",true)) || perm.contains(Permission.ADMINISTRATOR) || requester.isOwner()){
  			GuildMusicManager mng = getGuildAudioPlayer(guild);
  			AudioPlayer player = mng.player;
  			TrackScheduler scheduler = mng.scheduler;
  			scheduler.getQueue().clear();
  			player.stopTrack();
  			player.setPaused(false);
  			guild.getAudioManager().closeAudioConnection();
  			EmbedBuilder eb = new EmbedBuilder();
  			eb.setTitle("Audio-Player:", "https://github.com/sedmelluq/lavaplayer");
  			eb.setDescription("Playback has been completely stopped and the queue has been cleared.");
  			eb.setColor(guild.getMember(bot.getSelf()).getColor());
  			eb.setThumbnail("https://raw.githubusercontent.com/Nechochwen-D/EndlessSky-Discord-Bot/master/thumbnails/stop.png");
  			channel.sendMessage(eb.build()).queue();
  			System.out.println("AXAXAXAX");
  		}
  	}
  
  	@Command(aliases = {"-voteskip"}, description = "Start a vote/Vote to skip the current song. Needs 50% in the voicechannel to do the same to skip it.", usage = "-voteskip", privateMessages = false)
  	public synchronized void onVoteskipCommand(Guild guild,TextChannel channel, User author){
  		Member skipvoter = guild.getMember(author);
  		LinkedList<Member> guildVoters = getGuildSkipvoters(guild);
  		if(!guildVoters.contains(skipvoter)){
  			guildVoters.add(skipvoter);
  		}
  		LinkedList<Member> temp = new LinkedList<>();
  		for(Member m: guildVoters){
  			if(guild.getAudioManager().getConnectedChannel() == m.getVoiceState().getChannel()){
  				temp.add(m);
  			}
  		}
  		guildVoters = temp;		
  		if((int)((guild.getAudioManager().getConnectedChannel().getMembers().size()-1)/2+0.5) <= guildVoters.size()){
  			skipTrack(channel);
  			guildVoters.clear();
  			skipvoters.remove(Long.parseLong(guild.getId()));
  		}else{
  			EmbedBuilder eb = new EmbedBuilder();
  			eb.setTitle("Audio-Player:", "https://github.com/sedmelluq/lavaplayer");
  			eb.setColor(guild.getMember(bot.getSelf()).getColor());
  			eb.setDescription("Currently are " + guildVoters.size() + " captains voting to skip, but " + (int)((guild.getAudioManager().getConnectedChannel().getMembers().size()-1)/2+0.5) + " are needed to skip!");
  			eb.setThumbnail("https://raw.githubusercontent.com/Nechochwen-D/EndlessSky-Discord-Bot/master/thumbnails/voteskip.png");
  			channel.sendMessage(eb.build()).queue();
  		}
  		skipvoters.put(Long.parseLong(guild.getId()), guildVoters);
  
  	}
  
  	@Command(aliases = {"-playban"}, description = "Ban or unban a user from requesting songs via -play. Requires the \"DJ\" role.", usage = "-playban @mention", privateMessages = false)
  	public synchronized void onPlaybanCommand(Guild guild,TextChannel channel, User author, Message msg){
  		Member requester = guild.getMember(author);
  		List<Permission> perm = requester.getPermissions(channel);
  		if(requester.getRoles().containsAll(guild.getRolesByName("DJ", true)) || perm.contains(Permission.ADMINISTRATOR) || requester.isOwner()){
  