summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2007-04-12 00:42:16 +0000
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2007-04-12 00:42:16 +0000
commit37fb9f96d582d24ffb9bbc14cc75fc9fec52ace3 (patch)
treee36fc460b46cbbbd662f6663dce610d417d10902
parentf73a5f3e63b6c68fb04e3d58f97e500bfdd93f51 (diff)
url plugin: store info with urls, optionally display it when listing or searching for urls
-rw-r--r--data/rbot/plugins/url.rb47
1 files changed, 35 insertions, 12 deletions
diff --git a/data/rbot/plugins/url.rb b/data/rbot/plugins/url.rb
index 8a46af59..8c064dcc 100644
--- a/data/rbot/plugins/url.rb
+++ b/data/rbot/plugins/url.rb
@@ -1,4 +1,7 @@
-Url = Struct.new("Url", :channel, :nick, :time, :url)
+Url = Struct.new("Url", :channel, :nick, :time, :url, :info)
+
+class ::UrlLinkError < RuntimeError
+end
class UrlPlugin < Plugin
TITLE_RE = /<\s*?title\s*?>(.+?)<\s*?\/title\s*?>/im
@@ -16,6 +19,10 @@ class UrlPlugin < Plugin
BotConfig.register BotConfigBooleanValue.new('url.first_par',
:default => false,
:desc => "Also try to get the first paragraph of a web page")
+ BotConfig.register BotConfigBooleanValue.new('url.info_on_list',
+ :default => false,
+ :desc => "Show link info when listing/searching for urls")
+
def initialize
super
@@ -82,12 +89,17 @@ class UrlPlugin < Plugin
return "#{Bold}type#{Bold}: #{resp['content-type']}#{size}#{extra}"
end
else
- return "Error getting link (#{resp.code} - #{resp.message})"
+ raise UrlLinkError, "getting link (#{resp.code} - #{resp.message})"
end
}
rescue Exception => e
- error e
- return "Error connecting to site (#{e.message})"
+ case e
+ when UrlLinkError
+ raise e
+ else
+ error e
+ raise "connecting to site/processing information (#{e.message})"
+ end
end
end
@@ -100,6 +112,7 @@ class UrlPlugin < Plugin
urlstr = $1
list = @registry[m.target]
+ title = nil
if @bot.config['url.display_link_info']
Thread.start do
debug "Getting title for #{urlstr}..."
@@ -112,7 +125,7 @@ class UrlPlugin < Plugin
debug "Title not found!"
end
rescue => e
- debug "Failed: #{e}"
+ m.reply "Error #{e.message}"
end
end
end
@@ -120,7 +133,7 @@ class UrlPlugin < Plugin
# check to see if this url is already listed
return if list.find {|u| u.url == urlstr }
- url = Url.new(m.target, m.sourcenick, Time.new, urlstr)
+ url = Url.new(m.target, m.sourcenick, Time.new, urlstr, title)
debug "#{list.length} urls so far"
if list.length > @bot.config['url.max_urls']
list.pop
@@ -133,6 +146,20 @@ class UrlPlugin < Plugin
end
end
+ def reply_urls(m, list, max)
+ list[0..(max-1)].each do |url|
+ disp = "[#{url.time.strftime('%Y/%m/%d %H:%M:%S')}] <#{url.nick}> #{url.url}"
+ if @bot.config['url.info_on_list']
+ title = url.info || get_title_for_url(url.url) rescue nil
+ if title and not url.info
+ url.info = title
+ end
+ disp << " --> #{title}" if title
+ end
+ m.reply disp, :overlong => :truncate
+ end
+ end
+
def urls(m, params)
channel = params[:channel] ? params[:channel] : m.target
max = params[:limit].to_i
@@ -142,9 +169,7 @@ class UrlPlugin < Plugin
if list.empty?
m.reply "no urls seen yet for channel #{channel}"
else
- list[0..(max-1)].each do |url|
- m.reply "[#{url.time.strftime('%Y/%m/%d %H:%M:%S')}] <#{url.nick}> #{url.url}"
- end
+ reply_urls(m, list, max)
end
end
@@ -161,9 +186,7 @@ class UrlPlugin < Plugin
if list.empty?
m.reply "no matches for channel #{channel}"
else
- list[0..(max-1)].each do |url|
- m.reply "[#{url.time.strftime('%Y/%m/%d %H:%M:%S')}] <#{url.nick}> #{url.url}"
- end
+ reply_urls(m, list, max)
end
end
end