+ call_event(:url_added, url.to_s, logopts)
+ if title
+ extra.unshift("#{Bold}title#{Bold}: #{title}")
+ end
+ return extra.join(", ") if title or not @bot.config['url.titles_only']
+ end
+
+ def handle_urls(m, urls, display_info=@bot.config['url.display_link_info'])
+ return if urls.empty?
+ debug "found urls #{urls.inspect}"
+ list = m.public? ? @registry[m.target] : nil
+ debug "display link info: #{display_info}"
+ urls_displayed = 0
+ urls.each do |urlstr|
+ debug "working on #{urlstr}"
+ next unless urlstr =~ /^https?:/
+ title = nil
+ debug "Getting title for #{urlstr}..."
+ reply = nil
+ begin
+ title = get_title_for_url(urlstr,
+ :nick => m.source.nick,
+ :channel => m.channel,
+ :ircline => m.message)
+ debug "Title #{title ? '' : 'not '} found"
+ reply = "#{LINK_INFO} #{title}" if title
+ rescue => e
+ debug e
+ # we might get a 404 because of trailing punctuation, so we try again
+ # 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?:\/\/./
+ end
+ reply = "Error #{e.message}"