    # File lib/rbot/messagemapper.rb, line 360
        def initialize(botmodule, template, hash={})
          raise ArgumentError, "Third argument must be a hash!" unless hash.kind_of?(Hash)
          @defaults = hash[:defaults].kind_of?(Hash) ? hash.delete(:defaults) : {}
          @requirements = hash[:requirements].kind_of?(Hash) ? hash.delete(:requirements) : {}
          @template = template
          case botmodule
          when String
            @botmodule = botmodule
          when Plugins::BotModule
            @botmodule = botmodule.name
          else
            raise ArgumentError, "#{botmodule.inspect} is not a botmodule nor a botmodule name"
          end

          self.items = template
          # @dyn_items is an array of MessageParameters, except for the first entry
          # which is the template
          @dyn_items = @items.collect { |it|
            if it.kind_of?(Symbol)
              i = it.to_s
              opt = MessageParameter.new(i)
              if i.sub!(/^\*/,"")
                opt.name = i
                opt.multi = true
              end
              opt.default = @defaults[opt.name]
              opt.collector = @requirements[opt.name]
              opt
            else
              nil
            end
          }
          @dyn_items.unshift(template).compact!
          debug "Items: #{@items.inspect}; dyn items: #{@dyn_items.inspect}"

          self.regexp = template
          debug "Command #{template.inspect} in #{@botmodule} will match using #{@regexp}"

          set_auth_path(hash)

          unless hash.has_key?(:action)
            hash[:action] = items[0]
          end

          @options = hash

          # debug "Create template #{self.inspect}"
        end