Mercurial > prosody-modules
annotate mod_muc_offline_delivery/mod_muc_offline_delivery.lua @ 5173:460f78654864
mod_muc_rtbl: also filter messages
This was a bit tricky because we don't want to run the JIDs
through SHA256 on each message. Took a while to come up with this
simple plan of just caching the SHA256 of the JIDs on the
occupants.
This will leave some dirt in the occupants after unloading the
module, but that should be ok; once they cycle the room, the
hashes will be gone.
This is direly needed, otherwise, there is a tight race between
the moderation activities and the actors joining the room.
author | Jonas Schäfer <jonas@wielicki.name> |
---|---|
date | Tue, 21 Feb 2023 21:37:27 +0100 |
parents | 4abb33a15897 |
children |
rev | line source |
---|---|
4339
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 local st = require "util.stanza"; |
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 |
4773
eb63890ae8fc
mod_muc_offline_delivery: Allow the module to be enabled by default for all users
Matthew Wild <mwild1@gmail.com>
parents:
4770
diff
changeset
|
3 local default_enable = module:get_option_boolean("muc_offline_delivery_default", false); |
eb63890ae8fc
mod_muc_offline_delivery: Allow the module to be enabled by default for all users
Matthew Wild <mwild1@gmail.com>
parents:
4770
diff
changeset
|
4 |
4339
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 module:add_item("muc-registration-field", { |
4770
6ca2769da62a
mod_muc_offline_delivery: split name/var so that retrieval of form data works
Matthew Wild <mwild1@gmail.com>
parents:
4768
diff
changeset
|
6 name = "offline_delivery"; |
6ca2769da62a
mod_muc_offline_delivery: split name/var so that retrieval of form data works
Matthew Wild <mwild1@gmail.com>
parents:
4768
diff
changeset
|
7 var = "{http://tigase.org/protocol/muc}offline"; |
4339
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 type = "boolean"; |
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 label = "Receive messages while not connected to the room"; |
4773
eb63890ae8fc
mod_muc_offline_delivery: Allow the module to be enabled by default for all users
Matthew Wild <mwild1@gmail.com>
parents:
4770
diff
changeset
|
10 value = default_enable; |
4339
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 }); |
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
12 |
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
13 module:hook("muc-registration-submitted", function (event) |
4773
eb63890ae8fc
mod_muc_offline_delivery: Allow the module to be enabled by default for all users
Matthew Wild <mwild1@gmail.com>
parents:
4770
diff
changeset
|
14 local deliver_offline = event.submitted_data.offline_delivery; |
4339
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 event.affiliation_data.offline_delivery = deliver_offline; |
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
16 end); |
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 |
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 module:hook("muc-add-history", function (event) |
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 module:log("debug", "Broadcasting message to offline occupants..."); |
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 local sent = 0; |
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 local room = event.room; |
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
22 for jid, affiliation, data in room:each_affiliation() do --luacheck: ignore 213/affiliation |
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 local reserved_nickname = data and data.reserved_nickname; |
4775
fd90925dc239
mod_muc_offline_delivery: Handle the user not having any affiliation data (thanks Martin)
Matthew Wild <mwild1@gmail.com>
parents:
4773
diff
changeset
|
24 local user_setting = data and data.offline_delivery or nil; |
4780
4abb33a15897
mod_muc_offline_delivery: Fix logic bug causing traceback when no reserved_nick (thanks Hund)
Matthew Wild <mwild1@gmail.com>
parents:
4775
diff
changeset
|
25 if reserved_nickname and (user_setting or (user_setting == nil and default_enable)) then |
4339
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 local is_absent = not room:get_occupant_by_nick(room.jid.."/"..reserved_nickname); |
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 if is_absent then |
4768
8bd36bba2292
mod_muc_offline_delivery: Less noisy, clearer, debug logging for notifications
Matthew Wild <mwild1@gmail.com>
parents:
4339
diff
changeset
|
28 module:log("debug", "Forwarding message to offline member <%s>", jid); |
4339
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 local msg = st.clone(event.stanza); |
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 msg.attr.to = jid; |
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 module:send(msg); |
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 sent = sent + 1; |
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 end |
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 end |
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 end |
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 if sent > 0 then |
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 module:log("debug", "Sent message to %d offline occupants", sent); |
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 end |
3b7847c9bd26
mod_muc_deliver_offline: New module for delivery of MUC messages to offline users
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
39 end); |