Skip to content

Commit 7b86802

Browse files
committed
Updated Music stuff again...
1 parent 8e067e4 commit 7b86802

File tree

11 files changed

+168
-118
lines changed

11 files changed

+168
-118
lines changed

src/main/java/module-info.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
exports org.mangorage.mangobotplugin.commands.music;
2828
opens org.mangorage.mangobotplugin.commands.music;
29+
exports org.mangorage.mangobotplugin.pagedlist to net.dv8tion.jda;
2930

3031
provides org.mangorage.mangobotcore.plugin.api.Plugin with org.mangorage.mangobotplugin.entrypoint.MangoBot;
3132
provides org.mangorage.bootstrap.api.module.IModuleConfigurator with org.mangorage.mangobotplugin.module.ModuleConfigurator;

src/main/java/org/mangorage/mangobotplugin/PagedListManager.java

Lines changed: 0 additions & 58 deletions
This file was deleted.

src/main/java/org/mangorage/mangobotplugin/PagedListWithAction.java

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/main/java/org/mangorage/mangobotplugin/commands/music/AudioTrackEvent.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,32 @@
2424

2525
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
2626

27+
import java.util.List;
28+
2729
public class AudioTrackEvent {
28-
private final AudioTrack track;
30+
private final List<AudioTrack> tracks;
2931
private final Info reason;
3032

33+
public AudioTrackEvent(Info info) {
34+
this(List.of(), info);
35+
}
36+
37+
public AudioTrackEvent(List<AudioTrack> tracks, Info info) {
38+
this.tracks = List.copyOf(tracks);
39+
this.reason = info;
40+
}
41+
3142
public AudioTrackEvent(AudioTrack track, Info info) {
32-
this.track = track;
43+
this.tracks = List.of(track);
3344
this.reason = info;
3445
}
3546

47+
public List<AudioTrack> getTracks() {
48+
return tracks;
49+
}
50+
3651
public AudioTrack getTrack() {
37-
return track;
52+
return tracks.isEmpty() ? null : tracks.getFirst();
3853
}
3954

4055
public Info getReason() {

src/main/java/org/mangorage/mangobotplugin/commands/music/MusicPlayer.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -100,27 +100,22 @@ public void load(String URL, Consumer<AudioTrackEvent> eventConsumer) {
100100
manager.loadItem(URL, new AudioLoadResultHandler() {
101101
@Override
102102
public void trackLoaded(AudioTrack track) {
103-
add(track);
104103
eventConsumer.accept(new AudioTrackEvent(track, AudioTrackEvent.Info.SUCCESS));
105104
}
106105

107106
@Override
108107
public void playlistLoaded(AudioPlaylist playlist) {
109-
final var trackSelected = playlist.getSelectedTrack() == null ? playlist.getTracks().get(0) : playlist.getSelectedTrack();
110-
playlist.getTracks().forEach(track -> {
111-
add(track);
112-
});
113-
eventConsumer.accept(new AudioTrackEvent(trackSelected, AudioTrackEvent.Info.SUCCESS));
108+
eventConsumer.accept(new AudioTrackEvent(playlist.getTracks(), AudioTrackEvent.Info.SUCCESS));
114109
}
115110

116111
@Override
117112
public void noMatches() {
118-
eventConsumer.accept(new AudioTrackEvent(null, AudioTrackEvent.Info.NO_MATCHES));
113+
eventConsumer.accept(new AudioTrackEvent(AudioTrackEvent.Info.NO_MATCHES));
119114
}
120115

121116
@Override
122117
public void loadFailed(FriendlyException exception) {
123-
eventConsumer.accept(new AudioTrackEvent(null, AudioTrackEvent.Info.FAILED));
118+
eventConsumer.accept(new AudioTrackEvent(AudioTrackEvent.Info.FAILED));
124119
LogHelper.info(exception.getMessage());
125120
}
126121
});

src/main/java/org/mangorage/mangobotplugin/commands/music/MusicUtil.java

Lines changed: 59 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,12 @@
2424

2525
import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager;
2626
import com.sedmelluq.discord.lavaplayer.source.bandcamp.BandcampAudioSourceManager;
27-
import com.sedmelluq.discord.lavaplayer.source.beam.BeamAudioSourceManager;
28-
import com.sedmelluq.discord.lavaplayer.source.getyarn.GetyarnAudioSourceManager;
2927
import com.sedmelluq.discord.lavaplayer.source.http.HttpAudioSourceManager;
3028
import com.sedmelluq.discord.lavaplayer.source.local.LocalAudioSourceManager;
31-
import com.sedmelluq.discord.lavaplayer.source.nico.NicoAudioSourceManager;
3229
import com.sedmelluq.discord.lavaplayer.source.soundcloud.SoundCloudAudioSourceManager;
3330
import com.sedmelluq.discord.lavaplayer.source.twitch.TwitchStreamAudioSourceManager;
3431
import com.sedmelluq.discord.lavaplayer.source.vimeo.VimeoAudioSourceManager;
35-
import com.sedmelluq.discord.lavaplayer.source.yamusic.YandexMusicAudioSourceManager;
32+
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
3633
import dev.lavalink.youtube.YoutubeAudioSourceManager;
3734
import net.dv8tion.jda.api.audio.SpeakingMode;
3835
import net.dv8tion.jda.api.entities.Guild;
@@ -43,13 +40,12 @@
4340
import net.dv8tion.jda.api.utils.MarkdownUtil;
4441
import org.mangorage.commonutils.log.LogHelper;
4542
import org.mangorage.commonutils.misc.PagedList;
46-
import org.mangorage.commonutils.misc.RunnableTask;
47-
import org.mangorage.commonutils.misc.TaskScheduler;
4843
import org.mangorage.entrypoint.MangoBotCore;
49-
import org.mangorage.mangobotplugin.PagedListManager;
50-
import org.mangorage.mangobotplugin.PagedListWithAction;
44+
import org.mangorage.mangobotplugin.pagedlist.PagedListAction;
45+
import org.mangorage.mangobotplugin.pagedlist.PagedListManager;
46+
import org.mangorage.mangobotplugin.pagedlist.PagedListWithAction;
5147

52-
import java.util.concurrent.TimeUnit;
48+
import java.util.List;
5349

5450
public class MusicUtil {
5551
public static void connectToAudioChannel(VoiceChannel channel) {
@@ -142,6 +138,50 @@ private static String getResult(PagedList.Page<String> page, int currentPage, in
142138
""".formatted(currentPage, totalPage, page.getEntries()[0]);
143139
}
144140

141+
public static String getResultTrack(PagedList.Page<AudioTrack> page, int currentPage, int totalPage) {
142+
return """
143+
Song: (%s/%s)
144+
%s
145+
""".formatted(currentPage, totalPage, MarkdownUtil.maskedLink(page.getEntries()[0].getInfo().title, page.getEntries()[0].getInfo().uri));
146+
}
147+
148+
public static void sendSongsQueue(MessageChannel channel, PagedListManager listManager, MusicPlayer manager, AudioTrack[] songs) {
149+
150+
channel.sendMessage(
151+
"""
152+
Getting List...
153+
"""
154+
).queue(m -> {
155+
var list = new PagedListWithAction<AudioTrack>((pageList, button,id, total) -> {
156+
switch (id) {
157+
case "next" -> pageList.next();
158+
case "prev" -> pageList.previous();
159+
case "add" -> {
160+
manager.add(
161+
pageList.current().getEntries()[0].makeClone()
162+
);
163+
164+
button.deferReply(true).setContent("Added Song to queue!").queue();
165+
166+
return;
167+
}
168+
}
169+
170+
m.editMessage(getResultTrack(pageList.current(), pageList.getPage(), total)).queue();
171+
});
172+
173+
list.get().rebuild(songs, 1);
174+
175+
Button prev = Button.primary("prev", "Previous");
176+
Button next = Button.primary("next", "Next");
177+
Button add = Button.primary("add", "Add to Queue");
178+
179+
m.editMessage(getResultTrack(list.get().current(), list.get().getPage(), list.get().totalPages())).setActionRow(prev, next, add).queue();
180+
181+
listManager.putList(m.getId(), list);
182+
});
183+
}
184+
145185
public static void sendSongs(MessageChannel channel, PagedListManager listManager, MusicPlayer player) {
146186
var songs = player
147187
.getTracks()
@@ -157,14 +197,20 @@ public static void sendSongs(MessageChannel channel, PagedListManager listManage
157197
Getting List...
158198
"""
159199
).queue(m -> {
160-
var list = new PagedListWithAction((page, current, total) -> {
161-
m.editMessage(getResult(page, current, total)).queue();
200+
var list = new PagedListWithAction<String>((pageList, button,id, total) -> {
201+
202+
switch (id) {
203+
case "next" -> pageList.next();
204+
case "prev" -> pageList.previous();
205+
}
206+
207+
m.editMessage(getResult(pageList.current(), pageList.getPage(), total)).queue();
162208
});
163209

164210
list.get().rebuild(songs, 1);
165211

166-
Button prev = Button.primary("prev".formatted(m.getId()), "previous");
167-
Button next = Button.primary("next".formatted(m.getId()), "next");
212+
Button prev = Button.primary("prev", "Previous");
213+
Button next = Button.primary("next", "Next");
168214

169215
m.editMessage(getResult(list.get().current(), list.get().getPage(), list.get().totalPages())).setActionRow(prev, next).queue();
170216

src/main/java/org/mangorage/mangobotplugin/commands/music/commands/QueueCommand.java

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
package org.mangorage.mangobotplugin.commands.music.commands;
2424

25+
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
2526
import net.dv8tion.jda.api.entities.Guild;
2627
import net.dv8tion.jda.api.entities.Message;
2728
import net.dv8tion.jda.api.entities.channel.unions.MessageChannelUnion;
@@ -30,7 +31,7 @@
3031
import org.mangorage.commonutils.misc.Arguments;
3132
import org.mangorage.mangobotcore.jda.command.api.CommandResult;
3233
import org.mangorage.mangobotcore.jda.command.api.ICommand;
33-
import org.mangorage.mangobotplugin.PagedListManager;
34+
import org.mangorage.mangobotplugin.pagedlist.PagedListManager;
3435
import org.mangorage.mangobotplugin.commands.music.MusicPlayer;
3536
import org.mangorage.mangobotplugin.commands.music.MusicUtil;
3637

@@ -81,15 +82,23 @@ public CommandResult execute(Message message, Arguments args) {
8182
player.load(URL, e -> {
8283
switch (e.getReason()) {
8384
case SUCCESS -> {
84-
channel.sendMessage(
85-
"""
86-
send '!queue' to see list of songs in queue!
87-
send '!play' to have bot join and start playing next song!
88-
89-
90-
Added to Queue:
91-
%s
92-
""".formatted(MarkdownUtil.maskedLink(e.getTrack().getInfo().title, e.getTrack().getInfo().uri))).queue();
85+
if (URL.startsWith("https://")) {
86+
87+
e.getTracks().forEach(player::add);
88+
89+
channel.sendMessage(
90+
"""
91+
send '!queue' to see list of songs in queue!
92+
send '!play' to have bot join and start playing next song!
93+
94+
95+
Added to Queue:
96+
%s
97+
""".formatted(MarkdownUtil.maskedLink(e.getTrack().getInfo().title, e.getTrack().getInfo().uri))).queue();
98+
} else {
99+
// Searching for something instead
100+
MusicUtil.sendSongsQueue(channel, pagedListManager, player, e.getTracks().toArray(AudioTrack[]::new));
101+
}
93102
}
94103
case FAILED -> {
95104
channel.sendMessage("Failed").queue();

src/main/java/org/mangorage/mangobotplugin/entrypoint/MangoBot.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import org.mangorage.mangobotcore.plugin.api.MangoBotPlugin;
1919
import org.mangorage.mangobotcore.plugin.api.Plugin;
2020
import org.mangorage.mangobotplugin.BotEventListener;
21-
import org.mangorage.mangobotplugin.PagedListManager;
21+
import org.mangorage.mangobotplugin.pagedlist.PagedListManager;
2222
import org.mangorage.mangobotplugin.actions.TrashButtonAction;
2323
import org.mangorage.mangobotplugin.commands.PingCommand;
2424
import org.mangorage.mangobotplugin.commands.PingsCommand;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package org.mangorage.mangobotplugin.pagedlist;
2+
3+
import net.dv8tion.jda.api.interactions.components.buttons.ButtonInteraction;
4+
import org.mangorage.commonutils.misc.PagedList;
5+
6+
public interface PagedListAction<T> {
7+
void consume(PagedList<T> pagedList, ButtonInteraction interaction, String buttonId, Integer totalPages);
8+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package org.mangorage.mangobotplugin.pagedlist;
2+
3+
import net.dv8tion.jda.api.entities.Message;
4+
import org.mangorage.mangobotcore.jda.event.DiscordButtonInteractEvent;
5+
6+
import java.util.HashMap;
7+
import java.util.Map;
8+
9+
public final class PagedListManager {
10+
// Key must be a messageId
11+
private final Map<String, PagedListWithAction<?>> pages = new HashMap<>();
12+
13+
public PagedListManager() {
14+
DiscordButtonInteractEvent.BUS.addListener(this::onButton);
15+
}
16+
17+
public void putList(String id, PagedListWithAction<?> pagedListWithAction) {
18+
pages.put(id, pagedListWithAction);
19+
}
20+
21+
public void removeList(String id) {
22+
pages.remove(id);
23+
}
24+
25+
public void onButton(DiscordButtonInteractEvent event) {
26+
var interaction = event.getDiscordEvent();
27+
28+
Message message = interaction.getMessage();
29+
String ID = message.getId();
30+
31+
32+
if (pages.containsKey(ID)) {
33+
pages.get(ID).consume(interaction.getInteraction(), interaction.getButton().getId());
34+
if (interaction.isAcknowledged()) return;
35+
interaction.deferEdit().queue();
36+
}
37+
}
38+
}

0 commit comments

Comments
 (0)