From 06972b9fb72ef273cca97d90c30f04a7358833de Mon Sep 17 00:00:00 2001 From: cnaude Date: Sat, 18 Oct 2014 09:07:18 -0700 Subject: [PATCH] Add load and unload commands. --- .../com/cnaude/purpleirc/CommandHandlers.java | 6 +- .../cnaude/purpleirc/Commands/ListBots.java | 4 +- .../com/cnaude/purpleirc/Commands/Load.java | 69 ++++++++++++++++++ .../com/cnaude/purpleirc/Commands/Unload.java | 71 +++++++++++++++++++ .../java/com/cnaude/purpleirc/PurpleBot.java | 10 +-- .../java/com/cnaude/purpleirc/PurpleIRC.java | 18 +++-- src/main/resources/plugin.yml | 8 ++- 7 files changed, 172 insertions(+), 14 deletions(-) create mode 100644 src/main/java/com/cnaude/purpleirc/Commands/Load.java create mode 100644 src/main/java/com/cnaude/purpleirc/Commands/Unload.java diff --git a/src/main/java/com/cnaude/purpleirc/CommandHandlers.java b/src/main/java/com/cnaude/purpleirc/CommandHandlers.java index d909c68..71925f8 100644 --- a/src/main/java/com/cnaude/purpleirc/CommandHandlers.java +++ b/src/main/java/com/cnaude/purpleirc/CommandHandlers.java @@ -16,8 +16,8 @@ */ public class CommandHandlers implements CommandExecutor { - public HashMap commands = new HashMap(); - public ArrayList sortedCommands = new ArrayList(); + public HashMap commands = new HashMap<>(); + public ArrayList sortedCommands = new ArrayList<>(); private final PurpleIRC plugin; /** @@ -44,6 +44,7 @@ public CommandHandlers(PurpleIRC plugin) { commands.put("listops", new ListOps(plugin)); commands.put("listvoices", new ListVoices(plugin)); commands.put("login", new Login(plugin)); + commands.put("load", new Load(plugin)); commands.put("messagedelay", new MessageDelay(plugin)); commands.put("msg", new Msg(plugin)); commands.put("motd", new Motd(plugin)); @@ -67,6 +68,7 @@ public CommandHandlers(PurpleIRC plugin) { commands.put("server", new Server(plugin)); commands.put("topic", new Topic(plugin)); commands.put("unmute", new UnMute(plugin)); + commands.put("unload", new Unload(plugin)); commands.put("voice", new Voice(plugin)); commands.put("whois", new Whois(plugin)); commands.put("help", new Help(plugin)); diff --git a/src/main/java/com/cnaude/purpleirc/Commands/ListBots.java b/src/main/java/com/cnaude/purpleirc/Commands/ListBots.java index 2bf16ea..aadc7f4 100644 --- a/src/main/java/com/cnaude/purpleirc/Commands/ListBots.java +++ b/src/main/java/com/cnaude/purpleirc/Commands/ListBots.java @@ -39,8 +39,8 @@ public void dispatch(CommandSender sender, String[] args) { sender.sendMessage(ChatColor.DARK_PURPLE + "-----[ " + ChatColor.WHITE + "IRC Bots" + ChatColor.DARK_PURPLE + " ]-----"); for (PurpleBot ircBot : plugin.ircBots.values()) { - sender.sendMessage(ChatColor.DARK_PURPLE + "* " + ChatColor.WHITE + ircBot.botNick - + ChatColor.DARK_PURPLE + " [" + ChatColor.GRAY + ircBot.getFileName() + ChatColor.DARK_PURPLE + "]"); + sender.sendMessage(ChatColor.DARK_PURPLE + "* " + ChatColor.WHITE + ircBot.getFileName() + + ChatColor.DARK_PURPLE + " [" + ChatColor.WHITE + ircBot.botNick + ChatColor.DARK_PURPLE + "]"); if (ircBot.isConnected()) { for (Channel channel : ircBot.getChannels()) { sender.sendMessage(ChatColor.DARK_PURPLE + " - " + ChatColor.WHITE + channel.getName()); diff --git a/src/main/java/com/cnaude/purpleirc/Commands/Load.java b/src/main/java/com/cnaude/purpleirc/Commands/Load.java new file mode 100644 index 0000000..407a8ab --- /dev/null +++ b/src/main/java/com/cnaude/purpleirc/Commands/Load.java @@ -0,0 +1,69 @@ +package com.cnaude.purpleirc.Commands; + +import com.cnaude.purpleirc.PurpleBot; +import com.cnaude.purpleirc.PurpleIRC; +import java.io.File; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +/** + * + * @author cnaude + */ +public class Load implements IRCCommandInterface { + + private final PurpleIRC plugin; + private final String usage = "[bot]"; + private final String desc = "Load a bot file."; + private final String name = "load"; + private final String fullUsage = ChatColor.WHITE + "Usage: " + ChatColor.GOLD + "/irc " + name + " " + usage; + + /** + * + * @param plugin + */ + public Load(PurpleIRC plugin) { + this.plugin = plugin; + } + + /** + * + * @param sender + * @param args + */ + @Override + public void dispatch(CommandSender sender, String[] args) { + if (args.length >= 2) { + String bot = plugin.botify(args[1]); + if (plugin.ircBots.containsKey(bot)) { + sender.sendMessage(ChatColor.RED + "Sorry that bot is already loaded. Try to unload it first."); + return; + } + File file = new File(plugin.botsFolder, bot); + if (file.exists()) { + sender.sendMessage(ChatColor.WHITE + "Loading " + bot + "..."); + plugin.ircBots.put(file.getName(), new PurpleBot(file, plugin)); + sender.sendMessage("Loaded bot: " + file.getName() + "[" + plugin.ircBots.get(file.getName()).botNick + "]"); + } else { + sender.sendMessage(ChatColor.RED + "No such bot file: " + ChatColor.WHITE + bot); + } + } else { + sender.sendMessage(fullUsage); + } + } + + @Override + public String name() { + return name; + } + + @Override + public String desc() { + return desc; + } + + @Override + public String usage() { + return usage; + } +} diff --git a/src/main/java/com/cnaude/purpleirc/Commands/Unload.java b/src/main/java/com/cnaude/purpleirc/Commands/Unload.java new file mode 100644 index 0000000..2bdf40b --- /dev/null +++ b/src/main/java/com/cnaude/purpleirc/Commands/Unload.java @@ -0,0 +1,71 @@ +package com.cnaude.purpleirc.Commands; + +import com.cnaude.purpleirc.PurpleIRC; +import java.io.File; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +/** + * + * @author cnaude + */ +public class Unload implements IRCCommandInterface { + + private final PurpleIRC plugin; + private final String usage = "[bot] (disable)"; + private final String desc = "Unload the bot and optionally disable it."; + private final String name = "unload"; + private final String fullUsage = ChatColor.WHITE + "Usage: " + ChatColor.GOLD + "/irc " + name + " " + usage; + + /** + * + * @param plugin + */ + public Unload(PurpleIRC plugin) { + this.plugin = plugin; + } + + /** + * + * @param sender + * @param args + */ + @Override + public void dispatch(CommandSender sender, String[] args) { + if (args.length >= 2) { + String bot = plugin.botify(args[1]); + if (plugin.ircBots.containsKey(bot)) { + sender.sendMessage(ChatColor.WHITE + "Unloading " + bot + "..."); + plugin.ircBots.get(bot).quit(); + plugin.ircBots.get(bot).saveConfig(plugin.getServer().getConsoleSender()); + plugin.ircBots.remove(bot); + if (args.length >= 3) { + if (args[2].equalsIgnoreCase("disable")) { + sender.sendMessage(ChatColor.WHITE + "Renaming " + bot + " to " + bot + ".disabled"); + File file = new File(plugin.botsFolder, bot); + file.renameTo(new File(plugin.botsFolder, bot + ".disabled")); + } + } + } else { + sender.sendMessage(plugin.invalidBotName.replace("%BOT%", bot)); + } + } else { + sender.sendMessage(fullUsage); + } + } + + @Override + public String name() { + return name; + } + + @Override + public String desc() { + return desc; + } + + @Override + public String usage() { + return usage; + } +} diff --git a/src/main/java/com/cnaude/purpleirc/PurpleBot.java b/src/main/java/com/cnaude/purpleirc/PurpleBot.java index 5d2e3ec..f64fb45 100644 --- a/src/main/java/com/cnaude/purpleirc/PurpleBot.java +++ b/src/main/java/com/cnaude/purpleirc/PurpleBot.java @@ -281,10 +281,12 @@ public void run() { for (String channelName : botChannels) { if (channelAutoJoin.containsKey(channelName)) { if (channelAutoJoin.get(channelName)) { - if (channelPassword.get(channelName).isEmpty()) { - bot.sendIRC().joinChannel(channelName); - } else { - bot.sendIRC().joinChannel(channelName, channelPassword.get(channelName)); + if (bot.isConnected()) { + if (channelPassword.get(channelName).isEmpty()) { + bot.sendIRC().joinChannel(channelName); + } else { + bot.sendIRC().joinChannel(channelName, channelPassword.get(channelName)); + } } } } diff --git a/src/main/java/com/cnaude/purpleirc/PurpleIRC.java b/src/main/java/com/cnaude/purpleirc/PurpleIRC.java index 6c48164..ca77c35 100644 --- a/src/main/java/com/cnaude/purpleirc/PurpleIRC.java +++ b/src/main/java/com/cnaude/purpleirc/PurpleIRC.java @@ -80,7 +80,7 @@ public class PurpleIRC extends JavaPlugin { private final String sampleFileName; private final String MAINCONFIG; private File pluginFolder; - private File botsFolder; + public File botsFolder; private File configFile; public static long startTime; public boolean identServerEnabled; @@ -599,11 +599,10 @@ private void loadBots() { if (botsFolder.exists()) { logInfo("Checking for bot files in " + botsFolder); for (final File file : botsFolder.listFiles()) { - if (file.getName().endsWith(".yml")) { + if (file.getName().toLowerCase().endsWith(".yml")) { logInfo("Loading bot file: " + file.getName()); - PurpleBot pircBot = new PurpleBot(file, this); - ircBots.put(file.getName(), pircBot); - logInfo("Loaded bot: " + pircBot.botNick); + ircBots.put(file.getName(), new PurpleBot(file, this)); + logInfo("Loaded bot: " + file.getName() + "[" + ircBots.get(file.getName()).botNick + "]"); } } } @@ -1209,4 +1208,13 @@ public void clearHostCache(Player player) { hostCache.remove(playerIP); } } + + public String botify(String bot) { + if (bot.toLowerCase().endsWith("yml")) { + return bot; + } else { + return bot + ".yml"; + } + } + } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 6ccddf6..7843a05 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -98,4 +98,10 @@ permissions: default: op 'irc.motd': description: Gives player access to the /irc motd command. - default: op \ No newline at end of file + default: op + 'irc.load': + description: Gives player access to the /irc load command. + default: op + 'irc.unload': + description: Gives player access to the /irc unload command. + default: op \ No newline at end of file