159 lines
7.1 KiB
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() + "`";
|
|
}
|
|
}
|