summaryrefslogtreecommitdiff
path: root/lib/matrix.ex
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--lib/matrix.ex56
1 files changed, 36 insertions, 20 deletions
diff --git a/lib/matrix.ex b/lib/matrix.ex
index 0ad0836..384f204 100644
--- a/lib/matrix.ex
+++ b/lib/matrix.ex
@@ -5,7 +5,7 @@ defmodule Nola.Matrix do
@behaviour MatrixAppService.Adapter.Room
@behaviour MatrixAppService.Adapter.Transaction
@behaviour MatrixAppService.Adapter.User
- @env Mix.env
+ @env Mix.env()
def dets(part) do
(Nola.data_path() <> "/matrix-#{to_string(part)}.dets") |> String.to_charlist()
@@ -20,12 +20,13 @@ defmodule Nola.Matrix do
def myself?("@_dev:random.sh"), do: true
def myself?("@_bot:random.sh"), do: true
- def myself?("@_dev."<>_), do: true
- def myself?("@_bot."<>_), do: true
+ def myself?("@_dev." <> _), do: true
+ def myself?("@_bot." <> _), do: true
def myself?(_), do: false
- def mxc_to_http(mxc = "mxc://"<>_) do
+ def mxc_to_http(mxc = "mxc://" <> _) do
uri = URI.parse(mxc)
+
%URI{uri | scheme: "https", path: "/_matrix/media/r0/download/#{uri.authority}#{uri.path}"}
|> URI.to_string()
end
@@ -41,6 +42,7 @@ defmodule Nola.Matrix do
initial_device_display_name: "Application Service",
username: if(@env == :dev, do: "_dev.#{id}", else: "_bot.#{id}")
]
+
Logger.debug("Registering user for #{id}")
{:ok, %{"user_id" => mxid}} = Polyjuice.Client.LowLevel.register(client(), opts)
:dets.insert(dets(:users), {id, mxid})
@@ -54,27 +56,31 @@ defmodule Nola.Matrix do
end
end
- def user_name("@"<>name) do
+ def user_name("@" <> name) do
[username, _] = String.split(name, ":", parts: 2)
username
end
def application_childs() do
import Supervisor.Spec
+
[
- supervisor(Nola.Matrix.Room.Supervisor, [], [name: Nola.Irc.PuppetConnection.Supervisor]),
+ supervisor(Nola.Matrix.Room.Supervisor, [], name: Nola.Irc.PuppetConnection.Supervisor)
]
end
def after_start() do
- rooms = :dets.foldl(fn({id, _, _, _}, acc) -> [id | acc] end, [], dets(:rooms))
+ rooms = :dets.foldl(fn {id, _, _, _}, acc -> [id | acc] end, [], dets(:rooms))
for room <- rooms, do: Nola.Matrix.Room.start(room)
end
def lookup_room(room) do
case :dets.lookup(dets(:rooms), room) do
- [{_, network, channel, opts}] -> {:ok, Map.merge(opts, %{network: network, channel: channel})}
- _ -> {:error, :no_such_room}
+ [{_, network, channel, opts}] ->
+ {:ok, Map.merge(opts, %{network: network, channel: channel})}
+
+ _ ->
+ {:error, :no_such_room}
end
end
@@ -93,11 +99,16 @@ defmodule Nola.Matrix do
end
def create_room(room_alias) do
- Logger.debug("Matrix: creating room #{inspect room_alias}")
+ Logger.debug("Matrix: creating room #{inspect(room_alias)}")
localpart = localpart(room_alias)
+
with {:ok, network, channel} <- extract_network_channel_from_localpart(localpart),
%Nola.Irc.Connection{} <- Nola.Irc.Connection.get_network(network, channel),
- room = [visibility: :public, room_alias_name: localpart, name: if(network == "random", do: channel, else: "#{network}/#{channel}")],
+ room = [
+ visibility: :public,
+ room_alias_name: localpart,
+ name: if(network == "random", do: channel, else: "#{network}/#{channel}")
+ ],
{:ok, %{"room_id" => room_id}} <- Client.Room.create_room(client(), room) do
Logger.info("Matrix: created room #{room_alias} #{room_id}")
:dets.insert(dets(:rooms), {room_id, network, channel, %{}})
@@ -110,14 +121,15 @@ defmodule Nola.Matrix do
end
def localpart(room_alias) do
- [<<"#", localpart :: binary>>, _] = String.split(room_alias, ":", parts: 2)
+ [<<"#", localpart::binary>>, _] = String.split(room_alias, ":", parts: 2)
localpart
end
def extract_network_channel_from_localpart(localpart) do
- s = localpart
- |> String.replace("dev.", "")
- |> String.split("/", parts: 2)
+ s =
+ localpart
+ |> String.replace("dev.", "")
+ |> String.split("/", parts: 2)
case s do
[network, channel] -> {:ok, network, channel}
@@ -132,38 +144,42 @@ defmodule Nola.Matrix do
{:ok, room_id} ->
Nola.Matrix.Room.start(room_id)
:ok
- error -> error
+
+ error ->
+ error
end
end
@impl MatrixAppService.Adapter.Transaction
def new_event(event = %MatrixAppService.Event{}) do
- Logger.debug("New matrix event: #{inspect event}")
+ Logger.debug("New matrix event: #{inspect(event)}")
+
if event.room_id do
Nola.Matrix.Room.start_and_send_matrix_event(event.room_id, event)
end
+
:noop
end
@impl MatrixAppService.Adapter.User
def query_user(user_id) do
- Logger.warn("Matrix lookup user: #{inspect user_id}")
+ Logger.warn("Matrix lookup user: #{inspect(user_id)}")
:error
end
def client(opts \\ []) do
base_url = Application.get_env(:matrix_app_service, :base_url)
access_token = Application.get_env(:matrix_app_service, :access_token)
+
default_opts = [
access_token: access_token,
device_id: "APP_SERVICE",
application_service: true,
user_id: nil
]
+
opts = Keyword.merge(default_opts, opts)
Polyjuice.Client.LowLevel.create(base_url, opts)
end
-
-
end