// Copyright (c) 2015, Christopher "BlayTheNinth" Baker package net.blay09.mods.eirairc.bot; import net.blay09.mods.eirairc.api.bot.IBotCommand; import net.blay09.mods.eirairc.api.bot.IRCBot; import net.blay09.mods.eirairc.api.event.ReloadBotCommandsEvent; import net.blay09.mods.eirairc.api.irc.IRCChannel; import net.blay09.mods.eirairc.api.irc.IRCConnection; import net.blay09.mods.eirairc.api.irc.IRCUser; import net.blay09.mods.eirairc.config.ConfigurationHandler; import net.blay09.mods.eirairc.irc.IRCConnectionImpl; import net.blay09.mods.eirairc.irc.IRCUserImpl; import net.blay09.mods.eirairc.util.ConfigHelper; import net.blay09.mods.eirairc.util.Utils; import net.minecraftforge.common.MinecraftForge; import org.apache.commons.lang3.ArrayUtils; import java.util.Collection; import java.util.HashMap; import java.util.Map; public class IRCBotImpl implements IRCBot { private final IRCConnectionImpl connection; private final Map<String, IBotCommand> commands = new HashMap<>(); public IRCBotImpl(IRCConnectionImpl connection) { this.connection = connection; reloadCommands(); } public void reloadCommands() { commands.clear(); if(isServerSide()) { registerCommand(new BotCommandHelp()); registerCommand(new BotCommandMessage()); registerCommand(new BotCommandWho()); registerCommand(new BotCommandOp()); for(IBotCommand command : ConfigurationHandler.getCustomCommands()) { registerCommand(command); } } MinecraftForge.EVENT_BUS.post(new ReloadBotCommandsEvent(this)); } @Override public void registerCommand(IBotCommand command) { commands.put(command.getCommandName().toLowerCase(), command); } public Collection<IBotCommand> getCommands() { return commands.values(); } @Override public IRCConnection getConnection() { return connection; } public boolean processCommand(IRCChannel channel, IRCUser sender, String message) { String[] args = message.split(" "); if(ConfigHelper.getBotSettings(channel).disabledNativeCommands.get().containsString(args[0].toLowerCase(), true)) { return false; } IBotCommand botCommand = commands.get(args[0].toLowerCase()); if(botCommand == null || (channel != null && !botCommand.isChannelCommand())) { return false; } String[] shiftedArgs = ArrayUtils.subarray(args, 1, args.length); if(botCommand.requiresAuth()) { ((IRCUserImpl) sender).queueAuthCommand(this, channel, botCommand, shiftedArgs); } else { botCommand.processCommand(this, channel, sender, shiftedArgs, botCommand); } return true; } @Override public boolean isServerSide() { return Utils.isServerSide(); } }