Mercurial > prosody-modules
changeset 5612:2e30af180da5
mod_muc_moderation: Stamp XEP-0421 occupant-id for the acting moderator
Gives clients some hint about which moderator it was who did the deed.
The @by attribute does have the nick of the actor, but they could change
their nickname at some point, which is what occupant-id solves.
Ref #1816
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 20 Jul 2023 10:38:33 +0200 |
parents | 06fad22672e1 |
children | a9682cad0e67 |
files | mod_muc_moderation/mod_muc_moderation.lua |
diffstat | 1 files changed, 13 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/mod_muc_moderation/mod_muc_moderation.lua Thu Jul 20 10:37:27 2023 +0200 +++ b/mod_muc_moderation/mod_muc_moderation.lua Thu Jul 20 10:38:33 2023 +0200 @@ -101,14 +101,24 @@ announcement:add_direct_child(moderated_occupant_id); end + local actor_occupant = room:get_occupant_by_real_jid(actor) or room:new_occupant(jid.bare(actor), actor_nick); + if room.get_occupant_id then + -- This isn't a regular broadcast message going through the events occupant_id.lib hooks so we do this here + announcement:add_direct_child(st.stanza("occupant-id", { xmlns = xmlns_occupant_id; id = room:get_occupant_id(actor_occupant) })) + end + if muc_log_archive.set and retract then local tombstone = st.message({ from = original.attr.from, type = "groupchat", id = original.attr.id }) :tag("moderated", { xmlns = xmlns_moderate, by = actor_nick }) :tag("retracted", { xmlns = xmlns_retract, stamp = dt.datetime() }):up(); - if room.get_occupant_id and moderated_occupant_id then - -- Copy occupant id from moderated message - tombstone:add_child(moderated_occupant_id); + if room.get_occupant_id then + tombstone:add_direct_child(st.stanza("occupant-id", { xmlns = xmlns_occupant_id; id = room:get_occupant_id(actor_occupant) })) + + if moderated_occupant_id then + -- Copy occupant id from moderated message + tombstone:add_child(moderated_occupant_id); + end end if reason then