summaryrefslogtreecommitdiff
path: root/lib/matrix_app_service/client.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/matrix_app_service/client.ex')
-rw-r--r--lib/matrix_app_service/client.ex46
1 files changed, 46 insertions, 0 deletions
diff --git a/lib/matrix_app_service/client.ex b/lib/matrix_app_service/client.ex
index 998b377..c32cf00 100644
--- a/lib/matrix_app_service/client.ex
+++ b/lib/matrix_app_service/client.ex
@@ -1,12 +1,25 @@
defmodule MatrixAppService.Client do
@moduledoc """
+ Convenience wrapper around `Polyjuice.Client.LowLevel`.
+ Library users can use the wrapped functions or call `user/1` and pass the
+ returned struct to Polyjuice functions.
"""
@type client_options :: {:base_url, String.t()} | MatrixAppService.Client.LowLevel.create_opts()
@doc """
+ Returns a client for the application service.
+ The client gets its homeserver URL and access token from configuration, by
+ default.
+ Different options can be provided to override the defaults, those are:
+
+ * `:base_url`: homerver URL
+ * `:acces_token`: access token
+ * `:device_id`: device ID
+ * `:user_id`: user ID
+ * `:storage`: a `t:Polyjuice.Client.Storage.t/0`
"""
@spec client([client_options()]) ::
Polyjuice.Client.LowLevel.t()
@@ -25,7 +38,11 @@ defmodule MatrixAppService.Client do
end
@doc """
+ Creates a Matrix room.
+ Arguments:
+ 1. `options`: see `Polyjuice.Client.Room.create_room/2`
+ 2. `client_options`: see `client/1`
"""
@spec create_room(Keyword.t()) :: {:ok, String.t()} | Any
def create_room(options \\ [], client_options \\ []) do
@@ -34,7 +51,12 @@ defmodule MatrixAppService.Client do
end
@doc """
+ Creates a new alias for a Matrix room.
+ Arguments:
+ 1. `room_id`: room ID
+ 2. `room_alias`: room alias
+ 3. `client_options`: see `client/1`
"""
@spec create_alias(String.t(), String.t(), client_options()) :: {:ok, String.t()} | Any
def create_alias(room_id, room_alias, client_options \\ []) do
@@ -43,7 +65,31 @@ defmodule MatrixAppService.Client do
end
@doc """
+ Sends a message to a Matrix room.
+
+ Arguments:
+ 1. `room_id`: room ID
+ 2. `msg`: see `Polyjuice.Client.Room.send_message/3`
+ 3. `client_options`: see `client/1`
+ """
+ @spec send_message(String.t(), String.t(), client_options()) :: {:ok, String.t()} | Any
+ def send_message(room_id, msg, client_options \\ []) do
+ client(client_options)
+ |> Polyjuice.Client.Room.send_message(room_id, msg)
+ end
+
+ @doc """
+ Registers a new Matrix user.
+ Arguments:
+ 1. `opts`: a keyword list that can contain these keys:
+ * `:inhibit_login`: true
+ * `:device_id`: device ID, defaults to `"APP_SERVICE"`
+ * `:initial_device_display_name`: device name, defaults to
+ `"ApplicationService"`
+ * `:kind`: kind of account to register, defaults to `"user"`, can also be
+ `"guest"`
+ 2. `client_options`: see `client/1`
"""
@spec register(Polyjuice.Client.LowLevel.register_opts(), client_options()) ::
{:ok, String.t()} | Any