    # File lib/rbot/plugins.rb, line 739
        def help(topic="")
          case topic
          when /fail(?:ed)?\s*plugins?.*(trace(?:back)?s?)?/
            # debug "Failures: #{@failed.inspect}"
            return _("no plugins failed to load") if @failed.empty?
            return @failed.collect { |p|
              _('%{highlight}%{plugin}%{highlight} in %{dir} failed with error %{exception}: %{reason}') % {
                  :highlight => Bold, :plugin => p[:name], :dir => p[:dir],
                  :exception => p[:reason].class, :reason => p[:reason],
              } + if $1 && !p[:reason].backtrace.empty?
                    _('at %{backtrace}') % {:backtrace => p[:reason].backtrace.join(', ')}
                  else
                    ''
                  end
            }.join("\n")
          when /ignored?\s*plugins?/
            return _('no plugins were ignored') if @ignored.empty?

            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|
              # FIXME get rid of these string concatenations to make gettext easier
              s = reasons.map { |r, list|
                list.map { |_| _.sub(/\.rb$/, '') }.join(', ') + " (#{r})"
              }.join('; ')
              "in #{dir}: #{s}"
            end.join('; ')
          when /^(\S+)\s*(.*)$/
            key = $1
            params = $2

            # Let's see if we can match a plugin by the given name
            (core_modules + plugins).each { |p|
              next unless p.name == key
              begin
                return p.help(key, params)
              rescue Exception => err
                #rescue TimeoutError, StandardError, NameError, SyntaxError => err
                error report_error("#{p.botmodule_class} #{p.name} help() failed:", err)
              end
            }

            # Nope, let's see if it's a command, and ask for help at the corresponding botmodule
            k = key.to_sym
            if commands.has_key?(k)
              p = commands[k][:botmodule]
              begin
                return p.help(key, params)
              rescue Exception => err
                #rescue TimeoutError, StandardError, NameError, SyntaxError => err
                error report_error("#{p.botmodule_class} #{p.name} help() failed:", err)
              end
            end
          end
          return false
        end