From e76d236278b72875e9875c46980f3b702aa5e552 Mon Sep 17 00:00:00 2001 From: ZtereoHYPE <57519662+ZtereoHYPE@users.noreply.github.com> Date: Mon, 8 Nov 2021 03:01:35 +0100 Subject: [PATCH] new: guild music player and its manager --- .../ztereomusic/audio/GuildMusicPlayer.java | 57 +++++++++++++++++++ .../ztereomusic/audio/GuildMusicPlayers.java | 46 +++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 src/main/java/codes/ztereohype/ztereomusic/audio/GuildMusicPlayer.java create mode 100644 src/main/java/codes/ztereohype/ztereomusic/audio/GuildMusicPlayers.java diff --git a/src/main/java/codes/ztereohype/ztereomusic/audio/GuildMusicPlayer.java b/src/main/java/codes/ztereohype/ztereomusic/audio/GuildMusicPlayer.java new file mode 100644 index 0000000..cec542c --- /dev/null +++ b/src/main/java/codes/ztereohype/ztereomusic/audio/GuildMusicPlayer.java @@ -0,0 +1,57 @@ +package codes.ztereohype.ztereomusic.audio; + +import com.sedmelluq.discord.lavaplayer.player.AudioPlayer; +import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager; +import com.sedmelluq.discord.lavaplayer.track.AudioTrack; +import lombok.Getter; +import net.dv8tion.jda.api.entities.MessageChannel; + +public class GuildMusicPlayer { + private final @Getter AudioPlayer player; + private final TrackManager trackManager; + private final MessageChannel infoChannel; + + public GuildMusicPlayer(AudioPlayerManager playerManager, MessageChannel infoChannel) { + player = playerManager.createPlayer(); + trackManager = new TrackManager(player, infoChannel); + player.addListener(trackManager); + this.infoChannel = infoChannel; + } + + public AudioPlayerSendHandler getAudioSendHandler() { + return new AudioPlayerSendHandler(this.player); + } + + public void queue(AudioTrack track) { + // change this to add to queue and call onTrackEnd! + if (player.getPlayingTrack() == null) { + player.playTrack(track); + } else { + trackManager.queue(track); + infoChannel.sendMessage("Queued " + track.getInfo().title).queue(); + } + } + + public void clearQueue() { + trackManager.trackQueue.clear(); + } + + public void pause() { + infoChannel.sendMessage("Pausing...").queue(); + player.setPaused(true); + } + + public void resume() { + infoChannel.sendMessage("Resuming...").queue(); + player.setPaused(false); + } + + public void skip() { + infoChannel.sendMessage("Skipping...").queue(); + trackManager.playNext(); + } + + public void stop() { + player.stopTrack(); + } +} diff --git a/src/main/java/codes/ztereohype/ztereomusic/audio/GuildMusicPlayers.java b/src/main/java/codes/ztereohype/ztereomusic/audio/GuildMusicPlayers.java new file mode 100644 index 0000000..9dd24cb --- /dev/null +++ b/src/main/java/codes/ztereohype/ztereomusic/audio/GuildMusicPlayers.java @@ -0,0 +1,46 @@ +package codes.ztereohype.ztereomusic.audio; + +import codes.ztereohype.ztereomusic.Bot; +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 GuildMusicPlayers { + public static GuildMusicPlayer getGuildAudioPlayer(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 + if (!isInSameVC) { + Bot.guildMusicPlayerMap.remove(guildId); + } + + GuildMusicPlayer musicPlayer = Bot.guildMusicPlayerMap.get(guildId); + + if (musicPlayer == null) { + musicPlayer = new GuildMusicPlayer(Bot.playerManager, infoChannel); + Bot.guildMusicPlayerMap.put(guildId, musicPlayer); + guild.getAudioManager().openAudioConnection(requestedChannel); + } + + guild.getAudioManager().setSendingHandler(musicPlayer.getAudioSendHandler()); + + return musicPlayer; + } + + // stops player, disconnects from vc, and deletes the wrapper + public static void removeGuildAudioPlayer(Guild guild) { + long guildId = guild.getIdLong(); + GuildMusicPlayer musicPlayer = Bot.guildMusicPlayerMap.get(guildId); + + if (musicPlayer == null) return; + + musicPlayer.stop(); + guild.getAudioManager().closeAudioConnection(); + + //todo: remove this when will be part of disconnection listener + Bot.guildMusicPlayerMap.remove(guildId); + } +}