]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - lib/rbot/plugins.rb
Utils: when looking for the first par in a web page, look after any header, not just...
[user/henk/code/ruby/rbot.git] / lib / rbot / plugins.rb
index d29d21c16cbf63a399afb59a8b23ac8999b3671b..7b476da93a5819bdbfb359a5e9c73a8d99aa8a77 100644 (file)
@@ -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_
@@ -489,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
@@ -503,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
@@ -528,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
@@ -627,7 +634,7 @@ module Plugins
   end
 
   # Returns the only PluginManagerClass instance
-  def Plugins.pluginmanager
+  def Plugins.manager
     return PluginManagerClass.instance
   end