Skip to content

Commit

Permalink
Fix credo on slack socket
Browse files Browse the repository at this point in the history
  • Loading branch information
ghaabor committed Mar 28, 2017
1 parent 199b348 commit 202cde1
Showing 1 changed file with 35 additions and 25 deletions.
60 changes: 35 additions & 25 deletions lib/golem/adapter/slack/socket.ex
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ defmodule Golem.Adapter.Slack.Socket do
@moduledoc """
Handles the Slack RTM socket connection.
"""
alias Golem.Adapter.Slack
alias Golem.Command
alias Golem.CommandRegistry

require Logger
Expand All @@ -14,7 +12,7 @@ defmodule Golem.Adapter.Slack.Socket do
msg = type |> extract_message_for_type(resp)

socket
|> handle_message(msg)
|> handle_message!(msg)
|> recv!
end

Expand Down Expand Up @@ -47,31 +45,43 @@ defmodule Golem.Adapter.Slack.Socket do
end
end

defp handle_message(socket, msg) do
case msg["type"] do
"ping" ->
socket |> pong!
"message" ->
socket |> find_and_execute_command(msg)
"reconnect_url" ->
:ets.insert(:config, {:reconnect_url, msg["url"]})
Logger.info("New reconnect_url: #{msg["url"]}")
"presence_change" ->
[{_id, user}] = :ets.lookup(:users, msg["user"])
Logger.info("@#{user["name"]} is now #{msg["presence"]}")
"user_typing" ->
[{_id, user}] = :ets.lookup(:users, msg["user"])
[{_id, channel}] = :ets.lookup(:channels, msg["channel"])
Logger.info("@#{user["name"]} is now typing in #{channel["name"] || user["name"]}")
"error" ->
Logger.error("#{msg["error"]["msg"]} (#{msg["error"]["code"]})")
_ ->
Logger.info("Unhandled message: [#{msg["type"] || "nil"}] #{Poison.encode!(msg)}")
end

defp handle_message!(socket, msg) do
handle_message_with_type(socket, msg["type"], msg)
socket
end

defp handle_message_with_type(socket, type, _msg) when type == "ping" do
socket |> pong!
end

defp handle_message_with_type(socket, type, msg) when type == "message" do
socket |> find_and_execute_command(msg)
end

defp handle_message_with_type(_socket, type, msg) when type == "reconnect_url" do
:ets.insert(:config, {:reconnect_url, msg["url"]})
Logger.info("New reconnect_url: #{msg["url"]}")
end

defp handle_message_with_type(_socket, type, msg) when type == "presence_change" do
[{_id, user}] = :ets.lookup(:users, msg["user"])
Logger.info("@#{user["name"]} is now #{msg["presence"]}")
end

defp handle_message_with_type(_socket, type, msg) when type == "user_typing" do
[{_id, user}] = :ets.lookup(:users, msg["user"])
[{_id, channel}] = :ets.lookup(:channels, msg["channel"])
Logger.info("@#{user["name"]} is now typing in #{channel["name"] || user["name"]}")
end

defp handle_message_with_type(_socket, type, msg) when type == "error" do
Logger.error("#{msg["error"]["msg"]} (#{msg["error"]["code"]})")
end

defp handle_message_with_type(_socket, type, msg) do
Logger.info("Unhandled message: [#{type || "nil"}] #{Poison.encode!(msg)}")
end

defp find_and_execute_command(socket, msg) do
command = CommandRegistry.match(msg["text"])
if command do
Expand Down

0 comments on commit 202cde1

Please sign in to comment.