defmodule Slack.API do @moduledoc """ Slack Web API. """ require Logger @base_url "https://slack.com/api" @doc """ Req client for Slack API. """ @spec client(String.t()) :: Req.Request.t() def client(token) do headers = [ {"authorization", "Bearer #{token}"} ] Req.new(base_url: @base_url, headers: headers) end @doc """ POST to Slack API. """ @spec post(String.t(), String.t(), map() | keyword()) :: {:ok, map()} | {:error, term()} def post(endpoint, token, args \\ %{}) do result = Req.post(client(token), url: endpoint, form: args ) case result do {:ok, %{body: %{"ok" => true} = body}} -> {:ok, body} {_, error} -> Logger.error(inspect(error)) {:error, error} end end end