TelegramChat/src/main/java/de/Linus122/TelegramChat/TelegramChat.java

265 lines
7.2 KiB
Java
Executable File

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.List;
import java.util.Random;
import java.util.UUID;
import java.util.logging.Level;
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.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.Handlers.CommandHandler;
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();
}
}, 10L, 10L);
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 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;
}
}