Skip to content

Commit 2795849

Browse files
committed
Add a FunctionalLoadResultHandler and examples
1 parent 115ce11 commit 2795849

File tree

3 files changed

+61
-32
lines changed

3 files changed

+61
-32
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ Alternatively, you can use `Discord4JUtils.leave(gatewayClient, guildId);` as th
129129
The following examples are minimal implementations but show how the library works.
130130
- Java examples
131131
- JDA (simple): [link](src/test/java/JavaJDAExample.java)
132-
- JDA (more complex example): [link](testbot/src/main/java/me/duncte123/testbot/Main.java)
132+
- JDA (more real-world like example): [link](testbot/src/main/java/me/duncte123/testbot/Main.java)
133133
- Kotlin examples
134134
- JDA: [link](src/test/kotlin/testScript.kt)
135135
- Discord4J: [link](src/test/kotlin/d4jTestScript.kt)
@@ -165,6 +165,6 @@ public void onDiscordVoiceServerUpdate(VoiceServerUpdateEvent event) {
165165
Link link = lavalink.getLink(event.getGuildId(), region);
166166

167167
// Finally, tell lavalink to connect.
168-
link.onVoiceServerUpdate(lavalinkVoiceState)
168+
link.onVoiceServerUpdate(lavalinkVoiceState);
169169
}
170170
```
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package dev.arbjerg.lavalink.client
2+
3+
import dev.arbjerg.lavalink.client.protocol.LoadFailed
4+
import dev.arbjerg.lavalink.client.protocol.PlaylistLoaded
5+
import dev.arbjerg.lavalink.client.protocol.SearchResult
6+
import dev.arbjerg.lavalink.client.protocol.TrackLoaded
7+
import java.util.function.Consumer
8+
9+
/**
10+
* Helper class for creating an [AbstractAudioLoadResultHandler] using only methods that can be passed as lambdas.
11+
*
12+
* @param trackLoadedConsumer gets called when a track has loaded
13+
* @param playlistLoadedConsumer gets called when a playlist has loaded
14+
* @param searchResultConsumer gets called when a search result has loaded
15+
* @param noMatchesHandler gets called when there are no matches for your input
16+
* @param loadFailedConsumer gets called in case of a load failure
17+
*/
18+
class FunctionalLoadResultHandler @JvmOverloads constructor(
19+
private val trackLoadedConsumer: Consumer<TrackLoaded>?,
20+
private val playlistLoadedConsumer: Consumer<PlaylistLoaded>? = null,
21+
private val searchResultConsumer: Consumer<SearchResult>? = null,
22+
private val noMatchesHandler: Runnable? = null,
23+
private val loadFailedConsumer: Consumer<LoadFailed>? = null,
24+
) : AbstractAudioLoadResultHandler() {
25+
26+
override fun ontrackLoaded(result: TrackLoaded) {
27+
trackLoadedConsumer?.accept(result)
28+
}
29+
30+
override fun onPlaylistLoaded(result: PlaylistLoaded) {
31+
playlistLoadedConsumer?.accept(result)
32+
}
33+
34+
override fun onSearchResultLoaded(result: SearchResult) {
35+
searchResultConsumer?.accept(result)
36+
}
37+
38+
override fun noMatches() {
39+
noMatchesHandler?.run()
40+
}
41+
42+
override fun loadFailed(result: LoadFailed) {
43+
loadFailedConsumer?.accept(result)
44+
}
45+
}

src/test/java/JavaJDAExample.java

Lines changed: 14 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -177,13 +177,13 @@ public void onSlashCommandInteraction(@NotNull SlashCommandInteractionEvent even
177177
final long guildId = guild.getIdLong();
178178
final Link link = this.client.getLink(guildId);
179179

180-
link.loadItem(identifier).subscribe(new AbstractAudioLoadResultHandler() {
181-
@Override
182-
public void ontrackLoaded(@NotNull TrackLoaded result) {
183-
final Track track = result.getTrack();
180+
link.loadItem(identifier).subscribe(new FunctionalLoadResultHandler(
181+
// Track loaded
182+
(trackLoad) -> {
183+
final Track track = trackLoad.getTrack();
184184

185185
// Inner class at the end of this file
186-
var userData = new MyUserData(event.getUser().getIdLong());
186+
final var userData = new MyUserData(event.getUser().getIdLong());
187187

188188
track.setUserData(userData);
189189

@@ -212,19 +212,11 @@ public void ontrackLoaded(@NotNull TrackLoaded result) {
212212
event.getHook().sendMessage("Now playing: " + trackTitle + "\nRequested by: <@" + customData.requester() + '>').queue();
213213
});
214214
}
215-
}
216-
217-
@Override
218-
public void onPlaylistLoaded(@NotNull PlaylistLoaded result) {
219-
final int trackCount = result.getTracks().size();
220-
event.getHook()
221-
.sendMessage("This playlist has " + trackCount + " tracks!")
222-
.queue();
223-
}
224-
225-
@Override
226-
public void onSearchResultLoaded(@NotNull SearchResult result) {
227-
final List<Track> tracks = result.getTracks();
215+
},
216+
null, // playlist loaded
217+
// search result loaded
218+
(search) -> {
219+
final List<Track> tracks = search.getTracks();
228220

229221
if (tracks.isEmpty()) {
230222
event.getHook().sendMessage("No tracks found!").queue();
@@ -239,18 +231,10 @@ public void onSearchResultLoaded(@NotNull SearchResult result) {
239231
.subscribe((ignored) -> {
240232
event.getHook().sendMessage("Now playing: " + firstTrack.getInfo().getTitle()).queue();
241233
});
242-
}
243-
244-
@Override
245-
public void noMatches() {
246-
event.getHook().sendMessage("No matches found for your input!").queue();
247-
}
248-
249-
@Override
250-
public void loadFailed(@NotNull LoadFailed result) {
251-
event.getHook().sendMessage("Failed to load track! " + result.getException().getMessage()).queue();
252-
}
253-
});
234+
},
235+
null, // no matches
236+
null // load failed
237+
));
254238

255239
break;
256240
}

0 commit comments

Comments
 (0)