From a7e8d79af87257eb333a71edb9cc27c70442fdfb Mon Sep 17 00:00:00 2001 From: ChomeNS Date: Sat, 25 Mar 2023 14:46:11 +0700 Subject: [PATCH] add wikipedia and urban i thought it would be hard but its acutally VERY VERY easy --- .../chomens_bot/commands/UrbanCommand.java | 84 +++++++++++++++++++ .../commands/WikipediaCommand.java | 72 ++++++++++++++++ .../plugins/CommandHandlerPlugin.java | 2 + .../chomens_bot/util/DownloadUtilities.java | 2 +- .../chomens_bot/util/HttpUtilities.java | 36 ++++++++ 5 files changed, 195 insertions(+), 1 deletion(-) create mode 100644 src/main/java/me/chayapak1/chomens_bot/commands/UrbanCommand.java create mode 100644 src/main/java/me/chayapak1/chomens_bot/commands/WikipediaCommand.java create mode 100644 src/main/java/me/chayapak1/chomens_bot/util/HttpUtilities.java diff --git a/src/main/java/me/chayapak1/chomens_bot/commands/UrbanCommand.java b/src/main/java/me/chayapak1/chomens_bot/commands/UrbanCommand.java new file mode 100644 index 0000000..168e485 --- /dev/null +++ b/src/main/java/me/chayapak1/chomens_bot/commands/UrbanCommand.java @@ -0,0 +1,84 @@ +package me.chayapak1.chomens_bot.commands; + +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import me.chayapak1.chomens_bot.command.Command; +import me.chayapak1.chomens_bot.command.CommandContext; +import me.chayapak1.chomens_bot.util.HttpUtilities; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; + +import java.net.URL; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; + +public class UrbanCommand implements Command { + public String name() { return "urban"; } + + public String description() { + return "Urban Dictionary in Minecraft"; + } + + public List usage() { + final List usages = new ArrayList<>(); + usages.add("<{term}>"); + + return usages; + } + + public List alias() { + final List aliases = new ArrayList<>(); + aliases.add(""); + + return aliases; + } + + public int trustLevel() { + return 0; + } + + public Component execute (CommandContext context, String[] args, String[] fullArgs) { + final String term = String.join(" ", args); + + final Gson gson = new Gson(); + + try { + final URL url = new URL( + "https://api.urbandictionary.com/v0/define?term=" + + URLEncoder.encode(term, StandardCharsets.UTF_8) + ); + + final String jsonOutput = HttpUtilities.request(url); + + final JsonObject jsonObject = gson.fromJson(jsonOutput, JsonObject.class); + + final JsonArray list = jsonObject.getAsJsonArray("list"); + + if (list.size() == 0) return Component.text("No results found").color(NamedTextColor.RED); + + for (JsonElement element : list) { + final JsonObject definitionObject = element.getAsJsonObject(); + + final String word = definitionObject.get("word").getAsString(); + final String definition = definitionObject.get("definition").getAsString(); + + final Component component = Component.translatable( + "[%s] %s - %s", + Component.text("Urban").color(NamedTextColor.RED), + Component.text(word).color(NamedTextColor.GRAY), + Component.text(definition).color(NamedTextColor.GRAY) + ).color(NamedTextColor.DARK_GRAY); + + context.sendOutput(component); + } + } catch (Exception e) { + return Component.text(e.toString()).color(NamedTextColor.RED); + } + + return Component.text("success"); + } +} diff --git a/src/main/java/me/chayapak1/chomens_bot/commands/WikipediaCommand.java b/src/main/java/me/chayapak1/chomens_bot/commands/WikipediaCommand.java new file mode 100644 index 0000000..0586923 --- /dev/null +++ b/src/main/java/me/chayapak1/chomens_bot/commands/WikipediaCommand.java @@ -0,0 +1,72 @@ +package me.chayapak1.chomens_bot.commands; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import me.chayapak1.chomens_bot.command.Command; +import me.chayapak1.chomens_bot.command.CommandContext; +import me.chayapak1.chomens_bot.util.HttpUtilities; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; + +import java.io.FileNotFoundException; +import java.net.URL; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; + +public class WikipediaCommand implements Command { + public String name() { return "wikipedia"; } + + public String description() { + return "Wikipedia in Minecraft"; + } + + public List usage() { + final List usages = new ArrayList<>(); + usages.add("<{page}>"); + + return usages; + } + + public List alias() { + final List aliases = new ArrayList<>(); + aliases.add("wiki"); + + return aliases; + } + + public int trustLevel() { + return 0; + } + + public Component execute (CommandContext context, String[] args, String[] fullArgs) { + final String page = String.join(" ", args); + + final Gson gson = new Gson(); + + try { + final URL url = new URL( + "https://en.wikipedia.org/api/rest_v1/page/summary/" + + URLEncoder.encode( + page.replace(" ", "_"), // mabe. + StandardCharsets.UTF_8 + ) + ); + + final String jsonOutput = HttpUtilities.request(url); + + final JsonObject jsonObject = gson.fromJson(jsonOutput, JsonObject.class); + + context.sendOutput( + Component.text(jsonObject.get("extract").getAsString()).color(NamedTextColor.GREEN) + ); + } catch (FileNotFoundException ignored) { + return Component.text("Cannot find page: " + page).color(NamedTextColor.RED); + } catch (Exception e) { + return Component.text(e.toString()).color(NamedTextColor.RED); + } + + return Component.text("success"); + } +} diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/CommandHandlerPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/CommandHandlerPlugin.java index bbee0ca..b1d9bce 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/CommandHandlerPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/CommandHandlerPlugin.java @@ -33,6 +33,8 @@ public class CommandHandlerPlugin { registerCommand(new TPSBarCommand()); registerCommand(new NetMessageCommand()); registerCommand(new RefillCoreCommand()); + registerCommand(new WikipediaCommand()); + registerCommand(new UrbanCommand()); } public void registerCommand (Command command) { diff --git a/src/main/java/me/chayapak1/chomens_bot/util/DownloadUtilities.java b/src/main/java/me/chayapak1/chomens_bot/util/DownloadUtilities.java index 79370c9..b512313 100644 --- a/src/main/java/me/chayapak1/chomens_bot/util/DownloadUtilities.java +++ b/src/main/java/me/chayapak1/chomens_bot/util/DownloadUtilities.java @@ -13,7 +13,7 @@ import java.security.SecureRandom; import java.security.cert.X509Certificate; public class DownloadUtilities { - private static class DefaultTrustManager implements X509TrustManager { + public static class DefaultTrustManager implements X509TrustManager { @Override public void checkClientTrusted(X509Certificate[] arg0, String arg1) {} diff --git a/src/main/java/me/chayapak1/chomens_bot/util/HttpUtilities.java b/src/main/java/me/chayapak1/chomens_bot/util/HttpUtilities.java new file mode 100644 index 0000000..bcd3176 --- /dev/null +++ b/src/main/java/me/chayapak1/chomens_bot/util/HttpUtilities.java @@ -0,0 +1,36 @@ +package me.chayapak1.chomens_bot.util; + +import javax.net.ssl.KeyManager; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; +import java.net.URLConnection; +import java.security.KeyManagementException; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; + +public class HttpUtilities { + public static String request (URL url) throws NoSuchAlgorithmException, KeyManagementException, IOException { + SSLContext ctx = SSLContext.getInstance("TLS"); + ctx.init(new KeyManager[0], new TrustManager[] {new DownloadUtilities.DefaultTrustManager()}, new SecureRandom()); + SSLContext.setDefault(ctx); + URLConnection conn = url.openConnection(); + conn.setConnectTimeout(5000); + conn.setReadTimeout(10000); + // https://www.whatismybrowser.com/guides/the-latest-user-agent/windows + conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"); + + BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); + String inputLine; + StringBuilder content = new StringBuilder(); + while ((inputLine = in.readLine()) != null) { + content.append(inputLine); + } + in.close(); + + return content.toString(); + } +}