package heufybot.config; import heufybot.core.Logger; import heufybot.core.cap.CapHandler; import heufybot.core.cap.EnablingCapHandler; import heufybot.utils.FileUtils; import org.yaml.snakeyaml.Yaml; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; public class GlobalConfig { protected List<CapHandler> capHandlers; protected HashMap<String, Object> settings; public GlobalConfig() { this.capHandlers = new ArrayList<CapHandler>(); this.capHandlers.add(new EnablingCapHandler("multi-prefix")); } @SuppressWarnings("unchecked") public void loadGlobalConfig(String fileName) { Yaml yaml = new Yaml(); if (FileUtils.fileExists(fileName)) { String settingsYaml = FileUtils.readFile(fileName); this.settings = (HashMap<String, Object>) yaml.load(settingsYaml); } else { Logger.error("Config", "Config file \"" + fileName + "\" could not be found. Generating default config..."); HashMap<String, Object> settings = new LinkedHashMap<String, Object>(); settings.put("nickname", "RE_HeufyBot"); settings.put("username", "RE_HeufyBot"); settings.put("realname", "RE_HeufyBot IRC Bot"); settings.put("server", "irc.foo.bar"); settings.put("port", 6667); settings.put("ssl", false); settings.put("password", ""); settings.put("passwordType", "None"); settings.put("autoJoin", false); settings.put("autoJoinChannels", new ArrayList<String>()); settings.put("autoNickChange", true); settings.put("autoReconnect", false); settings.put("reconnectAttempts", 3); settings.put("reconnectInterval", 600); settings.put("messageDelay", 500); settings.put("logPath", "logs"); settings.put("logPMs", false); settings.put("commandPrefix", "~"); settings.put("modules", new ArrayList<String>()); settings.put("botAdmins", new ArrayList<String>()); String settingsYaml = yaml.dump(settings); this.settings = settings; FileUtils.writeFile(fileName, settingsYaml); } } public String getSettingWithDefault(String setting, String defaultValue) { if (this.settings.containsKey(setting)) { return (String) this.settings.get(setting); } else { Logger.error( "Config", "The setting \"" + setting + "\" was not found in your global and local configs! Using the default value \"" + defaultValue + "\" instead."); return defaultValue; } } public int getSettingWithDefault(String setting, int defaultValue) { if (this.settings.containsKey(setting)) { if (this.settings.get(setting) instanceof Integer) { return (Integer) this.settings.get(setting); } Logger.error("Config", "The setting \"" + setting + "\" was invalid! Using the default value \"" + defaultValue + "\" instead."); } else { Logger.error( "Config", "The setting \"" + setting + "\" was not found in your global and local configs! Using the default value \"" + defaultValue + "\" instead."); } return defaultValue; } public boolean getSettingWithDefault(String setting, boolean defaultValue) { if (this.settings.containsKey(setting)) { if (this.settings.get(setting) instanceof Boolean) { return (Boolean) this.settings.get(setting); } Logger.error("Config", "The setting \"" + setting + "\" was invalid! Using the default value \"" + defaultValue + "\" instead."); } else { Logger.error( "Config", "The setting \"" + setting + "\" was not found in your global and local configs! Using the default value \"" + defaultValue + "\" instead."); } return defaultValue; } @SuppressWarnings("unchecked") public ArrayList<String> getSettingWithDefault(String setting, ArrayList<String> defaultValue) { if (this.settings.containsKey(setting)) { if (this.settings.get(setting) instanceof ArrayList<?>) { return (ArrayList<String>) this.settings.get(setting); } Logger.error("Config", "The setting \"" + setting + "\" was invalid! Using the default value \"" + defaultValue + "\" instead."); } else { Logger.error( "Config", "The setting \"" + setting + "\" was not found in your global and local configs! Using the default value \"" + defaultValue + "\" instead."); } return defaultValue; } public PasswordType getSettingWithDefault(String setting, PasswordType defaultValue) { if (this.settings.containsKey(setting)) { try { return PasswordType.valueOf((String) this.settings.get(setting)); } catch (IllegalArgumentException e) { Logger.error("Config", "The setting \"" + setting + "\" was invalid! Using the default value \"" + defaultValue + "\" instead."); } } else { Logger.error( "Config", "The setting \"" + setting + "\" was not found in your global and local configs! Using the default value \"" + defaultValue + "\" instead."); } return defaultValue; } public HashMap<String, Object> getSettings() { return this.settings; } public List<CapHandler> getCapHandlers() { return this.capHandlers; } public enum PasswordType { None, ServerPass, NickServPass, SASL; } }