Java IRC bot
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

TranslateCommand.java 5.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. /*
  2. * To change this template, choose Tools | Templates
  3. * and open the template in the editor.
  4. */
  5. package com.md87.charliebravo.commands;
  6. import com.md87.charliebravo.Command;
  7. import com.md87.charliebravo.Followup;
  8. import com.md87.charliebravo.InputHandler;
  9. import com.md87.charliebravo.Response;
  10. import java.io.BufferedReader;
  11. import java.io.IOException;
  12. import java.io.InputStreamReader;
  13. import java.net.MalformedURLException;
  14. import java.net.URL;
  15. import java.net.URLConnection;
  16. import java.net.URLEncoder;
  17. import java.nio.charset.Charset;
  18. import org.json.JSONException;
  19. import org.json.JSONObject;
  20. /**
  21. *
  22. * @author chris
  23. */
  24. public class TranslateCommand implements Command {
  25. protected static final String[][] LANGUAGES = {
  26. {"AFRIKAANS", "af"},
  27. {"ALBANIAN", "sq"},
  28. {"AMHARIC", "am"},
  29. {"ARABIC", "ar"},
  30. {"ARMENIAN", "hy"},
  31. {"AZERBAIJANI", "az"},
  32. {"BASQUE", "eu"},
  33. {"BELARUSIAN", "be"},
  34. {"BENGALI", "bn"},
  35. {"BIHARI", "bh"},
  36. {"BULGARIAN", "bg"},
  37. {"BURMESE", "my"},
  38. {"CATALAN", "ca"},
  39. {"CHEROKEE", "chr"},
  40. {"CHINESE", "zh"},
  41. {"CHINESE (SIMPLIFIED)", "zh-CN"},
  42. {"CHINESE (TRADITIONAL)", "zh-TW"},
  43. {"SIMPLIFIED CHINESE", "zh-CN"},
  44. {"TRADITIONAL CHINESE", "zh-TW"},
  45. {"CROATIAN", "hr"},
  46. {"CZECH", "cs"},
  47. {"DANISH", "da"},
  48. {"DHIVEHI", "dv"},
  49. {"DUTCH", "nl"},
  50. {"ENGLISH", "en"},
  51. {"ESPERANTO", "eo"},
  52. {"ESTONIAN", "et"},
  53. {"FILIPINO", "tl"},
  54. {"FINNISH", "fi"},
  55. {"FRENCH", "fr"},
  56. {"GALICIAN", "gl"},
  57. {"GEORGIAN", "ka"},
  58. {"GERMAN", "de"},
  59. {"GREEK", "el"},
  60. {"GUARANI", "gn"},
  61. {"GUJARATI", "gu"},
  62. {"HEBREW", "iw"},
  63. {"HINDI", "hi"},
  64. {"HUNGARIAN", "hu"},
  65. {"ICELANDIC", "is"},
  66. {"INDONESIAN", "id"},
  67. {"INUKTITUT", "iu"},
  68. {"ITALIAN", "it"},
  69. {"JAPANESE", "ja"},
  70. {"KANNADA", "kn"},
  71. {"KAZAKH", "kk"},
  72. {"KHMER", "km"},
  73. {"KOREAN", "ko"},
  74. {"KURDISH", "ku"},
  75. {"KYRGYZ", "ky"},
  76. {"LAOTHIAN", "lo"},
  77. {"LATVIAN", "lv"},
  78. {"LITHUANIAN", "lt"},
  79. {"MACEDONIAN", "mk"},
  80. {"MALAY", "ms"},
  81. {"MALAYALAM", "ml"},
  82. {"MALTESE", "mt"},
  83. {"MARATHI", "mr"},
  84. {"MONGOLIAN", "mn"},
  85. {"NEPALI", "ne"},
  86. {"NORWEGIAN", "no"},
  87. {"ORIYA", "or"},
  88. {"PASHTO", "ps"},
  89. {"PERSIAN", "fa"},
  90. {"POLISH", "pl"},
  91. {"PORTUGUESE", "pt-PT"},
  92. {"PUNJABI", "pa"},
  93. {"ROMANIAN", "ro"},
  94. {"RUSSIAN", "ru"},
  95. {"SANSKRIT", "sa"},
  96. {"SERBIAN", "sr"},
  97. {"SINDHI", "sd"},
  98. {"SINHALESE", "si"},
  99. {"SLOVAK", "sk"},
  100. {"SLOVENIAN", "sl"},
  101. {"SPANISH", "es"},
  102. {"SWAHILI", "sw"},
  103. {"SWEDISH", "sv"},
  104. {"TAJIK", "tg"},
  105. {"TAMIL", "ta"},
  106. {"TAGALOG", "tl"},
  107. {"TELUGU", "te"},
  108. {"THAI", "th"},
  109. {"TIBETAN", "bo"},
  110. {"TURKISH", "tr"},
  111. {"UKRAINIAN", "uk"},
  112. {"URDU", "ur"},
  113. {"UZBEK", "uz"},
  114. {"UIGHUR", "ug"},
  115. {"VIETNAMESE", "vi"},
  116. };
  117. public void execute(final InputHandler handler, Response response, String line) throws MalformedURLException, IOException, JSONException {
  118. String target = "en";
  119. String text = line;
  120. int offset;
  121. if ((offset = text.lastIndexOf(" into ")) > -1) {
  122. final String lang = text.substring(offset + 6);
  123. for (String[] pair : LANGUAGES) {
  124. if (pair[0].equalsIgnoreCase(lang)) {
  125. target = pair[1];
  126. text = text.substring(0, offset);
  127. }
  128. }
  129. }
  130. URL url = new URL("http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&langpair=%7C" + target + "&q=" +
  131. URLEncoder.encode(text, Charset.defaultCharset().name()));
  132. URLConnection connection = url.openConnection();
  133. connection.addRequestProperty("Referer", "http://chris.smith.name/");
  134. String input;
  135. StringBuilder builder = new StringBuilder();
  136. BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
  137. while((input = reader.readLine()) != null) {
  138. builder.append(input);
  139. }
  140. JSONObject json = new JSONObject(builder.toString());
  141. if (json.getInt("responseStatus") != 200) {
  142. throw new IOException(json.getString("responseDetails"));
  143. }
  144. response.sendMessage("that translates to \""
  145. + json.getJSONObject("responseData").getString("translatedText") + "\"");
  146. response.addFollowup(new LanguageFollowup(json.getJSONObject("responseData")));
  147. }
  148. protected static class LanguageFollowup implements Followup {
  149. private final JSONObject result;
  150. public LanguageFollowup(JSONObject result) {
  151. this.result = result;
  152. }
  153. public boolean matches(String line) {
  154. return line.equals("language");
  155. }
  156. public void execute(final InputHandler handler, Response response, String line) throws Exception {
  157. final String target = result.getString("detectedSourceLanguage");
  158. for (String[] pair : LANGUAGES) {
  159. if (pair[1].equalsIgnoreCase(target)) {
  160. response.sendMessage("the language was detected as "
  161. + pair[0].charAt(0) + pair[0].substring(1).toLowerCase());
  162. return;
  163. }
  164. }
  165. response.sendMessage("the language was detected as '"
  166. + target + "', but I don't know what that is");
  167. }
  168. }
  169. }