X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=data%2Frbot%2Fplugins%2Fgrouphug.rb;h=1b08de2c338f92d71788f2ee8d8c522be6d4a606;hb=052217de30c59206d7025b582d4604557a747470;hp=5a1890a23898acab28608d806089f2a98ba74a62;hpb=edbd40c4a968645bd340a7300b429bd4856ee5b8;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/data/rbot/plugins/grouphug.rb b/data/rbot/plugins/grouphug.rb index 5a1890a2..1b08de2c 100644 --- a/data/rbot/plugins/grouphug.rb +++ b/data/rbot/plugins/grouphug.rb @@ -10,11 +10,13 @@ # License:: GPL v2 class GrouphugPlugin < Plugin + START = '
\s*

(.*?)

\s+
', Regexp::MULTILINE) REGPOST = Regexp.new('title>(.*?) \| Group Hug') def initialize super @confessions = Array.new + @bot.register_filter(:grouphug, :htmlinfo) { |s| grouphug_filter(s) } end def help( plugin, topic="" ) @@ -45,6 +47,15 @@ class GrouphugPlugin < Plugin end end + def get_confessions(html) + return [] unless html + start = html.index(START) + res = html[start, html.length - start].scan(REG) + return [] unless res + return res.map { |quote| + quote[0].ircify_html + } + end def confess(m, params) opts = { :cache => false } @@ -55,27 +66,43 @@ class GrouphugPlugin < Plugin path = "confessions/#{params[:num]}" opts.delete(:cache) data = @bot.httputil.get("http://grouphug.us/#{path}", opts) - - res = data.scan(REG) - confession = res[2][0].ircify_html # use res[2] to skip the new sidebar "Group Hug is run by one person..." and other text. - confession = "no confession ##{params[:num]} found" if confession.empty? and params[:num] - m.reply confession + confessions = get_confessions(data) + if confessions.length > 1 + warn "more than one confession found!" + warn confessions + end + confessions << "no confession ##{params[:num]} found" if confessions.empty? + m.reply confessions.first 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 + @confessions.replace get_confessions(data) end - confession = @confessions.pop - m.reply confession + @confessions << "no confessions found!" if @confessions.empty? + m.reply @confessions.pop end rescue Exception => e error e m.reply "failed to connect to grouphug.us" end end + + def grouphug_filter(s) + # check if we like the location of the page + loc = Utils.check_location(s, %r{http://(?:.*\.)?grouphug\.us}) + return unless loc + # check if there are any conefssions + confessions = get_confessions(s[:text]) + return if confessions.empty? + title = s[:text].ircify_html_title + # return the first confession + return { + :title => title, + :content => confessions.first, + :grouphug_confessions => confessions + } + end + end