package de.mrbesen.telegram.commands; 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 ArrayList handlerlist = new ArrayList<>();//list of all registered CommandHandler public CommandManager(TelegramAPI a) { api = a; } public void onCommand(String line, TUser sender, TMessage json) {//called by the api (/-prefix already removed) line = line.trim(); String[] split = line.split(" ",2); String cmd = split[0].toLowerCase(); if(cmd.contains("@")) { cmd = cmd.substring(0, cmd.indexOf('@')); } boolean result = false; if(cmd.matches(CMDPATTERN)) { String[] args = new String[0]; if(split.length == 2) { args = split[1].split(" "); } //call for(ICommandHandler cmdhand : handlerlist) { try { if(cmdhand instanceof JSONCommandHandler) { result = ((JSONCommandHandler) cmdhand).onCommand(sender, cmd, args, json); } else if( cmdhand instanceof CommandHandler){ result = ((CommandHandler) cmdhand).onCommand(sender, cmd, args); } if(result) break; } catch(Throwable t) { System.err.println("Error, while performing Command. ");//TODO do loggin here t.printStackTrace(); } } } //do smth. with result if(!result && json.getChatID() < 0) { 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(handler == null) { throw new NullPointerException("handler is not allowed to be null"); } handlerlist.add(handler); } }