package polly.rx.commands;
import polly.rx.MSG;
import polly.rx.MyPlugin;
import de.skuzzle.polly.sdk.DelayedCommand;
import de.skuzzle.polly.sdk.MyPolly;
import de.skuzzle.polly.sdk.Parameter;
import de.skuzzle.polly.sdk.Signature;
import de.skuzzle.polly.sdk.Types;
import de.skuzzle.polly.sdk.Types.NumberType;
import de.skuzzle.polly.sdk.User;
import de.skuzzle.polly.sdk.exceptions.CommandException;
import de.skuzzle.polly.sdk.exceptions.ConstraintException;
import de.skuzzle.polly.sdk.exceptions.DatabaseException;
import de.skuzzle.polly.sdk.exceptions.DuplicatedSignatureException;
import de.skuzzle.polly.sdk.exceptions.InsufficientRightsException;
import de.skuzzle.polly.sdk.time.Milliseconds;
public class CrackerCommand extends DelayedCommand {
private final static int CRACKER_DELAY = (int) Milliseconds.fromMinutes(5);
private final static int CRACKER_INC = 1;
public CrackerCommand(MyPolly polly) throws DuplicatedSignatureException {
super(polly, "cracker", CRACKER_DELAY); //$NON-NLS-1$
this.createSignature(MSG.crackerSig0Desc);
this.createSignature(MSG.crackerSig1Desc,
new Parameter(MSG.crackerSig1User, Types.USER));
this.setHelpText(MSG.crackerHelp);
this.setRegisteredOnly();
}
@Override
protected boolean executeOnBoth(User executer, String channel, Signature signature)
throws CommandException, InsufficientRightsException {
try {
User user = executer;
if (this.match(signature, 1)) {
final String name = signature.getStringValue(0);
user = this.getMyPolly().users().getUser(name);
if (user == null) {
throw new CommandException(MSG.bind(MSG.crackerUnknownUser, name));
}
}
int crackers = this.incCracker(executer, user, CRACKER_INC);
this.reply(channel, MSG.bind(MSG.crackerSuccess,
crackers, executer.getName()));
} catch (DatabaseException e) {
throw new CommandException(e);
}
return false;
}
private int incCracker(User executor, User user, int amount)
throws DatabaseException {
int crackers = (int) ((NumberType) user.getAttribute(MyPlugin.CRACKER)).getValue();
crackers += amount;
try {
this.getMyPolly().users().setAttributeFor(executor, user, MyPlugin.CRACKER,
Integer.toString(crackers));
} catch (ConstraintException e) {
throw new RuntimeException("this was thought to be impossibru to happen", e); //$NON-NLS-1$
}
return crackers;
}
}