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

63 lines
1.7 KiB
Java

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_-");
}
}
}