diff --git a/app/src/main/java/musicbot/Main.java b/app/src/main/java/musicbot/Main.java index 66bad0d..74beeec 100644 --- a/app/src/main/java/musicbot/Main.java +++ b/app/src/main/java/musicbot/Main.java @@ -17,5 +17,6 @@ public class Main { manager.add(new MusicVideo()); manager.add(new Recommend()); jda.addEventListener(manager); + jda.addEventListener(new Listeners()); } } diff --git a/app/src/main/java/musicbot/SpotifyClient.java b/app/src/main/java/musicbot/SpotifyClient.java index cbd5d80..5121cc8 100644 --- a/app/src/main/java/musicbot/SpotifyClient.java +++ b/app/src/main/java/musicbot/SpotifyClient.java @@ -52,7 +52,7 @@ public class SpotifyClient { public List findTracks(final String query) { try { - final SearchTracksRequest searchTracksRequest = SPOTIFY_API.searchTracks(query).limit(10).build(); + final SearchTracksRequest searchTracksRequest = SPOTIFY_API.searchTracks(query).build(); final Paging tracks = searchTracksRequest.execute(); @@ -63,8 +63,7 @@ public class SpotifyClient { } public List findRecommendations(final String artistId, final String genres) { - final GetRecommendationsRequest.Builder recommendationsRequestBuilder = SPOTIFY_API.getRecommendations() - .limit(5); + final GetRecommendationsRequest.Builder recommendationsRequestBuilder = SPOTIFY_API.getRecommendations(); if (!artistId.isEmpty()) { recommendationsRequestBuilder @@ -80,7 +79,6 @@ public class SpotifyClient { try { final Recommendations recommendations = recommendationsRequest.execute(); - System.out.println("Length: " + recommendations.getTracks().length); return Arrays.stream(recommendations.getTracks()).collect(Collectors.toList()); } catch (IOException | SpotifyWebApiException | ParseException e) { diff --git a/app/src/main/java/musicbot/YoutubeSearch.java b/app/src/main/java/musicbot/YoutubeSearch.java index e9664c7..f7d721a 100644 --- a/app/src/main/java/musicbot/YoutubeSearch.java +++ b/app/src/main/java/musicbot/YoutubeSearch.java @@ -35,9 +35,6 @@ public class YoutubeSearch { final List searchResults = doSearch(title, artist); final Optional maybeResult = searchResults.stream().findFirst(); - searchResults.stream().forEach(result -> { - System.out.println("result ID = " + result.getId()); - }); return maybeResult.map(result -> "http://www.youtube.com/watch?v=" + result.getId().getVideoId()) .orElse("No videos found."); diff --git a/app/src/main/java/musicbot/commands/Genres.java b/app/src/main/java/musicbot/commands/Genres.java index 657dffd..80cf95c 100644 --- a/app/src/main/java/musicbot/commands/Genres.java +++ b/app/src/main/java/musicbot/commands/Genres.java @@ -8,6 +8,7 @@ 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.build.OptionData; +import net.dv8tion.jda.api.interactions.components.buttons.Button; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -33,17 +34,16 @@ public class Genres implements MCommand { @Override public void execute(SlashCommandInteractionEvent event) { + event.deferReply().queue(); final SpotifyClient spotifyClient = new SpotifyClient(); final List genres = spotifyClient.findGenres(); - final List> batches = Lists.partition(genres, 20); + final EmbedBuilder eb = new EmbedBuilder(); - final List embeds = batches.stream().map(genresList -> { - final EmbedBuilder eb = new EmbedBuilder(); - genresList.forEach(genre -> eb.addField(genre, "", false)); - return eb.build(); - }).collect(Collectors.toList()); + genres.subList(0, 10).forEach(genre -> eb.addField(genre, "", false)); - event.getChannel().sendMessageEmbeds(embeds).queue(); + event.getHook().sendMessageEmbeds(eb.build()).addActionRow( + Button.primary("genre_1", "More") + ).queue(); } } diff --git a/app/src/main/java/musicbot/commands/Recommend.java b/app/src/main/java/musicbot/commands/Recommend.java index 052ef09..870d66e 100644 --- a/app/src/main/java/musicbot/commands/Recommend.java +++ b/app/src/main/java/musicbot/commands/Recommend.java @@ -1,7 +1,7 @@ package musicbot.commands; import musicbot.MCommand; -import musicbot.SpotifyClient; +import musicbot.RecommendationService; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.entities.MessageEmbed; import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent; @@ -9,7 +9,6 @@ import net.dv8tion.jda.api.interactions.commands.OptionMapping; import net.dv8tion.jda.api.interactions.commands.OptionType; import net.dv8tion.jda.api.interactions.commands.build.OptionData; import net.dv8tion.jda.api.interactions.components.buttons.Button; -import se.michaelthelin.spotify.model_objects.specification.Artist; import se.michaelthelin.spotify.model_objects.specification.ArtistSimplified; import se.michaelthelin.spotify.model_objects.specification.Track; @@ -48,28 +47,21 @@ public class Recommend implements MCommand { public void execute(SlashCommandInteractionEvent event) { event.deferReply().queue(); - final OptionMapping artistInput = event.getOption("artist"); - final OptionMapping genreInput = event.getOption("genre"); + final String artistInput = event.getOption("artist") != null ? event.getOption("artist").getAsString() : ""; + final String genreInput = event.getOption("genre") != null ? event.getOption("genre").getAsString() : ""; - final Optional maybeArtistId = findArtistId(artistInput); - final Optional maybeGenre = findGenre(genreInput); - - final SpotifyClient spotifyClient = new SpotifyClient(); - - final String artistId = maybeArtistId.orElse(""); - final String genre = maybeGenre.orElse(""); - final List tracks = spotifyClient.findRecommendations(artistId, genre); + final List tracks = new RecommendationService().getRecommendations(artistInput, genreInput, 1); final EmbedBuilder eb = new EmbedBuilder(); - if (!tracks.isEmpty()) { - + final List trackList = tracks.subList(0, 5); + if (!trackList.isEmpty()) { eb - .setTitle("Recommendations") + .setTitle("Recommendations based on \"" + artistInput + "\"") .setDescription("Here are a list of recommendations based on your input. " + "It will help you find new music to listen to.") .setFooter("To find a song, select a button below."); - tracks.forEach(track -> { + trackList.forEach(track -> { final List trackArtists = Arrays.stream(track.getArtists()) .map(ArtistSimplified::getName) .collect(Collectors.toList()); @@ -80,10 +72,24 @@ public class Recommend implements MCommand { final MessageEmbed embed = eb.build(); - final List