X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=data%2Frbot%2Fplugins%2Furl.rb;h=d08c24e837fea4fe2bb88b6829a7ba5e322fef8a;hb=1e841175468b3e0357ab278a226a237fe4d7687e;hp=c4fce2ae6a7f3d03d36385e51c08accb2ac89422;hpb=e6558c5cd4181e0ab2247b08fc9bfb4602610e00;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/data/rbot/plugins/url.rb b/data/rbot/plugins/url.rb index c4fce2ae..d08c24e8 100644 --- a/data/rbot/plugins/url.rb +++ b/data/rbot/plugins/url.rb @@ -57,8 +57,19 @@ class UrlPlugin < Plugin url = uri_str.kind_of?(URI) ? uri_str : URI.parse(uri_str) return if url.scheme !~ /https?/ - if url.host =~ @no_info_hosts - return "Sorry, info retrieval for #{url.host} is disabled" + # also check the ip, the canonical name and the aliases + begin + checks = TCPSocket.gethostbyname(url.host) + checks.delete_at(-2) + rescue => e + return "Unable to retrieve info for #{url.host}: #{e.message}" + end + + checks << url.host + checks.flatten! + + unless checks.grep(@no_info_hosts).empty? + return "Sorry, info retrieval for #{url.host} (#{checks.first}) is disabled" end logopts = opts.dup @@ -68,7 +79,7 @@ class UrlPlugin < Plugin begin debug "+ getting info for #{url.request_uri}" - info = Utils.get_html_info(url) + info = @bot.filter(:htmlinfo, url) debug info resp = info[:headers] @@ -120,19 +131,30 @@ class UrlPlugin < Plugin 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 - m.reply "Error #{e.message}" + 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}" end if display_info > urls_displayed - if title - m.reply("#{LINK_INFO} #{title}", :overlong => :truncate) + if reply + m.plainreply(reply, :overlong => :truncate) urls_displayed += 1 end end @@ -163,7 +185,8 @@ class UrlPlugin < Plugin return if m.address? escaped = URI.escape(m.message, OUR_UNSAFE) - urls = URI.extract(escaped) + urls = URI.extract(escaped, ['http', 'https']) + return if urls.empty? Thread.new { handle_urls(m, urls) } end