plugins/manager.rb in cogbot-0.1.1 vs plugins/manager.rb in cogbot-0.1.2

- old
+ new

@@ -8,95 +8,112 @@ match(/m load (\S+)/, method: :load_plugin) match(/m unload (\S+)/, method: :unload_plugin) match(/m reload (\S+)/, method: :reload_plugin) match(/m set (\S+) (\S+) (.+)$/, method: :set_option) + def authorized(m, &block) + if @bot.config.options['cogconf']['manager']['admin'].include? m.user.nick + instance_eval(&block) + else + m.reply "Sorry, you don't have the right." + end + end + def list_plugins(m) back = '' @bot.plugins.each { |p| back += "#{p.class.name.split('::').last.downcase} " } m.reply back end def load_plugin(m, mapping) - plugin = mapping.downcase.camelize - p plugin - p mapping + authorized m do + plugin = mapping.downcase.camelize + p plugin + p mapping - file_name = "#{ROOT_DIR}/plugins/#{mapping.downcase}.rb" - unless File.exist?(file_name) - m.reply "Could not load #{plugin} because #{File.basename(file_name)} does not exist." - return - end + file_name = "#{ROOT_DIR}/plugins/#{mapping.downcase}.rb" + unless File.exist?(file_name) + m.reply "Could not load #{plugin} because #{File.basename(file_name)} does not exist." + return + end - begin - load(file_name) - rescue Exception - m.reply "Could not load #{plugin}." - raise - end + begin + load(file_name) + rescue Exception + m.reply "Could not load #{plugin}." + raise + end - begin - const = Cinch::Plugins.const_get(plugin) - rescue NameError - m.reply "Could not load #{plugin} because no matching class was found." - return - end + begin + const = Cinch::Plugins.const_get(plugin) + rescue NameError + m.reply "Could not load #{plugin} because no matching class was found." + return + end - @bot.plugins.register_plugin(const) - m.reply "Successfully loaded #{plugin}" + @bot.plugins.register_plugin(const) + m.reply "Successfully loaded #{plugin}" + end end def unload_plugin(m, plugin) - begin - plugin_class = Cinch::Plugins.const_get(plugin.downcase.camelize) - rescue NameError - m.reply "Could not unload #{plugin} because no matching class was found." - return - end + authorized m do + begin + plugin_class = Cinch::Plugins.const_get(plugin.downcase.camelize) + rescue NameError + m.reply "Could not unload #{plugin} because no matching class was found." + return + end - @bot.plugins.select {|p| p.class == plugin_class}.each do |p| - @bot.plugins.unregister_plugin(p) - end + @bot.plugins.select {|p| p.class == plugin_class}.each do |p| + @bot.plugins.unregister_plugin(p) + end - ## FIXME not doing this at the moment because it'll break - ## plugin options. This means, however, that reloading a - ## plugin is relatively dirty: old methods will not be removed - ## but only overwritten by new ones. You will also not be able - ## to change a classes superclass this way. - # Cinch::Plugins.__send__(:remove_const, plugin) + ## FIXME not doing this at the moment because it'll break + ## plugin options. This means, however, that reloading a + ## plugin is relatively dirty: old methods will not be removed + ## but only overwritten by new ones. You will also not be able + ## to change a classes superclass this way. + # Cinch::Plugins.__send__(:remove_const, plugin) - # Because we're not completely removing the plugin class, - # reset everything to the starting values. - plugin_class.hooks.clear - plugin_class.matchers.clear - plugin_class.listeners.clear - plugin_class.timers.clear - plugin_class.ctcps.clear - plugin_class.react_on = :message - plugin_class.plugin_name = nil - plugin_class.help = nil - plugin_class.prefix = nil - plugin_class.suffix = nil - plugin_class.required_options.clear + # Because we're not completely removing the plugin class, + # reset everything to the starting values. + plugin_class.hooks.clear + plugin_class.matchers.clear + plugin_class.listeners.clear + plugin_class.timers.clear + plugin_class.ctcps.clear + plugin_class.react_on = :message + plugin_class.plugin_name = nil + plugin_class.help = nil + plugin_class.prefix = nil + plugin_class.suffix = nil + plugin_class.required_options.clear - m.reply "Successfully unloaded #{plugin}" + m.reply "Successfully unloaded #{plugin}" + end end def reload_plugin(m, plugin) - unload_plugin(m, plugin) - load_plugin(m, plugin) + authorized m do + unload_plugin(m, plugin) + load_plugin(m, plugin) + end end def set_option(m, plugin, option, value) - begin - const = Cinch::Plugins.const_get(plugin.downcase.camelize) - rescue NameError - m.reply "Could not set plugin option for #{plugin} because no matching class was found." - return + authorized m do + begin + const = Cinch::Plugins.const_get(plugin.downcase.camelize) + rescue NameError + m.reply "Could not set plugin option for #{plugin} because no matching class was found." + return + end + @bot.config.plugins.options[const][option.to_sym] = eval(value) + + m.reply "Successfuly set option." end - @bot.config.plugins.options[const][option.to_sym] = eval(value) - m.reply "Successfuly set option." end end end end