diff options
Diffstat (limited to 'data/rbot')
-rw-r--r-- | data/rbot/plugins/fortune.rb | 69 |
1 files changed, 38 insertions, 31 deletions
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 [<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 |