add translate

This commit is contained in:
Chayapak 2023-04-11 13:29:00 +07:00
parent 8e306fbdeb
commit 28ed76e0ac
6 changed files with 131 additions and 5 deletions

View file

@ -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<String> usage() {
final List<String> usages = new ArrayList<>();
usages.add("<from> <to> <{message}>");
return usages;
}
public List<String> alias() {
final List<String> 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");
}
}

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -51,6 +51,7 @@ public class CommandHandlerPlugin {
registerCommand(new ServerInfoCommand());
registerCommand(new BotUserCommand());
registerCommand(new GenerateMazeCommand());
registerCommand(new TranslateCommand());
}
public void registerCommand (Command command) {

View file

@ -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();
}
}