From b0c00d48ee11ccc1cf880e0d668ea986f09a913b Mon Sep 17 00:00:00 2001 From: ZtereoHYPE <57519662+ZtereoHYPE@users.noreply.github.com> Date: Sun, 5 Dec 2021 02:15:32 +0100 Subject: [PATCH] fix: re-set the infochannel at each command use fixing #6 --- .../audio/CustomAudioLoadResultHandler.java | 13 ++++++++----- .../ztereomusic/audio/TrackManagers.java | 19 ++++++++----------- .../ztereomusic/command/commands/Pause.java | 4 +++- .../ztereomusic/command/commands/Play.java | 10 ++-------- .../ztereomusic/command/commands/Queue.java | 6 ++---- .../ztereomusic/command/commands/Skip.java | 2 +- .../listeners/CommandListener.java | 8 +++----- 7 files changed, 27 insertions(+), 35 deletions(-) diff --git a/src/main/java/codes/ztereohype/ztereomusic/audio/CustomAudioLoadResultHandler.java b/src/main/java/codes/ztereohype/ztereomusic/audio/CustomAudioLoadResultHandler.java index f35bab2..b16e60d 100644 --- a/src/main/java/codes/ztereohype/ztereomusic/audio/CustomAudioLoadResultHandler.java +++ b/src/main/java/codes/ztereohype/ztereomusic/audio/CustomAudioLoadResultHandler.java @@ -4,15 +4,18 @@ import com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler; import com.sedmelluq.discord.lavaplayer.tools.FriendlyException; import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist; import com.sedmelluq.discord.lavaplayer.track.AudioTrack; +import net.dv8tion.jda.api.entities.Message; +import net.dv8tion.jda.api.entities.MessageChannel; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; public class CustomAudioLoadResultHandler implements AudioLoadResultHandler { private final TrackManager trackManager; - private final MessageReceivedEvent messageEvent; + private final MessageChannel messageChannel; - public CustomAudioLoadResultHandler(TrackManager trackManager, MessageReceivedEvent messageEvent) { + public CustomAudioLoadResultHandler(TrackManager trackManager, MessageChannel messageChannel) { this.trackManager = trackManager; - this.messageEvent = messageEvent; + this.messageChannel = messageChannel; + trackManager.setInfoChannel(messageChannel); } @Override @@ -29,12 +32,12 @@ public class CustomAudioLoadResultHandler implements AudioLoadResultHandler { @Override public void noMatches() { - this.messageEvent.getMessage().reply("I found no matches for that song!").queue(); + this.messageChannel.sendMessage("I found no matches for that song!").queue(); } @Override public void loadFailed(FriendlyException throwable) { - this.messageEvent.getMessage().reply("everything blew up and died. i'm sorry.").queue(); + this.messageChannel.sendMessage("everything blew up and died. i'm sorry.").queue(); } } diff --git a/src/main/java/codes/ztereohype/ztereomusic/audio/TrackManagers.java b/src/main/java/codes/ztereohype/ztereomusic/audio/TrackManagers.java index 58443e1..e699826 100644 --- a/src/main/java/codes/ztereohype/ztereomusic/audio/TrackManagers.java +++ b/src/main/java/codes/ztereohype/ztereomusic/audio/TrackManagers.java @@ -6,11 +6,12 @@ import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.MessageChannel; import net.dv8tion.jda.api.entities.VoiceChannel; +import javax.annotation.Nullable; import java.util.Objects; public class TrackManagers { - //todo: change to a statement that only returns a trackmanager if it exists and overload it to accept various things eg guild but also vc or infoMessage channel - public static TrackManager getGuildTrackManager(Guild guild) { + @Nullable + public static TrackManager getGuildTrackManager(Guild guild, MessageChannel infoChannel) { long guildId = guild.getIdLong(); TrackManager trackManager = ZtereoMUSIC.getInstance().getGuildTrackManagerMap().get(guildId); @@ -19,21 +20,15 @@ public class TrackManagers { return null; } + trackManager.setInfoChannel(infoChannel); + guild.getAudioManager().setSendingHandler(trackManager.getAudioSendHandler()); return trackManager; } - //todo: rename to getOrCreateGuildTrackManager - public static TrackManager getGuildTrackManager(Guild guild, MessageChannel infoChannel, VoiceChannel connectedChannel, VoiceChannel requestedChannel) { + public static TrackManager getOrCreateGuildTrackManager(Guild guild, MessageChannel infoChannel, VoiceChannel requestedChannel) { long guildId = guild.getIdLong(); - boolean isInSameVC = Objects.equals(connectedChannel, requestedChannel); - - // If I get called in a different vc I delete the old manager - //todo: move this check to the audio micropermissions and handle it there - if (!isInSameVC) { - ZtereoMUSIC.getInstance().getGuildTrackManagerMap().remove(guildId); - } TrackManager trackManager = ZtereoMUSIC.getInstance().getGuildTrackManagerMap().get(guildId); @@ -43,6 +38,8 @@ public class TrackManagers { guild.getAudioManager().openAudioConnection(requestedChannel); } + trackManager.setInfoChannel(infoChannel); + guild.getAudioManager().setSendingHandler(trackManager.getAudioSendHandler()); return trackManager; diff --git a/src/main/java/codes/ztereohype/ztereomusic/command/commands/Pause.java b/src/main/java/codes/ztereohype/ztereomusic/command/commands/Pause.java index 150988f..e0d78e0 100644 --- a/src/main/java/codes/ztereohype/ztereomusic/command/commands/Pause.java +++ b/src/main/java/codes/ztereohype/ztereomusic/command/commands/Pause.java @@ -6,6 +6,7 @@ import codes.ztereohype.ztereomusic.command.Command; import codes.ztereohype.ztereomusic.command.CommandMeta; import codes.ztereohype.ztereomusic.command.permissions.VoiceChecks; import net.dv8tion.jda.api.entities.Guild; +import net.dv8tion.jda.api.entities.MessageChannel; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; public class Pause implements Command { @@ -33,7 +34,8 @@ public class Pause implements Command { @Override public void execute(MessageReceivedEvent messageEvent, String[] args) { Guild guild = messageEvent.getGuild(); - TrackManager trackManager = TrackManagers.getGuildTrackManager(guild); + MessageChannel messageChannel = messageEvent.getChannel(); + TrackManager trackManager = TrackManagers.getGuildTrackManager(guild, messageChannel); assert trackManager != null; // the command will not execute if it is anyway because of our VoiceChecks if (trackManager.getPlayer().isPaused()) { diff --git a/src/main/java/codes/ztereohype/ztereomusic/command/commands/Play.java b/src/main/java/codes/ztereohype/ztereomusic/command/commands/Play.java index 37962da..c69e304 100644 --- a/src/main/java/codes/ztereohype/ztereomusic/command/commands/Play.java +++ b/src/main/java/codes/ztereohype/ztereomusic/command/commands/Play.java @@ -8,17 +8,11 @@ import codes.ztereohype.ztereomusic.command.Command; import codes.ztereohype.ztereomusic.command.CommandMeta; import codes.ztereohype.ztereomusic.command.permissions.VoiceChecks; import codes.ztereohype.ztereomusic.networking.YoutubeSearch; -import com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler; -import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager; -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.player.AudioPlayerManager; import net.dv8tion.jda.api.entities.*; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.managers.AudioManager; -import java.io.IOException; import java.util.Objects; import java.util.Optional; import java.util.regex.Matcher; @@ -74,8 +68,8 @@ public class Play implements Command { identifier = mergedArgs; } - TrackManager trackManager = TrackManagers.getGuildTrackManager(guild, messageChannel, manager.getConnectedChannel(), voiceChannel); + TrackManager trackManager = TrackManagers.getOrCreateGuildTrackManager(guild, messageChannel, voiceChannel); - playerManager.loadItem(identifier, new CustomAudioLoadResultHandler(trackManager, messageEvent)); + playerManager.loadItem(identifier, new CustomAudioLoadResultHandler(trackManager, messageChannel)); } } diff --git a/src/main/java/codes/ztereohype/ztereomusic/command/commands/Queue.java b/src/main/java/codes/ztereohype/ztereomusic/command/commands/Queue.java index 74cfa08..4604d44 100644 --- a/src/main/java/codes/ztereohype/ztereomusic/command/commands/Queue.java +++ b/src/main/java/codes/ztereohype/ztereomusic/command/commands/Queue.java @@ -1,6 +1,5 @@ package codes.ztereohype.ztereomusic.command.commands; -import codes.ztereohype.ztereomusic.ZtereoMUSIC; import codes.ztereohype.ztereomusic.audio.TrackManager; import codes.ztereohype.ztereomusic.audio.TrackManagers; import codes.ztereohype.ztereomusic.command.Command; @@ -40,14 +39,13 @@ public class Queue implements Command { Guild guild = messageEvent.getGuild(); VoiceChannel voiceChannel = Objects.requireNonNull(Objects.requireNonNull(messageEvent.getMember()).getVoiceState()).getChannel(); MessageChannel messageChannel = messageEvent.getChannel(); - VoiceChannel connectedChannel = guild.getAudioManager().getConnectedChannel(); - TrackManager trackManager = TrackManagers.getGuildTrackManager(guild, messageChannel, connectedChannel, voiceChannel); + TrackManager trackManager = TrackManagers.getOrCreateGuildTrackManager(guild, messageChannel, voiceChannel); StringBuilder messageBuilder = new StringBuilder(); List trackList = trackManager.trackQueue; for (AudioTrack track: trackList) { - messageBuilder.append(trackList.indexOf(track)).append(". "); + messageBuilder.append(trackList.indexOf(track) + 1).append(". "); messageBuilder.append(track.getInfo().title); messageBuilder.append(System.getProperty("line.separator")); } diff --git a/src/main/java/codes/ztereohype/ztereomusic/command/commands/Skip.java b/src/main/java/codes/ztereohype/ztereomusic/command/commands/Skip.java index 430f581..b2ac2c6 100644 --- a/src/main/java/codes/ztereohype/ztereomusic/command/commands/Skip.java +++ b/src/main/java/codes/ztereohype/ztereomusic/command/commands/Skip.java @@ -37,7 +37,7 @@ public class Skip implements Command { public void execute(MessageReceivedEvent messageEvent, String[] args) { Guild guild = messageEvent.getGuild(); MessageChannel messageChannel = messageEvent.getChannel(); - TrackManager trackManager = TrackManagers.getGuildTrackManager(guild); + TrackManager trackManager = TrackManagers.getGuildTrackManager(guild, messageChannel); assert trackManager != null; // the command will not execute if it is anyway because of our VoiceChecks (BOT_PLAYING) if (trackManager.getPlayer().getPlayingTrack() == null) { diff --git a/src/main/java/codes/ztereohype/ztereomusic/listeners/CommandListener.java b/src/main/java/codes/ztereohype/ztereomusic/listeners/CommandListener.java index 898476f..961f416 100644 --- a/src/main/java/codes/ztereohype/ztereomusic/listeners/CommandListener.java +++ b/src/main/java/codes/ztereohype/ztereomusic/listeners/CommandListener.java @@ -6,10 +6,7 @@ import codes.ztereohype.ztereomusic.audio.TrackManagers; import codes.ztereohype.ztereomusic.command.Command; import codes.ztereohype.ztereomusic.command.permissions.Check; import codes.ztereohype.ztereomusic.command.permissions.VoiceChecks; -import net.dv8tion.jda.api.entities.Guild; -import net.dv8tion.jda.api.entities.Member; -import net.dv8tion.jda.api.entities.Message; -import net.dv8tion.jda.api.entities.VoiceChannel; +import net.dv8tion.jda.api.entities.*; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.hooks.ListenerAdapter; import net.dv8tion.jda.api.managers.AudioManager; @@ -27,6 +24,7 @@ public class CommandListener extends ListenerAdapter { @Override public void onMessageReceived(@Nonnull MessageReceivedEvent event) { Message message = event.getMessage(); + MessageChannel messageChannel = event.getChannel(); String content = message.getContentRaw(); Guild guild = message.getGuild(); @@ -52,7 +50,7 @@ public class CommandListener extends ListenerAdapter { // check if the command is allowed and stop at first failure (order is important) for (VoiceChecks checkEnum : command.getMeta().getChecks()) { - if (!checkEnum.getCheck().getResult(message.getMember(), guild.getAudioManager().getConnectedChannel(), TrackManagers.getGuildTrackManager(guild))) { + if (!checkEnum.getCheck().getResult(message.getMember(), guild.getAudioManager().getConnectedChannel(), TrackManagers.getGuildTrackManager(guild, messageChannel))) { message.reply(checkEnum.getCheck().getErrorCode()).queue(); return; }