Mercurial > prosody-modules
view mod_muc_offline_delivery/mod_muc_offline_delivery.lua @ 4565:3b2ae854842c
mod_muc_bot: Save occupant to room
This has some side-effects:
Firstly, the bot shows up in occupant list, which is nice. Secondly, the
bot starts receiving messages from the room which might be wanted, but
it would be better to join the room for real in this case.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 10 Apr 2021 19:23:25 +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);