Software /
code /
prosody-modules
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 |
child | 3623: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 |