diff --git a/src/de/mrbesen/telegram/TelegramAPI.java b/src/de/mrbesen/telegram/TelegramAPI.java index d68baf0..9f6f86d 100644 --- a/src/de/mrbesen/telegram/TelegramAPI.java +++ b/src/de/mrbesen/telegram/TelegramAPI.java @@ -16,15 +16,16 @@ import de.mrbesen.telegram.event.Event; import de.mrbesen.telegram.event.EventManager; import de.mrbesen.telegram.event.events.UserSendAudioEvent; import de.mrbesen.telegram.event.events.UserSendMessageEvent; -import objects.TMessage; -import objects.TUser; -import objects.JSONBased.Member; -import objects.TAudio; +import de.mrbesen.telegram.objects.TAudio; +import de.mrbesen.telegram.objects.TMessage; +import de.mrbesen.telegram.objects.TUser; +import de.mrbesen.telegram.objects.JSONBased.Member; public class TelegramAPI implements Runnable { private static final String API_URL = "https://api.telegram.org/bot"; - private static final String TOKENREGEX = "^\\d{4,9}:[\\w-]{12,64}$"; + private static final String TOKENREGEX = "^\\d{4,9}:[\\w-]{12,64}$"; + public static final String APIVERSION = "3.6";//February 13, 2018 private int msg_offset = 0; private int updateInterval = 1500; diff --git a/src/de/mrbesen/telegram/commands/CommandHandler.java b/src/de/mrbesen/telegram/commands/CommandHandler.java index 381fbe4..08b629c 100644 --- a/src/de/mrbesen/telegram/commands/CommandHandler.java +++ b/src/de/mrbesen/telegram/commands/CommandHandler.java @@ -1,6 +1,6 @@ package de.mrbesen.telegram.commands; -import objects.TUser; +import de.mrbesen.telegram.objects.TUser; public interface CommandHandler { diff --git a/src/de/mrbesen/telegram/commands/CommandManager.java b/src/de/mrbesen/telegram/commands/CommandManager.java index 9fdf648..30bf3fc 100644 --- a/src/de/mrbesen/telegram/commands/CommandManager.java +++ b/src/de/mrbesen/telegram/commands/CommandManager.java @@ -3,7 +3,7 @@ package de.mrbesen.telegram.commands; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; -import objects.TUser; +import de.mrbesen.telegram.objects.TUser; public class CommandManager { diff --git a/src/de/mrbesen/telegram/event/Event.java b/src/de/mrbesen/telegram/event/Event.java index 2235cc0..c7674c1 100644 --- a/src/de/mrbesen/telegram/event/Event.java +++ b/src/de/mrbesen/telegram/event/Event.java @@ -1,6 +1,6 @@ package de.mrbesen.telegram.event; -import objects.TUser; +import de.mrbesen.telegram.objects.TUser; public class Event { diff --git a/src/de/mrbesen/telegram/event/events/UserSendAudioEvent.java b/src/de/mrbesen/telegram/event/events/UserSendAudioEvent.java index 9322c85..d4c580c 100644 --- a/src/de/mrbesen/telegram/event/events/UserSendAudioEvent.java +++ b/src/de/mrbesen/telegram/event/events/UserSendAudioEvent.java @@ -1,8 +1,8 @@ package de.mrbesen.telegram.event.events; import de.mrbesen.telegram.event.Event; -import objects.TAudio; -import objects.TUser; +import de.mrbesen.telegram.objects.TAudio; +import de.mrbesen.telegram.objects.TUser; public class UserSendAudioEvent extends Event { diff --git a/src/de/mrbesen/telegram/event/events/UserSendMessageEvent.java b/src/de/mrbesen/telegram/event/events/UserSendMessageEvent.java index 4eecad1..d9f96db 100644 --- a/src/de/mrbesen/telegram/event/events/UserSendMessageEvent.java +++ b/src/de/mrbesen/telegram/event/events/UserSendMessageEvent.java @@ -1,8 +1,8 @@ package de.mrbesen.telegram.event.events; import de.mrbesen.telegram.event.Event; -import objects.TMessage; -import objects.TUser; +import de.mrbesen.telegram.objects.TMessage; +import de.mrbesen.telegram.objects.TUser; public class UserSendMessageEvent extends Event { diff --git a/src/objects/JSONBased.java b/src/de/mrbesen/telegram/objects/JSONBased.java similarity index 56% rename from src/objects/JSONBased.java rename to src/de/mrbesen/telegram/objects/JSONBased.java index 74ee5d7..7915b16 100644 --- a/src/objects/JSONBased.java +++ b/src/de/mrbesen/telegram/objects/JSONBased.java @@ -1,18 +1,21 @@ -package objects; +package de.mrbesen.telegram.objects; import org.json.JSONObject; public class JSONBased { private JSONObject base_json = null; - - public JSONBased(JSONObject o) { - base_json = o; + protected Member[] allowedmembers = {}; + + public JSONBased(JSONObject json) { + base_json = json; } public boolean has(Member mem) { if(base_json == null) return false; + if(!isAllowd(mem)) + throw new UnallowedMemberException(mem, this); return base_json.has(mem.name()); } @@ -22,6 +25,15 @@ public class JSONBased { return base_json.get(mem.name()); } + public boolean isAllowd(Member mem) { + for(Member allowedmem : allowedmembers) { + if(allowedmem == mem) { + return true; + } + } + return false; + } + public enum Member { // ===== MESSAGE ==== @@ -63,8 +75,29 @@ public class JSONBased { //==== AUDIO ====== performer, //String title,//String - mime_type, // String - file_size; // int + mime_type, // String - also used for Documents, PhotoSize & video + file_size, // int - also used for Documents, File & video //===== END AUDIO ==== + + //=====Document===== + thumb, //PhotoSize - also used in Video + file_name,//String + //=====END Document===== + + //===== VENUE ==== + foursquare_id, //String + //===== END VENUE ==== + + //===== FILE ===== + file_path, // String + //===== END FILE ===== + } + + private class UnallowedMemberException extends RuntimeException { + private static final long serialVersionUID = -253424139568749269L; + + public UnallowedMemberException(Member mem, JSONBased b) { + super(b.getClass().getSimpleName() + " does not allow member " + mem.name()); + } } } diff --git a/src/de/mrbesen/telegram/objects/TAudio.java b/src/de/mrbesen/telegram/objects/TAudio.java new file mode 100644 index 0000000..ac2866f --- /dev/null +++ b/src/de/mrbesen/telegram/objects/TAudio.java @@ -0,0 +1,19 @@ +package de.mrbesen.telegram.objects; + +import org.json.JSONObject; + +import de.mrbesen.telegram.objects.JSONBased.Member; + +public class TAudio extends TDocument { + private int duration; + + public TAudio(JSONObject o) { + super(o); + duration = o.getInt("duration"); + allowedmembers = new Member[] {Member.performer, Member.title, Member.mime_type, Member.file_size}; + } + + public int getDuration() { + return duration; + } +} diff --git a/src/de/mrbesen/telegram/objects/TDocument.java b/src/de/mrbesen/telegram/objects/TDocument.java new file mode 100644 index 0000000..78213dc --- /dev/null +++ b/src/de/mrbesen/telegram/objects/TDocument.java @@ -0,0 +1,19 @@ +package de.mrbesen.telegram.objects; + +import org.json.JSONObject; + +public class TDocument extends JSONBased { + + private String file_id; + + public TDocument(JSONObject o) { + super(o); + file_id = o.getString("file_id"); + allowedmembers = new Member[] {Member.thumb, Member.file_name, Member.mime_type, Member.file_size}; + } + + public String getFile_id() { + return file_id; + } + +} diff --git a/src/de/mrbesen/telegram/objects/TFile.java b/src/de/mrbesen/telegram/objects/TFile.java new file mode 100644 index 0000000..659bfbf --- /dev/null +++ b/src/de/mrbesen/telegram/objects/TFile.java @@ -0,0 +1,11 @@ +package de.mrbesen.telegram.objects; + +import org.json.JSONObject; + +public class TFile extends TDocument { + + public TFile(JSONObject json) { + super(json); + allowedmembers = new Member[] {Member.file_size, Member.file_path}; + } +} diff --git a/src/objects/TInlineKeyboardMarkup.java b/src/de/mrbesen/telegram/objects/TInlineKeyboardMarkup.java similarity index 95% rename from src/objects/TInlineKeyboardMarkup.java rename to src/de/mrbesen/telegram/objects/TInlineKeyboardMarkup.java index 7cfcba8..f8ebf09 100644 --- a/src/objects/TInlineKeyboardMarkup.java +++ b/src/de/mrbesen/telegram/objects/TInlineKeyboardMarkup.java @@ -1,4 +1,4 @@ -package objects; +package de.mrbesen.telegram.objects; import java.util.ArrayList; diff --git a/src/de/mrbesen/telegram/objects/TLocation.java b/src/de/mrbesen/telegram/objects/TLocation.java new file mode 100644 index 0000000..956d287 --- /dev/null +++ b/src/de/mrbesen/telegram/objects/TLocation.java @@ -0,0 +1,21 @@ +package de.mrbesen.telegram.objects; + +import org.json.JSONObject; + +public class TLocation { + + private float longitude, latitude; + + public TLocation(JSONObject json) { + longitude = json.getFloat("longitude"); + latitude = json.getFloat("latitude"); + } + + public float getLongitude() { + return longitude; + } + + public float getLatitude() { + return latitude; + } +} diff --git a/src/objects/TMessage.java b/src/de/mrbesen/telegram/objects/TMessage.java similarity index 55% rename from src/objects/TMessage.java rename to src/de/mrbesen/telegram/objects/TMessage.java index f2fab44..98dda03 100644 --- a/src/objects/TMessage.java +++ b/src/de/mrbesen/telegram/objects/TMessage.java @@ -1,4 +1,4 @@ -package objects; +package de.mrbesen.telegram.objects; import org.json.JSONObject; @@ -31,6 +31,7 @@ public class TMessage extends JSONBased { if(json.has("text") ) text = json.getString("text"); + allowedmembers = new Member[] {Member.forward_from_message_id, Member.forward_signature, Member.forward_date, Member.reply_to_message, Member.edit_date, Member.media_group_id, Member.author_signature, Member.author_signature, Member.audio, Member.document, Member.game, Member.photo, Member.sticker, Member.video, Member.voice, Member.video_note, Member.caption, Member.contact, Member.location, Member.venue, Member.new_chat_members, Member.left_chat_members, Member.new_chat_title, Member.new_chat_photo, Member.delete_chat_photo, Member.group_chat_created, Member.supergroup_chat_created, Member.channel_chat_created, Member.migrate_from_chat_id, Member.migrate_to_chat_id, Member.pinned_message, Member.invoice, Member.successful_payment, Member.connected_website}; } public TUser getFrom() { diff --git a/src/de/mrbesen/telegram/objects/TPhotoSize.java b/src/de/mrbesen/telegram/objects/TPhotoSize.java new file mode 100644 index 0000000..d73cb75 --- /dev/null +++ b/src/de/mrbesen/telegram/objects/TPhotoSize.java @@ -0,0 +1,25 @@ +package de.mrbesen.telegram.objects; + +import org.json.JSONObject; + +import de.mrbesen.telegram.objects.JSONBased.Member; + +public class TPhotoSize extends TDocument { + + private int width, height; + + public TPhotoSize(JSONObject json) { + super(json); + width = json.getInt("width"); + height = json.getInt("height"); + allowedmembers = new Member[] {Member.file_size}; + } + + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } +} diff --git a/src/objects/TReplyMarkup.java b/src/de/mrbesen/telegram/objects/TReplyMarkup.java similarity index 84% rename from src/objects/TReplyMarkup.java rename to src/de/mrbesen/telegram/objects/TReplyMarkup.java index dc51396..4017aaf 100644 --- a/src/objects/TReplyMarkup.java +++ b/src/de/mrbesen/telegram/objects/TReplyMarkup.java @@ -1,4 +1,4 @@ -package objects; +package de.mrbesen.telegram.objects; public interface TReplyMarkup { diff --git a/src/objects/TUser.java b/src/de/mrbesen/telegram/objects/TUser.java similarity index 86% rename from src/objects/TUser.java rename to src/de/mrbesen/telegram/objects/TUser.java index ba520a8..44afe29 100644 --- a/src/objects/TUser.java +++ b/src/de/mrbesen/telegram/objects/TUser.java @@ -1,4 +1,4 @@ -package objects; +package de.mrbesen.telegram.objects; import java.io.IOException; import java.net.URLEncoder; @@ -68,25 +68,19 @@ public class TUser { } public void sendMessage(String text) { - if(api == null) { - System.err.println("api == null!"); - return; - } - try { - api.request("sendMessage", "chat_id=" + id + "&text=" + URLEncoder.encode(text, "UTF-8")); - } catch (IOException e) { - e.printStackTrace(); - } + sendMessage(text, null); } + public void sendMessage(String text, TReplyMarkup rm) { if(api == null) { System.err.println("api == null!"); return; } try { + String reply= (rm == null ? "" : "&reply_markup=" + URLEncoder.encode(rm.toJSONString(), "UTF-8")); api.request("sendMessage", "chat_id=" + id + "&text=" + URLEncoder.encode(text, "UTF-8") - + "&reply_markup=" + URLEncoder.encode(rm.toJSONString(), "UTF-8") ); + + reply ); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/de/mrbesen/telegram/objects/TUserProfilePhotos.java b/src/de/mrbesen/telegram/objects/TUserProfilePhotos.java new file mode 100644 index 0000000..dcc0a4b --- /dev/null +++ b/src/de/mrbesen/telegram/objects/TUserProfilePhotos.java @@ -0,0 +1,28 @@ +package de.mrbesen.telegram.objects; + +import java.util.ArrayList; +import java.util.List; + +import org.json.JSONArray; +import org.json.JSONObject; + +public class TUserProfilePhotos { + + private List> photos = new ArrayList<>(); + + public TUserProfilePhotos(JSONObject json) { + JSONArray arr = json.getJSONArray("photos"); + for(int i = 0; !arr.isNull(i); i++) { + JSONArray ar = arr.getJSONArray(i); + List insert = new ArrayList<>(); + for(int j = 0; !ar.isNull(j); j++) { + insert.add(new TPhotoSize(ar.getJSONObject(j))); + } + photos.add(insert); + } + } + + public int getLength() { + return photos.size(); + } +} diff --git a/src/de/mrbesen/telegram/objects/TVenue.java b/src/de/mrbesen/telegram/objects/TVenue.java new file mode 100644 index 0000000..e2a1cc5 --- /dev/null +++ b/src/de/mrbesen/telegram/objects/TVenue.java @@ -0,0 +1,29 @@ +package de.mrbesen.telegram.objects; + +import org.json.JSONObject; + +public class TVenue extends JSONBased { + + private TLocation location; + private String title, address; + + public TVenue(JSONObject json) { + super(json); + location = new TLocation(json.getJSONObject("location")); + title = json.getString("title"); + address = json.getString("address"); + allowedmembers = new Member[] {Member.foursquare_id}; + } + + public TLocation getLocation() { + return location; + } + + public String getTitle() { + return title; + } + + public String getAddress() { + return address; + } +} diff --git a/src/de/mrbesen/telegram/objects/TVideo.java b/src/de/mrbesen/telegram/objects/TVideo.java new file mode 100644 index 0000000..31e7b90 --- /dev/null +++ b/src/de/mrbesen/telegram/objects/TVideo.java @@ -0,0 +1,23 @@ +package de.mrbesen.telegram.objects; + +import org.json.JSONObject; + +public class TVideo extends TAudio { + + private int width, height; + + public TVideo(JSONObject o) { + super(o); + width = o.getInt("width"); + height = o.getInt("height"); + allowedmembers = new Member[] {Member.thumb, Member.mime_type, Member.file_size}; + } + + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } +} diff --git a/src/de/mrbesen/test/Main.java b/src/de/mrbesen/test/Main.java index 6419ef5..c14f14e 100644 --- a/src/de/mrbesen/test/Main.java +++ b/src/de/mrbesen/test/Main.java @@ -8,9 +8,9 @@ import de.mrbesen.telegram.commands.CommandHandler; import de.mrbesen.telegram.event.EventHandler; import de.mrbesen.telegram.event.EventListener; import de.mrbesen.telegram.event.events.UserSendMessageEvent; -import objects.TInlineKeyboardMarkup; -import objects.TUser; -import objects.TUser.Status; +import de.mrbesen.telegram.objects.TInlineKeyboardMarkup; +import de.mrbesen.telegram.objects.TUser; +import de.mrbesen.telegram.objects.TUser.Status; public class Main implements CommandHandler, Runnable, EventListener { diff --git a/src/objects/TAudio.java b/src/objects/TAudio.java deleted file mode 100644 index 0d04777..0000000 --- a/src/objects/TAudio.java +++ /dev/null @@ -1,12 +0,0 @@ -package objects; - -import org.json.JSONObject; - -public class TAudio extends JSONBased { - private String file_id; - private int duration; - - public TAudio(JSONObject o) { - super(o); - } -}