TelegramAPI/src/main/java/de/mrbesen/telegram/commands/CommandManager.java

66 lines
1.8 KiB
Java
Raw Normal View History

2018-07-17 19:23:54 +02:00
package de.mrbesen.telegram.commands;
2019-03-19 02:42:33 +01:00
import de.mrbesen.telegram.TelegramAPI;
2019-02-08 06:14:11 +01:00
import de.mrbesen.telegram.objects.TMessage;
import de.mrbesen.telegram.objects.TUser;
2018-07-17 19:23:54 +02:00
import java.util.ArrayList;
2018-07-17 19:23:54 +02:00
public class CommandManager {
2018-07-18 04:44:04 +02:00
private final static String CMDPATTERN = "^[\\w-]+$";
2019-02-25 02:51:17 +01:00
private final TelegramAPI api;
2018-07-17 19:23:54 +02:00
private ArrayList<ICommandHandler> handlerlist = new ArrayList<>();//list of all registered CommandHandler
2018-07-17 19:23:54 +02:00
2019-02-25 02:51:17 +01:00
public CommandManager(TelegramAPI a) {
api = a;
}
2018-07-17 19:23:54 +02:00
2019-02-08 06:14:11 +01:00
public void onCommand(String line, TUser sender, TMessage json) {//called by the api (/-prefix already removed)
2018-07-17 19:23:54 +02:00
line = line.trim();
String[] split = line.split(" ",2);
String cmd = split[0].toLowerCase();
2018-10-11 14:49:11 +02:00
if(cmd.contains("@")) {
cmd = cmd.substring(0, cmd.indexOf('@'));
}
2018-07-18 04:44:04 +02:00
boolean result = false;
2018-07-17 19:23:54 +02:00
if(cmd.matches(CMDPATTERN)) {
String[] args = new String[0];
if(split.length == 2) {
args = split[1].split(" ");
}
//call
for(ICommandHandler cmdhand : handlerlist) {
2018-07-17 19:23:54 +02:00
try {
2018-10-12 17:24:07 +02:00
if(cmdhand instanceof JSONCommandHandler) {
result = ((JSONCommandHandler) cmdhand).onCommand(sender, cmd, args, json);
2019-02-08 06:14:11 +01:00
} else if( cmdhand instanceof CommandHandler){
result = ((CommandHandler) cmdhand).onCommand(sender, cmd, args);
2018-10-12 17:24:07 +02:00
}
2018-07-17 19:23:54 +02:00
if(result)
break;
} catch(Throwable t) {
2018-09-15 17:49:25 +02:00
System.err.println("Error, while performing Command. ");//TODO do loggin here
2018-07-17 19:23:54 +02:00
t.printStackTrace();
}
}
2018-07-18 04:44:04 +02:00
}
//do smth. with result
2019-10-18 22:41:00 +02:00
if(!result && json.getChatID() < 0) {
2019-02-25 02:51:17 +01:00
TUser.sendMessage(api, json.getChatID(), api.getHelpMessage(), null, 0, true, null);
2018-07-17 19:23:54 +02:00
}
}
public void registerCommand(ICommandHandler handler) {
registerCommand(null, handler);
}
2019-02-08 06:14:11 +01:00
public void registerCommand(String cmd, ICommandHandler handler) {
2018-07-17 19:23:54 +02:00
if(handler == null) {
throw new NullPointerException("handler is not allowed to be null");
}
handlerlist.add(handler);
2018-07-17 19:23:54 +02:00
}
}