From 6ed956a05359c53753d191ea36ff9fa2fef6f9ae Mon Sep 17 00:00:00 2001 From: anthorob Date: Fri, 7 Jan 2022 20:06:29 -0500 Subject: [PATCH] Fix view queue command and add currently playing command --- src/main/java/netneutrality/GuildManager.java | 3 - .../music/CurrentlyPlayingCommand.java | 75 +++++++++++++++++++ .../music/LoadResultHandler.java | 6 +- .../netneutrality/music/MusicManager.java | 5 +- .../netneutrality/utils/MessageFunction.java | 29 ++++--- 5 files changed, 96 insertions(+), 22 deletions(-) create mode 100644 src/main/java/netneutrality/command/music/CurrentlyPlayingCommand.java diff --git a/src/main/java/netneutrality/GuildManager.java b/src/main/java/netneutrality/GuildManager.java index 724efbb..611533b 100644 --- a/src/main/java/netneutrality/GuildManager.java +++ b/src/main/java/netneutrality/GuildManager.java @@ -57,13 +57,10 @@ public class GuildManager { } public String getSetting(String key) { - reloadSettings(); return guildEntity.getSettings().getSettingByKey(key); } public String getSetting(GuildSettings key) { - reloadSettings(); - System.out.println(key); return guildEntity.getSettings().getSettingByKey(key.toString()); } diff --git a/src/main/java/netneutrality/command/music/CurrentlyPlayingCommand.java b/src/main/java/netneutrality/command/music/CurrentlyPlayingCommand.java new file mode 100644 index 0000000..a809e42 --- /dev/null +++ b/src/main/java/netneutrality/command/music/CurrentlyPlayingCommand.java @@ -0,0 +1,75 @@ +package netneutrality.command.music; + +/* + * Copyright (c) anthorob + * + * This file is closed-source. It should not be distributed or copied in any way or form + */ + +import net.dv8tion.jda.api.entities.Member; +import net.dv8tion.jda.api.entities.VoiceChannel; +import net.dv8tion.jda.api.events.message.MessageReceivedEvent; +import netneutrality.command.AbstractMusicCommand; +import netneutrality.command.Visibility; +import netneutrality.music.MusicManager; +import netneutrality.utils.MessageFunction; + +public class CurrentlyPlayingCommand extends AbstractMusicCommand { + + @Override + public boolean isEnabled() { + return true; + } + + @Override + public String getCommand() { + return "playing"; + } + + @Override + public String[] getAlias() { + return new String[0]; + } + + @Override + public String getUsage() { + return null; + } + + @Override + public String getDescription() { + return "View currently playing track"; + } + + @Override + public Visibility getVisibility() { + return Visibility.CHANNEL; + } + + @Override + public String execute(MessageReceivedEvent event, String[] args) { + Member member = event.getMember(); + + if (member.getVoiceState().inVoiceChannel()) { + MusicManager player = MusicManager.get(event.getGuild()); + VoiceChannel vChannel = member.getVoiceState().getChannel(); + + if (player.isConnected()) { + if (player.isConnectedTo(vChannel)) { + if (player.getCurrentlyPlaying() != null) { + event.getTextChannel().sendMessageEmbeds(MessageFunction.buildCurrentlyPlayingMessage(player, member)).queue(); + } else { + event.getTextChannel().sendMessage("Player is not playing any track right now").queue(); + } + + } else + event.getTextChannel().sendMessage("Player is not in your voice channel").queue(); + } else { + event.getTextChannel().sendMessage("Player is not in a voice channel").queue(); + } + } else + event.getTextChannel().sendMessage("You are not in a voice channel").queue(); + + return null; + } +} diff --git a/src/main/java/netneutrality/music/LoadResultHandler.java b/src/main/java/netneutrality/music/LoadResultHandler.java index 0413f09..56aab6c 100644 --- a/src/main/java/netneutrality/music/LoadResultHandler.java +++ b/src/main/java/netneutrality/music/LoadResultHandler.java @@ -33,7 +33,7 @@ public class LoadResultHandler implements AudioLoadResultHandler { @Override public void trackLoaded(AudioTrack audioTrack) { if (!silent) { - channel.sendMessageEmbeds(MessageFunction.buildAddingTrackMessage(audioTrack, user)).queue(); + channel.sendMessageEmbeds(MessageFunction.buildAddingTrackMessage(audioTrack, user, identifier)).queue(); } scheduler.queue(audioTrack); @@ -45,10 +45,10 @@ public class LoadResultHandler implements AudioLoadResultHandler { if (identifier.startsWith("ytsearch:")) { AudioTrack track = audioPlaylist.getTracks().get(0); - channel.sendMessageEmbeds(MessageFunction.buildAddingTrackMessage(track, user)).queue(); + channel.sendMessageEmbeds(MessageFunction.buildAddingTrackMessage(track, user, identifier)).queue(); scheduler.queue(track); } else { - channel.sendMessageEmbeds(MessageFunction.buildAddingPlaylistMessage(audioPlaylist, user)).queue(); + channel.sendMessageEmbeds(MessageFunction.buildAddingPlaylistMessage(audioPlaylist, user, identifier)).queue(); for (AudioTrack track : audioPlaylist.getTracks()) { scheduler.queue(track); } diff --git a/src/main/java/netneutrality/music/MusicManager.java b/src/main/java/netneutrality/music/MusicManager.java index 61f73ed..9231760 100644 --- a/src/main/java/netneutrality/music/MusicManager.java +++ b/src/main/java/netneutrality/music/MusicManager.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.concurrent.BlockingQueue; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -132,7 +133,9 @@ public class MusicManager { public ArrayList getAllQueuedTrack() { ArrayList queuedTracks = new ArrayList<>(); - scheduler.getQueue().forEach((a) -> { + BlockingQueue queue = scheduler.getQueue(); + + queue.forEach((a) -> { queuedTracks.add(a.getInfo().title); }); diff --git a/src/main/java/netneutrality/utils/MessageFunction.java b/src/main/java/netneutrality/utils/MessageFunction.java index 9428b11..a1159af 100644 --- a/src/main/java/netneutrality/utils/MessageFunction.java +++ b/src/main/java/netneutrality/utils/MessageFunction.java @@ -58,21 +58,25 @@ public class MessageFunction { return false; } - public synchronized static MessageEmbed buildCurrentlyPlayingMessage(AudioTrack track, Member user) { + public synchronized static MessageEmbed buildCurrentlyPlayingMessage(MusicManager manager, Member user) { + AudioTrack current = manager.getCurrentlyPlaying(); + EmbedBuilder message = new EmbedBuilder(); - message.setThumbnail(String.format("https://img.youtube.com/vi/%s/default.jpg", track.getIdentifier())); + message.setAuthor("Link to track", String.format("https://youtu.be/%s", current.getIdentifier())); + message.setThumbnail(String.format("https://img.youtube.com/vi/%s/default.jpg", current.getIdentifier())); message.setTitle("Currently playing:"); message.setColor(Color.BLUE); - message.addField("Track title: ", track.getInfo().title, false); - message.addField("Duration: ", DurationFormatUtils.formatDuration(track.getPosition(), "**HH:mm:ss**", true) + " / " + DurationFormatUtils.formatDuration(track.getDuration(), "**HH:mm:ss**", true), false); + message.addField("Track title: ", current.getInfo().title, false); + message.addField("Duration: ", DurationFormatUtils.formatDuration(current.getPosition(), "**HH:mm:ss**", true) + " / " + DurationFormatUtils.formatDuration(current.getDuration(), "**HH:mm:ss**", true), false); message.setFooter("Requested by " + user.getUser().getName(), user.getUser().getAvatarUrl()); message.setTimestamp(OffsetDateTime.now()); return message.build(); } - public synchronized static MessageEmbed buildAddingTrackMessage(AudioTrack track, Member user) { + public synchronized static MessageEmbed buildAddingTrackMessage(AudioTrack track, Member user, String identifier) { EmbedBuilder message = new EmbedBuilder(); + message.setAuthor("Link to track", identifier); message.setThumbnail(String.format("https://img.youtube.com/vi/%s/default.jpg", track.getIdentifier())); message.setTitle("Adding track to queue.."); message.setColor(Color.BLUE); @@ -84,8 +88,9 @@ public class MessageFunction { return message.build(); } - public synchronized static MessageEmbed buildAddingPlaylistMessage(AudioPlaylist playlist, Member user) { + public synchronized static MessageEmbed buildAddingPlaylistMessage(AudioPlaylist playlist, Member user, String identifier) { EmbedBuilder message = new EmbedBuilder(); + message.setAuthor("Link to playlist", identifier); message.setThumbnail(String.format("https://img.youtube.com/vi/%s/default.jpg", playlist.getSelectedTrack().getIdentifier())); message.setTitle("Adding playlist to queue.."); message.setColor(Color.BLUE); @@ -94,27 +99,21 @@ public class MessageFunction { message.setFooter("Requested by " + user.getUser().getName(), user.getUser().getAvatarUrl()); message.setTimestamp(OffsetDateTime.now()); - return message.build(); } public static MessageEmbed buildViewQueueMessage(MusicManager manager, Member user) { ArrayList tracks = manager.getAllQueuedTrack(); - Collections.reverse(tracks); AudioTrack current = manager.getCurrentlyPlaying(); EmbedBuilder message = new EmbedBuilder(); message.setTitle("Current queue (showing max 10 items):"); message.setColor(Color.BLUE); + message.addField("Track #1 (Currently playing)", current.getInfo().title, false); - int index = 0; + int index = 1; for (String track: tracks) { - String text = track; - - if (Objects.equals(track, current.getInfo().title)) - text += " (Currently playing)"; - - message.addField("Track #" + ++index, text, false); + message.addField("Track #" + ++index, track, false); if (index == 10) break; }