diff options
author | Casey Link <kc@binaryelysium.com> | 2008-06-18 05:37:45 -0400 |
---|---|---|
committer | dmitry kim <jason@nichego.net> | 2008-06-18 14:05:56 +0400 |
commit | 86edc6b2367b3845df004d7ac5975f566bfbebfe (patch) | |
tree | a59a78465664affd2eb6170701dddec8deb7dfa3 | |
parent | bbcd4b0779250c55f312065a599b694b193f35ed (diff) |
* plugins/grouphug: cache the results from a page request, don't re-request until the cache has been used up.
-rw-r--r-- | data/rbot/plugins/grouphug.rb | 43 |
1 files changed, 30 insertions, 13 deletions
diff --git a/data/rbot/plugins/grouphug.rb b/data/rbot/plugins/grouphug.rb index 55e9a345..4e7eaf5d 100644 --- a/data/rbot/plugins/grouphug.rb +++ b/data/rbot/plugins/grouphug.rb @@ -4,10 +4,17 @@ # :title: Grouphug Plugin for rbot # # Author:: Mark Kretschmann <markey@web.de> +# Author:: Casey Link <unnamedrambler@gmail.com> # Copyright:: (C) 2005 Mark Kretschmann +# Copyright:: (C) 2008 Casey Link # License:: GPL v2 class GrouphugPlugin < Plugin + def initialize + super + @confessions = Array.new + end + def help( plugin, topic="" ) return "Grouphug plugin. Confess! Usage: 'confess' for random confession, 'confess <number>' for specific one." end @@ -15,20 +22,30 @@ class GrouphugPlugin < Plugin def confess(m, params) opts = { :cache => false } path = "random" - if params[:num] - path = "confessions/#{params[:num]}" - opts.delete(:cache) - end - begin - data = @bot.httputil.get("http://grouphug.us/#{path}", opts) - - reg = Regexp.new('(<div class="content")(.*?)(<p>)(.*?)(</p>)', - Regexp::MULTILINE) - confession = reg.match( data )[4].ircify_html - confession = "no confession ##{params[:num]} found" if confession.empty? and params[:num] - - m.reply confession + # Fetch a specific question - separate from cache + if params[:num] + path = "confessions/#{params[:num]}" + opts.delete(:cache) + data = @bot.httputil.get("http://grouphug.us/#{path}", opts) + + reg = Regexp.new('<div class="content">.*?<p>(.*?)</p>', Regexp::MULTILINE) + res = data.scan(reg) + confession = res[0][0].ircify_html + confession = "no confession ##{params[:num]} found" if confession.empty? and params[:num] + m.reply confession + else # Cache random confessions + if @confessions.empty? + data = @bot.httputil.get("http://grouphug.us/#{path}", opts) + reg = Regexp.new('<div class="content">.*?<p>(.*?)</p>', Regexp::MULTILINE) + res = data.scan(reg) + res.each do |quote| + @confessions << quote[0].ircify_html + end + end + confession = @confessions.pop + m.reply confession + end rescue m.reply "failed to connect to grouphug.us" end |