From 0d9a8ad81eac5a3b8ee704cc8b4e586d1bc62d2b Mon Sep 17 00:00:00 2001 From: Diego 'Flameeyes' Pettenò Date: Mon, 23 Jun 2008 18:39:12 +0200 Subject: Properly find out the available fortune categories. 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 | 69 ++++++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 31 deletions(-) (limited to 'data') diff --git a/data/rbot/plugins/fortune.rb b/data/rbot/plugins/fortune.rb index adb6a839..79a900fd 100644 --- a/data/rbot/plugins/fortune.rb +++ b/data/rbot/plugins/fortune.rb @@ -12,34 +12,40 @@ class FortunePlugin < Plugin "fortune [] => 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 -- cgit v1.2.3