summaryrefslogtreecommitdiff
path: root/data/rbot/plugins/rss.rb
diff options
context:
space:
mode:
Diffstat (limited to 'data/rbot/plugins/rss.rb')
-rw-r--r--data/rbot/plugins/rss.rb28
1 files changed, 26 insertions, 2 deletions
diff --git a/data/rbot/plugins/rss.rb b/data/rbot/plugins/rss.rb
index dd359781..8f16509e 100644
--- a/data/rbot/plugins/rss.rb
+++ b/data/rbot/plugins/rss.rb
@@ -288,7 +288,8 @@ class RSSFeedsPlugin < Plugin
# running substitutions against DataStream _s_ optionally joined
# with hash _h_
def make_stream(line1, line2, s, h={})
- DataStream.new([line1, line2].compact.join("\n") % s.merge(h))
+ ss = s.merge(h)
+ DataStream.new([line1, line2].compact.join("\n") % ss, ss)
end
# Define default RSS filters
@@ -354,6 +355,27 @@ class RSSFeedsPlugin < Plugin
line1 << " (by %{author})" if s[:author]
make_stream(line1, nil, s)
}
+
+ # Define an HTML info filter too
+ @bot.register_filter(:rss, :htmlinfo) { |s| htmlinfo_filter(s) }
+
+ # This is the output format used by the input filter
+ @bot.register_filter(:htmlinfo, @outkey) { |s|
+ line1 = "%{title}%{at}%{link}"
+ make_stream(line1, nil, s)
+ }
+ end
+
+ def htmlinfo_filter(s)
+ return nil unless s[:headers] and s[:headers]['x-rbot-location']
+ blob = RssBlob.new(s[:headers]['x-rbot-location'],"", :htmlinfo)
+ return nil unless fetchRss(blob, nil)
+ return nil unless parseRss(blob, nil)
+ output = []
+ blob.items.each { |it|
+ output << printFormattedRss(blob, it)[:text]
+ }
+ return {:title => blob.title, :content => output.join(" | ")}
end
# Display the known rss types
@@ -916,7 +938,7 @@ class RSSFeedsPlugin < Plugin
def printFormattedRss(feed, item, opts=nil)
debug item
places = feed.watchers
- handle = "::#{feed.handle}:: "
+ handle = feed.handle.empty? ? "" : "::#{feed.handle}:: "
date = String.new
if opts
places = opts[:places] if opts.key?(:places)
@@ -1007,6 +1029,8 @@ class RSSFeedsPlugin < Plugin
:title => title, :desc => desc, :link => link,
:category => category, :author => author, :at => at)
+ return output if places.empty?
+
places.each { |loc|
output.to_s.each_line { |line|
@bot.say loc, line, :overlong => :truncate