package tterrag.tppibot.commands; 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 tterrag.tppibot.runnables.MessageSender; import tterrag.tppibot.util.IRCUtils; import com.google.common.eventbus.Subscribe; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; public class Reminders extends Command { private Config delayConfig; public Map<String, Long> delayMap; public Reminders() { super("reminders", PermLevel.TRUSTED); delayConfig = new Config("delays.json"); delayMap = new Gson().fromJson(delayConfig.getText(), new TypeToken<Map<String, Long>>() { }.getType()); if (delayMap == null) { delayMap = new HashMap<String, Long>(); } } @Override public void onCommand(PircBotX bot, User user, Channel channel, List<String> lines, String... args) { if (args.length < 1) { lines.add("This command requires one arg."); return; } if ("on".equals(args[0])) { if (!Main.reminders.isRemindEnabledFor(channel.getName())) { lines.add("Enabling reminders for channel \"" + channel.getName() + "\""); Main.reminders.enableRemindersFor(channel.getName()); } else { lines.add("Reminders already enabled!"); } } else if ("off".equals(args[0])) { if (Main.reminders.isRemindEnabledFor(channel.getName())) { lines.add("Disabling reminders for channel \"" + channel.getName() + "\""); Main.reminders.disableRemindersFor(channel.getName()); } else { lines.add("Reminders already disabled!"); } } else if ("delay".equals(args[0])) { if (args.length < 2) { lines.add("'delay' command requires a time arg"); } else { try { int seconds = IRCUtils.getSecondsFromString(args[1]); delayMap.put(channel.getName(), (long) (seconds * 1000)); Main.reminders.setDelay(channel.getName(), seconds * 1000); } catch (NumberFormatException e) { lines.add("Invalid time " + args[1]); } } } else if ("list".equals(args[0])) { MessageSender.INSTANCE.enqueueNotice(bot, user.getNick(), "Current reminder list:"); for (String s : Main.reminders.getReminders()) { MessageSender.INSTANCE.enqueueNotice(bot, user.getNick(), s); } } else if ("remove".equals(args[0])) { if (args.length < 2) { lines.add("'remove' command requires an index arg"); } else { try { int index = Integer.parseInt(args[1]); if (index < Main.reminders.getReminders().length) { Main.reminders.removeReminder(index); } else { lines.add(index < 0 ? args[1] + " is below 0." : args[1] + " is too high."); } } catch (NumberFormatException e) { lines.add("Invalid number " + args[1]); } } } } @Override public String getDesc() { return "Turns reminders off for the current channel"; } @Override public boolean executeWithoutChannel() { return false; } @Override public boolean shouldReceiveEvents() { return true; } @Subscribe public void onDisconnect(DisconnectEvent<PircBotX> event) { delayConfig.writeJsonToFile(delayMap); } }