Software / code / prosody
File
plugins/muc/moderated.lib.lua @ 10380:18685a5e362e
mod_dialback: Fix potential traceback in case of missing addressing
Not tested. Assuming nothing good comes from continuing the program flow
after this. The connection should get closed and the event gets aborted
by a traceback anyways.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sat, 02 Nov 2019 15:40:20 +0100 |
| parent | 9035:173c0e16e704 |
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; };