summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJordan Bracco <href@random.sh>2022-12-11 01:18:21 +0000
committerJordan Bracco <href@random.sh>2022-12-11 02:03:36 +0000
commit21ea8d71ff60e55db44c7c94a8e42546f5e5bfa1 (patch)
treee4f39642db414ff45c31f24b5c38c3963c28557c
parentfix(irc-connection): attempt to find or create/join user in track when receiv... (diff)
fix(user-track): ensure we only get an user per network even if it's over multiple bot connections
-rw-r--r--lib/irc/user_track.ex17
1 files changed, 12 insertions, 5 deletions
diff --git a/lib/irc/user_track.ex b/lib/irc/user_track.ex
index 3eeaec3..1efa523 100644
--- a/lib/irc/user_track.ex
+++ b/lib/irc/user_track.ex
@@ -146,7 +146,7 @@ defmodule IRC.UserTrack do
def find_by_nick(network, nick) do
case :ets.match(@ets, {:"$1", network, :_, String.downcase(nick), :_, :_, :_, :_, :_, :_, :_, :_}) do
- [[id]] -> lookup(id)
+ [[id] | _] -> lookup(id)
_ ->
nil
end
@@ -179,10 +179,15 @@ defmodule IRC.UserTrack do
# TODO
def connected(network, nick, user, host, account_id, opts \\ %{}) do
if account = IRC.Account.get(account_id) do
- user = %User{id: IRC.UserTrack.Id.large_id, account: account_id, network: network, nick: nick, username: user, host: host, privileges: %{}, options: opts}
- Storage.op(fn(ets) ->
- :ets.insert(ets, User.to_tuple(user))
- end)
+ user = if user = find_by_nick(network, nick) do
+ user
+ else
+ user = %User{id: IRC.UserTrack.Id.large_id, account: account_id, network: network, nick: nick, username: user, host: host, privileges: %{}, options: opts}
+ Storage.op(fn(ets) ->
+ :ets.insert(ets, User.to_tuple(user))
+ end)
+ user
+ end
IRC.Connection.publish_event(network, %{type: :connect, user_id: user.id, account_id: user.account})
:ok
@@ -216,6 +221,8 @@ defmodule IRC.UserTrack do
end)
IRC.Connection.publish_event({sender.network, channel}, %{type: :join, user_id: user.id, account_id: user.account})
+
+ user
end
#def joined(network, channel, nick, privileges) do