class Ruboty::Adapters::Slack

Public Instance Methods

run() click to toggle source
# File lib/ruboty/adapters/slack.rb, line 11
def run
  init
  bind
  connect
end
say(message) click to toggle source
# File lib/ruboty/adapters/slack.rb, line 17
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].split("/", 2).first,
    type: message[:original][:type],
  )
end

Private Instance Methods

bind() click to toggle source
# File lib/ruboty/adapters/slack.rb, line 75
def bind
  client.on_private_message(&method(:on_message))
  client.on_room_message(&method(:on_message))
end
client() click to toggle source
# File lib/ruboty/adapters/slack.rb, line 28
def client
  @client ||= Xrc::Client.new(
    jid: jid,
    nickname: username,
    password: password,
    room_jid: room_jids.join(","),
  )
end
connect() click to toggle source
# File lib/ruboty/adapters/slack.rb, line 80
def connect
  client.connect
end
host() click to toggle source
# File lib/ruboty/adapters/slack.rb, line 51
def host
  "#{team}.xmpp.slack.com"
end
init() click to toggle source
# File lib/ruboty/adapters/slack.rb, line 37
def init
  ENV["RUBOTY_NAME"] ||= username
end
jid() click to toggle source
# File lib/ruboty/adapters/slack.rb, line 41
def jid
  "#{username}@#{host}"
end
on_message(message) click to toggle source

@note Ignores delayed messages when ruboty was logging out

# File lib/ruboty/adapters/slack.rb, line 85
def on_message(message)
  unless message.delayed?
    robot.receive(
      body: message.body,
      from: message.from,
      from_name: username_of(message),
      to: message.to,
      type: message.type,
    )
  end
end
password() click to toggle source
# File lib/ruboty/adapters/slack.rb, line 67
def password
  ENV["SLACK_PASSWORD"]
end
room_host() click to toggle source
# File lib/ruboty/adapters/slack.rb, line 55
def room_host
  "conference.#{host}"
end
room_jids() click to toggle source
# File lib/ruboty/adapters/slack.rb, line 45
def room_jids
  rooms.map do |room|
    "#{room}@#{room_host}"
  end
end
rooms() click to toggle source
# File lib/ruboty/adapters/slack.rb, line 59
def rooms
  ENV["SLACK_ROOM"].split(",")
end
team() click to toggle source
# File lib/ruboty/adapters/slack.rb, line 71
def team
  ENV["SLACK_TEAM"]
end
username() click to toggle source
# File lib/ruboty/adapters/slack.rb, line 63
def username
  ENV["SLACK_USERNAME"]
end
username_of(message) click to toggle source
# File lib/ruboty/adapters/slack.rb, line 97
def username_of(message)
  case message.type
  when "groupchat"
    Xrc::Jid.new(message.from).resource
  else
    Xrc::Jid.new(message.from).node
  end
end