/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.techcavern.wavetact.ircCommands.misc;
import com.techcavern.wavetact.annot.IRCCMD;
import com.techcavern.wavetact.objects.IRCCommand;
import com.techcavern.wavetact.utils.DatabaseUtils;
import com.techcavern.wavetact.utils.GeneralUtils;
import com.techcavern.wavetact.utils.IRCUtils;
import com.techcavern.wavetact.utils.Registry;
import org.apache.commons.lang3.ArrayUtils;
import org.jooq.Record;
import org.pircbotx.Channel;
import org.pircbotx.PircBotX;
import org.pircbotx.User;
import static com.techcavern.wavetactdb.Tables.CUSTOMCOMMANDS;
/**
* @author jztech101
*/
@IRCCMD
public class CustomCMD extends IRCCommand {
public CustomCMD() {
super(GeneralUtils.toArray("custommsg cmsg cact customact"), 1, "custommsg (.) (+)(-)[command] [permlevel] [response]", "Responses may contain $1, $2, etc which indicate the argument separated by a space. $* indicates all remaining arguments.", false);
}
@Override
public void onCommand(String command, User user, PircBotX network, String prefix, Channel channel, boolean isPrivate, int userPermLevel, String... args) throws Exception {
String chan = null;
String net = null;
boolean isAction = false;
boolean isModify = false;
boolean isDelete = false;
if (args[0].equalsIgnoreCase(".")) {
net = IRCUtils.getNetworkNameByNetwork(network);
chan = channel.getName();
args = ArrayUtils.remove(args, 0);
}
if (command.equalsIgnoreCase("cact") || command.equalsIgnoreCase("customact")) {
isAction = true;
}
String cCommand;
if (args[0].startsWith("+")) {
cCommand = args[0].replaceFirst("\\+", "");
isModify = true;
} else if (args[0].startsWith("-")) {
cCommand = args[0].replaceFirst("\\-", "");
isDelete = true;
} else {
cCommand = args[0];
}
cCommand = cCommand.toLowerCase();
Record customCommand = DatabaseUtils.getChannelCustomCommand(net, chan, cCommand);
if (isModify && customCommand != null && userPermLevel >= customCommand.getValue(CUSTOMCOMMANDS.PERMLEVEL) && !customCommand.getValue(CUSTOMCOMMANDS.ISLOCKED)) {
customCommand.setValue(CUSTOMCOMMANDS.PERMLEVEL, Integer.parseInt(args[1]));
customCommand.setValue(CUSTOMCOMMANDS.ISACTION, isAction);
customCommand.setValue(CUSTOMCOMMANDS.VALUE, GeneralUtils.buildMessage(2, args.length, args).replace("\n", " "));
DatabaseUtils.updateCustomCommand(customCommand);
IRCUtils.sendMessage(user, network, channel, "Custom Command modified", prefix);
} else if (isDelete && customCommand != null && userPermLevel >= customCommand.getValue(CUSTOMCOMMANDS.PERMLEVEL) && !customCommand.getValue(CUSTOMCOMMANDS.ISLOCKED)) {
DatabaseUtils.removeCustomCommand(net, chan, cCommand);
IRCUtils.sendMessage(user, network, channel, "Custom Command removed", prefix);
} else if (customCommand == null && Registry.ircCommands.get(cCommand) == null && !isDelete && !isModify) {
DatabaseUtils.addCustomCommand(net, chan, cCommand, Integer.parseInt(args[1]), GeneralUtils.buildMessage(2, args.length, args).replace("\n", " "), false, isAction);
IRCUtils.sendMessage(user, network, channel, "Custom Command added", prefix);
} else {
IRCUtils.sendError(user, network, channel, "Command already exists (If you were adding) or Command does not exist, or The command is locked (Either could be the problem if you were modifying)", prefix);
}
}
}