class Socrates::Adapters::Slack

Public Class Methods

new(real_time_client) click to toggle source
# File lib/socrates/adapters/slack.rb, line 9
def initialize(real_time_client)
  @real_time_client = real_time_client
end

Public Instance Methods

channel_from(context: nil, user: nil) click to toggle source
# File lib/socrates/adapters/slack.rb, line 27
def channel_from(context: nil, user: nil)
  unless context.nil?
    raise ArgumentError, "Expected context to respond to :channel" unless context.respond_to?(:channel)

    return context.channel
  end
  return lookup_dm_channel(user) unless user.nil?

  raise ArgumentError, "Must provide one of context or user"
end
client_id_from(context: nil, user: nil) click to toggle source
# File lib/socrates/adapters/slack.rb, line 13
def client_id_from(context: nil, user: nil)
  unless context.nil?
    raise ArgumentError, "Expected context to respond to :user" unless context.respond_to?(:user)

    return context.user
  end
  unless user.nil?
    raise ArgumentError, "Expected user to respond to :id" unless user.respond_to?(:id)

    return user.id
  end
  raise ArgumentError, "Must provide one of context or user"
end
lookup_email(context:) click to toggle source
# File lib/socrates/adapters/slack.rb, line 56
def lookup_email(context:)
  raise ArgumentError, "Expected context to respond to :user" unless context.respond_to?(:user)

  client = @real_time_client.web_client
  info   = client.users_info(user: context.user)
  info.present? ? info.user.profile.email.presence : nil
end
user_from(context:) click to toggle source
# File lib/socrates/adapters/slack.rb, line 47
def user_from(context:)
  raise ArgumentError, "context cannot be nil" if context.nil?
  raise ArgumentError, "Expected context to respond to :user" unless context.respond_to?(:user)

  client = @real_time_client.web_client
  info   = client.users_info(user: context.user)
  info.present? ? info.user : nil
end
users(include_deleted: false, include_bots: false) click to toggle source
# File lib/socrates/adapters/slack.rb, line 38
def users(include_deleted: false, include_bots: false)
  client = @real_time_client.web_client

  client.users_list.tap { |response|
    response.members.reject!(&:deleted?) unless include_deleted
    response.members.reject!(&:is_bot?) unless include_bots
  }.members
end

Private Instance Methods

lookup_dm_channel(user) click to toggle source
# File lib/socrates/adapters/slack.rb, line 70
def lookup_dm_channel(user)
  im = @real_time_client.ims.values.find { |i| i.user == user }

  return im if im.present?

  # Start a new conversation with this user.
  response = @real_time_client.web_client.conversations_open(users: user.id)
  response.channel.id
end
send_message(channel, message) click to toggle source
# File lib/socrates/adapters/slack.rb, line 66
def send_message(channel, message)
  @real_time_client.message(text: message, channel: channel)
end