Xlack (xlack v0.1.0) View Source

Xlack is a genserver-ish interface for working with the Xlack real time messaging API through a Websocket connection.

To use this module you'll need a need a Xlack API token which can be retrieved by following the Token Generation Instructions or by creating a new bot integration.

Example

defmodule Bot do
  use Xlack

  def handle_event(message = %{type: "message"}, slack, state) do
    if message.text == "Hi" do
      send_message("Hello to you too!", message.channel, slack)
    end

    {:ok, state}
  end
  def handle_event(_, _, state), do: {:ok, state}
end

Xlack.Bot.start_link(Bot, [], "API_TOKEN")

handle_* methods are always passed slack and state arguments. The slack argument holds the state of Xlack and is kept up to date automatically.

In this example we're just matching against the message type and checking if the text content is "Hi" and if so, we reply with our own greeting.

The message type is pattern matched against because the Xlack RTM API defines many different types of messages that we can receive. Because of this it's wise to write a catch-all handle_event/3 in your bots to prevent crashing.

Callbacks

  • handle_connect(slack, state) - called when connected to Xlack.
  • handle_event(message, slack, state) - called when a message is received.
  • handle_close(reason, slack, state) - called when websocket is closed before process is terminated.
  • handle_info(message, slack, state) - called when any other message is received in the process mailbox.

Xlack argument

The Xlack argument that's passed to each callback is what contains all of the state related to Xlack including a list of channels, users, groups, bots, and even the socket.

Here's a list of what's stored:

  • me - The current bot/users information stored as a map of properties.
  • team - The current team's information stored as a map of properties.
  • bots - Stored as a map with id's as keys.
  • channels - Stored as a map with id's as keys.
  • groups - Stored as a map with id's as keys.
  • users - Stored as a map with id's as keys.
  • ims (direct message channels) - Stored as a map with id's as keys.
  • socket - The connection to Xlack.
  • client - The client that makes calls to Xlack.

For all but socket and client, you can see what types of data to expect each of the types to contain from the Xlack API types page.

Link to this section Summary

Link to this section Functions

Link to this function

conversations(opts \\ %{})

View Source
Link to this function

delete(message, opts \\ %{})

View Source
Link to this function

history(channel, opts \\ %{})

View Source
Link to this function

info(channel_or_user, opts \\ %{})

View Source
Link to this function

send_message(channel_or_user, text, opts \\ %{})

View Source