class Ellen::Adapters::Slack

Public Instance Methods

run() click to toggle source
# File lib/ellen/adapters/slack.rb, line 11
def run
  bind
  connect
end
say(message) click to toggle source
# File lib/ellen/adapters/slack.rb, line 16
def say(message)
  client.say(
    body: message[:code] ? "```\n#{message[:body]}\n```" : message[:body],
    from: message[:from],
    to: message[:original][:type] == "chat" ? message[:to] + "/resource" : message[:to],
    type: message[:original][:type],
  )
end

Private Instance Methods

bind() click to toggle source
# File lib/ellen/adapters/slack.rb, line 68
def bind
  client.on_private_message(&method(:on_message))
  client.on_room_message(&method(:on_message))
end
client() click to toggle source
# File lib/ellen/adapters/slack.rb, line 27
def client
  @client ||= Xrc::Client.new(
    jid: jid,
    nickname: username,
    password: password,
    room_jid: room_jid,
  )
end
connect() click to toggle source
# File lib/ellen/adapters/slack.rb, line 73
def connect
  client.connect
end
host() click to toggle source
# File lib/ellen/adapters/slack.rb, line 44
def host
  "#{team}.xmpp.slack.com"
end
jid() click to toggle source
# File lib/ellen/adapters/slack.rb, line 36
def jid
  "#{username}@#{host}"
end
on_message(message) click to toggle source
# File lib/ellen/adapters/slack.rb, line 77
def on_message(message)
  robot.receive(
    body: message.body,
    from: message.from,
    from_name: username_of(message),
    to: message.to,
    type: message.type,
  )
end
password() click to toggle source
# File lib/ellen/adapters/slack.rb, line 60
def password
  ENV["SLACK_PASSWORD"]
end
room() click to toggle source
# File lib/ellen/adapters/slack.rb, line 52
def room
  ENV["SLACK_ROOM"]
end
room_host() click to toggle source
# File lib/ellen/adapters/slack.rb, line 48
def room_host
  "conference.#{host}"
end
room_jid() click to toggle source
# File lib/ellen/adapters/slack.rb, line 40
def room_jid
  "#{room}@#{room_host}"
end
team() click to toggle source
# File lib/ellen/adapters/slack.rb, line 64
def team
  ENV["SLACK_TEAM"]
end
username() click to toggle source
# File lib/ellen/adapters/slack.rb, line 56
def username
  ENV["SLACK_USERNAME"]
end
username_of(message) click to toggle source
# File lib/ellen/adapters/slack.rb, line 87
def username_of(message)
  case message.type
  when "groupchat"
    Xrc::Jid.new(message.from).resource
  else
    Xrc::Jid.new(message.from).node
  end
end