diff --git a/src/main/java/com/bbn/hadder/audio/AudioManager.java b/src/main/java/com/bbn/hadder/audio/AudioManager.java index 7c0d6dd..eafc501 100644 --- a/src/main/java/com/bbn/hadder/audio/AudioManager.java +++ b/src/main/java/com/bbn/hadder/audio/AudioManager.java @@ -10,7 +10,9 @@ 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 com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo; import net.dv8tion.jda.api.entities.Guild; +import net.dv8tion.jda.api.entities.Member; import net.dv8tion.jda.api.entities.Message; import java.util.AbstractMap; @@ -28,62 +30,9 @@ public class AudioManager { AudioSourceManagers.registerRemoteSources(myManager); } - public final Map> players = new HashMap<>(); + public static Map> players = new HashMap<>(); public final AudioPlayerManager myManager = new DefaultAudioPlayerManager(); - public void loadTrack(String identifier, CommandEvent event, Message msg) { - - Guild guild = event.getGuild(); - getPlayer(guild); - - myManager.loadItemOrdered(guild, identifier, new AudioLoadResultHandler() { - - @Override - public void trackLoaded(AudioTrack track) { - getTrackManager(guild).queue(track, event.getMember()); - msg.editMessage(event.getMessageEditor().getMessage(MessageEditor.MessageType.INFO, - "commands.music.play.success.loading.title", "⏯", - "", "") - .addField(event.getMessageEditor().getTerm("commands.music.play.success.title"), track.getInfo().title, false) - .addField(event.getMessageEditor().getTerm("commands.music.play.success.author"), track.getInfo().author, true) - .addField(event.getMessageEditor().getTerm("commands.music.play.success.length"), - String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(track.getInfo().length), - TimeUnit.MILLISECONDS.toMinutes(track.getInfo().length) % TimeUnit.HOURS.toMinutes(1), - TimeUnit.MILLISECONDS.toSeconds(track.getInfo().length) % TimeUnit.MINUTES.toSeconds(1)), true) - .build()).queue(); - } - - @Override - public void playlistLoaded(AudioPlaylist playlist) { - if (playlist.getSelectedTrack() != null) { - trackLoaded(playlist.getSelectedTrack()); - } else if (playlist.isSearchResult()) { - trackLoaded(playlist.getTracks().get(0)); - } else { - for (int i = 0; i < Math.min(playlist.getTracks().size(), 200); i++) { - getTrackManager(guild).queue(playlist.getTracks().get(i), event.getMember()); - } - } - } - - @Override - public void noMatches() { - msg.editMessage(event.getMessageEditor().getMessage(MessageEditor.MessageType.INFO, - "commands.music.play.error.match.title", "❌", - "commands.music.play.error.match.description", "") - .build()).queue(); - } - - @Override - public void loadFailed(FriendlyException e) { - msg.editMessage(event.getMessageEditor().getMessage(MessageEditor.MessageType.INFO, - "commands.music.play.error.load.title", "❌", - "commands.music.play.error.load.description", "") - .build()).queue(); - } - }); - } - public boolean hasPlayer(Guild guild) { return players.containsKey(guild.getId()); } @@ -111,6 +60,93 @@ public class AudioManager { return nPlayer; } + public void loadTrack(String identifier, CommandEvent event, Message msg) { + Guild guild = event.getGuild(); + getPlayer(guild); + + myManager.loadItemOrdered(guild, identifier, new AudioLoadResultHandler() { + + @Override + public void trackLoaded(AudioTrack track) { + getTrackManager(guild).queue(track, event.getMember()); + msg.editMessage(event.getMessageEditor().getMessage(MessageEditor.MessageType.INFO, + "commands.music.play.success.loading.title", "⏯", + "", "") + .addField(event.getMessageEditor().getTerm("commands.music.play.success.title"), track.getInfo().title, false) + .addField(event.getMessageEditor().getTerm("commands.music.play.success.author"), track.getInfo().author, true) + .addField(event.getMessageEditor().getTerm("commands.music.play.success.length"), + String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(track.getInfo().length), + TimeUnit.MILLISECONDS.toMinutes(track.getInfo().length) % TimeUnit.HOURS.toMinutes(1), + TimeUnit.MILLISECONDS.toSeconds(track.getInfo().length) % TimeUnit.MINUTES.toSeconds(1)), true) + .build()).queue(); + } + + @Override + public void playlistLoaded(AudioPlaylist playlist) { + if (playlist.getSelectedTrack() != null) { + trackLoaded(playlist.getSelectedTrack()); + } else if (playlist.isSearchResult()) { + trackLoaded(playlist.getTracks().get(0)); + } else { + event.getTextChannel().sendMessage("PL loaded :D").queue(); + } + } + + @Override + public void noMatches() { + msg.editMessage(event.getMessageEditor().getMessage(MessageEditor.MessageType.INFO, + "commands.music.play.error.match.title", "❌", + "commands.music.play.error.match.description", "") + .build()).queue(); + } + + @Override + public void loadFailed(FriendlyException e) { + msg.editMessage(event.getMessageEditor().getMessage(MessageEditor.MessageType.INFO, + "commands.music.play.error.load.title", "❌", + "commands.music.play.error.load.description", "") + .build()).queue(); + } + }); + } + + public boolean isDj(Member member) { + return member.getRoles().stream().anyMatch(r -> r.getName().equals("DJ")); + } + + public boolean isCurrentDj(Member member) { + return getTrackManager(member.getGuild()).getTrackInfo(getPlayer(member.getGuild()).getPlayingTrack()).getAuthor().equals(member); + } + + public boolean isIdle(CommandEvent event) { + if (!hasPlayer(event.getGuild()) || getPlayer(event.getGuild()).getPlayingTrack() == null) { + event.getTextChannel().sendMessage(" Idle no song lul :D").queue(); + return true; + } + return false; + } + + public void forceSkipTrack(CommandEvent event) { + getPlayer(event.getGuild()).stopTrack(); + event.getTextChannel().sendMessage("Skipped boyy :D").queue(); + } + + public String buildQueueMessage(AudioInfo info) { + AudioTrackInfo trackInfo = info.getTrack().getInfo(); + String title = trackInfo.title; + long length = trackInfo.length; + return "`[ " + getTimestamp(length) + " ]` " + title + "\n"; + } + + public String getTimestamp(long milis) { + long seconds = milis / 1000; + long hours = Math.floorDiv(seconds, 3600); + seconds = seconds - (hours * 3600); + long mins = Math.floorDiv(seconds, 60); + seconds = seconds - (mins * 60); + return (hours == 0 ? "" : hours + ":") + String.format("%02d", mins) + ":" + String.format("%02d", seconds); + } + public String getOrNull(String s) { return s.isEmpty() ? "N/A" : s; }