diff --git a/TelegramAPI.iml b/TelegramAPI.iml
deleted file mode 100644
index ae3aec8..0000000
--- a/TelegramAPI.iml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 6e73e06..9b60b94 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
TelegramAPI
TelegramAPI
- 0.0.1-SNAPSHOT
+ 0.0.2
src/main/java
diff --git a/src/main/java/de/mrbesen/telegram/TelegramAPI.java b/src/main/java/de/mrbesen/telegram/TelegramAPI.java
index eecd862..c874903 100644
--- a/src/main/java/de/mrbesen/telegram/TelegramAPI.java
+++ b/src/main/java/de/mrbesen/telegram/TelegramAPI.java
@@ -39,7 +39,7 @@ 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 int TELEGRAMFILESIZELIMIT = 20000000;//20MB filesize https://core.telegram.org/bots/api#sending-files
- public static final String APIVERSION = "3.7";//February 7, 2019
+ public static final String APIVERSION = "3.8";//May 18, 2019
private int msg_offset = 0;
private int updateInterval = 1500;
diff --git a/src/main/java/de/mrbesen/telegram/commands/CommandManager.java b/src/main/java/de/mrbesen/telegram/commands/CommandManager.java
index ceb35eb..586aff2 100644
--- a/src/main/java/de/mrbesen/telegram/commands/CommandManager.java
+++ b/src/main/java/de/mrbesen/telegram/commands/CommandManager.java
@@ -7,12 +7,14 @@ import de.mrbesen.telegram.TelegramAPI;
import de.mrbesen.telegram.objects.TMessage;
import de.mrbesen.telegram.objects.TUser;
+import java.util.ArrayList;
+
public class CommandManager {
-
+
private final static String CMDPATTERN = "^[\\w-]+$";
private final TelegramAPI api;
- private Multimap handlerlist = ArrayListMultimap.create();//list of all registered CommandHandler
+ private ArrayList handlerlist = new ArrayList<>();//list of all registered CommandHandler
public CommandManager(TelegramAPI a) {
api = a;
@@ -32,8 +34,7 @@ public class CommandManager {
args = split[1].split(" ");
}
//call
-// System.out.println("cmd " + cmd + " args: " + args.length);
- for(ICommandHandler cmdhand : handlerlist.get(cmd)) {
+ for(ICommandHandler cmdhand : handlerlist) {
try {
if(cmdhand instanceof JSONCommandHandler) {
result = ((JSONCommandHandler) cmdhand).onCommand(sender, cmd, args, json);
@@ -53,26 +54,15 @@ public class CommandManager {
TUser.sendMessage(api, json.getChatID(), api.getHelpMessage(), null, 0, true, null);
}
}
-
+
+ public void registerCommand(ICommandHandler handler) {
+ registerCommand(null, handler);
+ }
+
public void registerCommand(String cmd, ICommandHandler handler) {
- if(cmd == null) {
- throw new NullPointerException("cmd is not allowed to be null");
- }
if(handler == null) {
throw new NullPointerException("handler is not allowed to be null");
}
- cmd = cmd.trim();
- if(cmd.startsWith("/")) {
- cmd = cmd.substring(1);
- }
- if(cmd.isEmpty()) {
- throw new RuntimeException("cmd is not allowed to be empty");
- }
- if(cmd.matches(CMDPATTERN)) {
- handlerlist.put(cmd.toLowerCase(), handler);
- //registered successfully!
- } else {
- throw new IllegalArgumentException("cmd contains unallowed characters. Allowed: a-zA-Z0-9_-");
- }
+ handlerlist.add(handler);
}
}
diff --git a/src/main/java/de/mrbesen/telegram/event/EventHandler.java b/src/main/java/de/mrbesen/telegram/event/EventHandler.java
deleted file mode 100644
index da814b3..0000000
--- a/src/main/java/de/mrbesen/telegram/event/EventHandler.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package de.mrbesen.telegram.event;
-
-import static java.lang.annotation.ElementType.METHOD;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target(METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface EventHandler {
-}
diff --git a/src/main/java/de/mrbesen/telegram/event/EventListener.java b/src/main/java/de/mrbesen/telegram/event/EventListener.java
index 1fcc528..d0cc7d4 100644
--- a/src/main/java/de/mrbesen/telegram/event/EventListener.java
+++ b/src/main/java/de/mrbesen/telegram/event/EventListener.java
@@ -1,5 +1,6 @@
package de.mrbesen.telegram.event;
-public interface EventListener {
+public interface EventListener {
+ public void handleEvent(T event);
}
diff --git a/src/main/java/de/mrbesen/telegram/event/EventManager.java b/src/main/java/de/mrbesen/telegram/event/EventManager.java
index 0f61732..f4f8f30 100644
--- a/src/main/java/de/mrbesen/telegram/event/EventManager.java
+++ b/src/main/java/de/mrbesen/telegram/event/EventManager.java
@@ -1,88 +1,47 @@
package de.mrbesen.telegram.event;
+import de.mrbesen.telegram.TelegramAPI;
+
+import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.util.ArrayList;
+import java.util.HashMap;
public class EventManager {
-
- private ArrayList listeners = new ArrayList();
- private ArrayList handler = new ArrayList();
-
+
+ private HashMap, ArrayList> listeners = new HashMap<>();
+
public EventManager() {}
-
- @SuppressWarnings("unchecked")
- public void registerEvent(EventListener listener) {
- if(listener == null) {
+
+ public void registerEvent(Class extends Event> eventtype, EventListener listener) {
+ if (listener == null) {
throw new NullPointerException();
}
- if(listeners.contains(listener)) {
- throw new RuntimeException("Listener is allready registered.");
- }
- listeners.add(listener);
- //scanning handler
- int found = 0;
- for(Method met : listener.getClass().getMethods()) {
- EventHandler h = met.getAnnotation(EventHandler.class);
- if(h != null) {//handler annotation vorhanden
- if(met.getParameterCount() == 1) {//only one parameter required
- Class> parameterclass = met.getParameters()[0].getType();
- if(Event.class.isAssignableFrom(parameterclass) ) {//the needed parameter is a Event-subclass)
- if(met.getReturnType().equals(void.class)) {
- if((met.getModifiers() & Method.PUBLIC) == Method.PUBLIC) {
- handler.add(new EventMethod((Class extends Event>) parameterclass, met, listener));
- found ++;
- }
- }
- } else {
- //warn / error?
- }
- } else {
- //warn?
- }
- }
- }
- if(found == 0) {
- System.err.println("no @EventHandler found!");
+ //get list
+ ArrayList list = listeners.get(eventtype);
+ if (list == null) {
+ list = new ArrayList();
+ listeners.put(eventtype, list);
+ } else if(list.contains(listener)) {
+ throw new IllegalArgumentException("listener allready registered");
}
+
+ list.add(listener);
}
public Event callEvent(Event e) {
if(e == null)
throw new NullPointerException("event is not allowed to be null!");
- for(EventMethod met : handler) {
+ ArrayList listner = listeners.get(e.getClass());
+ for(EventListener listn : listner) {
try {
- e = met.callEvent(e);
+ listn.handleEvent(e);
} catch(Throwable t) {
- System.err.println("Error while calling Event " + e.getClass().getSimpleName() + " at " + met.listener.getClass().getSimpleName() + ":" + met.met.getName());
+ System.err.println("Error occurred on Handling Event: " + e.getClass().getSimpleName());
t.printStackTrace();
}
}
return e;
}
-
- private class EventMethod {
- private EventListener listener;
- private Method met;
- private Class extends Event> eventtype;
-
- private EventMethod(Class extends Event> eventtype, Method m, EventListener list) {
- this.met = m;
- this.eventtype = eventtype;
- this.listener = list;
- }
-
- private Event callEvent(Event e) {
- if(eventtype.equals(e.getClass())) {
- try {
- met.invoke(listener, e);
- } catch(Throwable t) {
- System.err.println("Failed to invoke event! at " + listener.getClass().getSimpleName());
- t.printStackTrace();
- t.getCause().printStackTrace();
- }
- }
- return e;
- }
- }
}
diff --git a/src/main/java/de/mrbesen/test/Main.java b/src/main/java/de/mrbesen/test/Main.java
index 5e29f34..e57abfd 100644
--- a/src/main/java/de/mrbesen/test/Main.java
+++ b/src/main/java/de/mrbesen/test/Main.java
@@ -3,8 +3,8 @@ package de.mrbesen.test;
import java.util.Scanner;
import de.mrbesen.telegram.TelegramAPI;
-import de.mrbesen.telegram.event.EventHandler;
import de.mrbesen.telegram.event.EventListener;
+import de.mrbesen.telegram.event.events.UserCallbackEvent;
import de.mrbesen.telegram.event.events.UserSendMessageEvent;
import de.mrbesen.telegram.objects.TMessage;
import de.mrbesen.telegram.objects.TUser.Status;
@@ -13,7 +13,7 @@ import de.mrbesen.test.commands.ReplyKeyboardRemoveTC;
import de.mrbesen.test.commands.ReplyKeyboardTestCase;
import de.mrbesen.test.commands.SimpleTestCase;
-public class Main implements Runnable, EventListener {
+public class Main implements EventListener, Runnable {
TelegramAPI api;
private int action = 0;
@@ -24,17 +24,16 @@ public class Main implements Runnable, EventListener {
}
public Main() {
- String token = "577609137:AAGrlfMHAOQPzN6w9ceNSgFZZCbaiK4gAnw";
+ String token = "577609137:AAGrlfMHAOQPzN6w9ceNSgFZZCbaiK4gAnw";//test token
api = new TelegramAPI(token);
- api.getCommandManager().registerCommand("test", new SimpleTestCase());
- api.getCommandManager().registerCommand("inlinekb", new InlineKeyboardTC());
- api.getCommandManager().registerCommand("replykb", new ReplyKeyboardTestCase());
- api.getCommandManager().registerCommand("replykbrm", new ReplyKeyboardRemoveTC());
- api.getEventManager().registerEvent(this);
+ api.getCommandManager().registerCommand(new SimpleTestCase());
+ api.getCommandManager().registerCommand(new InlineKeyboardTC());
+ api.getCommandManager().registerCommand(new ReplyKeyboardTestCase());
+ api.getCommandManager().registerCommand(new ReplyKeyboardRemoveTC());
+ api.getEventManager().registerEvent(UserSendMessageEvent.class, this);
}
- @EventHandler
- public void eventbla(UserSendMessageEvent e) {
+ public void handleEvent(UserSendMessageEvent e) {
//api.sendMessage(new MessageBuilder().setText("this is a reply").setReciver(e.getUser().getID()).setSilent(true).setNoWebView(true).build());
if(oldmsg != null) {