ZtereoMUSIC/src/main/java/codes/ztereohype/ztereomusic/audio/TrackManagers.java

64 lines
2.6 KiB
Java

package codes.ztereohype.ztereomusic.audio;
import codes.ztereohype.ztereomusic.ZtereoMUSIC;
import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
import net.dv8tion.jda.api.entities.Guild;
import net.dv8tion.jda.api.entities.MessageChannel;
import net.dv8tion.jda.api.entities.VoiceChannel;
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) {
long guildId = guild.getIdLong();
TrackManager trackManager = ZtereoMUSIC.getInstance().getGuildTrackManagerMap().get(guildId);
if (trackManager == null) {
return null;
}
guild.getAudioManager().setSendingHandler(trackManager.getAudioSendHandler());
return trackManager;
}
//todo: rename to getOrCreateGuildTrackManager
public static TrackManager getGuildTrackManager(Guild guild, MessageChannel infoChannel, VoiceChannel connectedChannel, 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);
if (trackManager == null) {
trackManager = new TrackManager(ZtereoMUSIC.getInstance().getPlayerManager(), infoChannel, guild);
ZtereoMUSIC.getInstance().getGuildTrackManagerMap().put(guildId, trackManager);
guild.getAudioManager().openAudioConnection(requestedChannel);
}
guild.getAudioManager().setSendingHandler(trackManager.getAudioSendHandler());
return trackManager;
}
// stops player, disconnects from vc, and deletes the wrapper
public static void removeGuildTrackManager(Guild guild) {
long guildId = guild.getIdLong();
TrackManager trackManager = ZtereoMUSIC.getInstance().getGuildTrackManagerMap().get(guildId);
if (trackManager == null) return;
trackManager.stop();
guild.getAudioManager().closeAudioConnection();
//todo: remove this when will be part of disconnection listener y fa fere ts tts sad
ZtereoMUSIC.getInstance().getGuildTrackManagerMap().remove(guildId);
}
}