Mercurial > prosody-modules
comparison 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 |
comparison
equal
deleted
inserted
replaced
5880:eb1c524a5150 | 5881:66e7d46b1d4b |
---|---|
7 end | 7 end |
8 | 8 |
9 return tag; | 9 return tag; |
10 end | 10 end |
11 | 11 |
12 -- Function to determine if avatar restriction is enabled | |
13 local function is_avatar_restriction_enabled(room) | |
14 return room._data.restrict_avatars; | |
15 end | |
16 | |
17 -- Add MUC configuration form option for avatar restriction | |
18 module:hook("muc-config-form", function(event) | |
19 local room, form = event.room, event.form; | |
20 table.insert(form, { | |
21 name = "restrict_avatars", | |
22 type = "boolean", | |
23 label = "Restrict avatars to members only", | |
24 value = is_avatar_restriction_enabled(room) | |
25 }); | |
26 end); | |
27 | |
28 -- Handle MUC configuration form submission | |
29 module:hook("muc-config-submitted", function(event) | |
30 local room, fields, changed = event.room, event.fields, event.changed; | |
31 local restrict_avatars = fields["restrict_avatars"]; | |
32 | |
33 if restrict_avatars ~= is_avatar_restriction_enabled(room) then | |
34 -- Update room settings based on the submitted value | |
35 room._data.restrict_avatars = restrict_avatars; | |
36 -- Mark the configuration as changed | |
37 if type(changed) == "table" then | |
38 changed["restrict_avatars"] = true; | |
39 else | |
40 event.changed = true; | |
41 end | |
42 end | |
43 end); | |
44 | |
45 -- Handle presence/full events to filter avatar advertisements | |
12 module:hook("presence/full", function(event) | 46 module:hook("presence/full", function(event) |
13 local stanza = event.stanza; | 47 local stanza = event.stanza; |
14 local room = mod_muc.get_room_from_jid(bare_jid(stanza.attr.to)); | 48 local room = mod_muc.get_room_from_jid(bare_jid(stanza.attr.to)); |
15 | |
16 if not room:get_affiliation(stanza.attr.from) then | 49 if not room:get_affiliation(stanza.attr.from) then |
17 stanza:maptags(filter_avatar_advertisement); | 50 if is_avatar_restriction_enabled(room) then |
51 stanza:maptags(filter_avatar_advertisement); | |
52 end | |
18 end | 53 end |
19 end, 1); | 54 end, 1); |