mod_muc: New functions to get registered nick/nicks

This commit is contained in:
Badlop
2025-10-20 13:38:53 +02:00
parent d10d7aa8cc
commit b7aa7dc64c
4 changed files with 43 additions and 4 deletions
+3 -2
View File
@@ -23,8 +23,9 @@
opts = [] :: list() | '_'}).
-record(muc_registered,
{us_host = {{<<"">>, <<"">>}, <<"">>} :: {{binary(), binary()}, binary()} | '$1',
nick = <<"">> :: binary()}).
{us_host = {{<<"">>, <<"">>}, <<"">>} :: {{binary() | '$1', binary() | '$2'},
binary() | '_'} | '$1',
nick = <<"">> :: binary() | '$3'}).
-record(muc_online_room,
{name_host :: {binary(), binary()} | '$1' | {'_', binary()} | '_',
+13
View File
@@ -67,6 +67,8 @@
count_online_rooms/1,
register_online_user/4,
unregister_online_user/4,
get_register_nick/3,
get_register_nicks/2,
iq_set_register_info/5,
count_online_rooms_by_user/3,
get_online_rooms_by_user/3,
@@ -102,6 +104,7 @@
-callback can_use_nick(binary(), binary(), jid(), binary()) -> boolean().
-callback get_rooms(binary(), binary()) -> [#muc_room{}].
-callback get_nick(binary(), binary(), jid()) -> binary() | error.
-callback get_nicks(binary(), binary()) -> [{binary(), binary(), binary()}] | error.
-callback set_nick(binary(), binary(), jid(), binary()) -> {atomic, ok | false}.
-callback register_online_room(binary(), binary(), binary(), pid()) -> any().
-callback unregister_online_room(binary(), binary(), binary(), pid()) -> any().
@@ -1107,6 +1110,16 @@ get_nick(ServerHost, Host, From) ->
Mod = gen_mod:db_mod(LServer, ?MODULE),
Mod:get_nick(LServer, Host, From).
-spec get_register_nick(binary(), binary(), jid()) -> binary() | error.
get_register_nick(ServerHost, Host, From) ->
get_nick(ServerHost, Host, From).
-spec get_register_nicks(binary(), binary()) -> [{binary(), binary(), binary()}].
get_register_nicks(ServerHost, Host) ->
LServer = jid:nameprep(ServerHost),
Mod = gen_mod:db_mod(LServer, ?MODULE),
Mod:get_nicks(LServer, Host).
iq_get_register_info(ServerHost, Host, From, Lang) ->
{Nick, Registered} = case get_nick(ServerHost, Host, From) of
error -> {<<"">>, false};
+9 -1
View File
@@ -29,7 +29,7 @@
%% API
-export([init/2, import/3, store_room/5, restore_room/3, forget_room/3,
can_use_nick/4, get_rooms/2, get_nick/3, set_nick/4]).
can_use_nick/4, get_rooms/2, get_nick/3, get_nicks/2, set_nick/4]).
-export([register_online_room/4, unregister_online_room/4, find_online_room/3,
get_online_rooms/3, count_online_rooms/2, rsm_supported/0,
register_online_user/4, unregister_online_user/4,
@@ -122,6 +122,14 @@ get_nick(_LServer, Host, From) ->
[#muc_registered{nick = Nick}] -> Nick
end.
get_nicks(_LServer, Host) ->
mnesia:dirty_select(muc_registered,
[{#muc_registered{us_host = {{'$1', '$2'}, Host},
nick = '$3', _ = '_'},
[],
[{{'$1', '$2', '$3'}}]
}]).
set_nick(_LServer, ServiceOrRoom, From, Nick) ->
{LUser, LServer, _} = jid:tolower(From),
LUS = {LUser, LServer},
+18 -1
View File
@@ -31,7 +31,7 @@
%% API
-export([init/2, store_room/5, store_changes/4,
restore_room/3, forget_room/3,
can_use_nick/4, get_rooms/2, get_nick/3, set_nick/4,
can_use_nick/4, get_rooms/2, get_nick/3, get_nicks/2, set_nick/4,
import/3, export/1]).
-export([register_online_room/4, unregister_online_room/4, find_online_room/3,
get_online_rooms/3, count_online_rooms/2, rsm_supported/0,
@@ -344,6 +344,23 @@ get_nick(LServer, Host, From) ->
_ -> error
end.
get_nicks(LServer, Host) ->
case catch ejabberd_sql:sql_query(LServer,
?SQL("select @(jid)s, @(nick)s from muc_registered where"
" host=%(Host)s"))
of
{selected, Results} ->
lists:map(fun({JidBin, Nick}) ->
{User, Server, _Resource} =
jid:tolower(
jid:decode(JidBin)),
{User, Server, Nick}
end,
Results);
_ ->
error
end.
set_nick(LServer, ServiceOrRoom, From, Nick) ->
JID = jid:encode(jid:tolower(jid:remove_resource(From))),
F = fun () ->