# HG changeset patch # User Stephen Paul Weber # Date 1712691892 18000 # Node ID 66e7d46b1d4b90d9848ed348aa61d46d5cd748a3 # Parent eb1c524a51509abfe30db7c762cc789f4ed72e45 mod_muc_restrict_avatars: Allow MUC admin to control restriction Thanks, Strix! diff -r eb1c524a5150 -r 66e7d46b1d4b mod_muc_restrict_avatars/mod_muc_restrict_avatars.lua --- a/mod_muc_restrict_avatars/mod_muc_restrict_avatars.lua Sat Apr 06 17:55:23 2024 +0200 +++ b/mod_muc_restrict_avatars/mod_muc_restrict_avatars.lua Tue Apr 09 14:44:52 2024 -0500 @@ -9,11 +9,46 @@ 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 - stanza:maptags(filter_avatar_advertisement); + if is_avatar_restriction_enabled(room) then + stanza:maptags(filter_avatar_advertisement); + end end end, 1);