]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/commitdiff
Properly find out the available fortune categories.
authorDiego 'Flameeyes' Pettenò <flameeyes@gmail.com>
Mon, 23 Jun 2008 16:39:12 +0000 (18:39 +0200)
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Mon, 23 Jun 2008 17:46:47 +0000 (19:46 +0200)
Instead of hardcoding the fortune categories path, ask fortune itself
to report which categories you can get the quotes from.

This fixes the fortune plugin on Gentoo for instance where the
databases are installed in /usr/share/fortune rather than
/usr/games/share/fortune.

data/rbot/plugins/fortune.rb

index adb6a839a656a0897387508d6792ed63792b222d..79a900fdd38c0ebba10d53229ade2b7f12255cc8 100644 (file)
@@ -12,34 +12,40 @@ class FortunePlugin < Plugin
     "fortune [<category>] => get a (short) fortune, optionally specifying fortune category || fortune categories => show categories"
   end
 
-
-  ## Pick a fortune
-  def fortune(m, params)
-    db = params[:db]
+  def find_fortune
     fortune = @bot.config['fortune.path']
-    if fortune.empty?
-      ["/usr/bin/fortune",
-       "/usr/share/bin/fortune",
-       "/usr/games/fortune",
-       "/usr/local/games/fortune",
-       "/usr/local/bin/fortune"].each do |f|
-          if FileTest.executable? f
-            fortune = f
+    return fortune if fortune
 
-            # Try setting the config entry
-            config_par = {:key => 'fortune.path', :value => [f], :silent => true }
-           debug "Setting fortune.path to #{f}"
-            set_path = @bot.plugins['config'].handle_set(m, config_par)
-            if set_path
-              debug "fortune.path set to #{@bot.config['fortune.path']}"
-            else
-              debug "couldn't set fortune.path"
-            end
+    ["/usr/bin/fortune",
+     "/usr/share/bin/fortune",
+     "/usr/games/fortune",
+     "/usr/local/games/fortune",
+     "/usr/local/bin/fortune"].each do |f|
+      if FileTest.executable? f
+        fortune = f
+        break
+      end
+    end
 
-            break
-          end
-        end
+    return nil unless fortune
+      
+    # Try setting the config entry
+    config_par = {:key => 'fortune.path', :value => [fortune], :silent => true }
+    debug "Setting fortune.path to #{fortune}"
+    set_path = @bot.plugins['config'].handle_set(m, config_par)
+    if set_path
+      debug "fortune.path set to #{@bot.config['fortune.path']}"
+    else
+      debug "couldn't set fortune.path"
     end
+
+    return fortune
+  end
+
+  ## Pick a fortune
+  def fortune(m, params)
+    db = params[:db]
+    fortune = find_fortune
     m.reply "fortune executable not found (try setting the 'fortune.path' variable)" unless fortune
 
     begin
@@ -67,17 +73,18 @@ class FortunePlugin < Plugin
     m.reply ret
   end
 
-
   # Print the fortune categories
   def categories(m, params)
-    ## list all fortune files in /usr/share/games/fortune
-    categories = Dir["/usr/share/games/fortune/*"].select{ |f|
-      File.split(f).last.match(/^\w+$/)
+    fortune = find_fortune
+    m.reply "fortune executable not found (try setting the 'fortune.path' variable)" unless fortune
+
+    ## list all fortune databases
+    categories = Utils.safe_exec(fortune, "-f").split(/\n+ */).map{ |f|
+      f.split[1]
     }.select{ |f|
-      File.file?(f)
-    }.map{ |p|
-      File.split(p).last
+      f[0..0] != '/'
     }.sort
+
     ## say 'em!
     m.reply "Fortune categories: #{categories.join ', '}"
   end