summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJordan Bracco <href@random.sh>2022-12-11 17:19:11 +0000
committerJordan Bracco <href@random.sh>2022-12-11 17:19:11 +0000
commit4d7812a8b9d824deda745e42cb7aac8e64577013 (patch)
tree96fb97a251b7cb824c1a7c353aeaad308b179879
parentfeat(base-plugin): list enabled plugins with `!plugins` (diff)
feat(telegram): create account for telegram user
Ref T53
-rw-r--r--lib/irc/account.ex6
-rw-r--r--lib/lsg_telegram/room.ex34
2 files changed, 34 insertions, 6 deletions
diff --git a/lib/irc/account.ex b/lib/irc/account.ex
index 28b5141..beb8daa 100644
--- a/lib/irc/account.ex
+++ b/lib/irc/account.ex
@@ -236,6 +236,12 @@ defmodule IRC.Account do
if make_default, do: new_account(user), else: nil
end
+ def new_account(nick) do
+ id = EntropyString.large_id()
+ :dets.insert(file("db"), {id, nick, EntropyString.token()})
+ get(id)
+ end
+
defp new_account(%{nick: nick, network: server}) do
id = EntropyString.large_id()
:dets.insert(file("db"), {id, nick, EntropyString.token()})
diff --git a/lib/lsg_telegram/room.ex b/lib/lsg_telegram/room.ex
index db3308e..da774c8 100644
--- a/lib/lsg_telegram/room.ex
+++ b/lib/lsg_telegram/room.ex
@@ -71,15 +71,37 @@ defmodule LSG.TelegramRoom do
:ignoree
end
- def handle_update(%{"message" => %{"from" => %{"id" => user_id}, "text" => text}}, _token, state) do
- account = IRC.Account.find_meta_account("telegram-id", user_id)
+ defp find_or_create_meta_account(from = %{"id" => user_id}, state) do
+ if account = IRC.Account.find_meta_account("telegram-id", user_id) do
+ account
+ else
+ first_name = Map.get(from, "first_name")
+ last_name = Map.get(from, "last_name")
+ name = [first_name, last_name]
+ |> Enum.filter(& &1)
+ |> Enum.join(" ")
+
+ username = Map.get(from, "username", first_name)
+
+ account = username
+ |> IRC.Account.new_account()
+ |> IRC.Account.update_account_name(name)
+ |> IRC.Account.put_meta("telegram-id", user_id)
+
+ Logger.info("telegram_room: created account #{account.id} for telegram user #{user_id}")
+ account
+ end
+ end
+
+ def handle_update(%{"message" => %{"from" => from = %{"id" => user_id}, "text" => text}}, _token, state) do
+ account = find_or_create_meta_account(from, state)
connection = IRC.Connection.get_network(state.net)
IRC.send_message_as(account, state.net, state.chan, text, true)
{:ok, state}
end
- def handle_update(data = %{"message" => %{"from" => %{"id" => user_id}, "location" => %{"latitude" => lat, "longitude" => lon}}}, _token, state) do
- account = IRC.Account.find_meta_account("telegram-id", user_id)
+ def handle_update(data = %{"message" => %{"from" => from = %{"id" => user_id}, "location" => %{"latitude" => lat, "longitude" => lon}}}, _token, state) do
+ account = find_or_create_meta_account(from, state)
connection = IRC.Connection.get_network(state.net)
IRC.send_message_as(account, state.net, state.chan, "@ #{lat}, #{lon}", true)
{:ok, state}
@@ -113,8 +135,8 @@ defmodule LSG.TelegramRoom do
{:ok, state}
end
- defp upload(_type, %{"message" => m = %{"chat" => %{"id" => chat_id}, "from" => %{"id" => user_id}}}, token, state) do
- account = IRC.Account.find_meta_account("telegram-id", user_id)
+ defp upload(_type, %{"message" => m = %{"chat" => %{"id" => chat_id}, "from" => from = %{"id" => user_id}}}, token, state) do
+ account = find_or_create_meta_account(from, state)
if account do
{content, type} = cond do
m["photo"] -> {m["photo"], "photo"}