1313import dev .jacrispys .JavaBot .Utils .MySQL .MySQLConnection ;
1414import net .dv8tion .jda .api .EmbedBuilder ;
1515import net .dv8tion .jda .api .entities .*;
16- import net .dv8tion .jda .api .events .interaction .component .ButtonInteractionEvent ;
17- import net .dv8tion .jda .api .hooks .ListenerAdapter ;
1816import net .dv8tion .jda .api .interactions .components .buttons .Button ;
1917import net .dv8tion .jda .api .managers .AudioManager ;
2018import org .apache .commons .lang3 .time .DurationFormatUtils ;
21- import org .jetbrains .annotations .NotNull ;
2219import org .jetbrains .annotations .Nullable ;
2320
2421import java .awt .*;
3128import java .util .concurrent .LinkedBlockingQueue ;
3229import java .util .function .Function ;
3330
34- public class GuildAudioManager extends ListenerAdapter {
31+ public class GuildAudioManager {
3532
3633 private final AudioPlayerManager audioManager ;
37- private final AudioPlayer audioPlayer ;
38- private final TrackScheduler scheduler ;
34+ public final AudioPlayer audioPlayer ;
35+ public final TrackScheduler scheduler ;
3936 private final AudioPlayerSendHandler sendHandler ;
4037 private final Map <AudioTrack , User > requester = new HashMap <>();
4138
@@ -74,7 +71,6 @@ protected GuildAudioManager(Guild instance) {
7471 this .scheduler = new TrackScheduler (this .audioPlayer , currentGuild );
7572 audioPlayer .addListener (this .scheduler );
7673 sendHandler = new AudioPlayerSendHandler (this .audioPlayer );
77- instance .getJDA ().addEventListener (this );
7874 }
7975
8076 public AudioPlayerManager getAudioManager () {
@@ -159,10 +155,10 @@ private MessageEmbed playlistLoadedMessage(String trackUrl, AudioPlaylist playli
159155 embedBuilder .addField ("Title: " , "`" + playlist .getTracks ().get (0 ).getInfo ().title + "`" , false );
160156 embedBuilder .addField ("Author: " , "`" + playlist .getTracks ().get (0 ).getInfo ().author + "`" , false );
161157 embedBuilder .addField ("Link: " , playlist .getTracks ().get (0 ).getInfo ().uri , false );
162- embedBuilder .setTitle ( " Adding song to queue..." );
158+ embedBuilder .setAuthor ( "| Adding song to queue...", null , requester . get ( playlist . getTracks (). get ( 0 )). getAvatarUrl () );
163159 embedBuilder .setFooter ("From Playlist: ✅" );
164160 } else {
165- embedBuilder .setTitle ( " Adding playlist to queue..." );
161+ embedBuilder .setAuthor ( "| Adding Playlist to queue...", null , requester . get ( playlist . getTracks (). get ( 0 )). getAvatarUrl () );
166162 embedBuilder .addField ("Playlist Title: " , "`" + playlist .getName () + "`" , false );
167163 embedBuilder .addField ("Playlist Size: " , "`" + playlist .getTracks ().size () + "`" , false );
168164 embedBuilder .addField ("Playlist Link: " , trackUrl , false );
@@ -250,7 +246,7 @@ public void setVolume(int i, TextChannel channel) {
250246 audioPlayer .setVolume (i );
251247 }
252248
253- private int queuePage ;
249+ public static int queuePage ;
254250
255251 public void displayQueue (TextChannel channel ) {
256252 if (djEnabled ) {
@@ -282,7 +278,7 @@ public void displayQueue(TextChannel channel) {
282278 String trackInQueue = "Songs in Queue: " + trackList .size ();
283279 int queueLength = 0 ;
284280 String queueLengthStr ;
285- for (AudioTrack audioTrack : trackList ) {
281+ for (AudioTrack audioTrack : trackList ) {
286282 queueLength += audioTrack .getDuration ();
287283 }
288284 if (queueLength < 3600000 ) {
@@ -303,104 +299,7 @@ public void displayQueue(TextChannel channel) {
303299
304300 }
305301
306- private EmbedBuilder updateEmbed (MessageEmbed embed , int page ) {
307- queuePage = page ;
308- EmbedBuilder eb = new EmbedBuilder (embed );
309- eb .clearFields ();
310- StringBuilder queue = new StringBuilder ();
311- ArrayList <AudioTrack > trackList = new ArrayList <>(scheduler .getTrackQueue ().stream ().toList ());
312- for (int i = 0 ; i <= 10 ; i ++) {
313- try {
314- AudioTrack track = trackList .get ((page - 1 ) * 10 + i );
315- String time ;
316- if (track .getDuration () < 3600000 ) {
317- time = ("[" + DurationFormatUtils .formatDuration (track .getDuration (), "mm:ss" ) + "]" );
318- } else {
319- time = ("[" + DurationFormatUtils .formatDuration (track .getDuration (), "HH:mm:ss" ) + "]" );
320- }
321- queue .append ("`" ).append ((page - 1 ) * 10 + i + 1 ).append (". " ).append (track .getInfo ().author ).append (" - " ).append (track .getInfo ().title ).append (" " ).append (time ).append ("` \n " );
322- } catch (IndexOutOfBoundsException ex ) {
323- break ;
324- }
325- }
326- String pageNumber = "Page " + page + "/" + (int ) Math .ceil ((float ) scheduler .getTrackQueue ().size () / 10 );
327- String trackInQueue = "Songs in Queue: " + trackList .size ();
328- int queueLength = 0 ;
329- String queueLengthStr ;
330- for (AudioTrack audioTrack : trackList ) {
331- queueLength += audioTrack .getDuration ();
332- }
333- if (queueLength < 3600000 ) {
334- queueLengthStr = ("Queue Duration: [" + DurationFormatUtils .formatDuration (queueLength , "mm:ss" ) + "]" );
335- } else {
336- queueLengthStr = ("Queue Duration: [" + DurationFormatUtils .formatDuration (queueLength , "HH:mm:ss" ) + "]" );
337- }
338- eb .setFooter (pageNumber + " | " + trackInQueue + " | " + queueLengthStr );
339- eb .addField ("Current Song: " + audioPlayer .getPlayingTrack ().getInfo ().author + " - " + audioPlayer .getPlayingTrack ().getInfo ().title , queue .toString (), false );
340- return eb ;
341-
342-
343- }
344-
345- @ Override
346- public void onButtonInteraction (@ NotNull ButtonInteractionEvent event ) {
347- try {
348- Guild fromButtonGuild = event .getJDA ().getGuildById (event .getComponentId ().split (":" )[1 ]);
349- String buttonName = event .getComponentId ().split (":" )[0 ];
350- int pages = (int ) Math .ceil ((float ) scheduler .getTrackQueue ().size () / 10 );
351- if (fromButtonGuild != event .getGuild ()) return ;
352-
353- switch (buttonName ) {
354- case ("firstPage" ) -> {
355- if (queuePage != 1 ) {
356- event .editMessageEmbeds (updateEmbed (event .getMessage ().getEmbeds ().get (0 ), 1 ).build ()).queue ();
357- } else {
358- event .reply ("You are already on the first page!" ).setEphemeral (true ).queue ();
359- }
360- }
361- case ("backPage" ) -> {
362- if (queuePage <= 1 ) {
363- if (queuePage == 0 ) {
364- event .reply ("What? Did you expect page 0 or... HEY WAIT A MINUTE \uD83D \uDE21 " ).setEphemeral (true ).queue ();
365- } else {
366- event .reply ("What? Did you expect page 0 or something?" ).setEphemeral (true ).queue ();
367- }
368- return ;
369- }
370- event .editMessageEmbeds (updateEmbed (event .getMessage ().getEmbeds ().get (0 ), queuePage - 1 ).build ()).queue ();
371- }
372- case ("remove" ) -> event .getMessage ().delete ().queue ();
373- case ("nextPage" ) -> {
374- if (queuePage >= pages ) {
375- event .reply ("Cannot go further than the final page!" ).setEphemeral (true ).queue ();
376- return ;
377- }
378- event .editMessageEmbeds (updateEmbed (event .getMessage ().getEmbeds ().get (0 ), queuePage + 1 ).build ()).queue ();
379- }
380- case ("lastPage" ) -> {
381- if (queuePage != pages ) {
382- event .editMessageEmbeds (updateEmbed (event .getMessage ().getEmbeds ().get (0 ), pages ).build ()).queue ();
383- } else {
384- event .reply ("You are already on the final page!" ).setEphemeral (true ).queue ();
385- }
386- }
387- case ("togglePlayer" ) -> {
388- togglePlayer ();
389- event .editMessage (event .getMessage ()).queue ();
390- }
391- case ("skipTrack" ) -> {
392- nowPlayingId = event .getMessage ().getIdLong ();
393- skipNoMessage ();
394- }
395- case ("showQueue" ) -> {
396- displayQueue (event .getTextChannel ());
397- event .editMessage (event .getMessage ()).queue ();
398- }
399- }
400- } catch (IllegalStateException ignored ) {}
401- }
402-
403- private long nowPlayingId = 0 ;
302+ public static Map <Guild , Long > nowPlayingId = new HashMap <>();
404303
405304 public void announceNextTrack (Guild guild , AudioTrack newSong ) {
406305 if (djEnabled ) {
@@ -427,27 +326,31 @@ public void announceNextTrack(Guild guild, AudioTrack newSong) {
427326 buttons .add (Button .primary ("skipTrack:" + channel .getGuild ().getId (), "Skip" ));
428327 buttons .add (Button .secondary ("showQueue:" + channel .getGuild ().getId (), "Show Queue" ));
429328 buttons .add (Button .danger ("remove:" + channel .getGuild ().getId (), "✖️" ));
430- if (nowPlayingId != 0 ) {
431- channel .deleteMessageById (nowPlayingId ).queue ();
329+ if (nowPlayingId . getOrDefault ( guild , null ) != null ) {
330+ channel .deleteMessageById (nowPlayingId . get ( guild ) ).queue ();
432331 }
433- channel .sendMessageEmbeds (eb .build ()).setActionRow (buttons ).queue (message -> nowPlayingId = message .getIdLong ());
332+ channel .sendMessageEmbeds (eb .build ()).setActionRow (buttons ).queue (message -> nowPlayingId . put ( guild , message .getIdLong () ));
434333 } catch (SQLException ex ) {
435334 ex .printStackTrace ();
436335 }
437336 }
438337
439- private void togglePlayer () {
440- if (!audioPlayer .isPaused ()) {
441- audioPlayer .setPaused (true );
442- return ;
338+ public void togglePlayer () {
339+ try {
340+ this .audioPlayer .setPaused (!audioPlayer .isPaused ());
341+ } catch (Exception ex ) {
342+ ex .printStackTrace ();
443343 }
444- audioPlayer .setPaused (false );
445344 }
446345
447- private void skipNoMessage () {
448- scheduler .nextTrack ();
449- queueLoop = false ;
450- songLoop = false ;
346+ public void skipNoMessage () {
347+ try {
348+ this .scheduler .nextTrack ();
349+ queueLoop = false ;
350+ songLoop = false ;
351+ } catch (Exception ex ) {
352+ ex .printStackTrace ();
353+ }
451354 }
452355
453356 public void clearQueue (TextChannel channel ) {
0 commit comments