--- 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);