diff options
Diffstat (limited to 'lib/rbot/plugins/slashdot.rb')
-rw-r--r-- | lib/rbot/plugins/slashdot.rb | 95 |
1 files changed, 0 insertions, 95 deletions
diff --git a/lib/rbot/plugins/slashdot.rb b/lib/rbot/plugins/slashdot.rb deleted file mode 100644 index b09ac7a7..00000000 --- a/lib/rbot/plugins/slashdot.rb +++ /dev/null @@ -1,95 +0,0 @@ -require 'rexml/document' -require 'uri/common' - -class SlashdotPlugin < Plugin - include REXML - def help(plugin, topic="") - "slashdot search <string> [<max>=4] => search slashdot for <string>, slashdot [<max>=4] => return up to <max> slashdot headlines (use negative max to return that many headlines, but all on one line.)" - end - def privmsg(m) - if m.params && m.params =~ /^search\s+(.*)\s+(\d+)$/ - search = $1 - limit = $2.to_i - search_slashdot m, search, limit - elsif m.params && m.params =~ /^search\s+(.*)$/ - search = $1 - search_slashdot m, search - elsif m.params && m.params =~ /^([-\d]+)$/ - limit = $1.to_i - slashdot m, limit - else - slashdot m - end - end - - def search_slashdot(m, search, max=4) - begin - xml = @bot.httputil.get(URI.parse("http://slashdot.org/search.pl?content_type=rss&query=#{URI.escape(search)}")) - rescue URI::InvalidURIError, URI::BadURIError => e - m.reply "illegal search string #{search}" - return - end - unless xml - m.reply "search for #{search} failed" - return - end - begin - doc = Document.new xml - rescue REXML::ParseException => e - puts e - m.reply "couldn't parse output XML: #{e.class}" - return - end - unless doc - m.reply "search for #{search} failed" - return - end - max = 8 if max > 8 - done = 0 - doc.elements.each("*/item") {|e| - desc = e.elements["title"].text - desc.gsub!(/(.{150}).*/, '\1..') - reply = sprintf("%s | %s", e.elements["link"].text, desc) - m.reply reply - done += 1 - break if done >= max - } - end - - def slashdot(m, max=4) - xml = @bot.httputil.get(URI.parse("http://slashdot.org/slashdot.xml")) - unless xml - m.reply "slashdot news parse failed" - return - end - doc = Document.new xml - unless doc - m.reply "slashdot 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("*/story") {|e| - matches << [ e.elements["title"].text, - e.elements["author"].text, - e.elements["time"].text.gsub(/\d{4}-(\d{2})-(\d{2})/, "\\2/\\1").gsub(/:\d\d$/, "") ] - done += 1 - break if done >= max - } - if oneline - m.reply matches.collect{|mat| mat[0]}.join(" | ") - else - matches.each {|mat| - m.reply sprintf("%36s | %8s | %8s", mat[0][0,36], mat[1][0,8], mat[2]) - } - end - end -end -plugin = SlashdotPlugin.new -plugin.register("slashdot") |