]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - data/rbot/plugins/factoids.rb
factoids plugin: an empty trigger_pattern list means any word is a keyword
[user/henk/code/ruby/rbot.git] / data / rbot / plugins / factoids.rb
index ca95d00354751f02958501a2e6b6b620b23cdcbd..f2dbeeafeca8568235458d64e2d6ab54560d8aa3 100644 (file)
@@ -90,7 +90,10 @@ class FactoidsPlugin < Plugin
       "(.*?)\\s+(is|are)\\s+.*",
     ],
     :on_change => Proc.new { |bot, v| bot.plugins['factoids'].reset_triggers },
-    :desc => "A list of regular expressions matching factoids where keywords can be identified. append ':n' if the keyword is defined by the n-th group instead of the first")
+    :desc => "A list of regular expressions matching factoids where keywords can be identified. append ':n' if the keyword is defined by the n-th group instead of the first. if the list is empty, any word will be considered a keyword")
+  Config.register Config::BooleanValue.new('factoids.address',
+    :default => true,
+    :desc => "Should the bot reply with relevant factoids only when addressed with a direct question? If not, the bot will attempt to lookup foo if someone says 'foo?' in channel")
 
   def initialize
     super
@@ -164,6 +167,7 @@ class FactoidsPlugin < Plugin
   end
 
   def trigger_patterns_to_rx
+    return [] if @bot.config['factoids.trigger_pattern'].empty?
     @bot.config['factoids.trigger_pattern'].inject([]) { |list, str|
       s = str.dup
       if s =~ /:(\d+)$/
@@ -182,19 +186,24 @@ class FactoidsPlugin < Plugin
     else
       regs = rx
     end
-    regs.inject([]) { |list, a|
-      r = a.first
-      i = a.last
-      m = r.match(f.to_s)
-      if m
-        list << m[i]
-      else
-        list
-      end
-    }
+    if regs.empty?
+      f.to_s.scan(/\w+/u)
+    else
+      regs.inject([]) { |list, a|
+        r = a.first
+        i = a.last
+        m = r.match(f.to_s)
+        if m
+          list << m[i].downcase
+        else
+          list
+        end
+      }
+    end
   end
 
   def reset_triggers
+    return unless @factoids
     start_time = Time.now
     rx = trigger_patterns_to_rx
     triggers = @factoids.inject(Set.new) { |set, f|
@@ -301,6 +310,17 @@ class FactoidsPlugin < Plugin
     end
   end
 
+  def unreplied(m)
+    return if @bot.config['factoids.address'] and !m.address?
+    return if @factoids.empty?
+    return if @triggers.empty?
+    return unless m.message =~ /^(.*)\?\s*$/
+    query = $1.strip.downcase
+    if @triggers.include?(query)
+      facts(m, :words => query)
+    end
+  end
+
   def fact(m, params)
     fact = nil
     idx = 0