]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - data/rbot/plugins/bash.rb
bash plugin: a nick is such only if it's followed by a space
[user/henk/code/ruby/rbot.git] / data / rbot / plugins / bash.rb
index 93d9c3f2af77f54844bb77b2edd7b79f3dbd4f79..cb33a4d48353076c75c66a3d9610b0681fc5158c 100644 (file)
 require 'rexml/document'
 
 class ::BashQuote
-  attr_accessor :num, :text, :vote
+  attr_accessor :num, :text, :irc_text, :vote
 
   def initialize(num, text, vote)
     @num = num.to_i
     @text = text
     @vote = vote
+    @irc_text = mk_irc_text
   end
 
   def url
     "http://www.bash.org/?#{@num}"
   end
 
+  private
+  def mk_irc_text
+    cur_nick = nil
+    last_nick = nil
+    text = String.new
+    @text.each_line { |l|
+      debug "line: #{l.inspect}"
+      cur_nick = l.match(/^\s*(<.*?>|\(.*?\)|.*?:)\s/)[1] rescue nil
+      debug "nick: #{cur_nick.inspect}; last: #{last_nick.inspect}"
+      if cur_nick and cur_nick == last_nick
+        text << l.sub(cur_nick,"")
+      else
+        last_nick = cur_nick.dup if cur_nick
+        text << l
+      end
+    }
+    debug text
+    # TODO: the gsub of br tags to | should be an ircify_html option
+    text.gsub(/(?:<br \/>\s*)+/, ' | ').ircify_html
+  end
+
 end
 
 class BashPlugin < Plugin
@@ -98,8 +120,7 @@ class BashPlugin < Plugin
       # may want to echo more than one for latest/random
       quote = quotes.first
     end
-    # TODO: the gsub of br tags to | should be an ircify_html option
-    m.reply "#%d (%d): %s" % [quote.num, quote.vote, quote.text.gsub(/(?:<br \/>\s*)+/, ' | ').ircify_html]
+    m.reply "#%d (%d): %s" % [quote.num, quote.vote, quote.irc_text]
   end
 
   def xml_bash(m, id=nil)