Browse Source

Add getting tracks by artist

main
Stephanie Gredell 2 years ago
parent
commit
0e80fb54e7
  1. 12
      app/src/main/java/musicbot/Listeners.java
  2. 2
      app/src/main/java/musicbot/Main.java
  3. 14
      app/src/main/java/musicbot/SpotifyClient.java
  4. 41
      app/src/main/java/musicbot/commands/Artist.java

12
app/src/main/java/musicbot/Listeners.java

@ -11,6 +11,7 @@ import org.jetbrains.annotations.NotNull; @@ -11,6 +11,7 @@ import org.jetbrains.annotations.NotNull;
public class Listeners extends ListenerAdapter {
@Override
public void onReady(@NotNull final ReadyEvent event) {
//final JDA jda = event.getJDA().getGuildById(1197770092243599431L).getJDA();
final JDA jda = event.getJDA();
jda.upsertCommand("music", "find music to play").addOptions(
@ -39,7 +40,16 @@ public class Listeners extends ListenerAdapter { @@ -39,7 +40,16 @@ public class Listeners extends ListenerAdapter {
)
).queue();
jda.upsertCommand("genres", "find recommendations for music").queue();
jda.upsertCommand("artist", "find songs by artist").addOptions(
new OptionData(
OptionType.STRING,
"name",
"Find tracks by an artist.",
true
)
).queue();
jda.upsertCommand("genres", "find supported genres").queue();
}
@Override

2
app/src/main/java/musicbot/Main.java

@ -1,5 +1,6 @@ @@ -1,5 +1,6 @@
package musicbot;
import musicbot.commands.Artist;
import musicbot.commands.Genres;
import musicbot.commands.MusicVideo;
import musicbot.commands.Recommend;
@ -15,5 +16,6 @@ public class Main { @@ -15,5 +16,6 @@ public class Main {
jda.addEventListener(new MusicVideo());
jda.addEventListener(new Recommend());
jda.addEventListener(new Genres());
jda.addEventListener(new Artist());
}
}

14
app/src/main/java/musicbot/SpotifyClient.java

@ -3,6 +3,7 @@ package musicbot; @@ -3,6 +3,7 @@ package musicbot;
import com.google.common.collect.ImmutableList;
import org.apache.hc.core5.http.ParseException;
import se.michaelthelin.spotify.SpotifyApi;
import se.michaelthelin.spotify.enums.ModelObjectType;
import se.michaelthelin.spotify.exceptions.SpotifyWebApiException;
import se.michaelthelin.spotify.model_objects.credentials.ClientCredentials;
import se.michaelthelin.spotify.model_objects.specification.Artist;
@ -13,6 +14,7 @@ import se.michaelthelin.spotify.requests.authorization.client_credentials.Client @@ -13,6 +14,7 @@ import se.michaelthelin.spotify.requests.authorization.client_credentials.Client
import se.michaelthelin.spotify.requests.data.browse.GetRecommendationsRequest;
import se.michaelthelin.spotify.requests.data.search.simplified.SearchArtistsRequest;
import se.michaelthelin.spotify.requests.data.browse.miscellaneous.GetAvailableGenreSeedsRequest;
import se.michaelthelin.spotify.requests.data.search.simplified.SearchTracksRequest;
import java.io.IOException;
import java.util.Arrays;
@ -48,6 +50,18 @@ public class SpotifyClient { @@ -48,6 +50,18 @@ public class SpotifyClient {
}
}
public List<Track> findTracks(final String query) {
try {
final SearchTracksRequest searchTracksRequest = SPOTIFY_API.searchTracks(query).limit(10).build();
final Paging<Track> tracks = searchTracksRequest.execute();
return Arrays.stream(tracks.getItems()).collect(Collectors.toList());
} catch (SpotifyWebApiException | ParseException | IOException exception) {
return List.of();
}
}
public List<Track> findRecommendations(final String artistId, final String genres) {
final GetRecommendationsRequest.Builder recommendationsRequestBuilder = SPOTIFY_API.getRecommendations()
.limit(5);

41
app/src/main/java/musicbot/commands/Artist.java

@ -0,0 +1,41 @@ @@ -0,0 +1,41 @@
package musicbot.commands;
import musicbot.SpotifyClient;
import net.dv8tion.jda.api.EmbedBuilder;
import net.dv8tion.jda.api.entities.MessageEmbed;
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import net.dv8tion.jda.api.interactions.commands.OptionMapping;
import net.dv8tion.jda.api.interactions.components.buttons.Button;
import org.jetbrains.annotations.NotNull;
import se.michaelthelin.spotify.model_objects.specification.Track;
import java.util.List;
public class Artist extends ListenerAdapter {
@Override
public void onSlashCommandInteraction(@NotNull SlashCommandInteractionEvent event) {
if (!event.getName().equals("artist")) return;
event.deferReply().queue();
final String artist = event.getOption("name").getAsString();
System.out.print("hey!");
final SpotifyClient spotifyClient = new SpotifyClient();
final List<Track> tracks = spotifyClient.findTracks("artist:"+artist);
final EmbedBuilder eb = new EmbedBuilder();
eb
.setTitle("Some tracks by " + artist);
tracks.forEach(track -> {
eb.addField(track.getName(), "", false);
});
final MessageEmbed embed = eb.build();
event.getHook().sendMessageEmbeds(embed).queue();
}
}
Loading…
Cancel
Save