X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=lib%2Frbot%2Fplugins.rb;h=7b476da93a5819bdbfb359a5e9c73a8d99aa8a77;hb=c513b0227a88b441500581cff9e7f3f954830d2e;hp=e101e627772d0cf977689f9b5173216abacd84b7;hpb=da4d97f0652bddcee269b6d99863f21a1021056c;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/lib/rbot/plugins.rb b/lib/rbot/plugins.rb index e101e627..7b476da9 100644 --- a/lib/rbot/plugins.rb +++ b/lib/rbot/plugins.rb @@ -109,7 +109,7 @@ module Plugins # initialise your bot module. Always call super if you override this method, # as important variables are set up for you def initialize - @manager = Plugins::pluginmanager + @manager = Plugins::manager @bot = @manager.bot @botmodule_triggers = Array.new @@ -277,6 +277,7 @@ module Plugins @botmodules[:Plugin].clear @names_hash.clear @commandmappers.clear + @failures_shown = false end # Associate with bot _bot_ @@ -390,6 +391,11 @@ module Plugins debug "Botmodule loading path: #{@dirs.join(', ')}" end + def clear_botmodule_dirs + @dirs.clear + debug "Botmodule loading path cleared" + end + # load plugins from pre-assigned list of directories def scan @failed.clear @@ -484,12 +490,12 @@ module Plugins list << "no plugins active" end # Ignored plugins next - unless @ignored.empty? + unless @ignored.empty? or @failures_shown list << "; #{Underline}#{@ignored.length} plugin#{'s' if @ignored.length > 1} ignored#{Underline}" list << ": use #{Bold}help ignored plugins#{Bold} to see why" unless short end # Failed plugins next - unless @failed.empty? + unless @failed.empty? or @failures_shown list << "; #{Reverse}#{@failed.length} plugin#{'s' if @failed.length > 1} failed to load#{Reverse}" list << ": use #{Bold}help failed plugins#{Bold} to see why" unless short end @@ -498,7 +504,9 @@ module Plugins # return list of help topics (plugin names) def helptopics - return status + rv = status + @failures_shown = true + rv end def length @@ -523,15 +531,19 @@ module Plugins }.join("\n") when /ignored?\s*plugins?/ return "no plugins were ignored" if @ignored.empty? - return @ignored.inject(Array.new) { |list, p| - case p[:reason] - when :loaded - list << "#{p[:name]} in #{p[:dir]} (overruled by previous)" - else - list << "#{p[:name]} in #{p[:dir]} (#{p[:reason].to_s})" - end - list - }.join(", ") + + tmp = Hash.new + @ignored.each do |p| + reason = p[:loaded] ? 'overruled by previous' : p[:reason].to_s + ((tmp[p[:dir]] ||= Hash.new)[reason] ||= Array.new).push(p[:name]) + end + + return tmp.map do |dir, reasons| + s = reasons.map { |r, list| + list.map { |_| _.sub(/\.rb$/, '') }.join(', ') + " (#{r})" + }.join('; ') + "in #{dir}: #{s}" + end.join('; ') when /^(\S+)\s*(.*)$/ key = $1 params = $2 @@ -622,7 +634,7 @@ module Plugins end # Returns the only PluginManagerClass instance - def Plugins.pluginmanager + def Plugins.manager return PluginManagerClass.instance end