summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCasey Link <kc@binaryelysium.com>2008-06-18 05:37:45 -0400
committerdmitry kim <jason@nichego.net>2008-06-18 14:05:56 +0400
commit86edc6b2367b3845df004d7ac5975f566bfbebfe (patch)
treea59a78465664affd2eb6170701dddec8deb7dfa3
parentbbcd4b0779250c55f312065a599b694b193f35ed (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.rb43
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