X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=data%2Frbot%2Fplugins%2Furl.rb;h=e380f29b6d428a771a9361b4ee2d8af66d8b876c;hb=16336b4a240a4265d1f2df1e30d7b68d3a924287;hp=d08c24e837fea4fe2bb88b6829a7ba5e322fef8a;hpb=1722077126d2b9407f0811dbe7298b730cabf178;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/data/rbot/plugins/url.rb b/data/rbot/plugins/url.rb index d08c24e8..e380f29b 100644 --- a/data/rbot/plugins/url.rb +++ b/data/rbot/plugins/url.rb @@ -28,7 +28,9 @@ class UrlPlugin < Plugin :default => ['localhost', '^192\.168\.', '^10\.', '^127\.', '^172\.(1[6-9]|2\d|31)\.'], :on_change => Proc.new { |bot, v| bot.plugins['url'].reset_no_info_hosts }, :desc => "A list of regular expressions matching hosts for which no info should be provided") - + Config.register Config::ArrayValue.new('url.only_on_channels', + :desc => "Show link info only on these channels", + :default => []) def initialize super @@ -69,7 +71,7 @@ class UrlPlugin < Plugin checks.flatten! unless checks.grep(@no_info_hosts).empty? - return "Sorry, info retrieval for #{url.host} (#{checks.first}) is disabled" + return ( opts[:always_reply] ? "Sorry, info retrieval for #{url.host} (#{checks.first}) is disabled" : false ) end logopts = opts.dup @@ -120,7 +122,18 @@ class UrlPlugin < Plugin 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']) + def handle_urls(m, params={}) + opts = { + :display_info => @bot.config['url.display_link_info'], + :channels => @bot.config['url.only_on_channels'] + }.merge params + urls = opts[:urls] + display_info= opts[:display_info] + channels = opts[:channels] + unless channels.empty? + return unless channels.map { |c| c.downcase }.include?(m.channel.downcase) + end + return if urls.empty? debug "found urls #{urls.inspect}" list = m.public? ? @registry[m.target] : nil @@ -128,12 +141,13 @@ class UrlPlugin < Plugin urls_displayed = 0 urls.each do |urlstr| debug "working on #{urlstr}" - next unless urlstr =~ /^https?:/ + next unless urlstr =~ /^https?:\/\/./ title = nil debug "Getting title for #{urlstr}..." reply = nil begin title = get_title_for_url(urlstr, + :always_reply => m.address?, :nick => m.source.nick, :channel => m.channel, :ircline => m.message) @@ -154,7 +168,8 @@ class UrlPlugin < Plugin if display_info > urls_displayed if reply - m.plainreply(reply, :overlong => :truncate) + m.reply reply, :overlong => :truncate, :to => :public, + :nick => (m.address? ? :auto : false) urls_displayed += 1 end end @@ -177,17 +192,21 @@ class UrlPlugin < Plugin def info(m, params) escaped = URI.escape(params[:urls].to_s, OUR_UNSAFE) urls = URI.extract(escaped) - Thread.new { handle_urls(m, urls, params[:urls].length) } + Thread.new do + handle_urls(m, + :urls => urls, + :display_info => params[:urls].length, + :channels => []) + end end - def listen(m) - return unless m.kind_of?(PrivMessage) + def message(m) return if m.address? escaped = URI.escape(m.message, OUR_UNSAFE) urls = URI.extract(escaped, ['http', 'https']) return if urls.empty? - Thread.new { handle_urls(m, urls) } + Thread.new { handle_urls(m, :urls => urls) } end def reply_urls(opts={})