package Modules; import Controll.GuildController; import Controll.SuperModule; import net.dv8tion.jda.api.events.GenericEvent; import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; public class RandomResponde extends SuperModule{ public static final String command = "RandomResponse"; public RandomResponde(GuildController guildController, JSONObject config) { super(command, guildController, config); if (!config.containsKey("triggers")){ getConfig().put("triggers", new JSONArray()); safeConfig(getConfig()); } } @Override public String getCommand() { return command; } @Override public String getDescription() { return "response to predefined keywords. git as example\n" + "`RandomResponse add -t TRIGGER -r RESPONSE [-p FILTERPATTERN]` if -p is set trigger will replace $pattern with REGEX filtered trigger message. Good example for such a REGEX may be: `((?<=(?is:TRIGGER)) [^ ]+)` (Filters next word to trigger)\n" + "`RandomResponse remove TRIGGER` remove a trigger"; } @Override public void execute(GenericEvent event) { if (event instanceof GuildMessageReceivedEvent){ GuildMessageReceivedEvent thisEvent = (GuildMessageReceivedEvent)event; if (isCommand(thisEvent.getMessage())){ // add new trigger if (checkForCommand(thisEvent.getMessage().getContentRaw(), "add")){ JSONArray triggers = (JSONArray) getConfig().get("triggers"); // Check for obligatory parameter: if(getParameter(thisEvent.getMessage().getContentRaw(), "t").length() < 1){ thisEvent.getChannel().sendMessage("You have to mention a trigger! use `-t TRIGGER`").queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES)); thisEvent.getMessage().delete().queueAfter(1, TimeUnit.MINUTES); return; } if (getParameter(thisEvent.getMessage().getContentRaw(), "r").length() < 1){ thisEvent.getChannel().sendMessage("You have to mention a response! use `-r RESPONSE`").queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES)); thisEvent.getMessage().delete().queueAfter(1, TimeUnit.MINUTES); return; } // Check if already exists for (Object o : triggers){ if (((JSONObject)o).get("trigger").toString().equalsIgnoreCase( getParameter(thisEvent.getMessage().getContentRaw(), "t") )){ thisEvent.getChannel().sendMessage("Trigger already exists! aborted").queue(msg -> msg.delete().queueAfter(1, TimeUnit.MINUTES)); thisEvent.getMessage().delete().queueAfter(1, TimeUnit.MINUTES); return; } } // new Object to add JSONObject newTrigger = new JSONObject(); // add triiger / response newTrigger.put("trigger", getParameter(thisEvent.getMessage().getContentRaw(), "t")); newTrigger.put("response", getParameter(thisEvent.getMessage().getContentRaw(), "r")); // may add replacement and pattern if (getParameter(thisEvent.getMessage().getContentRaw(), "p").length() > 0){ // p param is given check if "$pattern" is given if (newTrigger.get("response").toString().contains("$pattern")){ // Has valid pattern newTrigger.put("pattern", getParameter(thisEvent.getMessage().getContentRaw(), "p")); } else { // has no valid pattern thisEvent.getChannel().sendMessage("You did not mentioned `$pattern` to apply the pattern").queue(m -> m.delete().queueAfter(1, TimeUnit.MINUTES)); thisEvent.getMessage().delete().queueAfter(1, TimeUnit.MINUTES); } } // add new Object and safe it triggers.add(newTrigger); getConfig().replace("triggers", triggers); safeConfig(); thisEvent.getChannel().sendMessage("Added trigger!").queue(); } else if (checkForCommand(thisEvent.getMessage().getContentRaw(), "remove")){ JSONArray triggers = (JSONArray) getConfig().get("triggers"); boolean deleted = false; for (Object ob : triggers){ if(((JSONObject) ob).get("trigger").toString().equals( thisEvent.getMessage().getContentRaw().replaceFirst( "(?is:" + getGuildController().getPREFIX() + command + " " + "remove )", ""))){ triggers.remove(ob); deleted = true; break; } } if (deleted){ // safe it getConfig().replace("triggers", triggers); safeConfig(getConfig()); thisEvent.getChannel().sendMessage("deleted Trigger!").queue(); } else { // if noth ing got deletet entry does not exist thisEvent.getChannel().sendMessage("no such Trigger! aborted action.").queue(); } } } else { // go through all triggers and may responde for (Object o : (JSONArray)getConfig().get("triggers")){ JSONObject trigger = (JSONObject) o; if (thisEvent.getMessage().getContentRaw().matches("(?is:.*" + trigger.get("trigger").toString() + ".*)")){ String respnse = trigger.get("response").toString(); // get filter if(trigger.containsKey("pattern")) { Matcher m = Pattern.compile(trigger.get("pattern").toString()).matcher(thisEvent.getMessage().getContentRaw()); if(m.find()) respnse = respnse.replaceAll("\\$pattern", m.group(0)); else respnse = respnse.replaceAll("\\$pattern", "NULL"); } thisEvent.getChannel().sendMessage(respnse).queue(msg -> msg.delete().queueAfter(1, TimeUnit.MINUTES)); break; } } } } } @Override public String showSettings() { return "NUMBER OF TRIGGERS: `" + ((JSONArray) getConfig().get("triggers")).size() + "`"; } }