Software / code / prosody-modules
Annotate
mod_muc_moderation_delay/delay.lib.lua @ 6319:63ef69b2f046
mod_http_oauth2: Assume Prosody 13.0+ roles are available
Per the README, 0.12 is not supported, so we should not need to worry
about this. Plus it is assumed to be present elsewhere and that would
throw errors.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Wed, 02 Jul 2025 16:15:32 +0200 |
| parent | 5990:a86720654fb9 |
| rev | line source |
|---|---|
|
5966
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
1 -- SPDX-FileCopyrightText: 2024 John Livingston <https://www.john-livingston.fr/> |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
2 -- SPDX-License-Identifier: AGPL-3.0-only |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
3 local st = require "util.stanza"; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
4 local timer = require "util.timer"; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
5 local get_time = require "util.time".now; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
6 local get_moderation_delay = module:require("config").get_moderation_delay; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
7 |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
8 local muc_util = module:require "muc/util"; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
9 local valid_roles = muc_util.valid_roles; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
10 |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
11 local moderation_delay_tag = "moderation-delay"; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
12 local xmlns_fasten = "urn:xmpp:fasten:0"; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
13 local xmlns_moderated_0 = "urn:xmpp:message-moderate:0"; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
14 local xmlns_retract_0 = "urn:xmpp:message-retract:0"; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
15 local xmlns_moderated_1 = "urn:xmpp:message-moderate:1"; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
16 local xmlns_retract_1 = "urn:xmpp:message-retract:1"; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
17 local xmlns_st_id = "urn:xmpp:sid:0"; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
18 |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
19 local queued_stanza_id_timers = {}; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
20 |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
21 -- tests if a stanza is a retractation message. |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
22 local function is_retractation_for_stanza_id(stanza) |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
23 -- XEP 0425 was revised in 2023. For now, mod_muc_moderation uses the previous version. |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
24 -- But we will make the code compatible with both. |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
25 local apply_to = stanza:get_child("apply-to", xmlns_fasten); |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
26 if apply_to and apply_to.attr.id then |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
27 local moderated = apply_to:get_child("moderated", xmlns_moderated_0); |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
28 if moderated then |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
29 local retract = moderated:get_child("retract", xmlns_retract_0); |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
30 if retract then |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
31 return apply_to.attr.id; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
32 end |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
33 end |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
34 end |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
35 |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
36 local moderated = stanza:get_child("moderated", xmlns_moderated_1); |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
37 if moderated then |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
38 if moderated:get_child("retract", xmlns_retract_1) then |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
39 return moderated.attr.id; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
40 end |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
41 end |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
42 |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
43 return nil; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
44 end |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
45 |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
46 -- handler for muc-broadcast-message |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
47 local function handle_broadcast_message(event) |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
48 local room, stanza = event.room, event.stanza; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
49 local delay = get_moderation_delay(room); |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
50 if delay == nil then |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
51 -- feature disabled on the room, go for it. |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
52 return; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
53 end |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
54 |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
55 -- only delay groupchat messages with body. |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
56 if stanza.attr.type ~= "groupchat" then |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
57 return; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
58 end |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
59 |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
60 -- detect retractations: |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
61 local retracted_stanza_id = is_retractation_for_stanza_id(stanza); |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
62 if retracted_stanza_id then |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
63 module:log("debug", "Got a retractation message for %s", retracted_stanza_id); |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
64 if queued_stanza_id_timers[retracted_stanza_id] then |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
65 module:log("info", "Got a retractation message, for message %s that is currently waiting for broadcast. Cancelling.", retracted_stanza_id); |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
66 timer.stop(queued_stanza_id_timers[retracted_stanza_id]); |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
67 queued_stanza_id_timers[retracted_stanza_id] = nil; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
68 -- and we continue... |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
69 end |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
70 end |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
71 |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
72 if not stanza:get_child("body") then |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
73 -- Dont want to delay message without body. |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
74 -- This is usually messages like "xxx is typing", or any other service message. |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
75 -- This also should concern retractation messages. |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
76 -- Clients that will receive retractation messages for message they never got, should just drop them. And that's ok. |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
77 return; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
78 end |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
79 |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
80 local stanza_id = nil; -- message stanza id... can be nil! |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
81 local stanza_id_child = stanza:get_child("stanza-id", xmlns_st_id); |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
82 if not stanza_id_child then |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
83 -- this can happen when muc is not archived! |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
84 -- in such case, message retractation is not possible. |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
85 -- so, this is a normal use case, and we should handle it properly. |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
86 else |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
87 stanza_id = stanza_id_child.attr.id; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
88 end |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
89 local id = stanza.attr.id; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
90 if not id then |
|
5990
a86720654fb9
mod_muc_moderation_delay: Fix lua 5.3/5.4 compatibility.
John Livingston <git@john-livingston.fr>
parents:
5966
diff
changeset
|
91 -- message should always have an id, but just in case... |
|
5966
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
92 module:log("warn", "Message has no id, wont delay it."); |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
93 return; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
94 end |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
95 |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
96 -- Message must be delayed, except for: |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
97 -- * room moderators |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
98 -- * the user that sent the message (if they don't get the echo quickly, their clients could have weird behaviours) |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
99 module:log("debug", "Message %s / %s must be delayed by %i seconds, sending first broadcast wave.", id, stanza_id, delay); |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
100 local moderator_role_value = valid_roles["moderator"]; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
101 |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
102 local cloned_stanza = st.clone(stanza); -- we must clone, to send a copy for the second wave. |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
103 |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
104 -- first of all, if the initiator occupant is not moderator, me must send to them. |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
105 -- (delaying the echo message could have some quircks in some xmpp clients) |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
106 if stanza.attr.from then |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
107 local from_occupant = room:get_occupant_by_nick(stanza.attr.from); |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
108 if from_occupant and valid_roles[from_occupant.role or "none"] < moderator_role_value then |
|
5990
a86720654fb9
mod_muc_moderation_delay: Fix lua 5.3/5.4 compatibility.
John Livingston <git@john-livingston.fr>
parents:
5966
diff
changeset
|
109 module:log("debug", "Message %s / %s must be sent separatly to it initiator %s.", id, stanza_id, delay, stanza.attr.from); |
|
5966
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
110 room:route_to_occupant(from_occupant, stanza); |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
111 end |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
112 end |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
113 |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
114 -- adding a tag, so that moderators can know that this message is delayed. |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
115 stanza:tag(moderation_delay_tag, { |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
116 delay = "" .. delay; |
|
5990
a86720654fb9
mod_muc_moderation_delay: Fix lua 5.3/5.4 compatibility.
John Livingston <git@john-livingston.fr>
parents:
5966
diff
changeset
|
117 waiting = string.format("%i", math.floor(get_time() + delay)); |
|
5966
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
118 }):up(); |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
119 |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
120 -- then, sending to moderators (and only moderators): |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
121 room:broadcast(stanza, function (nick, occupant) |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
122 if valid_roles[occupant.role or "none"] >= moderator_role_value then |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
123 return true; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
124 end |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
125 return false; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
126 end); |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
127 |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
128 local task = timer.add_task(delay, function () |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
129 module:log("debug", "Message %s has been delayed, sending to remaining participants.", id); |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
130 room:broadcast(cloned_stanza, function (nick, occupant) |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
131 if valid_roles[occupant.role or "none"] >= moderator_role_value then |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
132 return false; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
133 end |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
134 if nick == stanza.attr.from then |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
135 -- we already sent it to them (because they are moderator, or because we sent them separately) |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
136 return false; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
137 end |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
138 return true; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
139 end); |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
140 end); |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
141 if stanza_id then |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
142 -- store it, so we can stop timer if there is a retractation. |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
143 queued_stanza_id_timers[stanza_id] = task; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
144 end |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
145 |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
146 return true; -- stop the default broadcast_message processing. |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
147 end |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
148 |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
149 return { |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
150 handle_broadcast_message = handle_broadcast_message; |
|
959382fac20c
mod_muc_moderation_delay: first commit to prosody-modules.
John Livingston <git@john-livingston.fr>
parents:
diff
changeset
|
151 }; |