class FuckBot::Client

Attributes

store[R]
token[R]
url[R]
user[R]
ws[R]

Public Class Methods

new(options = {}) click to toggle source
# File lib/fuck_bot/client.rb, line 5
def initialize(options = {})
  @token  = options.fetch(:token, ENV['FUCK_BOT_TOKEN'])
  @logger = options.fetch(:logger, Logger.new(STDOUT))
  @store  = FuckBot::Store.new(options[:store])

  rtm_start
end

Public Instance Methods

run() click to toggle source
# File lib/fuck_bot/client.rb, line 13
def run
  @ws = Faye::WebSocket::Client.new(@url)

  @ws.on(:open, on_open)
  @ws.on(:message, on_message)
  @ws.on(:close, on_close)
end

Private Instance Methods

on_close() click to toggle source
# File lib/fuck_bot/client.rb, line 39
def on_close
  lambda do |_event|
    @logger.info(:close)

    EM.stop
  end
end
on_message() click to toggle source
# File lib/fuck_bot/client.rb, line 29
def on_message
  lambda do |event|
    data = Oj.load(event.data)

    @logger.info(data.inspect)

    MessageResolver.new(data, self).call
  end
end
on_open() click to toggle source
# File lib/fuck_bot/client.rb, line 23
def on_open
  lambda do |_event|
    @logger.info(:open)
  end
end
rtm_start() click to toggle source
# File lib/fuck_bot/client.rb, line 47
def rtm_start
  response = RestClient.post(
    'https://slack.com/api/rtm.start',
    token: @token,
    simple_latest: true,
    no_unreads: true
  )

  response = Oj.load(response.body)

  @user = response['self']
  @url = response['url']
end