diff options
Diffstat (limited to 'data/rbot/plugins/digg.rb')
-rw-r--r-- | data/rbot/plugins/digg.rb | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/data/rbot/plugins/digg.rb b/data/rbot/plugins/digg.rb new file mode 100644 index 00000000..e125d3c4 --- /dev/null +++ b/data/rbot/plugins/digg.rb @@ -0,0 +1,51 @@ +# Hacked up slashdot headlines plugin... + +require 'time' +require 'rexml/document' +require 'uri/common' + +class DiggPlugin < Plugin + include REXML + def help(plugin, topic="") + "digg [<max>=5] => show digg headlines, [<max>=5] => return up to <max> headlines (use a negative number to show all the headlines on one line)" + end + + def digg(m, params) + max = params[:limit].to_i + puts "max is #{max}" + xml = @bot.httputil.get(URI.parse("http://digg.com/rss/index.xml")) + unless xml + m.reply "digg news parse failed" + return + end + doc = Document.new xml + unless doc + m.reply "digg news parse failed (invalid xml)" + return + end + done = 0 + oneline = false + if max < 0 + max = (0 - max) + oneline = true + end + max = 8 if max > 8 + matches = Array.new + doc.elements.each("rss/channel/item") {|e| + matches << [ e.elements["title"].text, + Time.parse(e.elements["pubDate"].text).strftime('%a @ %I:%M%p') ] + done += 1 + break if done >= max + } + if oneline + m.reply matches.collect{|mat| mat[0]}.join(" | ") + else + matches.each {|mat| + m.reply sprintf("%42s | %13s", mat[0][0,42], mat[1]) + } + end + end +end +plugin = DiggPlugin.new +plugin.map 'digg :limit', :defaults => {:limit => 5}, + :requirements => {:limit => /^-?\d+$/} |