# Elixir-Slack

This is a work in progress Slack [Real Time Messaging API] client for Elixir.
You'll need a Slack API token which can be retrieved from the [Web API page] or
by creating a new [bot integration].

[Real time Messaging API]:
[Web API page]:
[bot integration]:

## Usage

Add Slack to your `mix.exs` dependencies.

def deps do
  [{:slack, git: ""}]

Define a module that uses the Slack behaviour and defines the appropriate
callback methods.

defmodule SlackRtm do
  use Slack

  def start_link(initial_state) do
    Slack.start_link(__MODULE__, "token_value", initial_state)

  def init(initial_state, _socket) do
    {:ok, initial_state}

  def handle_message({:type, "message", response}, socket, state) do
    state = state ++ [response.text]

    message = "Received #{length(state)} messages so far!"
    Slack.send(message,, socket)

    {:ok, state}

  def handle_message({:type, type, _response}, _socket, state) do
    {:ok, state}

You can send messages to channels using `Slack.send`, which takes the message as
the first argument, the channel as the second, and the socket as the third.
`:websocket_client.send({:text, "Hello!"}, socket)`.

Slack has *a lot* of message types so it's a good idea to define a callback like
above where unhandled message types don't crash your application. You can find a
list of message types and examples on the [RTM API page].

[RTM API page]: