# HG changeset patch # User Kim Alvefur # Date 1689842313 -7200 # Node ID 2e30af180da5116473d59ff0b888c0769ad9a269 # Parent 06fad22672e15d7854d0d7e615f26bd772b4144c 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 diff -r 06fad22672e1 -r 2e30af180da5 mod_muc_moderation/mod_muc_moderation.lua --- 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