filter (::Bot)

    # File lib/rbot/core/utils/filters.rb, line 63
        def filter(*args)
          @filters ||= {}
          if Hash === args.last
            # the stream is a Hash, check if the previous element is not a Symbol
            if Symbol === args[-2]
              ds = DataStream.new(args.pop)
            else
              ds = DataStream.new(*args.slice!(-2, 2))
            end
          else
            # the stream is just whatever else
            ds = DataStream.new(args.pop)
          end
          names = args.dup
          return ds if names.empty?
          # check if filters exist
          missing = names - @filters.keys
          raise "Missing filters: #{missing.join(', ')}" unless missing.empty?
          fs = @filters.values_at(*names)
          fs.inject(ds) { |mid, f| mid = f.call(mid) }
        end