Sha256: 6a90010790cbddf2348c5a23c74d0c9b1b5d9a2af31345ada8b685ac08ce730c

Contents?: true

Size: 1.8 KB

Versions: 2

Compression:

Stored size: 1.8 KB

Contents

module JohnDoe
  class Response
    attr_accessor :text, :emotion
    def initialize(t,e)
      @text = t
      @emotion = e[rand(e.size)]
    end
  end
  class Responser
    def initialize(data)
      @data = data
    end

    def response(sentence)
      max_priority = -1
      best_v = nil
      best_k = nil

      @data.patterns.each do |k,v|
        if (/^#{k}/i =~ sentence)
          next if v[:priority] <= max_priority
          max_priority = v[:priority]
          best_v = v
          best_k = k
        end
      end
      unless best_v.nil?
        return Response.new(sub_v(random_quote(@data.responses[best_v[:resp]], /^#{best_k}/i.match(sentence).captures)),best_v[:emotions])
      else
        return Response.new(sub_v(random_quote(@data.default["dontunderstand"])),["none"])
      end
    end

    #substitute variables
    def sub_v(s)
      while (nil != (match = /(([a-z]+:)([a-z]+)+)/.match s))
        s.gsub!(match[0],get_data(match[0]))
      end
      return s
    end

    #get_data bot:name
    def get_data(path)
      root = @data.knowledge
      path.split(":").each {|v|root = root[v]}
      return root
    end

    def random_quote(s, subjects = [])
      return subject_replace(s[rand(s.size)], subjects)
    end

    def subject_replace(s,subjects = [])
      return s if subjects.empty?
      return s.gsub("$",describe_who(subjects[0]))
    end

    def describe_who(s)
      s = s.gsub(/([^a-z])am\s+i([^a-z]|$)/,"\\1#AMI#\\2").gsub(/([^a-z])i\s+am([^a-z]|$)/,"\\1#IAM#\\2").gsub(/([^a-z])you\s+are([^a-z]|$)/,"\\1#AREYOU#\\2").gsub(/([^a-z])are\s+you([^a-z]|$)/,"\\1#AREYOU#\\2").gsub(/([^a-z])me([^a-z]|$)/,"\\1#ME#\\2").gsub(/([^a-z])you([^a-z]|$)/,"\\1#YOU#\\2")
      s.gsub("#AMI#","you are").gsub("#IAM#","you are").gsub("#AREYOU#","I am").gsub("#ME#","you").gsub("#YOU#","me")
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
john-doe-0.1.4 lib/johndoe/responser.rb
john-doe-0.1.2 lib/johndoe/responser.rb