]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - data/rbot/plugins/url.rb
chucknorris: read gzip stream before passing it to YAML.load
[user/henk/code/ruby/rbot.git] / data / rbot / plugins / url.rb
index 56e461d6d087101781ecbc32ea127f7dffd2b3d6..3faeeab91e33ea056d97d77cf2f10a56c56c7cc3 100644 (file)
@@ -15,12 +15,24 @@ class UrlPlugin < Plugin
   Config.register Config::IntegerValue.new('url.display_link_info',
     :default => 0,
     :desc => "Get the title of links pasted to the channel and display it (also tells if the link is broken or the site is down). Do it for at most this many links per line (set to 0 to disable)")
+  Config.register Config::BooleanValue.new('url.auto_shorten',
+    :default => false,
+    :desc => "Automatically spit out shortened URLs when they're seen. Check shortenurls for config options")
+  Config.register Config::IntegerValue.new('url.auto_shorten_min_length',
+    :default => 48,
+    :desc => "Minimum length of URL to auto-shorten.  Only has an effect when url.auto_shorten is true.")
   Config.register Config::BooleanValue.new('url.titles_only',
     :default => false,
     :desc => "Only show info for links that have <title> tags (in other words, don't display info for jpegs, mpegs, etc.)")
   Config.register Config::BooleanValue.new('url.first_par',
     :default => false,
     :desc => "Also try to get the first paragraph of a web page")
+  Config.register Config::IntegerValue.new('url.first_par_length',
+    :default => 150,
+    :desc => "The max length of the first paragraph")
+  Config.register Config::ArrayValue.new('url.first_par_whitelist',
+    :default => ['twitter.com'],
+    :desc => "List of url patterns to show the content for.")
   Config.register Config::BooleanValue.new('url.info_on_list',
     :default => false,
     :desc => "Show link info when listing/searching for urls")
@@ -87,14 +99,30 @@ class UrlPlugin < Plugin
     begin
       debug "+ getting info for #{url.request_uri}"
       info = @bot.filter(:htmlinfo, url)
-      debug info
+      logopts[:htmlinfo] = info
       resp = info[:headers]
 
       logopts[:title] = title = info[:title]
 
       if info[:content]
         logopts[:extra] = info[:content]
-        extra << "#{Bold}text#{Bold}: #{info[:content]}" if @bot.config['url.first_par']
+
+        max_length = @bot.config['url.first_par_length']
+
+        whitelist = @bot.config['url.first_par_whitelist']
+        content = nil
+        if whitelist.length > 0
+          whitelist.each do |pattern|
+            if Regexp.new(pattern, Regexp::IGNORECASE).match(url.to_s)
+              content = info[:content][0...max_length]
+              break
+            end
+          end
+        else
+          content = info[:content][0...max_length]
+        end
+
+        extra << "#{Bold}text#{Bold}: #{content}" if @bot.config['url.first_par'] and content
       else
         logopts[:extra] = String.new
         logopts[:extra] << "Content Type: #{resp['content-type']}"
@@ -152,6 +180,11 @@ class UrlPlugin < Plugin
     urls.each do |urlstr|
       debug "working on #{urlstr}"
       next unless urlstr =~ /^https?:\/\/./
+      if @bot.config['url.auto_shorten'] == true and
+         urlstr.length >= @bot.config['url.auto_shorten_min_length']
+        m.reply(bot.plugins['shortenurls'].shorten(nil, {:url=>urlstr, :called=>true}))
+        next
+      end
       title = nil
       debug "Getting title for #{urlstr}..."
       reply = nil