diff --git a/pom.xml b/pom.xml index 55d52a1..4d46ab7 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 TelegramChat TelegramChat - 1.0.10 + 1.0.11 TelegramChat https://www.spigotmc.org/resources/telegramchat.16576/ diff --git a/src/main/java/de/Linus122/Metrics/Metrics.java b/src/main/java/de/Linus122/Metrics/Metrics.java index 9d4e30f..df7f9a1 100644 --- a/src/main/java/de/Linus122/Metrics/Metrics.java +++ b/src/main/java/de/Linus122/Metrics/Metrics.java @@ -20,15 +20,16 @@ import com.google.gson.Gson; /* * SpaceIOMetrics main class by Linus122 - * version: 0.05 + * version: 0.06 * */ + public class Metrics { private Plugin pl; private final Gson gson = new Gson(); private String URL = "https://spaceio.xyz/update/%s"; - private final String VERSION = "0.05"; + private final String VERSION = "0.06"; private int REFRESH_INTERVAL = 600000; public Metrics(Plugin pl){ @@ -133,7 +134,8 @@ public class Metrics { } // method source: http://www.jcgonzalez.com/linux-get-distro-from-java-examples private String getDistro(){ - //lists all the files ending with -release in the etc folder + + // lists all the files ending with -release in the etc folder File dir = new File("/etc/"); File fileList[] = new File[0]; if(dir.exists()){ @@ -143,22 +145,25 @@ public class Metrics { } }); } - //looks for the version file (not all linux distros) - File fileVersion = new File("/proc/version"); - if(fileVersion.exists()){ - fileList = Arrays.copyOf(fileList,fileList.length+1); - fileList[fileList.length-1] = fileVersion; - } - //prints first version-related file - for (File f : fileList) { - try { - BufferedReader br = new BufferedReader(new FileReader(f)); - String strLine = null; - while ((strLine = br.readLine()) != null) { - return strLine; - } - br.close(); - } catch (Exception e) {} + try { + // looks for the version file (not all linux distros) + File fileVersion = new File("/proc/version"); + if(fileVersion.exists() && fileList.length > 0){ + fileList = Arrays.copyOf(fileList,fileList.length+1); + fileList[fileList.length-1] = fileVersion; + } + + // prints first version-related file + for (File f : fileList) { + BufferedReader br = new BufferedReader(new FileReader(f)); + String strLine = null; + while ((strLine = br.readLine()) != null) { + return strLine; + } + br.close(); + } + } catch (Exception e) { + // Exception is thrown when something went wrong while obtaining the distribution name. } return "unknown"; } @@ -181,4 +186,4 @@ class Data { String osArch; String osVersion; String linuxDistro; -} +} \ No newline at end of file diff --git a/src/main/java/de/Linus122/TelegramChat/API.java b/src/main/java/de/Linus122/TelegramChat/API.java index 6768f3e..272ffd5 100644 --- a/src/main/java/de/Linus122/TelegramChat/API.java +++ b/src/main/java/de/Linus122/TelegramChat/API.java @@ -1,7 +1,7 @@ package de.Linus122.TelegramChat; public class API { - public static Telegram getTelegramHook(){ + public static Telegram getTelegramHook() { return Main.telegramHook; } } diff --git a/src/main/java/de/Linus122/TelegramChat/Data.java b/src/main/java/de/Linus122/TelegramChat/Data.java index bfa5d9b..738b90c 100755 --- a/src/main/java/de/Linus122/TelegramChat/Data.java +++ b/src/main/java/de/Linus122/TelegramChat/Data.java @@ -1,16 +1,77 @@ -package de.Linus122.TelegramChat; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; - -public class Data { - public String token = ""; - //Player name // ChatID - public HashMap linkedChats = new HashMap(); - //Player name // RandomInt - public HashMap linkCodes = new HashMap(); - public List ids = new ArrayList(); - boolean firstUse = true; -} +package de.Linus122.TelegramChat; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.UUID; + +public class Data { + private String token = ""; + // Player name // ChatID + private HashMap linkedChats = new HashMap(); + // Player name // RandomInt + private HashMap linkCodes = new HashMap(); + public List ids = new ArrayList(); + private boolean firstUse = true; + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + public HashMap getLinkedChats() { + return linkedChats; + } + + public void setLinkedChats(HashMap linkedChats) { + this.linkedChats = linkedChats; + } + + public HashMap getLinkCodes() { + return linkCodes; + } + + public void setLinkCodes(HashMap linkCodes) { + this.linkCodes = linkCodes; + } + + public List getIds() { + return ids; + } + + public void setIds(List ids) { + this.ids = ids; + } + + public boolean isFirstUse() { + return firstUse; + } + + public void setFirstUse(boolean firstUse) { + this.firstUse = firstUse; + } + + public void addChatPlayerLink(int chatID, UUID player) { + linkedChats.put(chatID, player); + } + + public void addLinkCode(String code, UUID player) { + linkCodes.put(code, player); + } + + public UUID getUUIDFromLinkCode(String code) { + return linkCodes.get(code); + } + + public void removeLinkCode(String code) { + linkCodes.remove(code); + } + + public UUID getUUIDFromChatID(int chatID) { + return linkedChats.get(chatID); + } + +} diff --git a/src/main/java/de/Linus122/TelegramChat/LinkTelegramCmd.java b/src/main/java/de/Linus122/TelegramChat/LinkTelegramCmd.java index 777d69d..3fcdb53 100755 --- a/src/main/java/de/Linus122/TelegramChat/LinkTelegramCmd.java +++ b/src/main/java/de/Linus122/TelegramChat/LinkTelegramCmd.java @@ -1,37 +1,38 @@ -package de.Linus122.TelegramChat; - -import java.io.IOException; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class LinkTelegramCmd implements CommandExecutor { - - @Override - public boolean onCommand(CommandSender cs, Command arg1, String arg2, String[] args) { - if(!(cs instanceof Player)){ - cs.sendMessage("§cSorry, but you can't link the console currently."); - } - if(!cs.hasPermission("telegram.linktelegram")){ - cs.sendMessage("§cYou don't have permissions to use this!"); - return true; - } - if(Main.data == null){ - Main.data = new Data(); - } - if(Main.telegramHook.authJson == null){ - cs.sendMessage("§cPlease add a bot to your server first! /telegram"); - return true; - } - - String token = Main.generateLinkToken(); - Main.data.linkCodes.put(token, ((Player) cs).getUniqueId()); - cs.sendMessage("§aAdd " + Main.telegramHook.authJson.getAsJsonObject("result").get("username").getAsString() + " to Telegram and send this message to " + Main.telegramHook.authJson.getAsJsonObject("result").get("username").getAsString() + ":"); - cs.sendMessage("§c" + token); - - return true; - } - -} +package de.Linus122.TelegramChat; + +import java.io.IOException; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class LinkTelegramCmd implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender cs, Command arg1, String arg2, String[] args) { + if (!(cs instanceof Player)) { + cs.sendMessage(Utils.formatMSG("cant-link-console")[0]); + } + if (!cs.hasPermission("telegram.linktelegram")) { + cs.sendMessage(Utils.formatMSG("no-permissions")[0]); + return true; + } + if (Main.getBackend() == null) { + Main.initBackend(); + } + if (Main.telegramHook.authJson == null) { + cs.sendMessage(Utils.formatMSG("need-to-add-bot-first")[0]); + return true; + } + + String token = Main.generateLinkToken(); + Main.getBackend().addLinkCode(token, ((Player) cs).getUniqueId()); + cs.sendMessage(Utils.formatMSG("get-token", + Main.telegramHook.authJson.getAsJsonObject("result").get("username").getAsString(), + Main.telegramHook.authJson.getAsJsonObject("result").get("username").getAsString(), token)); + + return true; + } + +} diff --git a/src/main/java/de/Linus122/TelegramChat/Main.java b/src/main/java/de/Linus122/TelegramChat/Main.java index f0292b1..b02e9f4 100755 --- a/src/main/java/de/Linus122/TelegramChat/Main.java +++ b/src/main/java/de/Linus122/TelegramChat/Main.java @@ -1,185 +1,203 @@ -package de.Linus122.TelegramChat; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.net.URLEncoder; -import java.text.Format; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; -import java.util.UUID; - -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.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.java.JavaPlugin; - -import com.google.gson.Gson; - -import de.Linus122.Metrics.Metrics; -import de.Linus122.TelegramComponents.Chat; -import de.Linus122.TelegramComponents.ChatMessageToMc; - - -public class Main extends JavaPlugin implements Listener{ - public static File datad = new File("plugins/TelegramChat/data.json"); - public static FileConfiguration cfg; - - public static Data data = new Data(); - static Plugin pl; - public static Telegram telegramHook; - - @Override - public void onEnable(){ - this.saveDefaultConfig(); - cfg = this.getConfig(); - this.pl = this; - Bukkit.getPluginCommand("telegram").setExecutor(new TelegramCmd()); - Bukkit.getPluginCommand("linktelegram").setExecutor(new LinkTelegramCmd()); - Bukkit.getPluginManager().registerEvents(this, this); - File dir = new File("plugins/TelegramChat/"); - dir.mkdir(); - data = new Data(); - if(datad.exists()){ - try { - FileInputStream fin = new FileInputStream(datad); - ObjectInputStream ois = new ObjectInputStream(fin); - Gson gson = new Gson(); - data = (Data) gson.fromJson((String) ois.readObject(), Data.class); - ois.close(); - fin.close(); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - telegramHook = new Telegram(); - telegramHook.auth(data.token); - - Bukkit.getScheduler().scheduleAsyncRepeatingTask(this, new Runnable(){ - boolean connectionLost = false; - public void run(){ - if(connectionLost){ - boolean success = telegramHook.reconnect(); - if(success) connectionLost = false; - } - if(telegramHook.connected){ - connectionLost = !telegramHook.getUpdate(); - } - } - }, 20L, 20L); - new Metrics(this); - } - public static void save(){ - Gson gson = new Gson(); - - try { - FileOutputStream fout= new FileOutputStream (datad); - ObjectOutputStream oos = new ObjectOutputStream(fout); - - oos.writeObject(gson.toJson(data)); - fout.close(); - oos.close(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - @Override - public void onDisable(){ - save(); - } - public static void sendToMC(ChatMessageToMc chatMsg) { - sendToMC(chatMsg.getUuid_sender(), chatMsg.getContent(), chatMsg.getChatID_sender()); - } - private static void sendToMC(UUID uuid, String msg, int sender){ - OfflinePlayer op = Bukkit.getOfflinePlayer(uuid); - List recievers = new ArrayList(); - recievers.addAll(Main.data.ids); - recievers.remove((Object) sender); - String msgF = Main.cfg.getString("chat-format").replace('&', '§').replace("%player%", op.getName()).replace("%message%", msg); - for(int id : recievers){ - telegramHook.sendMsg(id, msgF); - } - Bukkit.broadcastMessage(msgF.replace("&", "§")); - - } - public static void link(UUID player, int chatID){ - Main.data.linkedChats.put(chatID, player); - OfflinePlayer p = Bukkit.getOfflinePlayer(player); - telegramHook.sendMsg(chatID, "Success! Linked " + p.getName()); - } - 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(telegramHook.connected){ - Chat chat = new Chat(); - chat.parse_mode = "Markdown"; - chat.text = "`" + e.getPlayer().getName() + " joined the game.`"; - telegramHook.sendAll(chat); - } - } - @EventHandler - public void onDeath(PlayerDeathEvent e){ - if(!this.getConfig().getBoolean("enable-deathmessages")) return; - if(telegramHook.connected){ - Chat chat = new Chat(); - chat.parse_mode = "Markdown"; - chat.text = "`"+e.getDeathMessage() + "`"; - telegramHook.sendAll(chat); - } - } - @EventHandler - public void onQuit(PlayerQuitEvent e){ - if(!this.getConfig().getBoolean("enable-joinquitmessages")) return; - if(telegramHook.connected){ - Chat chat = new Chat(); - chat.parse_mode = "Markdown"; - chat.text = "`" + e.getPlayer().getName() + " left the game.`"; - System.out.println(chat.text); - telegramHook.sendAll(chat); - } - } - @EventHandler - public void onChat(AsyncPlayerChatEvent e){ - if(!this.getConfig().getBoolean("enable-chatmessages")) return; - if(telegramHook.connected){ - Chat chat = new Chat(); - chat.parse_mode = "Markdown"; - chat.text = escape(e.getPlayer().getName()) + ": " + escape(e.getMessage()).replaceAll("§.", "") ; - telegramHook.sendAll(chat); - } - } - public String escape(String str){ - return str.replace("_", "\\_"); - } -} +package de.Linus122.TelegramChat; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import java.util.UUID; + +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.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.plugin.java.JavaPlugin; + +import com.google.gson.Gson; + +import de.Linus122.Metrics.Metrics; +import de.Linus122.TelegramComponents.Chat; +import de.Linus122.TelegramComponents.ChatMessageToMc; + +public class Main 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; + + @Override + public void onEnable() { + this.saveDefaultConfig(); + cfg = this.getConfig(); + Utils.cfg = cfg; + + Bukkit.getPluginCommand("telegram").setExecutor(new TelegramCmd()); + Bukkit.getPluginCommand("linktelegram").setExecutor(new LinkTelegramCmd()); + Bukkit.getPluginManager().registerEvents(this, this); + File dir = new File("plugins/TelegramChat/"); + dir.mkdir(); + data = new Data(); + if (datad.exists()) { + try { + FileInputStream fin = new FileInputStream(datad); + ObjectInputStream ois = new ObjectInputStream(fin); + Gson gson = new Gson(); + data = (Data) gson.fromJson((String) ois.readObject(), Data.class); + ois.close(); + fin.close(); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + telegramHook = new Telegram(); + telegramHook.auth(data.getToken()); + + Bukkit.getScheduler().runTaskTimerAsynchronously(this, () -> { + boolean connectionLost = false; + if (connectionLost) { + boolean success = telegramHook.reconnect(); + if (success) + connectionLost = false; + } + if (telegramHook.connected) { + connectionLost = !telegramHook.getUpdate(); + } + }, 10L, 10L); + + new Metrics(this); + } + + @Override + public void onDisable() { + save(); + } + + public static void save() { + Gson gson = new Gson(); + + try { + FileOutputStream fout = new FileOutputStream(datad); + ObjectOutputStream oos = new ObjectOutputStream(fout); + + oos.writeObject(gson.toJson(data)); + fout.close(); + oos.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, int sender) { + OfflinePlayer op = Bukkit.getOfflinePlayer(uuid); + List recievers = new ArrayList(); + recievers.addAll(Main.data.ids); + recievers.remove((Object) sender); + String msgF = Utils.formatMSG("general-message-to-mc", op.getName(), msg)[0]; + for (int id : recievers) { + telegramHook.sendMsg(id, msgF); + } + Bukkit.broadcastMessage(msgF.replace("&", "§")); + + } + + public static void link(UUID player, int chatID) { + Main.data.addChatPlayerLink(chatID, player); + OfflinePlayer p = Bukkit.getOfflinePlayer(player); + telegramHook.sendMsg(chatID, "Success! Linked " + p.getName()); + } + + 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 (telegramHook.connected) { + Chat chat = new Chat(); + 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) { + Chat chat = new Chat(); + chat.parse_mode = "Markdown"; + chat.text = Utils.formatMSG("death-message", e.getDeathMessage())[0]; + telegramHook.sendAll(chat); + } + } + + @EventHandler + public void onQuit(PlayerQuitEvent e) { + if (!this.getConfig().getBoolean("enable-joinquitmessages")) + return; + if (telegramHook.connected) { + Chat chat = new Chat(); + 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 (telegramHook.connected) { + Chat chat = new Chat(); + chat.parse_mode = "Markdown"; + chat.text = Utils + .escape(Utils.formatMSG("general-message-to-telegram", e.getPlayer().getName(), e.getMessage())[0]) + .replaceAll("§.", ""); + telegramHook.sendAll(chat); + } + } + +} diff --git a/src/main/java/de/Linus122/TelegramChat/Telegram.java b/src/main/java/de/Linus122/TelegramChat/Telegram.java index 5f4b6cc..5991dd6 100755 --- a/src/main/java/de/Linus122/TelegramChat/Telegram.java +++ b/src/main/java/de/Linus122/TelegramChat/Telegram.java @@ -1,210 +1,204 @@ -package de.Linus122.TelegramChat; - -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.net.HttpURLConnection; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.List; - -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; - -import de.Linus122.TelegramComponents.Chat; -import de.Linus122.TelegramComponents.ChatMessageToMc; - - -public class Telegram { - public JsonObject authJson; - public boolean connected = false; - - static int lastUpdate = 0; - public String token; - - private List listeners = new ArrayList(); - - public void addListener(TelegramActionListener actionListener){ - listeners.add(actionListener); - } - - public boolean auth(String token){ - this.token = token; - return reconnect(); - } - public boolean reconnect(){ - try{ - JsonObject obj = sendGet("https://api.telegram.org/bot" + token + "/getMe"); - authJson = obj; - System.out.print("[Telegram] Established a connection with the telegram servers."); - connected = true; - return true; - }catch(Exception e){ - connected = false; - System.out.print("[Telegram] Sorry, but could not connect to Telegram servers. The token could be wrong."); - return false; - } - } - public boolean getUpdate(){ - JsonObject up = null; - try { - up = sendGet("https://api.telegram.org/bot" + Main.data.token + "/getUpdates?offset=" + (lastUpdate + 1)); - } catch (IOException e) { - return false; - } - if(up == null){ - return false; - } - if(up.has("result")){ - for (JsonElement ob : up.getAsJsonArray("result")) { - if (ob.isJsonObject()) { - JsonObject obj = (JsonObject) ob; - if(obj.has("update_id")){ - lastUpdate = obj.get("update_id").getAsInt(); - } - if (obj.has("message")) { - JsonObject chat = obj.getAsJsonObject("message").getAsJsonObject("chat"); - if(chat.get("type").getAsString().equals("private")){ - int id = chat.get("id").getAsInt(); - if(!Main.data.ids.contains(id)) Main.data.ids.add(id); - - if(obj.getAsJsonObject("message").has("text")){ - String text = obj.getAsJsonObject("message").get("text").getAsString(); - for(char c : text.toCharArray()){ - /*if((int) c == 55357){ - this.sendMsg(id, "Emoticons are not allowed, sorry!"); - return true; - }*/ - - } - if(text.length() == 0) return true; - if(text.equals("/start")){ - if(Main.data.firstUse){ - Main.data.firstUse = false; - Chat chat2 = new Chat(); - chat2.chat_id = id; - chat2.parse_mode = "Markdown"; - chat2.text = "Congratulations, your bot is working! Have fun with this Plugin. Feel free to donate via *PayPal* to keep this project up to date! [PayPal Donation URL](http://donate.spaceio.xyz/)"; - this.sendMsg(chat2); - } - this.sendMsg(id, "You can see the chat but you can't chat at the moment. Type */linktelegram ingame* to chat!"); - }else - if(Main.data.linkCodes.containsKey(text)){ - //LINK - Main.link(Main.data.linkCodes.get(text), id); - Main.data.linkCodes.remove(text); - }else if(Main.data.linkedChats.containsKey(id)){ - ChatMessageToMc chatMsg = new ChatMessageToMc(Main.data.linkedChats.get(id), text, id); - for(TelegramActionListener actionListener : listeners){ - actionListener.onSendToMinecraft(chatMsg); - } - - Main.sendToMC(chatMsg); - }else{ - this.sendMsg(id, "Sorry, please link your account with */linktelegram ingame* to use the chat!"); - } - } - - }else if(chat.get("type").getAsString().equals("group")){ - int id = chat.get("id").getAsInt(); - if(!Main.data.ids.contains(id)) - Main.data.ids.add(id); - } - } - - } - } - } - return true; - } - - public void sendMsg(int id, String msg){ - Chat chat = new Chat(); - chat.chat_id = id; - chat.text = msg; - sendMsg(chat); - } - public void sendMsg(Chat chat){ - for(TelegramActionListener actionListener : listeners){ - actionListener.onSendToTelegram(chat); - } - Gson gson = new Gson(); - - post("sendMessage", gson.toJson(chat, Chat.class)); - - } - public void sendAll(final Chat chat){ - new Thread(new Runnable(){ - public void run(){ - Gson gson = new Gson(); - for(int id : Main.data.ids){ - chat.chat_id = id; - //post("sendMessage", gson.toJson(chat, Chat.class)); - sendMsg(chat); - } - } - }).start(); - } - public void post(String method, String json){ - try { - String body = json; - URL url = new URL("https://api.telegram.org/bot" + Main.data.token + "/" + method); - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setRequestMethod("POST"); - connection.setDoInput(true); - connection.setDoOutput(true); - connection.setUseCaches(false); - connection.setRequestProperty("Content-Type", "application/json; ; Charset=UTF-8"); - connection.setRequestProperty("Content-Length", String.valueOf(body.length())); - - - DataOutputStream wr = new DataOutputStream(connection.getOutputStream()); - BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(wr, "UTF-8")); - writer.write(body); - writer.close(); - wr.close(); - - //OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream()); - //writer.write(body); - //writer.flush(); - - BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); - - for (String line; (line = reader.readLine()) != null;) { - - } - - writer.close(); - reader.close(); - } catch (Exception e) { - reconnect(); - System.out.print("[Telegram] Disconnected from Telegram, reconnect..."); - } - - } - - public JsonObject sendGet(String url) throws IOException { - String a = url; - URL url2 = new URL(a); - URLConnection conn = url2.openConnection(); - - BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); - - String all = ""; - String inputLine; - while ((inputLine = br.readLine()) != null) { - all += inputLine; - } - - br.close(); - JsonParser parser = new JsonParser(); - return parser.parse(all).getAsJsonObject(); - - } -} +package de.Linus122.TelegramChat; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLConnection; +import java.util.ArrayList; +import java.util.List; + +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; + +import de.Linus122.TelegramComponents.Chat; +import de.Linus122.TelegramComponents.ChatMessageToMc; + +public class Telegram { + public JsonObject authJson; + public boolean connected = false; + + static int lastUpdate = 0; + public String token; + + private List listeners = new ArrayList(); + + private final String API_URL_GETME = "https://api.telegram.org/bot%s/getMe"; + private final String API_URL_GETUPDATES = "https://api.telegram.org/bot%s/getUpdates?offset=%d"; + private final String API_URL_GENERAL = "https://api.telegram.org/bot%s/%s"; + + public void addListener(TelegramActionListener actionListener) { + listeners.add(actionListener); + } + + public boolean auth(String token) { + this.token = token; + return reconnect(); + } + + public boolean reconnect() { + try { + JsonObject obj = sendGet(String.format(API_URL_GETME, token)); + authJson = obj; + System.out.print("[Telegram] Established a connection with the telegram servers."); + connected = true; + return true; + } catch (Exception e) { + connected = false; + System.out.print("[Telegram] Sorry, but could not connect to Telegram servers. The token could be wrong."); + return false; + } + } + + public boolean getUpdate() { + JsonObject up = null; + try { + up = sendGet(String.format(API_URL_GETUPDATES, Main.getBackend().getToken(), lastUpdate + 1)); + } catch (IOException e) { + return false; + } + if (up == null) { + return false; + } + if (up.has("result")) { + for (JsonElement ob : up.getAsJsonArray("result")) { + if (ob.isJsonObject()) { + JsonObject obj = (JsonObject) ob; + if (obj.has("update_id")) { + lastUpdate = obj.get("update_id").getAsInt(); + } + if (obj.has("message")) { + JsonObject chat = obj.getAsJsonObject("message").getAsJsonObject("chat"); + if (chat.get("type").getAsString().equals("private")) { + int id = chat.get("id").getAsInt(); + if (!Main.getBackend().ids.contains(id)) + Main.getBackend().ids.add(id); + + if (obj.getAsJsonObject("message").has("text")) { + String text = obj.getAsJsonObject("message").get("text").getAsString(); + if (text.length() == 0) + return true; + if (text.equals("/start")) { + if (Main.getBackend().isFirstUse()) { + Main.getBackend().setFirstUse(false); + Chat chat2 = new Chat(); + chat2.chat_id = id; + chat2.parse_mode = "Markdown"; + chat2.text = Utils.formatMSG("setup-msg")[0]; + this.sendMsg(chat2); + } + this.sendMsg(id, Utils.formatMSG("can-see-but-not-chat")[0]); + } else if (Main.getBackend().getLinkCodes().containsKey(text)) { + // LINK + Main.link(Main.getBackend().getUUIDFromLinkCode(text), id); + Main.getBackend().removeLinkCode(text); + } else if (Main.getBackend().getLinkedChats().containsKey(id)) { + ChatMessageToMc chatMsg = new ChatMessageToMc( + Main.getBackend().getUUIDFromChatID(id), text, id); + for (TelegramActionListener actionListener : listeners) { + actionListener.onSendToMinecraft(chatMsg); + } + + Main.sendToMC(chatMsg); + } else { + this.sendMsg(id, Utils.formatMSG("need-to-link")[0]); + } + } + + } else if (chat.get("type").getAsString().equals("group")) { + int id = chat.get("id").getAsInt(); + if (!Main.getBackend().ids.contains(id)) + Main.getBackend().ids.add(id); + } + } + + } + } + } + return true; + } + + public void sendMsg(int id, String msg) { + Chat chat = new Chat(); + chat.chat_id = id; + chat.text = msg; + sendMsg(chat); + } + + public void sendMsg(Chat chat) { + for (TelegramActionListener actionListener : listeners) { + actionListener.onSendToTelegram(chat); + } + Gson gson = new Gson(); + + post("sendMessage", gson.toJson(chat, Chat.class)); + + } + + public void sendAll(final Chat chat) { + new Thread(new Runnable() { + public void run() { + for (int id : Main.getBackend().ids) { + chat.chat_id = id; + // post("sendMessage", gson.toJson(chat, Chat.class)); + sendMsg(chat); + } + } + }).start(); + } + + public void post(String method, String json) { + try { + String body = json; + URL url = new URL(String.format(API_URL_GENERAL, Main.getBackend().getToken(), method)); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("POST"); + connection.setDoInput(true); + connection.setDoOutput(true); + connection.setUseCaches(false); + connection.setRequestProperty("Content-Type", "application/json; ; Charset=UTF-8"); + connection.setRequestProperty("Content-Length", String.valueOf(body.length())); + + DataOutputStream wr = new DataOutputStream(connection.getOutputStream()); + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(wr, "UTF-8")); + writer.write(body); + writer.close(); + wr.close(); + + BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); + + writer.close(); + reader.close(); + } catch (Exception e) { + reconnect(); + System.out.print("[Telegram] Disconnected from Telegram, reconnect..."); + } + + } + + public JsonObject sendGet(String url) throws IOException { + String a = url; + URL url2 = new URL(a); + URLConnection conn = url2.openConnection(); + + BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); + + String all = ""; + String inputLine; + while ((inputLine = br.readLine()) != null) { + all += inputLine; + } + + br.close(); + JsonParser parser = new JsonParser(); + return parser.parse(all).getAsJsonObject(); + + } + +} diff --git a/src/main/java/de/Linus122/TelegramChat/TelegramActionListener.java b/src/main/java/de/Linus122/TelegramChat/TelegramActionListener.java index bdf4ebe..dae4004 100644 --- a/src/main/java/de/Linus122/TelegramChat/TelegramActionListener.java +++ b/src/main/java/de/Linus122/TelegramChat/TelegramActionListener.java @@ -5,5 +5,6 @@ import de.Linus122.TelegramComponents.ChatMessageToMc; public interface TelegramActionListener { public void onSendToTelegram(Chat chat); + public void onSendToMinecraft(ChatMessageToMc chatMsg); } diff --git a/src/main/java/de/Linus122/TelegramChat/TelegramCmd.java b/src/main/java/de/Linus122/TelegramChat/TelegramCmd.java index 0db0e31..9a42265 100755 --- a/src/main/java/de/Linus122/TelegramChat/TelegramCmd.java +++ b/src/main/java/de/Linus122/TelegramChat/TelegramCmd.java @@ -1,36 +1,37 @@ -package de.Linus122.TelegramChat; - -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; - -public class TelegramCmd implements CommandExecutor { - - @Override - public boolean onCommand(CommandSender cs, Command arg1, String arg2, String[] args) { - if(!cs.hasPermission("telegram.settoken")){ - cs.sendMessage("§cYou don't have permissions to use this!"); - return true; - } - if(args.length == 0){ - cs.sendMessage("§c/telegram [token]"); - return true; - } - if(Main.data == null){ - Main.data = new Data(); - } - Main.data.token = args[0]; - Main.save(); - boolean success = false; - - success = Main.telegramHook.auth(Main.data.token); - if(success){ - cs.sendMessage("§cSuccessfully connected to Telegram!"); - cs.sendMessage("§aAdd " + Main.telegramHook.authJson.getAsJsonObject("result").get("username").getAsString() + " to Telegram!"); - }else{ - cs.sendMessage("§cWrong token. Paste in the whole token!"); - } - return true; - } - -} +package de.Linus122.TelegramChat; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; + +public class TelegramCmd implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender cs, Command arg1, String arg2, String[] args) { + if (!cs.hasPermission("telegram.settoken")) { + cs.sendMessage("§cYou don't have permissions to use this!"); + return true; + } + if (args.length == 0) { + cs.sendMessage("§c/telegram [token]"); + return true; + } + if (Main.getBackend() == null) { + Main.initBackend(); + } + Main.getBackend().setToken(args[0]); + Main.save(); + boolean success = false; + + success = Main.telegramHook.auth(Main.getBackend().getToken()); + if (success) { + cs.sendMessage("§cSuccessfully connected to Telegram!"); + cs.sendMessage("§aAdd " + Main.telegramHook.authJson.getAsJsonObject("result").get("username").getAsString() + + " to Telegram!"); + } else { + cs.sendMessage("§cWrong token. Paste in the whole token!"); + } + return true; + } + +} diff --git a/src/main/java/de/Linus122/TelegramChat/Utils.java b/src/main/java/de/Linus122/TelegramChat/Utils.java new file mode 100644 index 0000000..ba72210 --- /dev/null +++ b/src/main/java/de/Linus122/TelegramChat/Utils.java @@ -0,0 +1,31 @@ +package de.Linus122.TelegramChat; + +import org.bukkit.configuration.file.FileConfiguration; + +public class Utils { + public static String escape(String str) { + return str.replace("_", "\\_"); + } + + public static FileConfiguration cfg; + + final static String MESSAGE_SECTION = "messages"; + + public static String[] formatMSG(String suffixKey) { + return formatMSG(suffixKey, ""); + } + + public static String[] formatMSG(String suffixKey, Object... args) { + String key = MESSAGE_SECTION + "." + suffixKey; + if (!cfg.contains(key)) + return new String[] { + "Message not found in config.yml. Please check your config if the following key is present:", key }; + String rawMessage = cfg.getString(key); + if (args != null && args.length > 0) + rawMessage = String.format(rawMessage, args); + rawMessage = rawMessage.replace("&", "§"); + + return rawMessage.split("\\n"); + + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 746d49f..519c210 100755 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,4 +1,19 @@ -chat-format: '&c[Telegram]&r %player%: %message%' -enable-joinquitmessages: true -enable-deathmessages: true -enable-chatmessages: true \ No newline at end of file +messages: + # telegram messages + general-message-to-mc: "&c[Telegram]&r %s: %s" + join-message: "`%s joined the game.`" + quit-message: "`%s left the game.`" + death-message: "`%s`" + need-to-link: "Sorry, please link your account with */linktelegram ingame* to use the chat!" + can-see-but-not-chat: "You can see the chat but you can't chat at the moment. Type */linktelegram ingame* to chat!" + success-linked: "Success! Linked %s" + setup-msg: "Congratulations, your bot is working! Have fun with this Plugin. Feel free to donate via *PayPal* to keep this project up to date! [PayPal Donation URL](http://donate.spaceio.xyz/)" + # minecraft message: + general-message-to-telegram: "%s: %s" + no-permissions: "&cYou don't have permissions to use this!" + cant-link-console: "&cSorry, but you can't link the console currently." + need-to-add-bot-first: "&cPlease add a bot to your server first! /telegram" + get-token: "&aAdd %s to Telegram and send this message to %s: \n%s" +enable-joinquitmessages: true +enable-deathmessages: true +enable-chatmessages: true