mod_muc_offline_delivery/mod_muc_offline_delivery.lua
author Kim Alvefur <zash@zash.se>
Sun, 03 Mar 2024 11:23:40 +0100
changeset 5857 97c9b76867ca
parent 4784 4abb33a15897
permissions -rw-r--r--
mod_log_ringbuffer: Detach event handlers on logging reload (thanks Menel) Otherwise the global event handlers accumulate, one added each time logging is reoladed, and each invocation of the signal or event triggers one dump of each created ringbuffer.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4343
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
4777
eb63890ae8fc mod_muc_offline_delivery: Allow the module to be enabled by default for all users
Matthew Wild <mwild1@gmail.com>
parents: 4774
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: 4774
diff changeset
     4
4343
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", {
4774
6ca2769da62a mod_muc_offline_delivery: split name/var so that retrieval of form data works
Matthew Wild <mwild1@gmail.com>
parents: 4772
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: 4772
diff changeset
     7
	var = "{http://tigase.org/protocol/muc}offline";
4343
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";
4777
eb63890ae8fc mod_muc_offline_delivery: Allow the module to be enabled by default for all users
Matthew Wild <mwild1@gmail.com>
parents: 4774
diff changeset
    10
	value = default_enable;
4343
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)
4777
eb63890ae8fc mod_muc_offline_delivery: Allow the module to be enabled by default for all users
Matthew Wild <mwild1@gmail.com>
parents: 4774
diff changeset
    14
	local deliver_offline = event.submitted_data.offline_delivery;
4343
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;
4779
fd90925dc239 mod_muc_offline_delivery: Handle the user not having any affiliation data (thanks Martin)
Matthew Wild <mwild1@gmail.com>
parents: 4777
diff changeset
    24
		local user_setting = data and data.offline_delivery or nil;
4784
4abb33a15897 mod_muc_offline_delivery: Fix logic bug causing traceback when no reserved_nick (thanks Hund)
Matthew Wild <mwild1@gmail.com>
parents: 4779
diff changeset
    25
		if reserved_nickname and (user_setting or (user_setting == nil and default_enable)) then
4343
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
4772
8bd36bba2292 mod_muc_offline_delivery: Less noisy, clearer, debug logging for notifications
Matthew Wild <mwild1@gmail.com>
parents: 4343
diff changeset
    28
				module:log("debug", "Forwarding message to offline member <%s>", jid);
4343
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);