]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - data/rbot/plugins/fortune.rb
script plugin: per-script permissions
[user/henk/code/ruby/rbot.git] / data / rbot / plugins / fortune.rb
index d258e9baa22f33e6d83b1765fddd014dd778d73e..79a900fdd38c0ebba10d53229ade2b7f12255cc8 100644 (file)
@@ -1,5 +1,10 @@
+#-- vim:sw=2:et
+#++
+#
+# :title: Fortune plugin
+
 class FortunePlugin < Plugin
-  BotConfig.register BotConfigStringValue.new('fortune.path',
+  Config.register Config::StringValue.new('fortune.path',
     :default => '',
     :desc => "Full path to the fortune executable")
 
@@ -7,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
@@ -62,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