]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - data/rbot/plugins/twitter.rb
weather plugin: refactor HTML cleanup code
[user/henk/code/ruby/rbot.git] / data / rbot / plugins / twitter.rb
index 65bc8eb7bcb1d5539a96a7616b092a67a19e1e9b..ef0d05b639e60be27a7395aaae7dd9c4107ef841 100644 (file)
@@ -7,6 +7,7 @@
 # Author:: Giuseppe "Oblomov" Bilotta <giuseppe.bilotta@gmail.com>
 #
 # Copyright:: (C) 2007 Carter Parks
+# Copyright:: (C) 2007 Giuseppe Bilotta
 #
 # Users can setup their twitter username and password and then begin updating
 # twitter whenever
@@ -15,6 +16,10 @@ require 'rexml/rexml'
 require 'cgi'
 
 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'")
+
   def initialize
     super
 
@@ -47,9 +52,10 @@ class TwitterPlugin < Plugin
       return false
     end
 
+    user = URI.escape(nick)
 
-    # TODO configurable count
-    uri = "http://twitter.com/statuses/user_timeline/#{URI.escape(nick)}.xml?count=3"
+    count = @bot.config['twitter.status_count']
+    uri = "http://twitter.com/statuses/user_timeline/#{user}.xml?count=#{count}"
 
     response = @bot.httputil.get(uri, :headers => @header, :cache => false)
     debug response
@@ -90,9 +96,26 @@ class TwitterPlugin < Plugin
       return false
     end
 
-    uri = "http://#{URI.escape(@registry[m.sourcenick + "_username"])}:#{URI.escape(@registry[m.sourcenick + "_password"])}@twitter.com/statuses/update.xml"
+    user = URI.escape(@registry[m.sourcenick + "_username"])
+    pass = URI.escape(@registry[m.sourcenick + "_password"])
+    uri = "http://#{user}:#{pass}@twitter.com/statuses/update.xml"
+
+    msg = params[:status].to_s
+
+    if msg.length > 160
+      m.reply "your status message update is too long, please keep it under 140 characters if possible, 160 characters maximum"
+      return
+    end
+
+    if msg.length > 140
+      m.reply "your status message is longer than 140 characters, which is not optimal, but I'm going to update anyway"
+    end
+
+    source = "source=rbot"
+    msg = "status=#{CGI.escape(msg)}"
+    body = [source,msg].join("&")
 
-    response = @bot.httputil.post(uri, "status=#{CGI.escape(params[:status].to_s)}", :headers => @header)
+    response = @bot.httputil.post(uri, body, :headers => @header)
     debug response
 
     if response.class == Net::HTTPOK