mod_muc_defaults/mod_muc_defaults.lua
changeset 3590 796b29911747
child 3627 da2d58208574
equal deleted inserted replaced
3589:ddf109d58eff 3590:796b29911747
       
     1 local log = module._log;
       
     2 local params = module:get_option("default_mucs", {});
       
     3 local jid_bare = require "util.jid".bare;
       
     4 
       
     5 
       
     6 local function set_affiliations(room, affiliations)
       
     7 	for affiliation, jids in pairs(affiliations) do
       
     8 		for i, jid in pairs(jids) do
       
     9 			module:log("debug", "Setting affiliation %s for jid %s", affiliation, jid);
       
    10 			room:set_affiliation(true, jid_bare(jid), affiliation);
       
    11 		end
       
    12 	end
       
    13 end
       
    14 
       
    15 
       
    16 local function configure_room(room, config)
       
    17 	local should_save = false;
       
    18 	if config.allow_member_invites ~= nil then
       
    19 		should_save =
       
    20 			room:set_allow_member_invites(config.allow_member_invites)
       
    21 			or should_save;
       
    22 	end
       
    23 	if config.change_subject ~= nil then
       
    24 		should_save =
       
    25 			room:set_changesubject(config.change_subject)
       
    26 			or should_save;
       
    27 	end
       
    28 	if config.history_length ~= nil then
       
    29 		should_save =
       
    30 			room:set_historylength(config.history_length)
       
    31 			or should_save;
       
    32 	end
       
    33 	if config.lang ~= nil then
       
    34 		should_save = room:set_language(config.language) or should_save;
       
    35 	end
       
    36 	if config.members_only ~= nil then
       
    37 		should_save =
       
    38 			room:set_members_only(config.members_only)
       
    39 			or should_save;
       
    40 	end
       
    41 	if config.moderated ~= nil then
       
    42 		should_save = room:set_moderated(config.moderated) or should_save;
       
    43 	end
       
    44 	if config.persistent ~= nil then
       
    45 		should_save = room:set_persistent(config.persistent) or should_save;
       
    46 	end
       
    47 	if config.public ~= nil then
       
    48 		should_save = room:set_hidden(not config.public) or should_save;
       
    49 	end
       
    50 	if config.public_jids ~= nil then
       
    51 		should_save =
       
    52 			room:set_whois(config.public_jids and "anyone" or "moderators")
       
    53 			or should_save;
       
    54 	end
       
    55 	if config.logging ~= room._data.logging then
       
    56 		room._data.logging = config.logging;
       
    57 		should_save = true;
       
    58 	end
       
    59 	if should_save then
       
    60 		room:save(true);
       
    61 	end
       
    62 end
       
    63 
       
    64 
       
    65 local i, room_data;
       
    66 for i, room_data in pairs(params) do
       
    67 	local host = module.host;
       
    68 	local room_jid = room_data.jid_node.."@"..host;
       
    69 	local mod_muc = prosody.hosts[host].modules.muc;
       
    70 	local room = mod_muc.get_room_from_jid(room_jid);
       
    71 	if not room then
       
    72 		module:log("debug", "Creating new room %s", room_jid);
       
    73 		-- We don't pass in the config, so that the default config is set first.
       
    74 		room = mod_muc.create_room(room_jid);
       
    75 	else
       
    76 		module:log("debug", "Configuring already existing room %s", room_jid);
       
    77 	end
       
    78 	configure_room(room, room_data.config);
       
    79 	set_affiliations(room, room_data.affiliations);
       
    80 end