Class: Lita::Handlers::Tweet

Inherits:
Handler
  • Object
show all
Defined in:
lib/lita/handlers/tweet.rb,
lib/lita/handlers/tweet/data.rb,
lib/lita/handlers/tweet/account.rb

Defined Under Namespace

Classes: Data

Constant Summary collapse

TWITTER_AUTH_URL =
"/twitter/auth"
TWITTER_AUTH_CALLBACK_URL =
"/twitter/callback"
Account =
KeywordStruct.new(:username, :token, :secret, :config, :last_tweet) do
  def tweet(text)
    client.update(text)
  end

  def untweet
    last_tweet ? client.destroy_status(last_tweet) : false
  end

  def lookup_username!
    client.user.screen_name.tap do |username|
      self.username = username
    end
  end

private

  def client
    return nil unless config && token && secret

    @client ||= ::Twitter::REST::Client.new do |c|
      c.consumer_key        = config.consumer_key
      c.consumer_secret     = config.consumer_secret
      c.access_token        = token
      c.access_token_secret = secret
    end
  end
end

Instance Method Summary collapse

Instance Method Details

#accounts(response) ⇒ Object



61
62
63
64
65
66
67
68
69
70
# File 'lib/lita/handlers/tweet.rb', line 61

def accounts(response)
  case response.args[1]
  when "add"
    response.reply()
  when "remove"
    response.reply((response.args[2]))
  else
    response.reply(list_accounts)
  end
end

#default(response) ⇒ Object



83
84
85
86
87
# File 'lib/lita/handlers/tweet.rb', line 83

def default(response)
   = response.args[1]
  .gsub!(/^@/, '') if 
  response.reply(set_default_map())
end

#map(response) ⇒ Object



72
73
74
75
76
77
78
79
80
81
# File 'lib/lita/handlers/tweet.rb', line 72

def map(response)
  name,  = response.args[1..2]
  .gsub!(/^@/, '') if 

  if name
    response.reply(set_map(name, ))
  else
    response.reply(list_map)
  end
end

#tweet(response) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/lita/handlers/tweet.rb', line 34

def tweet(response)
  text = response.match_data[1]
  if text.nil? || text.empty?
    return response.reply("I need something to tweet!")
  end

   = (response.message.source)
  return response.reply(no_accounts_message) if .nil?

  tweet = .tweet(text)
  twitter_data.set_last_tweet(.username, tweet.id)
  # We assume that you have e.g. a Slack integration that shows all tweets
  # so instead of response.reply(tweet.url.to_s), we merely say:
  response.reply("Tweet posted!")
end

#twitter_auth(request, response) ⇒ Object



94
95
96
97
98
99
# File 'lib/lita/handlers/tweet.rb', line 94

def twitter_auth(request, response)
  callback_url = TWITTER_AUTH_CALLBACK_URL
  request_token = twitter_data.create_request_token(callback_url)
  response.status = 302
  response.headers["Location"] = request_token.authorize_url
end

#twitter_auth_callback(request, response) ⇒ Object



101
102
103
104
105
106
# File 'lib/lita/handlers/tweet.rb', line 101

def twitter_auth_callback(request, response)
  token = request.params["oauth_token"]
  verifier = request.params["oauth_verifier"]
   = twitter_data.(token, verifier)
  response.body << "Done! You can now tweet from @#{.username}."
end

#twitter_dataObject



108
109
110
# File 'lib/lita/handlers/tweet.rb', line 108

def twitter_data
  @twitter_data ||= Data.new(redis, config, robot)
end

#unmap(response) ⇒ Object



89
90
91
92
# File 'lib/lita/handlers/tweet.rb', line 89

def unmap(response)
  name = response.args[1]
  response.reply(clear_map(name))
end

#untweet(response) ⇒ Object



50
51
52
53
54
55
56
57
58
59
# File 'lib/lita/handlers/tweet.rb', line 50

def untweet(response)
   = (response.message.source)
  return response.reply(no_accounts_message) if .nil?

  if .untweet
    response.reply("Removed last tweet.")
  else
    response.reply("Couldn't find a last tweet to remove!")
  end
end