class Lita::Handlers::SlackStatus

Public Instance Methods

clear(response) click to toggle source
# File lib/lita/handlers/slack_status.rb, line 79
def clear(response)
  response.reply set_profile(response.user.id, emoji: nil, text: nil)
end
delete(response) click to toggle source
# File lib/lita/handlers/slack_status.rb, line 50
def delete(response)
  name = response.matches.flatten.first
  if redis.hdel("users/#{response.user.id}/statuses", name) == 1
    response.reply 'ok'
  else
    response.reply "not found: #{name}"
  end
end
list(response) click to toggle source
# File lib/lita/handlers/slack_status.rb, line 37
def list(response)
  statuses = redis.hgetall("users/#{response.user.id}/statuses")
  return response.reply '(empty)' if statuses.empty?

  message = statuses.map do |name, status_json|
    status = JSON.parse(status_json)
    status_str = [status['emoji'], status['text']].compact.join(' ')
    "#{name} => #{status_str} (`#{name} #{status_str}`)"
  end.join("\n")

  response.reply message
end
rename(response) click to toggle source
# File lib/lita/handlers/slack_status.rb, line 59
def rename(response)
  from_name, to_name = response.matches.flatten
  status_json = redis.hget("users/#{response.user.id}/statuses", from_name)
  return response.reply "not found: #{name}" unless status_json

  redis.hset("users/#{response.user.id}/statuses", to_name, status_json)
  redis.hdel("users/#{response.user.id}/statuses", from_name)
  response.reply 'ok'
end
save(response) click to toggle source
# File lib/lita/handlers/slack_status.rb, line 24
def save(response)
  name, emoji, text = response.matches.flatten
  redis.hset("users/#{response.user.id}/statuses", name, {emoji: emoji, text: text}.to_json)
  response.reply 'ok'
end
save_and_set(response) click to toggle source
# File lib/lita/handlers/slack_status.rb, line 30
def save_and_set(response)
  name, emoji, text = response.matches.flatten
  redis.hset("users/#{response.user.id}/statuses", name, {emoji: emoji, text: text}.to_json)

  response.reply set_profile(response.user.id, emoji: emoji, text: text)
end
set(response) click to toggle source
# File lib/lita/handlers/slack_status.rb, line 69
def set(response)
  name, text = response.matches.flatten
  status_json = redis.hget("users/#{response.user.id}/statuses", name)
  return response.reply "not found: #{name}" unless status_json

  status = JSON.parse(status_json)

  response.reply set_profile(response.user.id, emoji: status['emoji'], text: text || status['text'])
end

Private Instance Methods

set_profile(user_id, emoji: , text:) click to toggle source
# File lib/lita/handlers/slack_status.rb, line 85
def set_profile(user_id, emoji: , text:)
  resp = slack_client.users_profile_set(
    user: user_id,
    profile: {
      status_emoji: emoji.to_s,
      status_text:  text.to_s
    }.to_json
  )
  resp['ok'] ? 'ok' : "error: #{resp['error']}"
end
slack_client() click to toggle source
# File lib/lita/handlers/slack_status.rb, line 96
def slack_client
  @slack_client ||= Slack::Web::Client.new(token: config.admin_slack_token)
end