comparison mod_muc_defaults/mod_muc_defaults.lua @ 3586:796b29911747

mod_muc_defaults: Create MUCs from config
author JC Brand <jc@opkode.com>
date Mon, 06 May 2019 16:05:00 +0200
parents
children da2d58208574
comparison
equal deleted inserted replaced
3585:ddf109d58eff 3586: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