view mod_muc_offline_delivery/mod_muc_offline_delivery.lua @ 4688:05725276fac0

mod_bookmarks2: Use same default as mod_pep for max_items Should fix the issue with max items until the proper "max" can be used, by following the configured max. While "max" is already in trunk, it's not easily usable in 0.11.x This limit and option was added to mod_pep in Prosody rev aefb96a52f5f
author Kim Alvefur <zash@zash.se>
date Wed, 15 Sep 2021 17:39:37 +0200
parents 3b7847c9bd26
children 8bd36bba2292
line wrap: on
line source

local st = require "util.stanza";

module:add_item("muc-registration-field", {
	name = "{http://tigase.org/protocol/muc}offline";
	type = "boolean";
	label = "Receive messages while not connected to the room";
	value = false;
});

module:hook("muc-registration-submitted", function (event)
	local deliver_offline = event.submitted_data["{http://tigase.org/protocol/muc}offline"] or nil;
	event.affiliation_data.offline_delivery = deliver_offline;
end);

module:hook("muc-add-history", function (event)
	module:log("debug", "Broadcasting message to offline occupants...");
	local sent = 0;
	local room = event.room;
	for jid, affiliation, data in room:each_affiliation() do --luacheck: ignore 213/affiliation
		local reserved_nickname = data and data.reserved_nickname;
		module:log("debug", "Affiliated: %s, %s: %s", jid, reserved_nickname, data and data.offline_delivery);
		if reserved_nickname and data.offline_delivery then
			local is_absent = not room:get_occupant_by_nick(room.jid.."/"..reserved_nickname);
			if is_absent then
				local msg = st.clone(event.stanza);
				msg.attr.to = jid;
				module:send(msg);
				sent = sent + 1;
			end
		end
	end
	if sent > 0 then
		module:log("debug", "Sent message to %d offline occupants", sent);
	end
end);