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