MissingIdentifier/src/main/java/Modules/RandomResponde.java

159 lines
7.1 KiB
Java

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() + "`";
}
}