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.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();
}
}

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.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;

View file

@ -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()) {

View file

@ -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));
}
}

View file

@ -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<AudioTrack> 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"));
}

View file

@ -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) {

View file

@ -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;
}