diff options
author | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2010-09-07 20:20:50 +0200 |
---|---|---|
committer | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2010-09-07 20:20:50 +0200 |
commit | 036dbad139010cf965dbf66310e425007eb3f8e3 (patch) | |
tree | b0ef991f5ed2c9c9d5069f33cc6ea4ff056eb6ae /data/rbot/plugins/twitter.rb | |
parent | f1d1734cc6fc94e0fd809c2a1c678dfd35206c01 (diff) |
twitter: don't fail on missing oauth
When OAuth is missing, some barebone functionality in the twitter plugin
is still available (namely, status reading from public timelines), so
don't fail loading and just warn the users and admins about the reduced
availability.
Diffstat (limited to 'data/rbot/plugins/twitter.rb')
-rw-r--r-- | data/rbot/plugins/twitter.rb | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/data/rbot/plugins/twitter.rb b/data/rbot/plugins/twitter.rb index 1d86472d..f56186de 100644 --- a/data/rbot/plugins/twitter.rb +++ b/data/rbot/plugins/twitter.rb @@ -13,7 +13,12 @@ # Users can setup their twitter username and password and then begin updating # twitter whenever -require 'oauth' +begin + require 'oauth' +rescue LoadError + error "OAuth module could not be loaded, twits will not be submitted and protected twits will not be accessible" +end + require 'yaml' require 'rexml/rexml' @@ -37,6 +42,8 @@ class TwitterPlugin < Plugin def initialize super + @has_oauth = defined? OAuth + class << @registry def store(val) val @@ -47,6 +54,10 @@ class TwitterPlugin < Plugin end end + def report_oauth_missing(m, failed_action) + m.reply [failed_action, "I cannot authenticate to Twitter (OAuth not available)"].join(' because ') + end + def help(plugin, topic="") 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 authorize => Generates an authorization URL which will give you a PIN to authorize the bot to use your twitter account. | twitter pin [pin] => Finishes bot authorization using the PIN provided by the URL from twitter authorize. | twitter deauthorize => Makes the bot forget your Twitter account. | twitter actions [on|off] => enable/disable twitting of actions (/me does ...)" end @@ -54,12 +65,17 @@ class TwitterPlugin < Plugin # update the status on twitter def get_status(m, params) friends = params[:friends] + if @registry.has_key?(m.sourcenick + "_access_token") @access_token = YAML::load(@registry[m.sourcenick + "_access_token"]) nick = params[:nick] || @access_token.params[:screen_name] else if friends - m.reply "You are not authorized with Twitter. Please use 'twitter authorize' first to use this feature." + if @has_oauth + m.reply "You are not authorized with Twitter. Please use 'twitter authorize' first to use this feature." + else + report_oauth_missing(m, "I cannot retrieve your friends status") + end return false end nick = params[:nick] @@ -72,7 +88,7 @@ class TwitterPlugin < Plugin count = @bot.config['twitter.friends_status_count'] user = URI.escape(nick) - if @registry.has_key?(m.sourcenick + "_access_token") + if @has_oauth and @registry.has_key?(m.sourcenick + "_access_token") if friends #no change to count variable uri = "https://api.twitter.com/1/statuses/friends_timeline.xml?count=#{count}" @@ -147,6 +163,11 @@ class TwitterPlugin < Plugin end def authorize(m, params) + unless @has_oauth + report_oauth_missing(m, "we can't complete the authorization process") + return false + end + #remove all old authorization data if @registry.has_key?(m.sourcenick + "_request_token") @registry.delete(m.sourcenick + "_request_token") @@ -186,6 +207,11 @@ class TwitterPlugin < Plugin # update the status on twitter def update_status(m, params) + unless @has_oauth + report_oauth_missing(m, "I cannot update your status") + return false + end + unless @registry.has_key?(m.sourcenick + "_access_token") m.reply "You must first authorize your Twitter account before tweeting." return false; @@ -219,7 +245,10 @@ class TwitterPlugin < Plugin end # update on ACTION if the user has enabled the option + # Possible TODO: move the has_oauth check further down and alert + # the user the first time we do not update because of the missing oauth def ctcp_listen(m) + return unless @has_oauth return unless m.action? return unless @registry[m.sourcenick + "_actions"] update_status(m, :status => m.message, :notify => true) |