package tterrag.tppibot.commands;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.pircbotx.Channel;
import org.pircbotx.PircBotX;
import org.pircbotx.User;
import org.pircbotx.hooks.events.DisconnectEvent;
import tterrag.tppibot.Main;
import tterrag.tppibot.config.Config;
import com.google.common.eventbus.Subscribe;
import com.google.gson.reflect.TypeToken;
public class Mode extends Command {
public enum BotMode {
MESSAGE,
NOTICE,
PM
}
private static Map<String, BotMode> modes;
private Config modeConfig;
public Mode() {
super("mode", PermLevel.OP);
modeConfig = new Config("modes.json");
modes = Main.gson.fromJson(modeConfig.getText(), new TypeToken<Map<String, BotMode>>() {
}.getType());
if (modes == null)
modes = new HashMap<String, BotMode>();
}
@Override
public void onCommand(PircBotX bot, User user, Channel channel, List<String> lines, String... args) {
if (args.length >= 1) {
try {
synchronized (modes) {
modes.put(channel.getName(), BotMode.valueOf(args[0].toUpperCase()));
lines.add("Mode set to " + modes.get(channel.getName()));
}
} catch (IllegalArgumentException e) {
lines.add("No such mode " + args[0] + "! Valid modes are: " + Arrays.deepToString(BotMode.values()));
}
} else {
lines.add("Current mode is: " + modes.get(channel.getName()));
}
}
public static void initMode(String channel, BotMode mode) {
if (modes.get(channel) == null) {
synchronized (modes) {
modes.put(channel, mode);
}
}
}
public static BotMode getMode(String channel) {
synchronized (modes) {
return modes.get(channel);
}
}
@Override
public boolean executeWithoutChannel() {
return false;
}
@Override
public boolean shouldReceiveEvents() {
return true;
}
@Subscribe
public void onDisconnect(DisconnectEvent<PircBotX> event) {
modeConfig.writeJsonToFile(modes);
}
}