TelegramChat.java 8.5 KB

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