TelegramChat.java 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. package de.Linus122.TelegramChat;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileReader;
  5. import java.io.FileWriter;
  6. import java.io.IOException;
  7. import java.io.ObjectInputStream;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10. import java.util.Random;
  11. import java.util.UUID;
  12. import java.util.logging.Level;
  13. import org.bukkit.Bukkit;
  14. import org.bukkit.OfflinePlayer;
  15. import org.bukkit.configuration.file.FileConfiguration;
  16. import org.bukkit.event.EventHandler;
  17. import org.bukkit.event.Listener;
  18. import org.bukkit.event.entity.PlayerDeathEvent;
  19. import org.bukkit.event.player.AsyncPlayerChatEvent;
  20. import org.bukkit.event.player.PlayerJoinEvent;
  21. import org.bukkit.event.player.PlayerQuitEvent;
  22. import org.bukkit.plugin.java.JavaPlugin;
  23. import com.google.gson.Gson;
  24. import de.Linus122.Handlers.BanHandler;
  25. import de.Linus122.Handlers.CommandHandler;
  26. import de.Linus122.Metrics.Metrics;
  27. import de.Linus122.Telegram.Telegram;
  28. import de.Linus122.Telegram.Utils;
  29. import de.Linus122.TelegramComponents.Chat;
  30. import de.Linus122.TelegramComponents.ChatMessageToMc;
  31. import de.Linus122.TelegramComponents.ChatMessageToTelegram;
  32. public class TelegramChat extends JavaPlugin implements Listener {
  33. private static File datad = new File("plugins/TelegramChat/data.json");
  34. private static FileConfiguration cfg;
  35. private static Data data = new Data();
  36. public static Telegram telegramHook;
  37. @Override
  38. public void onEnable() {
  39. this.saveDefaultConfig();
  40. cfg = this.getConfig();
  41. Utils.cfg = cfg;
  42. Bukkit.getPluginCommand("telegram").setExecutor(new TelegramCmd());
  43. Bukkit.getPluginCommand("linktelegram").setExecutor(new LinkTelegramCmd());
  44. Bukkit.getPluginManager().registerEvents(this, this);
  45. File dir = new File("plugins/TelegramChat/");
  46. dir.mkdir();
  47. data = new Data();
  48. if (datad.exists()) {
  49. Gson gson = new Gson();
  50. try {
  51. FileReader fileReader = new FileReader(datad);
  52. StringBuilder sb = new StringBuilder();
  53. int c;
  54. while((c = fileReader.read()) !=-1) {
  55. sb.append((char) c);
  56. }
  57. data = (Data) gson.fromJson(sb.toString(), Data.class);
  58. fileReader.close();
  59. } catch (Exception e) {
  60. // old method for loading the data.yml file
  61. try {
  62. FileInputStream fin = new FileInputStream(datad);
  63. ObjectInputStream ois = new ObjectInputStream(fin);
  64. data = (Data) gson.fromJson((String) ois.readObject(), Data.class);
  65. ois.close();
  66. fin.close();
  67. } catch (Exception e2) {
  68. e2.printStackTrace();
  69. }
  70. this.getLogger().log(Level.INFO, "Converted old data.yml");
  71. save();
  72. }
  73. }
  74. telegramHook = new Telegram();
  75. telegramHook.auth(data.getToken());
  76. // Ban Handler (Prevents banned players from chatting)
  77. telegramHook.addListener(new BanHandler());
  78. // Console sender handler, allows players to send console commands (telegram.console permission)
  79. // telegramHook.addListener(new CommandHandler(telegramHook, this));
  80. Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> {
  81. boolean connectionLost = false;
  82. if (connectionLost) {
  83. boolean success = telegramHook.reconnect();
  84. if (success)
  85. connectionLost = false;
  86. }
  87. if (telegramHook.connected) {
  88. connectionLost = !telegramHook.getUpdate();
  89. }
  90. }, 10L, 10L);
  91. new Metrics(this);
  92. }
  93. @Override
  94. public void onDisable() {
  95. save();
  96. }
  97. public static void save() {
  98. Gson gson = new Gson();
  99. try {
  100. FileWriter fileWriter = new FileWriter(datad);
  101. fileWriter.write(gson.toJson(data));
  102. fileWriter.close();
  103. } catch (IOException e) {
  104. // TODO Auto-generated catch block
  105. e.printStackTrace();
  106. }
  107. }
  108. public static Data getBackend() {
  109. return data;
  110. }
  111. public static void initBackend() {
  112. data = new Data();
  113. }
  114. public static void sendToMC(ChatMessageToMc chatMsg) {
  115. sendToMC(chatMsg.getUuid_sender(), chatMsg.getContent(), chatMsg.getChatID_sender());
  116. }
  117. private static void sendToMC(UUID uuid, String msg, int sender_chat) {
  118. OfflinePlayer op = Bukkit.getOfflinePlayer(uuid);
  119. List<Integer> recievers = new ArrayList<Integer>();
  120. recievers.addAll(TelegramChat.data.chat_ids);
  121. recievers.remove((Object) sender_chat);
  122. String msgF = Utils.formatMSG("general-message-to-mc", op.getName(), msg)[0];
  123. for (int id : recievers) {
  124. telegramHook.sendMsg(id, msgF.replaceAll("§.", ""));
  125. }
  126. Bukkit.broadcastMessage(msgF.replace("&", "§"));
  127. }
  128. public static void link(UUID player, int userID) {
  129. TelegramChat.data.addChatPlayerLink(userID, player);
  130. OfflinePlayer p = Bukkit.getOfflinePlayer(player);
  131. telegramHook.sendMsg(userID, "Success! Linked " + p.getName());
  132. }
  133. public boolean isChatLinked(Chat chat) {
  134. if(TelegramChat.getBackend().getLinkedChats().containsKey(chat.getId())) {
  135. return true;
  136. }
  137. return false;
  138. }
  139. public static String generateLinkToken() {
  140. Random rnd = new Random();
  141. int i = rnd.nextInt(9999999);
  142. String s = i + "";
  143. String finals = "";
  144. for (char m : s.toCharArray()) {
  145. int m2 = Integer.parseInt(m + "");
  146. int rndi = rnd.nextInt(2);
  147. if (rndi == 0) {
  148. m2 += 97;
  149. char c = (char) m2;
  150. finals = finals + c;
  151. } else {
  152. finals = finals + m;
  153. }
  154. }
  155. return finals;
  156. }
  157. @EventHandler
  158. public void onJoin(PlayerJoinEvent e) {
  159. if (!this.getConfig().getBoolean("enable-joinquitmessages"))
  160. return;
  161. if (telegramHook.connected) {
  162. ChatMessageToTelegram chat = new ChatMessageToTelegram();
  163. chat.parse_mode = "Markdown";
  164. chat.text = Utils.formatMSG("join-message", e.getPlayer().getName())[0];
  165. telegramHook.sendAll(chat);
  166. }
  167. }
  168. @EventHandler
  169. public void onDeath(PlayerDeathEvent e) {
  170. if (!this.getConfig().getBoolean("enable-deathmessages"))
  171. return;
  172. if (telegramHook.connected) {
  173. ChatMessageToTelegram chat = new ChatMessageToTelegram();
  174. chat.parse_mode = "Markdown";
  175. chat.text = Utils.formatMSG("death-message", e.getDeathMessage())[0];
  176. telegramHook.sendAll(chat);
  177. }
  178. }
  179. @EventHandler
  180. public void onQuit(PlayerQuitEvent e) {
  181. if (!this.getConfig().getBoolean("enable-joinquitmessages"))
  182. return;
  183. if (telegramHook.connected) {
  184. ChatMessageToTelegram chat = new ChatMessageToTelegram();
  185. chat.parse_mode = "Markdown";
  186. chat.text = Utils.formatMSG("quit-message", e.getPlayer().getName())[0];
  187. telegramHook.sendAll(chat);
  188. }
  189. }
  190. @EventHandler
  191. public void onChat(AsyncPlayerChatEvent e) {
  192. if (!this.getConfig().getBoolean("enable-chatmessages"))
  193. return;
  194. if (e.isCancelled())
  195. return;
  196. if (telegramHook.connected) {
  197. ChatMessageToTelegram chat = new ChatMessageToTelegram();
  198. chat.parse_mode = "Markdown";
  199. chat.text = Utils
  200. .escape(Utils.formatMSG("general-message-to-telegram", e.getPlayer().getName(), e.getMessage())[0])
  201. .replaceAll("§.", "");
  202. telegramHook.sendAll(chat);
  203. }
  204. }
  205. }