summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/rbot/plugins/twitter.rb26
1 files changed, 22 insertions, 4 deletions
diff --git a/data/rbot/plugins/twitter.rb b/data/rbot/plugins/twitter.rb
index a9ccd9c2..14b0c2d6 100644
--- a/data/rbot/plugins/twitter.rb
+++ b/data/rbot/plugins/twitter.rb
@@ -19,6 +19,9 @@ class TwitterPlugin < Plugin
Config.register Config::IntegerValue.new('twitter.status_count',
:default => 1, :validate => Proc.new { |v| v > 0 && v <= 10},
:desc => "Maximum number of status updates shown by 'twitter status'")
+ Config.register Config::IntegerValue.new('twitter.friends_status_count',
+ :default => 3, :validate => Proc.new { |v| v > 0 && v <= 10},
+ :desc => "Maximum number of status updates shown by 'twitter friends status'")
def initialize
super
@@ -39,7 +42,7 @@ class TwitterPlugin < Plugin
# return a help string when the bot is asked for help on this plugin
def help(plugin, topic="")
- return "twitter status [nick] => show nick's (or your) status | twitter update [status] => updates your status on twitter | twitter identify [username] [password] => ties your nick to your twitter username and password"
+ return "twitter status [nick] => show nick's (or your) status, use 'twitter friends status [nick]' to also show the friends' timeline | twitter update [status] => updates your status on twitter | twitter identify [username] [password] => ties your nick to your twitter username and password"
end
# update the status on twitter
@@ -55,7 +58,12 @@ class TwitterPlugin < Plugin
user = URI.escape(nick)
count = @bot.config['twitter.status_count']
- uri = "http://twitter.com/statuses/user_timeline/#{user}.xml?count=#{count}"
+ unless params[:friends]
+ uri = "http://twitter.com/statuses/user_timeline/#{user}.xml?count=#{count}"
+ else
+ count = @bot.config['twitter.friends_status_count']
+ uri = "http://twitter.com/statuses/friends_timeline/#{user}.xml"
+ end
response = @bot.httputil.get(uri, :headers => @header, :cache => false)
debug response
@@ -71,10 +79,19 @@ class TwitterPlugin < Plugin
# time = Time.local(year.to_i, month, day.to_i, hour.to_i, min.to_i, sec.to_i)
time = Time.parse(st.elements['created_at'].text)
now = Time.now
- delta = now - time
+ # Sometimes, time can be in the future; invert the relation in this case
+ delta = ((time > now) ? time - now : now - time)
msg = st.elements['text'].to_s + " (#{Utils.secs_to_string(delta.to_i)} ago via #{st.elements['source'].to_s})"
- texts << Utils.decode_html_entities(msg).ircify_html
+ author = ""
+ if params[:friends]
+ author = Utils.decode_html_entities(st.elements['user'].elements['name'].text) + ": " rescue ""
+ end
+ texts << author+Utils.decode_html_entities(msg).ircify_html
}
+ if params[:friends]
+ # friends always return the latest 20 updates, so we clip the count
+ texts[count..-1]=nil
+ end
rescue
error $!
m.reply "could not parse status for #{nick}"
@@ -139,4 +156,5 @@ plugin = TwitterPlugin.new
plugin.map 'twitter identify :username :password', :action => "identify", :public => false
plugin.map 'twitter update *status', :action => "update_status", :threaded => true
plugin.map 'twitter status [:nick]', :action => "get_status", :threaded => true
+plugin.map 'twitter :friends [status] [:nick]', :action => "get_status", :requirements => { :friends => /^friends?$/ }, :threaded => true