Initial
This commit is contained in:
revīzija
5f7eaaabf2
|
@ -0,0 +1,5 @@
|
|||
.classpath
|
||||
.project
|
||||
.settings/
|
||||
target/
|
||||
bin/
|
|
@ -0,0 +1,32 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>TelegramAPI</groupId>
|
||||
<artifactId>TelegramAPI</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<build>
|
||||
<sourceDirectory>src</sourceDirectory>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.5.1</version>
|
||||
<configuration>
|
||||
<source />
|
||||
<target />
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
<version>20.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.json</groupId>
|
||||
<artifactId>json</artifactId>
|
||||
<version>20180130</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
|
@ -0,0 +1,73 @@
|
|||
package de.mrbesen.telegram;
|
||||
|
||||
import org.json.JSONObject;
|
||||
|
||||
public class TelegramAPI implements Runnable {
|
||||
|
||||
private int delay = 1500;
|
||||
private String apikey;
|
||||
private Thread thread;
|
||||
private boolean run = true;
|
||||
private static final String api_url = "https://api.telegram.org/bot";
|
||||
|
||||
public TelegramAPI(String apikey) {
|
||||
this.apikey = apikey;
|
||||
}
|
||||
|
||||
public void setDelay(int d) {
|
||||
if(d < 0)
|
||||
throw new IllegalArgumentException("delay is not allowed to be negative.");
|
||||
delay = d;
|
||||
}
|
||||
|
||||
public int getDelay() {
|
||||
return delay;
|
||||
}
|
||||
|
||||
public void start() {
|
||||
if(thread == null) {
|
||||
run = true;
|
||||
thread = new Thread(this, "TelegramAPI");
|
||||
thread.start();
|
||||
} else {
|
||||
throw new IllegalStateException("Still Running.");
|
||||
}
|
||||
}
|
||||
|
||||
JSONObject request(String request) {
|
||||
String url = api_url + apikey + "/" + request;
|
||||
//do https stuff
|
||||
|
||||
return null;//error
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
run = false;
|
||||
thread.interrupt();
|
||||
Thread.yield();//try to not get into that loop
|
||||
while(isRunning()) {
|
||||
thread.interrupt();
|
||||
Thread.yield();
|
||||
try {
|
||||
Thread.sleep(10);
|
||||
} catch(InterruptedException e) {}
|
||||
}
|
||||
thread = null;
|
||||
}
|
||||
|
||||
public boolean isRunning() {
|
||||
return thread.isAlive();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
while(run) {
|
||||
//do stuff
|
||||
try {
|
||||
Thread.sleep(delay);
|
||||
} catch (InterruptedException e) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
package de.mrbesen.telegram;
|
||||
|
||||
public class TelegramUser {
|
||||
|
||||
private int chatid;
|
||||
private String uname;
|
||||
private TelegramAPI api;
|
||||
|
||||
public TelegramUser(int chatid, String uname, TelegramAPI api) {
|
||||
this.chatid = chatid;
|
||||
this.uname = uname;
|
||||
this.api = api;
|
||||
}
|
||||
|
||||
public void sendMessage(String msg) {
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
package de.mrbesen.telegram.commands;
|
||||
|
||||
import de.mrbesen.telegram.TelegramUser;
|
||||
|
||||
public interface CommandHandler {
|
||||
|
||||
/**
|
||||
* Should return true, if the command is handled correctly, false if the help menu should be displayed
|
||||
* @param sender
|
||||
* @param cmd
|
||||
* @param args
|
||||
* @return
|
||||
*/
|
||||
public boolean onCommand(TelegramUser sender, String cmd, String[] args);
|
||||
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
package de.mrbesen.telegram.commands;
|
||||
|
||||
import com.google.common.collect.ArrayListMultimap;
|
||||
import com.google.common.collect.Multimap;
|
||||
|
||||
import de.mrbesen.telegram.TelegramUser;
|
||||
|
||||
public class CommandManager {
|
||||
|
||||
private static String CMDPATTERN = "^[\\w-]+$";
|
||||
|
||||
private Multimap<String, CommandHandler> handlerlist = ArrayListMultimap.create();//list of all registered CommandHandler
|
||||
|
||||
public CommandManager() { }
|
||||
|
||||
void onCommand(String line, TelegramUser sender) {//called by the api (/-prefix allready removed)
|
||||
line = line.trim();
|
||||
String[] split = line.split(" ",2);
|
||||
String cmd = split[0].toLowerCase();
|
||||
if(cmd.matches(CMDPATTERN)) {
|
||||
String[] args = new String[0];
|
||||
if(split.length == 2) {
|
||||
args = split[1].split(" ");
|
||||
}
|
||||
//call
|
||||
for(CommandHandler cmdhand : handlerlist.get(cmd)) {
|
||||
try {
|
||||
boolean result = cmdhand.onCommand(sender, cmd, args);
|
||||
if(result)
|
||||
break;
|
||||
} catch(Throwable t) {
|
||||
System.err.println("Error, while performing Command. ");
|
||||
t.printStackTrace();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//unknown cmd!
|
||||
}
|
||||
}
|
||||
|
||||
public void registerCommand(String cmd, CommandHandler 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 successfull!
|
||||
} else {
|
||||
throw new IllegalArgumentException("cmd contains unallowed characters. Allowed: a-zA-Z0-9_-");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package de.mrbesen.telegram.event;
|
||||
|
||||
import de.mrbesen.telegram.TelegramUser;
|
||||
|
||||
public class Event {
|
||||
|
||||
private TelegramUser user;
|
||||
|
||||
public Event(TelegramUser u) {
|
||||
user = u;
|
||||
}
|
||||
|
||||
public TelegramUser getUser() {
|
||||
return user;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
package de.mrbesen.telegram.event;
|
||||
|
||||
import static java.lang.annotation.ElementType.METHOD;
|
||||
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
@Target(METHOD)
|
||||
public @interface EventHandler {
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
package de.mrbesen.telegram.event;
|
||||
|
||||
public interface EventListener {
|
||||
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
package de.mrbesen.telegram.event;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class EventManager {
|
||||
|
||||
private ArrayList<EventListener> listeners = new ArrayList<EventListener>();
|
||||
private ArrayList<EventMethod> handler = new ArrayList<EventMethod>();
|
||||
|
||||
public EventManager() {
|
||||
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public void registerEvent(EventListener listener) {
|
||||
if(listener == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
if(listeners.contains(listener)) {
|
||||
throw new RuntimeException("Listener is allready registered.");
|
||||
}
|
||||
listeners.add(listener);
|
||||
//scanning handler
|
||||
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].getClass();
|
||||
if(Event.class.isAssignableFrom(parameterclass) && !parameterclass.equals(Event.class)) {//the needed parameter is a Event-subclass)
|
||||
handler.add(new EventMethod((Class<? extends Event>) parameterclass, met, listener));
|
||||
} else {
|
||||
//warn / error?
|
||||
}
|
||||
} else {
|
||||
//warn?
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Event callEvent(Event e) {
|
||||
for(EventMethod met : handler) {
|
||||
try {
|
||||
e = met.callEvent(e);
|
||||
} catch(Throwable t) {
|
||||
System.err.println("Error while calling Event " + e.getClass().getSimpleName() + " at " + met.listener.getClass().getSimpleName() + ":" + met.met.getName());
|
||||
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) {
|
||||
t.printStackTrace();
|
||||
}
|
||||
}
|
||||
return e;
|
||||
}
|
||||
}
|
||||
}
|
Notiek ielāde…
Atsaukties uz šo jaunā problēmā