fix: re-set the infochannel at each command use fixing #6

This commit is contained in:
ZtereoHYPE 2021-12-05 02:15:32 +01:00
parent aee6735e39
commit b0c00d48ee
7 changed files with 27 additions and 35 deletions

View file

@ -4,15 +4,18 @@ import com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler;
import com.sedmelluq.discord.lavaplayer.tools.FriendlyException; import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist; import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist;
import com.sedmelluq.discord.lavaplayer.track.AudioTrack; 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; import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
public class CustomAudioLoadResultHandler implements AudioLoadResultHandler { public class CustomAudioLoadResultHandler implements AudioLoadResultHandler {
private final TrackManager trackManager; 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.trackManager = trackManager;
this.messageEvent = messageEvent; this.messageChannel = messageChannel;
trackManager.setInfoChannel(messageChannel);
} }
@Override @Override
@ -29,12 +32,12 @@ public class CustomAudioLoadResultHandler implements AudioLoadResultHandler {
@Override @Override
public void noMatches() { 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 @Override
public void loadFailed(FriendlyException throwable) { 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();
} }
} }

View file

@ -6,11 +6,12 @@ import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.MessageChannel; import net.dv8tion.jda.api.entities.MessageChannel;
import net.dv8tion.jda.api.entities.VoiceChannel; import net.dv8tion.jda.api.entities.VoiceChannel;
import javax.annotation.Nullable;
import java.util.Objects; import java.util.Objects;
public class TrackManagers { 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 @Nullable
public static TrackManager getGuildTrackManager(Guild guild) { public static TrackManager getGuildTrackManager(Guild guild, MessageChannel infoChannel) {
long guildId = guild.getIdLong(); long guildId = guild.getIdLong();
TrackManager trackManager = ZtereoMUSIC.getInstance().getGuildTrackManagerMap().get(guildId); TrackManager trackManager = ZtereoMUSIC.getInstance().getGuildTrackManagerMap().get(guildId);
@ -19,21 +20,15 @@ public class TrackManagers {
return null; return null;
} }
trackManager.setInfoChannel(infoChannel);
guild.getAudioManager().setSendingHandler(trackManager.getAudioSendHandler()); guild.getAudioManager().setSendingHandler(trackManager.getAudioSendHandler());
return trackManager; return trackManager;
} }
//todo: rename to getOrCreateGuildTrackManager public static TrackManager getOrCreateGuildTrackManager(Guild guild, MessageChannel infoChannel, VoiceChannel requestedChannel) {
public static TrackManager getGuildTrackManager(Guild guild, MessageChannel infoChannel, VoiceChannel connectedChannel, VoiceChannel requestedChannel) {
long guildId = guild.getIdLong(); 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); TrackManager trackManager = ZtereoMUSIC.getInstance().getGuildTrackManagerMap().get(guildId);
@ -43,6 +38,8 @@ public class TrackManagers {
guild.getAudioManager().openAudioConnection(requestedChannel); guild.getAudioManager().openAudioConnection(requestedChannel);
} }
trackManager.setInfoChannel(infoChannel);
guild.getAudioManager().setSendingHandler(trackManager.getAudioSendHandler()); guild.getAudioManager().setSendingHandler(trackManager.getAudioSendHandler());
return trackManager; return trackManager;

View file

@ -6,6 +6,7 @@ import codes.ztereohype.ztereomusic.command.Command;
import codes.ztereohype.ztereomusic.command.CommandMeta; import codes.ztereohype.ztereomusic.command.CommandMeta;
import codes.ztereohype.ztereomusic.command.permissions.VoiceChecks; import codes.ztereohype.ztereomusic.command.permissions.VoiceChecks;
import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.MessageChannel;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
public class Pause implements Command { public class Pause implements Command {
@ -33,7 +34,8 @@ public class Pause implements Command {
@Override @Override
public void execute(MessageReceivedEvent messageEvent, String[] args) { public void execute(MessageReceivedEvent messageEvent, String[] args) {
Guild guild = messageEvent.getGuild(); 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 assert trackManager != null; // the command will not execute if it is anyway because of our VoiceChecks
if (trackManager.getPlayer().isPaused()) { if (trackManager.getPlayer().isPaused()) {

View file

@ -8,17 +8,11 @@ import codes.ztereohype.ztereomusic.command.Command;
import codes.ztereohype.ztereomusic.command.CommandMeta; import codes.ztereohype.ztereomusic.command.CommandMeta;
import codes.ztereohype.ztereomusic.command.permissions.VoiceChecks; import codes.ztereohype.ztereomusic.command.permissions.VoiceChecks;
import codes.ztereohype.ztereomusic.networking.YoutubeSearch; 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 com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager;
import net.dv8tion.jda.api.entities.*; import net.dv8tion.jda.api.entities.*;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.managers.AudioManager; import net.dv8tion.jda.api.managers.AudioManager;
import java.io.IOException;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.regex.Matcher; import java.util.regex.Matcher;
@ -74,8 +68,8 @@ public class Play implements Command {
identifier = mergedArgs; 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));
} }
} }

View file

@ -1,6 +1,5 @@
package codes.ztereohype.ztereomusic.command.commands; package codes.ztereohype.ztereomusic.command.commands;
import codes.ztereohype.ztereomusic.ZtereoMUSIC;
import codes.ztereohype.ztereomusic.audio.TrackManager; import codes.ztereohype.ztereomusic.audio.TrackManager;
import codes.ztereohype.ztereomusic.audio.TrackManagers; import codes.ztereohype.ztereomusic.audio.TrackManagers;
import codes.ztereohype.ztereomusic.command.Command; import codes.ztereohype.ztereomusic.command.Command;
@ -40,14 +39,13 @@ public class Queue implements Command {
Guild guild = messageEvent.getGuild(); Guild guild = messageEvent.getGuild();
VoiceChannel voiceChannel = Objects.requireNonNull(Objects.requireNonNull(messageEvent.getMember()).getVoiceState()).getChannel(); VoiceChannel voiceChannel = Objects.requireNonNull(Objects.requireNonNull(messageEvent.getMember()).getVoiceState()).getChannel();
MessageChannel messageChannel = messageEvent.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(); StringBuilder messageBuilder = new StringBuilder();
List<AudioTrack> trackList = trackManager.trackQueue; List<AudioTrack> trackList = trackManager.trackQueue;
for (AudioTrack track: trackList) { for (AudioTrack track: trackList) {
messageBuilder.append(trackList.indexOf(track)).append(". "); messageBuilder.append(trackList.indexOf(track) + 1).append(". ");
messageBuilder.append(track.getInfo().title); messageBuilder.append(track.getInfo().title);
messageBuilder.append(System.getProperty("line.separator")); messageBuilder.append(System.getProperty("line.separator"));
} }

View file

@ -37,7 +37,7 @@ public class Skip implements Command {
public void execute(MessageReceivedEvent messageEvent, String[] args) { public void execute(MessageReceivedEvent messageEvent, String[] args) {
Guild guild = messageEvent.getGuild(); Guild guild = messageEvent.getGuild();
MessageChannel messageChannel = messageEvent.getChannel(); 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) assert trackManager != null; // the command will not execute if it is anyway because of our VoiceChecks (BOT_PLAYING)
if (trackManager.getPlayer().getPlayingTrack() == null) { if (trackManager.getPlayer().getPlayingTrack() == null) {

View file

@ -6,10 +6,7 @@ import codes.ztereohype.ztereomusic.audio.TrackManagers;
import codes.ztereohype.ztereomusic.command.Command; import codes.ztereohype.ztereomusic.command.Command;
import codes.ztereohype.ztereomusic.command.permissions.Check; import codes.ztereohype.ztereomusic.command.permissions.Check;
import codes.ztereohype.ztereomusic.command.permissions.VoiceChecks; import codes.ztereohype.ztereomusic.command.permissions.VoiceChecks;
import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.*;
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.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter; import net.dv8tion.jda.api.hooks.ListenerAdapter;
import net.dv8tion.jda.api.managers.AudioManager; import net.dv8tion.jda.api.managers.AudioManager;
@ -27,6 +24,7 @@ public class CommandListener extends ListenerAdapter {
@Override @Override
public void onMessageReceived(@Nonnull MessageReceivedEvent event) { public void onMessageReceived(@Nonnull MessageReceivedEvent event) {
Message message = event.getMessage(); Message message = event.getMessage();
MessageChannel messageChannel = event.getChannel();
String content = message.getContentRaw(); String content = message.getContentRaw();
Guild guild = message.getGuild(); 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) // check if the command is allowed and stop at first failure (order is important)
for (VoiceChecks checkEnum : command.getMeta().getChecks()) { 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(); message.reply(checkEnum.getCheck().getErrorCode()).queue();
return; return;
} }