Mercurial > prosody-modules
view mod_muc_restrict_avatars/mod_muc_restrict_avatars.lua @ 5881:66e7d46b1d4b
mod_muc_restrict_avatars: Allow MUC admin to control restriction
Thanks, Strix!
author | Stephen Paul Weber <singpolyma@singpolyma.net> |
---|---|
date | Tue, 09 Apr 2024 14:44:52 -0500 |
parents | 2c69577b28c2 |
children | 5b95e06d75d5 |
line wrap: on
line source
local bare_jid = require"util.jid".bare; local mod_muc = module:depends("muc"); local function filter_avatar_advertisement(tag) if tag.attr.xmlns == "vcard-temp:x:update" then return nil; end return tag; end -- Function to determine if avatar restriction is enabled local function is_avatar_restriction_enabled(room) return room._data.restrict_avatars; end -- Add MUC configuration form option for avatar restriction module:hook("muc-config-form", function(event) local room, form = event.room, event.form; table.insert(form, { name = "restrict_avatars", type = "boolean", label = "Restrict avatars to members only", value = is_avatar_restriction_enabled(room) }); end); -- Handle MUC configuration form submission module:hook("muc-config-submitted", function(event) local room, fields, changed = event.room, event.fields, event.changed; local restrict_avatars = fields["restrict_avatars"]; if restrict_avatars ~= is_avatar_restriction_enabled(room) then -- Update room settings based on the submitted value room._data.restrict_avatars = restrict_avatars; -- Mark the configuration as changed if type(changed) == "table" then changed["restrict_avatars"] = true; else event.changed = true; end end end); -- Handle presence/full events to filter avatar advertisements module:hook("presence/full", function(event) local stanza = event.stanza; local room = mod_muc.get_room_from_jid(bare_jid(stanza.attr.to)); if not room:get_affiliation(stanza.attr.from) then if is_avatar_restriction_enabled(room) then stanza:maptags(filter_avatar_advertisement); end end end, 1);