# Author: Michael Brailsford # aka brailsmt # Purpose: To respond to requests for information from the ri command line # utility. class RiPlugin < Plugin @@handlers = { "ri" => "ri_handler", "msgri" => "msgri_handler" } #{{{ def initialize super @cache = Hash.new end #}}} #{{{ def privmsg(m) if not m.params m.reply "uhmm... whatever" return end meth = self.method(@@handlers[m.plugin]) meth.call(m) end #}}} #{{{ def cleanup @cache = nil end #}}} #{{{ def ri_handler(m) response = "" if @cache[m.params] response = @cache[m.params] else IO.popen("-") {|p| if(p) response = p.readlines.join "\n" @cache[m.params] = response else $stderr = $stdout exec("ri", m.params) end } @cache[m.params] = response end @bot.say m.sourcenick, response m.reply "Finished \"ri #{m.params}\"" end #}}} #{{{ def msgri_handler(m) response = "" tell_nick, query = m.params.split() if @cache[query] response = @cache[query] else IO.popen("-") {|p| if(p) response = p.readlines.join "\n" @cache[m.params] = response else $stderr = $stdout exec("ri", query) end } @cache[query] = response end @bot.say tell_nick, response m.reply "Finished telling #{tell_nick} about \"ri #{query}\"" end #}}} end plugin = RiPlugin.new plugin.register("ri") plugin.register("msgri")