X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=data%2Frbot%2Fplugins%2Fgrouphug.rb;h=f08f57533829dfd3943615a2e881691dbf11870f;hb=1fa68bb86705b0e1e70d9d655bbfd8e1e13eb093;hp=32a6e55ecd2b39293bd7f6824d0125d8f3b73049;hpb=0cc10dda002cdd1568aed585c38fa6cf63db77fd;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/data/rbot/plugins/grouphug.rb b/data/rbot/plugins/grouphug.rb index 32a6e55e..f08f5753 100644 --- a/data/rbot/plugins/grouphug.rb +++ b/data/rbot/plugins/grouphug.rb @@ -4,10 +4,18 @@ # :title: Grouphug Plugin for rbot # # Author:: Mark Kretschmann +# Author:: Casey Link # Copyright:: (C) 2005 Mark Kretschmann +# Copyright:: (C) 2008 Casey Link # License:: GPL v2 class GrouphugPlugin < Plugin + REG = Regexp.new('
\s*

(.*?)

\s+
', Regexp::MULTILINE) + def initialize + super + @confessions = Array.new + end + def help( plugin, topic="" ) return "Grouphug plugin. Confess! Usage: 'confess' for random confession, 'confess ' for specific one." end @@ -15,24 +23,30 @@ class GrouphugPlugin < Plugin def confess(m, params) opts = { :cache => false } path = "random" - if params[:num] - path = "confessions/#{params[:num]}" - opts.delete(:cache) - end - - Thread.start do - begin + begin + # 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('()(.*?)(

)', - Regexp::MULTILINE) - confession = reg.match( data )[4].ircify_html + 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 - rescue - m.reply "failed to connect to grouphug.us" + else # Cache random confessions + if @confessions.empty? + data = @bot.httputil.get("http://grouphug.us/#{path}", opts) + 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 end end @@ -40,6 +54,8 @@ end plugin = GrouphugPlugin.new -plugin.map "grouphug [:num]", :action => :confess, :requirements => { :num => /\d+/ } -plugin.map "confess [:num]", :action => :confess, :requirements => { :num => /\d+/ } +plugin.map "grouphug [:num]", + :thread => true, :action => :confess, :requirements => { :num => /\d+/ } +plugin.map "confess [:num]", + :thread => true, :action => :confess, :requirements => { :num => /\d+/ }