annotate mod_muc_restrict_attention/mod_muc_restrict_attention.lua @ 6446:63ce1af4d099

mod_muc_restrict_attention: adjusted more variable names to reflect it works on members
author Menel <menel@snikket.de>
date Wed, 11 Mar 2026 08:55:15 +0100
parents 1932fd38d353
children 46fe8e3bf870
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6432
af8577933ddf mod_muc_restrict_attention/mod_muc_restrict_attention.lua: cleanup code and logging
Menel <menel@snikket.de>
parents: 6429
diff changeset
1 module:depends"muc"
6423
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
2
6434
1932fd38d353 mod_muc_restrict_attention: logging configurable and to debug by default.
Menel <menel@snikket.de>
parents: 6432
diff changeset
3 local from_affiliation
1932fd38d353 mod_muc_restrict_attention: logging configurable and to debug by default.
Menel <menel@snikket.de>
parents: 6432
diff changeset
4 local from_jid
1932fd38d353 mod_muc_restrict_attention: logging configurable and to debug by default.
Menel <menel@snikket.de>
parents: 6432
diff changeset
5 local room_jid
6446
63ce1af4d099 mod_muc_restrict_attention: adjusted more variable names to reflect it works on members
Menel <menel@snikket.de>
parents: 6434
diff changeset
6 local restrict_members_by_default = module:get_option_boolean("muc_restrict_attention_from_members", true)
6434
1932fd38d353 mod_muc_restrict_attention: logging configurable and to debug by default.
Menel <menel@snikket.de>
parents: 6432
diff changeset
7 local loglevel = module:get_option_enum("muc_restrict_attention_loglevel", "debug", "info", "warn", "error")
1932fd38d353 mod_muc_restrict_attention: logging configurable and to debug by default.
Menel <menel@snikket.de>
parents: 6432
diff changeset
8
6446
63ce1af4d099 mod_muc_restrict_attention: adjusted more variable names to reflect it works on members
Menel <menel@snikket.de>
parents: 6434
diff changeset
9 local function should_restrict_members(room)
63ce1af4d099 mod_muc_restrict_attention: adjusted more variable names to reflect it works on members
Menel <menel@snikket.de>
parents: 6434
diff changeset
10 local restrict_members = room._data.restrict_members
63ce1af4d099 mod_muc_restrict_attention: adjusted more variable names to reflect it works on members
Menel <menel@snikket.de>
parents: 6434
diff changeset
11 if restrict_members == nil then
63ce1af4d099 mod_muc_restrict_attention: adjusted more variable names to reflect it works on members
Menel <menel@snikket.de>
parents: 6434
diff changeset
12 restrict_members = restrict_members_by_default
6432
af8577933ddf mod_muc_restrict_attention/mod_muc_restrict_attention.lua: cleanup code and logging
Menel <menel@snikket.de>
parents: 6429
diff changeset
13 end
6446
63ce1af4d099 mod_muc_restrict_attention: adjusted more variable names to reflect it works on members
Menel <menel@snikket.de>
parents: 6434
diff changeset
14 return restrict_members
6423
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
15 end
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
16
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
17 module:hook("muc-config-form", function(event)
6432
af8577933ddf mod_muc_restrict_attention/mod_muc_restrict_attention.lua: cleanup code and logging
Menel <menel@snikket.de>
parents: 6429
diff changeset
18 local room, form = event.room, event.form
6423
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
19 table.insert(form, {
6429
66d7da6a9032 mod_muc_restrict_attention: change variable names to fit the new logic to allow restricting members. Adhere to stylesheet.
Menel <menel@snikket.de>
parents: 6428
diff changeset
20 name = "{xmpp:prosody.im}muc#roomconfig_allow_members_attention",
6423
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
21 type = "boolean",
6432
af8577933ddf mod_muc_restrict_attention/mod_muc_restrict_attention.lua: cleanup code and logging
Menel <menel@snikket.de>
parents: 6429
diff changeset
22 label = 'Allow "XEP-0224: Attention" from members',
6446
63ce1af4d099 mod_muc_restrict_attention: adjusted more variable names to reflect it works on members
Menel <menel@snikket.de>
parents: 6434
diff changeset
23 value = not should_restrict_members(room),
6432
af8577933ddf mod_muc_restrict_attention/mod_muc_restrict_attention.lua: cleanup code and logging
Menel <menel@snikket.de>
parents: 6429
diff changeset
24 })
af8577933ddf mod_muc_restrict_attention/mod_muc_restrict_attention.lua: cleanup code and logging
Menel <menel@snikket.de>
parents: 6429
diff changeset
25 end)
6423
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
26
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
27 module:hook("muc-config-submitted", function(event)
6432
af8577933ddf mod_muc_restrict_attention/mod_muc_restrict_attention.lua: cleanup code and logging
Menel <menel@snikket.de>
parents: 6429
diff changeset
28 local room, fields, changed = event.room, event.fields, event.changed
6446
63ce1af4d099 mod_muc_restrict_attention: adjusted more variable names to reflect it works on members
Menel <menel@snikket.de>
parents: 6434
diff changeset
29 local new_restrict_members = not fields["{xmpp:prosody.im}muc#roomconfig_allow_members_attention"]
63ce1af4d099 mod_muc_restrict_attention: adjusted more variable names to reflect it works on members
Menel <menel@snikket.de>
parents: 6434
diff changeset
30 if new_restrict_members ~= should_restrict_members(room) then
63ce1af4d099 mod_muc_restrict_attention: adjusted more variable names to reflect it works on members
Menel <menel@snikket.de>
parents: 6434
diff changeset
31 if new_restrict_members == restrict_members_by_default then
63ce1af4d099 mod_muc_restrict_attention: adjusted more variable names to reflect it works on members
Menel <menel@snikket.de>
parents: 6434
diff changeset
32 room._data.restrict_members = nil
6423
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
33 else
6446
63ce1af4d099 mod_muc_restrict_attention: adjusted more variable names to reflect it works on members
Menel <menel@snikket.de>
parents: 6434
diff changeset
34 room._data.restrict_members = new_restrict_members
6423
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
35 end
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
36 if type(changed) == "table" then
6432
af8577933ddf mod_muc_restrict_attention/mod_muc_restrict_attention.lua: cleanup code and logging
Menel <menel@snikket.de>
parents: 6429
diff changeset
37 changed["{xmpp:prosody.im}muc#roomconfig_allow_members_attention"] = true
6423
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
38 else
6432
af8577933ddf mod_muc_restrict_attention/mod_muc_restrict_attention.lua: cleanup code and logging
Menel <menel@snikket.de>
parents: 6429
diff changeset
39 event.changed = true
6423
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
40 end
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
41 end
6432
af8577933ddf mod_muc_restrict_attention/mod_muc_restrict_attention.lua: cleanup code and logging
Menel <menel@snikket.de>
parents: 6429
diff changeset
42 end)
6423
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
43
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
44 module:hook("muc-disco#info", function (event)
6432
af8577933ddf mod_muc_restrict_attention/mod_muc_restrict_attention.lua: cleanup code and logging
Menel <menel@snikket.de>
parents: 6429
diff changeset
45 local room, form, formdata = event.room, event.form, event.formdata
6446
63ce1af4d099 mod_muc_restrict_attention: adjusted more variable names to reflect it works on members
Menel <menel@snikket.de>
parents: 6434
diff changeset
46 local allow_members_attention = not should_restrict_members(room)
6423
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
47 table.insert(form, {
6429
66d7da6a9032 mod_muc_restrict_attention: change variable names to fit the new logic to allow restricting members. Adhere to stylesheet.
Menel <menel@snikket.de>
parents: 6428
diff changeset
48 name = "{xmpp:prosody.im}muc#roomconfig_allow_members_attention",
6423
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
49 type = "boolean",
6432
af8577933ddf mod_muc_restrict_attention/mod_muc_restrict_attention.lua: cleanup code and logging
Menel <menel@snikket.de>
parents: 6429
diff changeset
50 })
af8577933ddf mod_muc_restrict_attention/mod_muc_restrict_attention.lua: cleanup code and logging
Menel <menel@snikket.de>
parents: 6429
diff changeset
51 formdata["{xmpp:prosody.im}muc#roomconfig_allow_members_attention"] = allow_members_attention
af8577933ddf mod_muc_restrict_attention/mod_muc_restrict_attention.lua: cleanup code and logging
Menel <menel@snikket.de>
parents: 6429
diff changeset
52 end)
6423
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
53
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
54 local function filter_attention_tags(tag)
6432
af8577933ddf mod_muc_restrict_attention/mod_muc_restrict_attention.lua: cleanup code and logging
Menel <menel@snikket.de>
parents: 6429
diff changeset
55 local xmlns = tag.attr.xmlns
6423
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
56 if xmlns == "urn:xmpp:attention:0" then
6434
1932fd38d353 mod_muc_restrict_attention: logging configurable and to debug by default.
Menel <menel@snikket.de>
parents: 6432
diff changeset
57 module:log(loglevel, "Stripped \"Attention\" from %q, affiliation: %q in %q", from_jid, from_affiliation, room_jid)
6432
af8577933ddf mod_muc_restrict_attention/mod_muc_restrict_attention.lua: cleanup code and logging
Menel <menel@snikket.de>
parents: 6429
diff changeset
58 return nil
6423
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
59 end
6432
af8577933ddf mod_muc_restrict_attention/mod_muc_restrict_attention.lua: cleanup code and logging
Menel <menel@snikket.de>
parents: 6429
diff changeset
60 return tag
6423
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
61 end
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
62
d748985de48f mod_muc_restrict_attention: New Module based on mod_muc_restrict_media to strip Attention. Untested.
Menel <menel@snikket.de>
parents:
diff changeset
63 module:hook("muc-occupant-groupchat", function (event)
6432
af8577933ddf mod_muc_restrict_attention/mod_muc_restrict_attention.lua: cleanup code and logging
Menel <menel@snikket.de>
parents: 6429
diff changeset
64 local stanza = event.stanza
af8577933ddf mod_muc_restrict_attention/mod_muc_restrict_attention.lua: cleanup code and logging
Menel <menel@snikket.de>
parents: 6429
diff changeset
65 from_affiliation = event.room:get_affiliation(stanza.attr.from)
6446
63ce1af4d099 mod_muc_restrict_attention: adjusted more variable names to reflect it works on members
Menel <menel@snikket.de>
parents: 6434
diff changeset
66 if stanza.attr.type ~= "groupchat"
63ce1af4d099 mod_muc_restrict_attention: adjusted more variable names to reflect it works on members
Menel <menel@snikket.de>
parents: 6434
diff changeset
67 or from_affiliation == "admin"
6432
af8577933ddf mod_muc_restrict_attention/mod_muc_restrict_attention.lua: cleanup code and logging
Menel <menel@snikket.de>
parents: 6429
diff changeset
68 or from_affiliation == "owner" then
6428
23e3edb6f9ea mod_muc_restrict_attention: Change logic:, always disallow unaffiliated, always allow admin and owner and make it configurable for members. Also it actually works O_o.
Menel <menel@snikket.de>
parents: 6423
diff changeset
69 return
23e3edb6f9ea mod_muc_restrict_attention: Change logic:, always disallow unaffiliated, always allow admin and owner and make it configurable for members. Also it actually works O_o.
Menel <menel@snikket.de>
parents: 6423
diff changeset
70 end
6446
63ce1af4d099 mod_muc_restrict_attention: adjusted more variable names to reflect it works on members
Menel <menel@snikket.de>
parents: 6434
diff changeset
71 if should_restrict_members(event.room)
6432
af8577933ddf mod_muc_restrict_attention/mod_muc_restrict_attention.lua: cleanup code and logging
Menel <menel@snikket.de>
parents: 6429
diff changeset
72 or not from_affiliation then
6434
1932fd38d353 mod_muc_restrict_attention: logging configurable and to debug by default.
Menel <menel@snikket.de>
parents: 6432
diff changeset
73 room_jid = event.room.jid
1932fd38d353 mod_muc_restrict_attention: logging configurable and to debug by default.
Menel <menel@snikket.de>
parents: 6432
diff changeset
74 from_jid = event.stanza.attr.from
6432
af8577933ddf mod_muc_restrict_attention/mod_muc_restrict_attention.lua: cleanup code and logging
Menel <menel@snikket.de>
parents: 6429
diff changeset
75 stanza:maptags(filter_attention_tags)
6429
66d7da6a9032 mod_muc_restrict_attention: change variable names to fit the new logic to allow restricting members. Adhere to stylesheet.
Menel <menel@snikket.de>
parents: 6428
diff changeset
76 end
6432
af8577933ddf mod_muc_restrict_attention/mod_muc_restrict_attention.lua: cleanup code and logging
Menel <menel@snikket.de>
parents: 6429
diff changeset
77 end, 9) --unsure what priority is sensible