mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-28 16:34:13 +01:00
Add subscribe_room_many command
This commit is contained in:
parent
a26c9d2475
commit
fc34661b6f
@ -40,8 +40,11 @@
|
|||||||
change_room_option/4, get_room_options/2,
|
change_room_option/4, get_room_options/2,
|
||||||
set_room_affiliation/4, get_room_affiliations/2, get_room_affiliation/3,
|
set_room_affiliation/4, get_room_affiliations/2, get_room_affiliation/3,
|
||||||
web_menu_main/2, web_page_main/2, web_menu_host/3,
|
web_menu_main/2, web_page_main/2, web_menu_host/3,
|
||||||
subscribe_room/4, unsubscribe_room/2, get_subscribers/2,
|
subscribe_room/4, subscribe_room_many/3,
|
||||||
web_page_host/3, mod_options/1, get_commands_spec/0, find_hosts/1]).
|
unsubscribe_room/2, get_subscribers/2,
|
||||||
|
web_page_host/3,
|
||||||
|
mod_opt_type/1, mod_options/1,
|
||||||
|
get_commands_spec/0, find_hosts/1]).
|
||||||
|
|
||||||
-include("logger.hrl").
|
-include("logger.hrl").
|
||||||
-include_lib("xmpp/include/xmpp.hrl").
|
-include_lib("xmpp/include/xmpp.hrl").
|
||||||
@ -331,6 +334,25 @@ get_commands_spec() ->
|
|||||||
args = [{user, binary}, {nick, binary}, {room, binary},
|
args = [{user, binary}, {nick, binary}, {room, binary},
|
||||||
{nodes, binary}],
|
{nodes, binary}],
|
||||||
result = {nodes, {list, {node, string}}}},
|
result = {nodes, {list, {node, string}}}},
|
||||||
|
#ejabberd_commands{name = subscribe_room_many, tags = [muc_room],
|
||||||
|
desc = "Subscribe several users to a MUC conference",
|
||||||
|
module = ?MODULE, function = subscribe_room_many,
|
||||||
|
args_desc = ["Users JIDs and nicks",
|
||||||
|
"the room to subscribe",
|
||||||
|
"nodes separated by commas: ,"],
|
||||||
|
args_example = [[{"tom@localhost", "Tom"},
|
||||||
|
{"jerry@localhost", "Jerry"}],
|
||||||
|
"room1@conference.localhost",
|
||||||
|
"urn:xmpp:mucsub:nodes:messages,urn:xmpp:mucsub:nodes:affiliations"],
|
||||||
|
args = [{users, {list,
|
||||||
|
{user, {tuple,
|
||||||
|
[{jid, binary},
|
||||||
|
{nick, binary}
|
||||||
|
]}}
|
||||||
|
}},
|
||||||
|
{room, binary},
|
||||||
|
{nodes, binary}],
|
||||||
|
result = {res, rescode}},
|
||||||
#ejabberd_commands{name = unsubscribe_room, tags = [muc_room],
|
#ejabberd_commands{name = unsubscribe_room, tags = [muc_room],
|
||||||
desc = "Unsubscribe from a MUC conference",
|
desc = "Unsubscribe from a MUC conference",
|
||||||
module = ?MODULE, function = unsubscribe_room,
|
module = ?MODULE, function = unsubscribe_room,
|
||||||
@ -1331,6 +1353,18 @@ subscribe_room(User, Nick, Room, Nodes) ->
|
|||||||
throw({error, "Malformed room JID"})
|
throw({error, "Malformed room JID"})
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
subscribe_room_many(Users, Room, Nodes) ->
|
||||||
|
MaxUsers = mod_muc_admin_opt:subscribe_room_many_max_users(global),
|
||||||
|
if
|
||||||
|
length(Users) > MaxUsers ->
|
||||||
|
throw({error, "Too many users in subscribe_room_many command"});
|
||||||
|
true ->
|
||||||
|
lists:foreach(
|
||||||
|
fun({User, Nick}) ->
|
||||||
|
subscribe_room(User, Nick, Room, Nodes)
|
||||||
|
end, Users)
|
||||||
|
end.
|
||||||
|
|
||||||
unsubscribe_room(User, Room) ->
|
unsubscribe_room(User, Room) ->
|
||||||
try jid:decode(Room) of
|
try jid:decode(Room) of
|
||||||
#jid{luser = Name, lserver = Host} when Name /= <<"">> ->
|
#jid{luser = Name, lserver = Host} when Name /= <<"">> ->
|
||||||
@ -1413,7 +1447,11 @@ find_hosts(ServerHost) ->
|
|||||||
[]
|
[]
|
||||||
end.
|
end.
|
||||||
|
|
||||||
mod_options(_) -> [].
|
mod_opt_type(subscribe_room_many_max_users) ->
|
||||||
|
econf:int().
|
||||||
|
|
||||||
|
mod_options(_) ->
|
||||||
|
[{subscribe_room_many_max_users, 50}].
|
||||||
|
|
||||||
mod_doc() ->
|
mod_doc() ->
|
||||||
#{desc =>
|
#{desc =>
|
||||||
|
13
src/mod_muc_admin_opt.erl
Normal file
13
src/mod_muc_admin_opt.erl
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
%% Generated automatically
|
||||||
|
%% DO NOT EDIT: run `make options` instead
|
||||||
|
|
||||||
|
-module(mod_muc_admin_opt).
|
||||||
|
|
||||||
|
-export([subscribe_room_many_max_users/1]).
|
||||||
|
|
||||||
|
-spec subscribe_room_many_max_users(gen_mod:opts() | global | binary()) -> integer().
|
||||||
|
subscribe_room_many_max_users(Opts) when is_map(Opts) ->
|
||||||
|
gen_mod:get_opt(subscribe_room_many_max_users, Opts);
|
||||||
|
subscribe_room_many_max_users(Host) ->
|
||||||
|
gen_mod:get_module_opt(Host, mod_muc_admin, subscribe_room_many_max_users).
|
||||||
|
|
Loading…
Reference in New Issue
Block a user