From 0e80fb54e7f350d9cc9f1ec30dfaa335e3e93297 Mon Sep 17 00:00:00 2001 From: Stephanie Gredell Date: Mon, 22 Jan 2024 23:44:21 -0800 Subject: [PATCH] Add getting tracks by artist --- app/src/main/java/musicbot/Listeners.java | 12 +++++- app/src/main/java/musicbot/Main.java | 2 + app/src/main/java/musicbot/SpotifyClient.java | 14 +++++++ .../main/java/musicbot/commands/Artist.java | 41 +++++++++++++++++++ 4 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/musicbot/commands/Artist.java diff --git a/app/src/main/java/musicbot/Listeners.java b/app/src/main/java/musicbot/Listeners.java index 1890d65..b17dd83 100644 --- a/app/src/main/java/musicbot/Listeners.java +++ b/app/src/main/java/musicbot/Listeners.java @@ -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 { ) ).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 diff --git a/app/src/main/java/musicbot/Main.java b/app/src/main/java/musicbot/Main.java index 45e1ac2..bb295cb 100644 --- a/app/src/main/java/musicbot/Main.java +++ b/app/src/main/java/musicbot/Main.java @@ -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 { jda.addEventListener(new MusicVideo()); jda.addEventListener(new Recommend()); jda.addEventListener(new Genres()); + jda.addEventListener(new Artist()); } } diff --git a/app/src/main/java/musicbot/SpotifyClient.java b/app/src/main/java/musicbot/SpotifyClient.java index ba4164b..751447e 100644 --- a/app/src/main/java/musicbot/SpotifyClient.java +++ b/app/src/main/java/musicbot/SpotifyClient.java @@ -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 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 { } } + public List findTracks(final String query) { + try { + final SearchTracksRequest searchTracksRequest = SPOTIFY_API.searchTracks(query).limit(10).build(); + + final Paging tracks = searchTracksRequest.execute(); + + return Arrays.stream(tracks.getItems()).collect(Collectors.toList()); + } catch (SpotifyWebApiException | ParseException | IOException exception) { + return List.of(); + } + } + public List findRecommendations(final String artistId, final String genres) { final GetRecommendationsRequest.Builder recommendationsRequestBuilder = SPOTIFY_API.getRecommendations() .limit(5); diff --git a/app/src/main/java/musicbot/commands/Artist.java b/app/src/main/java/musicbot/commands/Artist.java new file mode 100644 index 0000000..24116a7 --- /dev/null +++ b/app/src/main/java/musicbot/commands/Artist.java @@ -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 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(); + } +}