Mercurial > prosody-modules
view mod_muc_offline_delivery/mod_muc_offline_delivery.lua @ 4530:33c149d0261d
mod_rest: Add mappings for a whole pile of XEPs
Look ma, programming in JSON!
XEP-0012: Last Activity
XEP-0077: In-Band Registration
XEP-0115: Entity Capabilities
XEP-0153: vCard-Based Avatars
XEP-0297: Stanza Forwarding
XEP-0308: Last Message Correction
XEP-0319: Last User Interaction in Presence
XEP-0333: Chat Markers
XEP-0367: Message Attaching
XEP-0372: References
XEP-0421: Anonymous unique occupant identifiers for MUCs
XEP-0428: Fallback Indication
XEP-0444: Message Reactions
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 23 Mar 2021 23:18:33 +0100 |
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);