Mercurial > 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 |
| 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 |
