mod_muc: New functions to get registered nick/nicks
This commit is contained in:
+3
-2
@@ -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()} | '_',
|
||||
|
||||
@@ -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};
|
||||
|
||||
@@ -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
@@ -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 () ->
|
||||
|
||||
Reference in New Issue
Block a user