Skip to content

Commit de7bd06

Browse files
committed
Merge branch 'beta-releases'
2 parents 0800486 + 8b1895e commit de7bd06

File tree

3 files changed

+162
-125
lines changed

3 files changed

+162
-125
lines changed

src/main/java/dev/jacrispys/JavaBot/Audio/GuildAudioManager.java

Lines changed: 24 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,9 @@
1313
import dev.jacrispys.JavaBot.Utils.MySQL.MySQLConnection;
1414
import net.dv8tion.jda.api.EmbedBuilder;
1515
import net.dv8tion.jda.api.entities.*;
16-
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
17-
import net.dv8tion.jda.api.hooks.ListenerAdapter;
1816
import net.dv8tion.jda.api.interactions.components.buttons.Button;
1917
import net.dv8tion.jda.api.managers.AudioManager;
2018
import org.apache.commons.lang3.time.DurationFormatUtils;
21-
import org.jetbrains.annotations.NotNull;
2219
import org.jetbrains.annotations.Nullable;
2320

2421
import java.awt.*;
@@ -31,11 +28,11 @@
3128
import java.util.concurrent.LinkedBlockingQueue;
3229
import 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) {
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
package dev.jacrispys.JavaBot.Commands;
2+
3+
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
4+
import dev.jacrispys.JavaBot.Audio.GuildAudioManager;
5+
import net.dv8tion.jda.api.EmbedBuilder;
6+
import net.dv8tion.jda.api.entities.Guild;
7+
import net.dv8tion.jda.api.entities.MessageEmbed;
8+
import net.dv8tion.jda.api.events.interaction.component.ButtonInteractionEvent;
9+
import net.dv8tion.jda.api.hooks.ListenerAdapter;
10+
import org.apache.commons.lang3.time.DurationFormatUtils;
11+
import org.jetbrains.annotations.NotNull;
12+
13+
import java.util.ArrayList;
14+
15+
import static dev.jacrispys.JavaBot.Audio.GuildAudioManager.queuePage;
16+
import static dev.jacrispys.JavaBot.Audio.GuildAudioManager.nowPlayingId;
17+
18+
public class AudioPlayerButtons extends ListenerAdapter {
19+
20+
private GuildAudioManager audioManager;
21+
22+
@Override
23+
public void onButtonInteraction(@NotNull ButtonInteractionEvent event) {
24+
try {
25+
Guild fromButtonGuild = event.getGuild();
26+
audioManager = GuildAudioManager.getGuildAudioManager(fromButtonGuild);
27+
String buttonName = event.getComponentId().split(":")[0];
28+
int pages = (int) Math.ceil((float) audioManager.scheduler.getTrackQueue().size() / 10);
29+
if (fromButtonGuild != event.getGuild()) return;
30+
31+
switch (buttonName) {
32+
case ("firstPage") -> {
33+
if (queuePage != 1) {
34+
event.editMessageEmbeds(updateEmbed(event.getMessage().getEmbeds().get(0), 1).build()).queue();
35+
} else {
36+
if (!event.isAcknowledged()) {
37+
event.reply("You are already on the first page!").setEphemeral(true).queue();
38+
}
39+
}
40+
}
41+
case ("backPage") -> {
42+
if (queuePage <= 1) {
43+
if (queuePage == 0) {
44+
if (!event.isAcknowledged()) {
45+
event.reply("What? Did you expect page 0 or... HEY WAIT A MINUTE \uD83D\uDE21").setEphemeral(true).queue();
46+
}
47+
} else {
48+
if (!event.isAcknowledged()) {
49+
event.reply("What? Did you expect page 0 or something?").setEphemeral(true).queue();
50+
}
51+
}
52+
return;
53+
}
54+
event.editMessageEmbeds(updateEmbed(event.getMessage().getEmbeds().get(0), queuePage - 1).build()).queue();
55+
}
56+
case ("remove") -> event.getMessage().delete().queue();
57+
case ("nextPage") -> {
58+
if (queuePage >= pages) {
59+
if (!event.isAcknowledged()) {
60+
event.reply("Cannot go further than the final page!").setEphemeral(true).queue();
61+
}
62+
return;
63+
}
64+
event.editMessageEmbeds(updateEmbed(event.getMessage().getEmbeds().get(0), queuePage + 1).build()).queue();
65+
}
66+
case ("lastPage") -> {
67+
if (queuePage != pages) {
68+
event.editMessageEmbeds(updateEmbed(event.getMessage().getEmbeds().get(0), pages).build()).queue();
69+
} else {
70+
if (!event.isAcknowledged()) {
71+
event.reply("You are already on the final page!").setEphemeral(true).queue();
72+
}
73+
}
74+
}
75+
case ("togglePlayer") -> {
76+
audioManager.togglePlayer();
77+
if (!event.isAcknowledged()) {
78+
event.editMessage(event.getMessage()).queue();
79+
}
80+
}
81+
case ("skipTrack") -> {
82+
nowPlayingId.put(fromButtonGuild, event.getMessage().getIdLong());
83+
audioManager.skipNoMessage();
84+
}
85+
case ("showQueue") -> {
86+
audioManager.displayQueue(event.getTextChannel());
87+
if (!event.isAcknowledged()) {
88+
event.editMessage(event.getMessage()).queue();
89+
}
90+
}
91+
default -> System.out.println("wat");
92+
}
93+
} catch (Exception ex) {
94+
ex.printStackTrace();
95+
}
96+
}
97+
98+
private EmbedBuilder updateEmbed(MessageEmbed embed, int page) {
99+
queuePage = page;
100+
EmbedBuilder eb = new EmbedBuilder(embed);
101+
eb.clearFields();
102+
StringBuilder queue = new StringBuilder();
103+
ArrayList<AudioTrack> trackList = new ArrayList<>(audioManager.scheduler.getTrackQueue().stream().toList());
104+
for (int i = 0; i <= 10; i++) {
105+
try {
106+
AudioTrack track = trackList.get((page - 1) * 10 + i);
107+
String time;
108+
if (track.getDuration() < 3600000) {
109+
time = ("[" + DurationFormatUtils.formatDuration(track.getDuration(), "mm:ss") + "]");
110+
} else {
111+
time = ("[" + DurationFormatUtils.formatDuration(track.getDuration(), "HH:mm:ss") + "]");
112+
}
113+
queue.append("`").append((page - 1) * 10 + i + 1).append(". ").append(track.getInfo().author).append(" - ").append(track.getInfo().title).append(" ").append(time).append("` \n");
114+
} catch (IndexOutOfBoundsException ex) {
115+
break;
116+
}
117+
}
118+
String pageNumber = "Page " + page + "/" + (int) Math.ceil((float) audioManager.scheduler.getTrackQueue().size() / 10);
119+
String trackInQueue = "Songs in Queue: " + trackList.size();
120+
int queueLength = 0;
121+
String queueLengthStr;
122+
for (AudioTrack audioTrack : trackList) {
123+
queueLength += audioTrack.getDuration();
124+
}
125+
if (queueLength < 3600000) {
126+
queueLengthStr = ("Queue Duration: [" + DurationFormatUtils.formatDuration(queueLength, "mm:ss") + "]");
127+
} else {
128+
queueLengthStr = ("Queue Duration: [" + DurationFormatUtils.formatDuration(queueLength, "HH:mm:ss") + "]");
129+
}
130+
eb.setFooter(pageNumber + " | " + trackInQueue + " | " + queueLengthStr);
131+
eb.addField("Current Song: " + audioManager.audioPlayer.getPlayingTrack().getInfo().author + " - " + audioManager.audioPlayer.getPlayingTrack().getInfo().title, queue.toString(), false);
132+
return eb;
133+
134+
135+
}
136+
}

src/main/java/dev/jacrispys/JavaBot/JavaBotMain.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
package dev.jacrispys.JavaBot;
22

3-
import dev.jacrispys.JavaBot.Commands.ComplaintCommand;
4-
import dev.jacrispys.JavaBot.Commands.GameSpyCommand;
5-
import dev.jacrispys.JavaBot.Commands.MusicCommands;
3+
import dev.jacrispys.JavaBot.Commands.*;
64
import dev.jacrispys.JavaBot.Commands.PrivateMessageCommands.DefaultPrivateMessageResponse;
7-
import dev.jacrispys.JavaBot.Commands.RegisterGuildCommand;
85
import dev.jacrispys.JavaBot.Events.BotStartup;
96
import dev.jacrispys.JavaBot.Events.WordBlocker;
107
import dev.jacrispys.JavaBot.Utils.GameSpyThread;
@@ -41,6 +38,7 @@ public static void main(String[] args) throws Exception {
4138
jda.addEventListener(new BotStartup());
4239
jda.addEventListener(new WordBlocker());
4340
jda.addEventListener(new MusicCommands());
41+
jda.addEventListener(new AudioPlayerButtons());
4442
gameSpyThread = new GameSpyThread(jda);
4543
gameSpyThread.start();
4644

0 commit comments

Comments
 (0)