From d31d36538ec05dcc2b396ff6787b391700ccadee Mon Sep 17 00:00:00 2001 From: Reperak Date: Tue, 23 Nov 2021 21:30:09 -0600 Subject: [PATCH] Refactor YouTube interface, make error handling safer --- .../ztereomusic/command/commands/Play.java | 15 ++++---- .../ztereomusic/networking/YoutubeSearch.java | 36 +++++++++---------- 2 files changed, 25 insertions(+), 26 deletions(-) diff --git a/src/main/java/codes/ztereohype/ztereomusic/command/commands/Play.java b/src/main/java/codes/ztereohype/ztereomusic/command/commands/Play.java index dcaa040..f93efda 100644 --- a/src/main/java/codes/ztereohype/ztereomusic/command/commands/Play.java +++ b/src/main/java/codes/ztereohype/ztereomusic/command/commands/Play.java @@ -12,12 +12,14 @@ import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager; import com.sedmelluq.discord.lavaplayer.tools.FriendlyException; import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist; import com.sedmelluq.discord.lavaplayer.track.AudioTrack; +import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager; import net.dv8tion.jda.api.entities.*; import net.dv8tion.jda.api.events.message.MessageReceivedEvent; import net.dv8tion.jda.api.managers.AudioManager; import java.io.IOException; import java.util.Objects; +import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -55,15 +57,14 @@ public class Play implements Command { Matcher matchedUrls = urlPattern.matcher(mergedArgs); boolean urlFound = matchedUrls.find(); - // todo: clean up this bullshit try catch thing String identifier; if (!urlFound) { - // youtube api shit - try { - identifier = YoutubeSearch.getVideoUrl(mergedArgs); - } catch (IOException e) { - e.printStackTrace(); - identifier = "error"; + Optional query = YoutubeSearch.query(mergedArgs); + if (query.isPresent()) { + identifier = query.get(); + } else { + messageEvent.getChannel().sendMessage("I found no matches for that song!").queue(); + return; } } else { // set identifier to the parsed url diff --git a/src/main/java/codes/ztereohype/ztereomusic/networking/YoutubeSearch.java b/src/main/java/codes/ztereohype/ztereomusic/networking/YoutubeSearch.java index b972509..bb57b98 100644 --- a/src/main/java/codes/ztereohype/ztereomusic/networking/YoutubeSearch.java +++ b/src/main/java/codes/ztereohype/ztereomusic/networking/YoutubeSearch.java @@ -10,32 +10,30 @@ import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.nio.charset.StandardCharsets; +import java.util.Optional; public class YoutubeSearch { - public static String getVideoUrl(String title) throws IOException { - String apiKey = ZtereoMUSIC.getInstance().getConfig().getPropreties().get("yt_api_key"); - String query; + private static final String API_KEY = ZtereoMUSIC.getInstance().getConfig().getPropreties().get("yt_api_key"); + private static final Json JSON = Json.json(); - title = (title.contains(" ")) ? title.replace(" ","+") : title; - query = "https://www.googleapis.com/youtube/v3/search?part=snippet&q=%22"+title+"%22&type=video&key="+apiKey; + public static Optional query(String title) { + String query = "https://www.googleapis.com/youtube/v3/search?part=snippet&q=%22" + + title.replace(' ', '+') + "%22&type=video&key=" + API_KEY; - // todo: add safety here, sounds a bit unsafe to me tbh but idk - InputStream inputStream = new URL(query).openStream(); - String jsonResponse = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); - - //todo: clean up this bullshit try/catch shit and error - Json json = Json.json(); - JsonNode parsedResponse; - JsonPath path = JsonPath.parse("items[0].id.videoId"); - String videoId; + String jsonResponse; try { - parsedResponse = json.parse(jsonResponse); - videoId = parsedResponse.query(path).asString(); + jsonResponse = new String(new URL(query).openStream().readAllBytes()); + } catch (IOException e) { + e.printStackTrace(); + return Optional.empty(); + } + JsonPath path = JsonPath.parse("items[0].id.videoId"); + + try { + return Optional.ofNullable(JSON.parse(jsonResponse).query(path).asString()); } catch (JsonSyntaxException e) { e.printStackTrace(); - videoId = "error"; + return Optional.empty(); } - - return videoId; } }