diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/TranslateCommand.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/TranslateCommand.java new file mode 100644 index 00000000..2d7b03b5 --- /dev/null +++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/TranslateCommand.java @@ -0,0 +1,91 @@ +package land.chipmunk.chayapak.chomens_bot.commands; + +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import land.chipmunk.chayapak.chomens_bot.command.Command; +import land.chipmunk.chayapak.chomens_bot.command.CommandContext; +import land.chipmunk.chayapak.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.Arrays; +import java.util.List; + +public class TranslateCommand implements Command { + public String name() { return "translate"; } + + public String description() { + return "Translate a message using Google Translate"; + } + + public List usage() { + final List usages = new ArrayList<>(); + usages.add(" <{message}>"); + + 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 from = args[0]; + final String to = args[1]; + + final String message = String.join(" ", Arrays.copyOfRange(args, 2, args.length)); + + final Gson gson = new Gson(); + + try { + final URL url = new URL("https://translate.google.com/translate_a/single?client=at&dt=t&dt=rm&dj=1"); + + final String jsonOutput = HttpUtilities.postRequest( + url, + "application/x-www-form-urlencoded;charset=utf-8", + String.format( + "sl=%s&tl=%s&q=%s", + from, + to, + URLEncoder.encode( + message, + StandardCharsets.UTF_8 + ) + ) + ); + + final JsonObject jsonObject = gson.fromJson(jsonOutput, JsonObject.class); + + final JsonArray sentences = jsonObject.getAsJsonArray("sentences"); + + final JsonObject translation = sentences.get(0).getAsJsonObject(); + + final String output = translation.get("trans").getAsString(); + + context.sendOutput( + Component + .translatable( + "Result: %s", + Component.text(output).color(NamedTextColor.GREEN) + ) + .color(NamedTextColor.GOLD) + ); + } catch (Exception e) { + return Component.text(e.toString()).color(NamedTextColor.RED); + } + + return Component.text("success"); + } +} diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/UrbanCommand.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/UrbanCommand.java index 90ace6a1..a42b046a 100644 --- a/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/UrbanCommand.java +++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/UrbanCommand.java @@ -52,7 +52,7 @@ public class UrbanCommand implements Command { URLEncoder.encode(term, StandardCharsets.UTF_8) ); - final String jsonOutput = HttpUtilities.request(url); + final String jsonOutput = HttpUtilities.getRequest(url); final JsonObject jsonObject = gson.fromJson(jsonOutput, JsonObject.class); diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/WeatherCommand.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/WeatherCommand.java index 5d3c7739..3319ea8f 100644 --- a/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/WeatherCommand.java +++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/WeatherCommand.java @@ -13,7 +13,6 @@ import org.joda.time.DateTimeZone; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; -import java.io.FileNotFoundException; import java.net.URL; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; @@ -62,7 +61,7 @@ public class WeatherCommand implements Command { + "&aqi=no" ); - final String jsonOutput = HttpUtilities.request(url); + final String jsonOutput = HttpUtilities.getRequest(url); final JsonObject jsonObject = gson.fromJson(jsonOutput, JsonObject.class); diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/WikipediaCommand.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/WikipediaCommand.java index ca52f26d..d8886cf0 100644 --- a/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/WikipediaCommand.java +++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/WikipediaCommand.java @@ -54,7 +54,7 @@ public class WikipediaCommand implements Command { ) ); - final String jsonOutput = HttpUtilities.request(url); + final String jsonOutput = HttpUtilities.getRequest(url); final JsonObject jsonObject = gson.fromJson(jsonOutput, JsonObject.class); diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/CommandHandlerPlugin.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/CommandHandlerPlugin.java index 2a78e581..9a324f38 100644 --- a/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/CommandHandlerPlugin.java +++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/CommandHandlerPlugin.java @@ -51,6 +51,7 @@ public class CommandHandlerPlugin { registerCommand(new ServerInfoCommand()); registerCommand(new BotUserCommand()); registerCommand(new GenerateMazeCommand()); + registerCommand(new TranslateCommand()); } public void registerCommand (Command command) { diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/util/HttpUtilities.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/util/HttpUtilities.java index 7c9024a1..675cb062 100644 --- a/src/main/java/land/chipmunk/chayapak/chomens_bot/util/HttpUtilities.java +++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/util/HttpUtilities.java @@ -6,6 +6,8 @@ import javax.net.ssl.TrustManager; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.security.KeyManagementException; @@ -13,10 +15,13 @@ import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; public class HttpUtilities { - public static String request (URL url) throws NoSuchAlgorithmException, KeyManagementException, IOException { + // ig duplicate codes yup real + + public static String getRequest (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); @@ -33,4 +38,34 @@ public class HttpUtilities { return content.toString(); } + + public static String postRequest (URL url, String contentType, String requestBody) throws Exception { + SSLContext ctx = SSLContext.getInstance("TLS"); + ctx.init(new KeyManager[0], new TrustManager[] {new DownloadUtilities.DefaultTrustManager()}, new SecureRandom()); + SSLContext.setDefault(ctx); + + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type", contentType); + + 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"); + + OutputStream os = conn.getOutputStream(); + os.write(requestBody.getBytes()); + os.flush(); + + 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(); + } }