class Ruboty::Adapters::LetsChat

Constants

LCB_ROOMS
LCB_TOKEN
LCB_URL

Public Instance Methods

run() click to toggle source
# File lib/ruboty/adapters/lets_chat.rb, line 16
def run
  _robot = robot
  _socket = socket

  # patch in to catch socket.io connect event
  websocket = _socket.instance_variable_get('@websocket')
  websocket.on :message do |msg|
    _socket.__emit 'socket.io connect' if (code = msg.data[/^(\d+)/, 1]) && (code.to_i == 40)
  end

  _socket.on 'socket.io connect' do
    _socket.emit 'connected'
    LCB_ROOMS.each do |room|
      _socket.emit 'rooms:join', room
    end
  end

  _socket.on 'messages:new' do |data|
    _robot.receive(
      body: data['text'],
      from: data['owner']['id'],
      from_name: data['owner']['username'],
      room_id: data['room']['id'],
      room_name: data['room']['name'],
    )
  end

  _socket.on 'error' do |data|
    # TODO: handle error
  end

  loop { sleep 60 }
rescue Interrupt
  exit
end
say(message) click to toggle source
# File lib/ruboty/adapters/lets_chat.rb, line 52
def say(message)
  socket.emit('messages:create', room: message[:original][:room_id], text: message[:body])
end
socket() click to toggle source
# File lib/ruboty/adapters/lets_chat.rb, line 56
def socket
  @socket ||= SocketIO::Client::Simple.connect(LCB_URL, token: LCB_TOKEN)
end