Mercurial > prosody-hg
view plugins/muc/moderated.lib.lua @ 12956:52fcdfe710ca
storagemanager: Add keyval+ (combined keyval + map) store type
This combines the two most common store types, which modules often end up
opening with both interfaces separately anyway.
As well as combining them, I've taken the opportunity to improve some of the
method names to make them clearer.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Tue, 27 Sep 2022 17:46:27 +0100 |
| parents | 173c0e16e704 |
| children |
line wrap: on
line source
-- Prosody IM -- Copyright (C) 2008-2010 Matthew Wild -- Copyright (C) 2008-2010 Waqas Hussain -- Copyright (C) 2014 Daurnimator -- -- This project is MIT/X11 licensed. Please see the -- COPYING file in the source package for more information. -- local function get_moderated(room) return room._data.moderated; end local function set_moderated(room, moderated) moderated = moderated and true or nil; if get_moderated(room) == moderated then return false; end room._data.moderated = moderated; return true; end module:hook("muc-disco#info", function(event) event.reply:tag("feature", {var = get_moderated(event.room) and "muc_moderated" or "muc_unmoderated"}):up(); end); module:hook("muc-config-form", function(event) table.insert(event.form, { name = "muc#roomconfig_moderatedroom"; type = "boolean"; label = "Moderated (require permission to speak)"; desc = "In moderated rooms occupants must be given permission to speak by a room moderator"; value = get_moderated(event.room); }); end, 80-3); module:hook("muc-config-submitted/muc#roomconfig_moderatedroom", function(event) if set_moderated(event.room, event.value) then event.status_codes["104"] = true; end end); module:hook("muc-get-default-role", function(event) if event.affiliation == nil then if get_moderated(event.room) then -- XEP-0045: -- An implementation MAY grant voice by default to visitors in unmoderated rooms. return "visitor" end end end, 1); return { get = get_moderated; set = set_moderated; };
