first commit
This commit is contained in:
commit
cb191b2a28
3
config.yml
Normal file
3
config.yml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
chat-format: '&c[Telegram]&r %player%: %message%'
|
||||||
|
enable-joinquitmessages: true
|
||||||
|
enable-deathmessages: true
|
16
de/Linus122/TelegramChat/Data.java
Normal file
16
de/Linus122/TelegramChat/Data.java
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
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<Integer, UUID> linkedChats = new HashMap<Integer, UUID>();
|
||||||
|
//Player name // RandomInt
|
||||||
|
public HashMap<String, UUID> linkCodes = new HashMap<String, UUID>();
|
||||||
|
public static List<Integer> ids = new ArrayList<Integer>();
|
||||||
|
boolean firstUse = true;
|
||||||
|
}
|
37
de/Linus122/TelegramChat/LinkTelegramCmd.java
Normal file
37
de/Linus122/TelegramChat/LinkTelegramCmd.java
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
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("<EFBFBD>cSorry, but you can't link the console currently.");
|
||||||
|
}
|
||||||
|
if(!cs.hasPermission("telegram.linktelegram")){
|
||||||
|
cs.sendMessage("<EFBFBD>cYou don't have permissions to use this!");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(Main.data == null){
|
||||||
|
Main.data = new Data();
|
||||||
|
}
|
||||||
|
if(Telegram.authJson == null){
|
||||||
|
cs.sendMessage("<EFBFBD>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("<EFBFBD>aAdd " + Telegram.authJson.getAsJsonObject("result").get("username").getAsString() + " to Telegram and send this message to " + Telegram.authJson.getAsJsonObject("result").get("username").getAsString() + ":");
|
||||||
|
cs.sendMessage("<EFBFBD>c" + token);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
163
de/Linus122/TelegramChat/Main.java
Normal file
163
de/Linus122/TelegramChat/Main.java
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
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.TelegramComponents.Chat;
|
||||||
|
|
||||||
|
|
||||||
|
public class Main extends JavaPlugin implements Listener{
|
||||||
|
File datad = new File("plugins/TelegramChat/data.json");
|
||||||
|
public static FileConfiguration cfg;
|
||||||
|
|
||||||
|
public static Data data = new Data();
|
||||||
|
static Plugin pl;
|
||||||
|
@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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Telegram.auth();
|
||||||
|
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable(){
|
||||||
|
public void run(){
|
||||||
|
if(Telegram.connected){
|
||||||
|
Telegram.getupdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 20L, 20L);
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onDisable(){
|
||||||
|
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 void sendToMC(UUID uuid, String msg, int sender){
|
||||||
|
OfflinePlayer op = Bukkit.getOfflinePlayer(uuid);
|
||||||
|
List<Integer> recievers = new ArrayList<Integer>();
|
||||||
|
recievers.addAll(Main.data.ids);
|
||||||
|
recievers.remove((Object) sender);
|
||||||
|
String msgF = Main.cfg.getString("chat-format").replace('&', '<27>').replace("%player%", op.getName()).replace("%message%", msg);
|
||||||
|
for(int id : recievers){
|
||||||
|
Telegram.sendMsg(id, msgF);
|
||||||
|
}
|
||||||
|
Bukkit.broadcastMessage(msgF);
|
||||||
|
|
||||||
|
}
|
||||||
|
public static void link(UUID player, int chatID){
|
||||||
|
Main.data.linkedChats.put(chatID, player);
|
||||||
|
OfflinePlayer p = Bukkit.getOfflinePlayer(player);
|
||||||
|
Telegram.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(Telegram.connected){
|
||||||
|
Chat chat = new Chat();
|
||||||
|
chat.parse_mode = "Markdown";
|
||||||
|
chat.text = "`" + e.getPlayer().getName() + " joined the game.`";
|
||||||
|
Telegram.sendAll(chat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@EventHandler
|
||||||
|
public void onDeath(PlayerDeathEvent e){
|
||||||
|
if(!this.getConfig().getBoolean("enable-deathmessages")) return;
|
||||||
|
if(Telegram.connected){
|
||||||
|
Chat chat = new Chat();
|
||||||
|
chat.parse_mode = "Markdown";
|
||||||
|
chat.text = "`"+e.getDeathMessage() + "`";
|
||||||
|
Telegram.sendAll(chat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@EventHandler
|
||||||
|
public void onQuit(PlayerQuitEvent e){
|
||||||
|
if(!this.getConfig().getBoolean("enable-joinquitmessages")) return;
|
||||||
|
if(Telegram.connected){
|
||||||
|
Chat chat = new Chat();
|
||||||
|
chat.parse_mode = "Markdown";
|
||||||
|
chat.text = "`" + e.getPlayer().getName() + " left the game.`";
|
||||||
|
System.out.println(chat.text);
|
||||||
|
Telegram.sendAll(chat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@EventHandler
|
||||||
|
public void onChat(AsyncPlayerChatEvent e){
|
||||||
|
if(Telegram.connected){
|
||||||
|
Chat chat = new Chat();
|
||||||
|
chat.parse_mode = "Markdown";
|
||||||
|
chat.text = e.getPlayer().getName() + ": _" + e.getMessage() + "_";
|
||||||
|
Telegram.sendAll(chat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
189
de/Linus122/TelegramChat/Telegram.java
Normal file
189
de/Linus122/TelegramChat/Telegram.java
Normal file
@ -0,0 +1,189 @@
|
|||||||
|
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 com.google.gson.Gson;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonParser;
|
||||||
|
|
||||||
|
import de.Linus122.TelegramComponents.Chat;
|
||||||
|
|
||||||
|
|
||||||
|
public class Telegram {
|
||||||
|
public static JsonObject authJson;
|
||||||
|
public static boolean connected = false;
|
||||||
|
|
||||||
|
|
||||||
|
static int lastUpdate = 0;
|
||||||
|
public static boolean auth(){
|
||||||
|
try{
|
||||||
|
JsonObject obj = sendGet("https://api.telegram.org/bot" + Main.data.token + "/getMe");
|
||||||
|
authJson = obj;
|
||||||
|
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 static void getupdate(){
|
||||||
|
|
||||||
|
JsonObject up = null;
|
||||||
|
try {
|
||||||
|
|
||||||
|
up = sendGet("https://api.telegram.org/bot" + Main.data.token + "/getUpdates?offset=" + (lastUpdate + 1));
|
||||||
|
|
||||||
|
} catch (IOException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
if(up == null){
|
||||||
|
auth();
|
||||||
|
}
|
||||||
|
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){
|
||||||
|
Telegram.sendMsg(id, "Emoticons are not allowed, sorry!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(text.length() == 0) return;
|
||||||
|
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 me if you like TelegramChat! [PayPal Donation URL](https://goo.gl/I02XGH)";
|
||||||
|
Telegram.sendMsg(chat2);
|
||||||
|
}
|
||||||
|
Telegram.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)){
|
||||||
|
Main.sendToMC(Main.data.linkedChats.get(id), text, id);
|
||||||
|
}else{
|
||||||
|
Telegram.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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void sendMsg(int id, String msg){
|
||||||
|
Gson gson = new Gson();
|
||||||
|
Chat chat = new Chat();
|
||||||
|
chat.chat_id = id;
|
||||||
|
chat.text = msg;
|
||||||
|
post("sendMessage", gson.toJson(chat, Chat.class));
|
||||||
|
|
||||||
|
}
|
||||||
|
public static void sendMsg(Chat chat){
|
||||||
|
Gson gson = new Gson();
|
||||||
|
post("sendMessage", gson.toJson(chat, Chat.class));
|
||||||
|
|
||||||
|
}
|
||||||
|
public static 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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
public static 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) {
|
||||||
|
auth();
|
||||||
|
System.out.print("[Telegram] Disconnected from Telegram, reconnect...");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static 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();
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
35
de/Linus122/TelegramChat/TelegramCmd.java
Normal file
35
de/Linus122/TelegramChat/TelegramCmd.java
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
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("<EFBFBD>cYou don't have permissions to use this!");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(args.length == 0){
|
||||||
|
cs.sendMessage("<EFBFBD>c/telegram [token]");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(Main.data == null){
|
||||||
|
Main.data = new Data();
|
||||||
|
}
|
||||||
|
Main.data.token = args[0];
|
||||||
|
boolean success = false;
|
||||||
|
|
||||||
|
success = Telegram.auth();
|
||||||
|
if(success){
|
||||||
|
cs.sendMessage("<EFBFBD>cSuccessfully connected to Telegram!");
|
||||||
|
cs.sendMessage("<EFBFBD>aAdd " + Telegram.authJson.getAsJsonObject("result").get("username").getAsString() + " to Telegram!");
|
||||||
|
}else{
|
||||||
|
cs.sendMessage("<EFBFBD>cWrong token. Paste in the whole token!");
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
7
de/Linus122/TelegramComponents/Chat.java
Normal file
7
de/Linus122/TelegramComponents/Chat.java
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
package de.Linus122.TelegramComponents;
|
||||||
|
|
||||||
|
public class Chat {
|
||||||
|
public String text;
|
||||||
|
public int chat_id;
|
||||||
|
public String parse_mode;
|
||||||
|
}
|
14
plugin.yml
Normal file
14
plugin.yml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
name: TelegramChat
|
||||||
|
main: de.Linus122.TelegramChat.Main
|
||||||
|
version: 1.0
|
||||||
|
authors: [Linus122]
|
||||||
|
description: Brings minecraft chat to Telegram!
|
||||||
|
commands:
|
||||||
|
telegram:
|
||||||
|
description: Main command
|
||||||
|
usage: /<command> [token]
|
||||||
|
permission: telegram.settoken
|
||||||
|
linktelegram:
|
||||||
|
description: Main command
|
||||||
|
usage: /<command>
|
||||||
|
permission: telegram.linktelegram
|
Loading…
Reference in New Issue
Block a user