class Slack::Client

Attributes

options[R]
token[R]

Public Class Methods

new(token) click to toggle source
# File lib/slack/client.rb, line 5
def initialize(token)
  @token = token
end

Public Instance Methods

channels() click to toggle source
# File lib/slack/client.rb, line 53
def channels
  @channels ||= JSON.parse(get('channels.list', { exclude_archived: 1 }))['channels']
end
filter_message(text) click to toggle source
# File lib/slack/client.rb, line 29
def filter_message(text)
  text = text.dup
  scan = text.scan(/\<@[0-9A-Z]+\>/)
  return text unless scan

  scan.each do |pattern|
    user_id = pattern.match(/<@(?<user_id>.*)>/)[:user_id]
    text.gsub!(/#{pattern}/, "@#{user_by_id(user_id)['name']}")
  end
  text
end
get(api, options = {}) click to toggle source
# File lib/slack/client.rb, line 69
def get(api, options = {})
  RestClient.get("https://slack.com/api/#{api}", { params: options.merge(token: token) })
end
groups() click to toggle source
# File lib/slack/client.rb, line 57
def groups
  @groups ||= JSON.parse(get('groups.list', { exclude_archived: 1 }))['groups']
end
ims() click to toggle source
# File lib/slack/client.rb, line 61
def ims
  @ims ||= JSON.parse(get('im.list'))['ims']
end
messages(name, type, options) click to toggle source
# File lib/slack/client.rb, line 9
def messages(name, type, options)
  channel = case type
  when 'channel' then channels.find { |item| item['name'] == name }
  when 'group' then groups.find { |item| item['name'] == name }
  when 'direct' then im.find { |item| item['user'] == name }
  when 'multi_direct' then mpim.find { |item| item['name'] == name }
  end
  messages = JSON.parse(get('channels.history', options.merge(channel: channel['id'])))['messages']
  messages.select { |message| message['type'] == 'message' && message['subtype'].nil? }.map do |message|
    [
      Time.at(message['ts'].to_i),
      channel['id'],
      channel['name'],
      message['user'],
      user_by_id(message['user'])['name'],
      filter_message(message['text'])
    ]
  end.reverse
end
mpim() click to toggle source
# File lib/slack/client.rb, line 65
def mpim
  @mpims ||= JSON.parse(get('mpim.list'))['groups']
end
user_by_id(id) click to toggle source
# File lib/slack/client.rb, line 41
def user_by_id(id)
  users.find { |user| user['id'] == id }
end
user_by_name(name) click to toggle source
# File lib/slack/client.rb, line 45
def user_by_name(name)
  users.find { |user| user['name'] == name }
end
users() click to toggle source
# File lib/slack/client.rb, line 49
def users
  @users ||= JSON.parse(get('users.list', { presence: 0 }))['members']
end