diff options
-rw-r--r-- | src/main/java/soundchan/BotListener/BotListener.java | 69 | ||||
-rw-r--r-- | src/main/java/soundchan/BotListener/Commands.java | 1 |
2 files changed, 65 insertions, 5 deletions
diff --git a/src/main/java/soundchan/BotListener/BotListener.java b/src/main/java/soundchan/BotListener/BotListener.java index 9bcccfe..415e350 100644 --- a/src/main/java/soundchan/BotListener/BotListener.java +++ b/src/main/java/soundchan/BotListener/BotListener.java @@ -208,9 +208,12 @@ public class BotListener extends ListenerAdapter{ // Unpause the song/sound in the queue unpauseTrack(channel); - }else if(enumCommand == Commands.playingnow){ + }else if(enumCommand == Commands.playingnow) { // Print the currently playing song - printCurrentlyPlaying(channel); + printCurrentlyPlaying(channel, false); + } else if(enumCommand == Commands.status) { + // Print currently playing song with extra info + printCurrentlyPlaying(channel, true); }else if(enumCommand == Commands.summon){ connectToUserVoiceChannel(monitoredGuild.getAudioManager(), event.getMember().getEffectiveName()); }else if(enumCommand == Commands.help){ @@ -253,11 +256,33 @@ public class BotListener extends ListenerAdapter{ channel.sendMessage("Unpaused playback.").queue(); } - private void printCurrentlyPlaying(final MessageChannel channel){ + /** + * Prints out information about what is currently playing and possibly information about the track and/or the audio volume + * @param channel The channel to respond on + * @param printStatus Print out extra information such as track information and/or audio volume + */ + private void printCurrentlyPlaying(final MessageChannel channel, boolean printStatus){ GuildMusicManager musicManager = getGuildAudioPlayer(); AudioTrack currentlyPlaying = musicManager.player.getPlayingTrack(); - channel.sendMessage("Currently Playing: " + currentlyPlaying.getInfo().title + " by " + currentlyPlaying.getInfo().author).queue(); - + String message = ""; + if(currentlyPlaying != null) { + message = "Currently Playing: " + currentlyPlaying.getInfo().title + " by " + currentlyPlaying.getInfo().author; + if(printStatus) { + message += "\n" + genTimeInformation(currentlyPlaying.getPosition(), currentlyPlaying.getDuration()); + if(musicManager.player.isPaused()) { + message += "\n**Paused**"; + } else { + message += "\n*Playing*"; + } + message += ( "\nVolume = " + musicManager.player.getVolume() + "%"); + } + } else { + message = "Nothing currently playing"; + if(printStatus) { + message += ("\nVolume = " + musicManager.player.getVolume() + "%"); + } + } + channel.sendMessage(message).queue(); } private void loadAndPlay(final MessageChannel channel, final String trackUrl, boolean preempt) { @@ -335,6 +360,7 @@ public class BotListener extends ListenerAdapter{ "~list sounds - prints out the names of the sounds available\n" + "~list users - prints out users with audio that will play when they join the voice channel\n" + "~playingnow - prints out the name of the currently playing song\n" + + "~status - prints out status about the currently playing song\n" + "~summon - brings SoundChan to the voice channel of the summoner\n" + "~help - prints out this help message ```"; channel.sendMessage(printMessage).queue(); @@ -361,6 +387,39 @@ public class BotListener extends ListenerAdapter{ } /** + * Creates a block of time information with a progressbar + * @param currentMillis Current position in the audio in milliseconds + * @param durationMillis Length of audio in milliseconds + * @return Time information block + */ + private static String genTimeInformation(long currentMillis, long durationMillis) { + String message = "|"; + double temp = ((double) currentMillis / (double) durationMillis); + int fill = (int) (temp * 10.0); + for(int i = 0; i < fill - 1; i++) { + message += "--"; + } + message += "<>"; + for(int i = fill; i < 10; i++) { + message += "--"; + } + message += "|\nTime : " + genTimeStamp(currentMillis) + " / " + genTimeStamp(durationMillis); + return message; + } + + /** + * Creates a timestamp string from a number of milliseconds + * @param durationInMillis Number of milliseconds to turn into timestamp + * @return Timestamp in form HH:MM:ss + */ + private static String genTimeStamp(long durationInMillis) { + long second = (durationInMillis / 1000) % 60; + long minute = (durationInMillis / (1000 * 60)) % 60; + long hour = (durationInMillis / (1000 * 60 * 60)) % 24; + return String.format("%02d:%02d:%02d", hour, minute, second); + } + + /** * Checks the string for some reason to enable/disable a setting. * @param value A string (probably read in from config file) * @return True if it matches a value to enable, False otherwise diff --git a/src/main/java/soundchan/BotListener/Commands.java b/src/main/java/soundchan/BotListener/Commands.java index e054de1..046bcab 100644 --- a/src/main/java/soundchan/BotListener/Commands.java +++ b/src/main/java/soundchan/BotListener/Commands.java @@ -11,6 +11,7 @@ public enum Commands { skip, list, playingnow, + status, summon, help } |