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