123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304 |
- package de.Linus122.TelegramChat;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileReader;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- import java.util.Random;
- import java.util.UUID;
- import java.util.logging.Level;
- import java.util.stream.Collectors;
- import de.Linus122.Handlers.VanishHandler;
- import de.myzelyam.api.vanish.VanishAPI;
- import org.bukkit.Bukkit;
- import org.bukkit.OfflinePlayer;
- import org.bukkit.configuration.file.FileConfiguration;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.entity.PlayerDeathEvent;
- import org.bukkit.event.player.AsyncPlayerChatEvent;
- import org.bukkit.event.player.PlayerAdvancementDoneEvent;
- import org.bukkit.event.player.PlayerJoinEvent;
- import org.bukkit.event.player.PlayerQuitEvent;
- import org.bukkit.plugin.java.JavaPlugin;
- import com.google.gson.Gson;
- import de.Linus122.Handlers.BanHandler;
- import de.Linus122.Metrics.Metrics;
- import de.Linus122.Telegram.Telegram;
- import de.Linus122.Telegram.Utils;
- import de.Linus122.TelegramComponents.Chat;
- import de.Linus122.TelegramComponents.ChatMessageToMc;
- import de.Linus122.TelegramComponents.ChatMessageToTelegram;
- public class TelegramChat extends JavaPlugin implements Listener {
- private static File datad = new File("plugins/TelegramChat/data.json");
- private static FileConfiguration cfg;
- private static Data data = new Data();
- public static Telegram telegramHook;
- private static TelegramChat instance;
- private static boolean isSuperVanish;
- @Override
- public void onEnable() {
- this.saveDefaultConfig();
- cfg = this.getConfig();
- instance = this;
- Utils.cfg = cfg;
- Bukkit.getPluginCommand("telegram").setExecutor(new TelegramCmd());
- Bukkit.getPluginCommand("linktelegram").setExecutor(new LinkTelegramCmd());
- Bukkit.getPluginManager().registerEvents(this, this);
- if (Bukkit.getPluginManager().isPluginEnabled("SuperVanish") || Bukkit.getPluginManager().isPluginEnabled("PremiumVanish")) {
- isSuperVanish = true;
- Bukkit.getPluginManager().registerEvents(new VanishHandler(), this);
- }
- File dir = new File("plugins/TelegramChat/");
- dir.mkdir();
- data = new Data();
- if (datad.exists()) {
- Gson gson = new Gson();
- try {
- FileReader fileReader = new FileReader(datad);
- StringBuilder sb = new StringBuilder();
- int c;
- while((c = fileReader.read()) !=-1) {
- sb.append((char) c);
- }
- data = (Data) gson.fromJson(sb.toString(), Data.class);
-
- fileReader.close();
- } catch (Exception e) {
- // old method for loading the data.yml file
- try {
- FileInputStream fin = new FileInputStream(datad);
- ObjectInputStream ois = new ObjectInputStream(fin);
-
- data = (Data) gson.fromJson((String) ois.readObject(), Data.class);
- ois.close();
- fin.close();
- } catch (Exception e2) {
- e2.printStackTrace();
- }
- this.getLogger().log(Level.INFO, "Converted old data.yml");
- save();
- }
- }
- telegramHook = new Telegram();
- telegramHook.auth(data.getToken());
-
- // Ban Handler (Prevents banned players from chatting)
- telegramHook.addListener(new BanHandler());
-
- // Console sender handler, allows players to send console commands (telegram.console permission)
- // telegramHook.addListener(new CommandHandler(telegramHook, this));
- Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> {
- boolean connectionLost = false;
- if (connectionLost) {
- boolean success = telegramHook.reconnect();
- if (success)
- connectionLost = false;
- }
- if (telegramHook.connected) {
- connectionLost = !telegramHook.getUpdate();
- }
- }, 0L, 10L);
-
- // metrics
- Bukkit.getScheduler().runTaskAsynchronously(this, () -> new Metrics(this));
- }
- @Override
- public void onDisable() {
- save();
- }
- public static void save() {
- Gson gson = new Gson();
- try {
- FileWriter fileWriter = new FileWriter(datad);
- fileWriter.write(gson.toJson(data));
-
- fileWriter.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- public static Data getBackend() {
- return data;
- }
- public static void initBackend() {
- data = new Data();
- }
- public static void sendToMC(ChatMessageToMc chatMsg) {
- sendToMC(chatMsg.getUuid_sender(), chatMsg.getContent(), chatMsg.getChatID_sender());
- }
- private static void sendToMC(UUID uuid, String msg, long sender_chat) {
- OfflinePlayer op = Bukkit.getOfflinePlayer(uuid);
- List<Long> recievers = new ArrayList<Long>();
- recievers.addAll(TelegramChat.data.chat_ids);
- recievers.remove((Object) sender_chat);
- String msgF = Utils.formatMSG("general-message-to-mc", op.getName(), msg)[0];
- for (long id : recievers) {
- telegramHook.sendMsg(id, msgF.replaceAll("§.", ""));
- }
- Bukkit.broadcastMessage(msgF.replace("&", "§"));
- }
- public static void link(UUID player, long userID) {
- TelegramChat.data.addChatPlayerLink(userID, player);
- OfflinePlayer p = Bukkit.getOfflinePlayer(player);
- telegramHook.sendMsg(userID, "Success! Linked " + p.getName());
- }
-
- public boolean isChatLinked(Chat chat) {
- if(TelegramChat.getBackend().getLinkedChats().containsKey(chat.getId())) {
- return true;
- }
-
- return false;
- }
- public static String generateLinkToken() {
- Random rnd = new Random();
- int i = rnd.nextInt(9999999);
- String s = i + "";
- String finals = "";
- for (char m : s.toCharArray()) {
- int m2 = Integer.parseInt(m + "");
- int rndi = rnd.nextInt(2);
- if (rndi == 0) {
- m2 += 97;
- char c = (char) m2;
- finals = finals + c;
- } else {
- finals = finals + m;
- }
- }
- return finals;
- }
- @EventHandler
- public void onJoin(PlayerJoinEvent e) {
- if (!this.getConfig().getBoolean("enable-joinquitmessages"))
- return;
- if(isSuperVanish && VanishAPI.isInvisible(e.getPlayer()))
- return;
- if (telegramHook.connected) {
- ChatMessageToTelegram chat = new ChatMessageToTelegram();
- chat.parse_mode = "Markdown";
- chat.text = Utils.formatMSG("join-message", e.getPlayer().getName())[0];
- telegramHook.sendAll(chat);
- }
- }
- @EventHandler
- public void onDeath(PlayerDeathEvent e) {
- if (!this.getConfig().getBoolean("enable-deathmessages"))
- return;
- if (telegramHook.connected) {
- ChatMessageToTelegram chat = new ChatMessageToTelegram();
- chat.parse_mode = "Markdown";
- chat.text = Utils.formatMSG("death-message", e.getDeathMessage())[0];
- telegramHook.sendAll(chat);
- }
- }
- @EventHandler
- public void onAdvancement(PlayerAdvancementDoneEvent e) {
-
- if (!this.getConfig().getBoolean("enable-advancement"))
- return;
-
- if(e.getAdvancement() == null ||
- e.getAdvancement().getKey() == null ||
- e.getAdvancement().getKey().getKey() == null ||
- !e.getAdvancement().getKey().getKey().contains("/"))
- return;
-
- String type = e.getAdvancement().getKey().getKey().split("/")[0];
-
- List<String> advancementTypes = Arrays.stream(this.getConfig().getString("advancement-types").split("\\,")) // split on comma
- .map(str -> str.trim()) // remove white-spaces
- .collect(Collectors.toList()); // collect to List
-
- if (telegramHook.connected && advancementTypes.contains(type)) {
-
- String toDisplay = e.getAdvancement().getKey().getKey()
- .replace(type + "/", "")
- .replaceAll("_", " ");
-
- if(toDisplay.equals("root"))
- return;
-
- ChatMessageToTelegram chat = new ChatMessageToTelegram();
- chat.parse_mode = "Markdown";
- chat.text = Utils.formatMSG(
- "advancement-message",
- e.getPlayer().getDisplayName(),
- toDisplay)[0];
- telegramHook.sendAll(chat);
- }
- }
- @EventHandler
- public void onQuit(PlayerQuitEvent e) {
- if (!this.getConfig().getBoolean("enable-joinquitmessages"))
- return;
- if(isSuperVanish && VanishAPI.isInvisible(e.getPlayer()))
- return;
- if (telegramHook.connected) {
- ChatMessageToTelegram chat = new ChatMessageToTelegram();
- chat.parse_mode = "Markdown";
- chat.text = Utils.formatMSG("quit-message", e.getPlayer().getName())[0];
- telegramHook.sendAll(chat);
- }
- }
- @EventHandler
- public void onChat(AsyncPlayerChatEvent e) {
- if (!this.getConfig().getBoolean("enable-chatmessages"))
- return;
- if (e.isCancelled())
- return;
- if (telegramHook.connected) {
- ChatMessageToTelegram chat = new ChatMessageToTelegram();
- chat.parse_mode = "Markdown";
- chat.text = Utils
- .escape(Utils.formatMSG("general-message-to-telegram", e.getPlayer().getName(), e.getMessage())[0])
- .replaceAll("§.", "");
- telegramHook.sendAll(chat);
- }
- }
- public static TelegramChat getInstance()
- {
- return instance;
- }
- }
|