From 1e6f91d238884839ab13c09030904511b98ef062 Mon Sep 17 00:00:00 2001 From: Donald Shan Date: Mon, 26 Dec 2022 16:01:18 -0800 Subject: Added changing Discord Status feature Discord status of the bot will now change based on what is playing --- src/main/java/audio/GuildMusicManager.java | 7 +-- src/main/java/audio/Music.java | 79 ++++++++++++------------------ src/main/java/audio/TrackScheduler.java | 23 +++++++-- 3 files changed, 53 insertions(+), 56 deletions(-) (limited to 'src/main/java/audio') diff --git a/src/main/java/audio/GuildMusicManager.java b/src/main/java/audio/GuildMusicManager.java index 0757422..5a9adb7 100644 --- a/src/main/java/audio/GuildMusicManager.java +++ b/src/main/java/audio/GuildMusicManager.java @@ -1,14 +1,15 @@ package audio; import com.sedmelluq.discord.lavaplayer.player.AudioPlayer; import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager; +import net.dv8tion.jda.api.JDA; + public class GuildMusicManager { public final AudioPlayer player; - public final TrackScheduler scheduler; - public GuildMusicManager(AudioPlayerManager manager) { + public GuildMusicManager(AudioPlayerManager manager, JDA jda) { player = manager.createPlayer(); - scheduler = new TrackScheduler(player); + scheduler = new TrackScheduler(player,jda); player.addListener(scheduler); } diff --git a/src/main/java/audio/Music.java b/src/main/java/audio/Music.java index 26c7773..afca6f2 100644 --- a/src/main/java/audio/Music.java +++ b/src/main/java/audio/Music.java @@ -8,9 +8,13 @@ import com.sedmelluq.discord.lavaplayer.source.AudioSourceManagers; import com.sedmelluq.discord.lavaplayer.tools.FriendlyException; import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist; import com.sedmelluq.discord.lavaplayer.track.AudioTrack; +import commands.CommandManager; import commands.UIPusher; import net.dv8tion.jda.api.EmbedBuilder; +import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.JDABuilder; import net.dv8tion.jda.api.MessageBuilder; +import net.dv8tion.jda.api.entities.Activity; import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.entities.TextChannel; import net.dv8tion.jda.api.entities.VoiceChannel; @@ -24,10 +28,8 @@ import net.dv8tion.jda.api.interactions.components.selections.SelectionMenu; import net.dv8tion.jda.api.managers.AudioManager; import org.jetbrains.annotations.NotNull; import se.michaelthelin.spotify.model_objects.specification.PlaylistTrack; -import utility.EmbedMaker; -import utility.SpotifyAPI; -import utility.URLChecker; -import utility.YouTubeAPI; +import utility.*; +import javax.security.auth.login.LoginException; import java.awt.*; import java.io.*; import java.net.MalformedURLException; @@ -38,21 +40,39 @@ import java.util.*; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; + public class Music extends ListenerAdapter { - ArrayList currentlyLoadedPlaylist = new ArrayList<>(); - String ytapiKey; + public static JDA jda; + public static JDABuilder jdabuilder; + private ArrayList currentlyLoadedPlaylist = new ArrayList<>(); + private String ytapiKey; static String append = "$"; private final URLChecker urlCheck = new URLChecker(); - UIPusher uiPusher = new UIPusher(); + private StatusHandler statusHandler; + private UIPusher uiPusher = new UIPusher(); private final AudioPlayerManager playerManager; private final Map musicManagers; private final SpotifyAPI spotifyAPI = new SpotifyAPI(); private final EmbedMaker embedMaker = new EmbedMaker(); - public Music(String append, String ytapiKey) { + + public Music(String append, String ytapiKey, String discordToken) { this.musicManagers = new HashMap<>(); this.ytapiKey = ytapiKey; Music.append = append; this.playerManager = new DefaultAudioPlayerManager(); + jdabuilder = JDABuilder.createDefault(discordToken); + try { + jdabuilder.addEventListeners(this); + jdabuilder.addEventListeners(new CommandManager(this)); + jda = jdabuilder.build(); + statusHandler = new StatusHandler(jda); + statusHandler.setSlashCommands(); + System.out.println("Bot Started"); + } catch (LoginException e) { + throw new RuntimeException(e); + } + + //Registering audio sources AudioSourceManagers.registerRemoteSources(playerManager); AudioSourceManagers.registerLocalSource(playerManager); } @@ -61,7 +81,7 @@ public class Music extends ListenerAdapter { GuildMusicManager musicManager = musicManagers.get(guildId); if (musicManager == null) { - musicManager = new GuildMusicManager(playerManager); + musicManager = new GuildMusicManager(playerManager,jda); musicManagers.put(guildId, musicManager); } guild.getAudioManager().setSendingHandler(musicManager.getSendHandler()); @@ -126,15 +146,6 @@ public class Music extends ListenerAdapter { if((append+"holoadd").equals(command[0])){ event.getChannel().sendMessage("The url has been successfully added to the database").queue(); } - /* else if("!dev".equals(command[0])){ - try { - YouTubeAPI youTubeAPI = new YouTubeAPI(ytapiKey); - youTubeAPI.getAllURLPlaylist("PLQmVFdwvZgfXlb2RDXWV1NaPXgYPu786G"); - } - catch (Exception e){ - - } - }*/ super.onGuildMessageReceived(event); } @@ -205,6 +216,7 @@ public class Music extends ListenerAdapter { String userQuery = event.getOption("term").getAsString(); if (urlCheck.isURL(userQuery) && !urlCheck.getURLType(userQuery).equals("spotify")&&!urlCheck.getURLType(userQuery).equals("spotify-playlist")) { //The term is a URL event.reply("Found Video: " + userQuery).queue(); + loadAndPlay((TextChannel) event.getChannel(), userQuery, false); } else { //Run checks if its not a directly playable URL @@ -415,31 +427,6 @@ public class Music extends ListenerAdapter { } } - else if(event.getValues().get(0).contains("inspect-queue")) { //THIS FEAUTURE IS NOT FINISHED - //TODO: FINISH THE INSPECT QUEUE FEATURE - Queue queue = getGuildAudioPlayer(event.getGuild()).scheduler.queue; - BlockingQueue newQueue = new LinkedBlockingQueue<>(); - String trackName = event.getValues().get(0).replaceAll("inspect-queue ", ""); - synchronized (queue) { - if (queue.isEmpty()) - { - event.reply("The queue is currently empty!").queue(); - - } - else { - for (AudioTrack track : queue) { - if (!track.getInfo().title.equals(trackName)) { - newQueue.add(track); - } - else{ - - } - } - getGuildAudioPlayer(event.getGuild()).scheduler.queue = newQueue; - } - - } - } } @Override public void onButtonClick(ButtonClickEvent event){ @@ -518,6 +505,7 @@ public class Music extends ListenerAdapter { } play(channel.getGuild(), musicManager, track); + } @Override @@ -530,7 +518,6 @@ public class Music extends ListenerAdapter { channel.sendMessage("Adding to queue " + firstTrack.getInfo().title + " (first track of playlist " + playlist.getName() + ")").queue(); } - play(channel.getGuild(), musicManager, firstTrack); } @@ -555,14 +542,11 @@ public class Music extends ListenerAdapter { private void play(Guild guild, GuildMusicManager musicManager, AudioTrack track) { connectToFirstVoiceChannel(guild.getAudioManager()); musicManager.scheduler.queue(track); - BlockingQueue s = musicManager.scheduler.queue; - } public void skipTrack(SlashCommandEvent event) { GuildMusicManager musicManager = getGuildAudioPlayer(event.getGuild()); musicManager.scheduler.nextTrack(); - event.reply("Skipped to next track.").queue(); } @@ -588,5 +572,4 @@ public class Music extends ListenerAdapter { - } diff --git a/src/main/java/audio/TrackScheduler.java b/src/main/java/audio/TrackScheduler.java index 8377e7a..02329c8 100644 --- a/src/main/java/audio/TrackScheduler.java +++ b/src/main/java/audio/TrackScheduler.java @@ -4,6 +4,8 @@ import com.sedmelluq.discord.lavaplayer.player.AudioPlayer; import com.sedmelluq.discord.lavaplayer.player.event.AudioEventAdapter; import com.sedmelluq.discord.lavaplayer.track.AudioTrack; import com.sedmelluq.discord.lavaplayer.track.AudioTrackEndReason; +import net.dv8tion.jda.api.JDA; +import net.dv8tion.jda.api.entities.Activity; import java.util.Collections; import java.util.List; @@ -16,12 +18,13 @@ import java.util.concurrent.LinkedBlockingQueue; public class TrackScheduler extends AudioEventAdapter { public final AudioPlayer player; public BlockingQueue queue; - + public JDA jda; /** * @param player The audio player this scheduler uses */ - public TrackScheduler(AudioPlayer player) { + public TrackScheduler(AudioPlayer player, JDA jda) { this.player = player; + this.jda = jda; this.queue = new LinkedBlockingQueue<>(); } @@ -31,24 +34,34 @@ public class TrackScheduler extends AudioEventAdapter { * @param track The track to play or add to queue. */ public void queue(AudioTrack track) { - if (!player.startTrack(track, true)) { + //!player.startTrack(track, true) + if (player.getPlayingTrack()!= null) { queue.offer(track); + jda.getPresence().setActivity(Activity.playing(player.getPlayingTrack().getInfo().title)); + } + else{ + player.startTrack(track, true); + jda.getPresence().setActivity(Activity.playing(player.getPlayingTrack().getInfo().title)); } + } /** * Start the next track, stopping the current one if it is playing. */ public void nextTrack() { - player.startTrack(queue.poll(), false); + jda.getPresence().setActivity(Activity.playing(player.getPlayingTrack().getInfo().title)); - } + } + //TODO: FIGURE OUT HOW TO CHANGE THE STATUS AT THIS PART @Override public void onTrackEnd(AudioPlayer player, AudioTrack track, AudioTrackEndReason endReason) { // Only start the next track if the end reason is suitable for it (FINISHED or LOAD_FAILED) + jda.getPresence().setActivity(null); if (endReason.mayStartNext) { + jda.getPresence().setActivity(Activity.playing(track.getInfo().title)); nextTrack(); } } -- cgit v1.2.3