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.)")
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]
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
# with the last character stripped. this might generate invalid URIs
# (e.g. because "some.url" gets chopped to some.url%2, so catch that too
if e.message =~ /\(404 - Not Found\)/i or e.kind_of?(URI::InvalidURIError)
- # chop off last character, and retry if we still have enough string to
- # look like a minimal URL
- retry if urlstr.chop! and urlstr =~ /^https?:\/\/./
+ # chop off last non-word character from the unescaped version of
+ # the URL, and retry if we still have enough string to look like a
+ # minimal URL
+ unescaped = URI.unescape(urlstr)
+ debug "Unescaped: #{unescaped}"
+ if unescaped.sub!(/\W$/,'') and unescaped =~ /^https?:\/\/./
+ urlstr.replace URI.escape(unescaped, OUR_UNSAFE)
+ retry
+ else
+ debug "Not retrying #{unescaped}"
+ end
end
reply = "Error #{e.message}"
end