X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=data%2Frbot%2Fplugins%2Ffortune.rb;h=3e2ffdf719a7b7dbd1cfa729bc280c0d1cb3fb7e;hb=052217de30c59206d7025b582d4604557a747470;hp=467d452dffce28521da225d3b40425f813f6c033;hpb=0109f67cc75ceded351b0023c6fb77d9bcccbcd1;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/data/rbot/plugins/fortune.rb b/data/rbot/plugins/fortune.rb index 467d452d..3e2ffdf7 100644 --- a/data/rbot/plugins/fortune.rb +++ b/data/rbot/plugins/fortune.rb @@ -1,44 +1,61 @@ +#-- 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") + Config.register Config::ArrayValue.new('fortune.options', + :default => ['-n', '350', '-s'], + :desc => "Options to be passed on to fortune") def help(plugin, topic="") "fortune [] => get a (short) fortune, optionally specifying fortune category || fortune categories => show categories" end + def find_fortune(m) + fortune = @bot.config['fortune.path'] + return fortune if fortune and not 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 + 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 = @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 - - # 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 - - break - end - end - end + fortune = find_fortune(m) m.reply "fortune executable not found (try setting the 'fortune.path' variable)" unless fortune + command = [fortune] + @bot.config['fortune.options'] + command << params[:db] + command.compact! + begin - ret = Utils.safe_exec(fortune, "-n", "350", "-s", db) + ret = Utils.safe_exec(*command) ## cleanup ret ret = ret.split(/\n+/).map do |l| @@ -62,15 +79,22 @@ 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+$/}.select{|f|File.file? f}.map{|p|File.split(p).last}.sort + fortune = find_fortune(m) + 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| + f[0..0] != '/' + }.sort + ## say 'em! m.reply "Fortune categories: #{categories.join ', '}" end - + end plugin = FortunePlugin.new plugin.map 'fortune categories', :action => "categories"