Mercurial > prosody-modules
comparison mod_muc_moderation/mod_muc_moderation.lua @ 4814:5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
The XEP is light on details and does not show any example of
non-retraction uses.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Tue, 07 Dec 2021 20:36:13 +0100 |
| parents | 80f871bedcdf |
| children | 1071a420ff6f |
comparison
equal
deleted
inserted
replaced
| 4813:0a257d1402c3 | 4814:5f12c75fd210 |
|---|---|
| 42 local apply_to = stanza.tags[1]; | 42 local apply_to = stanza.tags[1]; |
| 43 local moderate_tag = apply_to:get_child("moderate", xmlns_moderate); | 43 local moderate_tag = apply_to:get_child("moderate", xmlns_moderate); |
| 44 if not moderate_tag then return end -- some other kind of fastening? | 44 if not moderate_tag then return end -- some other kind of fastening? |
| 45 | 45 |
| 46 local reason = moderate_tag:get_child_text("reason"); | 46 local reason = moderate_tag:get_child_text("reason"); |
| 47 local retract = moderate_tag:get_child("retract", xmlns_retract); | |
| 47 | 48 |
| 48 local room_jid = stanza.attr.to; | 49 local room_jid = stanza.attr.to; |
| 49 local room_node = jid.split(room_jid); | 50 local room_node = jid.split(room_jid); |
| 50 local room = mod_muc.get_room_from_jid(room_jid); | 51 local room = mod_muc.get_room_from_jid(room_jid); |
| 51 | 52 |
| 90 origin.send(st.error_reply(stanza, "wait", "internal-server-error")); | 91 origin.send(st.error_reply(stanza, "wait", "internal-server-error")); |
| 91 end | 92 end |
| 92 return true; | 93 return true; |
| 93 end | 94 end |
| 94 | 95 |
| 95 -- Replacements | |
| 96 local tombstone = st.message({ from = original.attr.from, type = "groupchat", id = original.attr.id }) | |
| 97 :tag("moderated", { xmlns = xmlns_moderate, by = actor_nick }) | |
| 98 :tag("retracted", { xmlns = xmlns_retract, stamp = dt.datetime() }):up(); | |
| 99 | 96 |
| 100 local announcement = st.message({ from = room_jid, type = "groupchat", id = id.medium(), }) | 97 local announcement = st.message({ from = room_jid, type = "groupchat", id = id.medium(), }) |
| 101 :tag("apply-to", { xmlns = xmlns_fasten, id = stanza_id }) | 98 :tag("apply-to", { xmlns = xmlns_fasten, id = stanza_id }) |
| 102 :tag("moderated", { xmlns = xmlns_moderate, by = actor_nick }) | 99 :tag("moderated", { xmlns = xmlns_moderate, by = actor_nick }) |
| 103 :tag("retract", { xmlns = xmlns_retract }):up(); | 100 |
| 101 if retract then | |
| 102 announcement:tag("retract", { xmlns = xmlns_retract }):up(); | |
| 103 end | |
| 104 | 104 |
| 105 if reason then | 105 if reason then |
| 106 tombstone:text_tag("reason", reason); | |
| 107 announcement:text_tag("reason", reason); | 106 announcement:text_tag("reason", reason); |
| 108 end | 107 end |
| 109 | 108 |
| 110 if muc_log_archive.set then | 109 if muc_log_archive.set and retract then |
| 111 -- Tombstone | 110 local tombstone = st.message({ from = original.attr.from, type = "groupchat", id = original.attr.id }) |
| 111 :tag("moderated", { xmlns = xmlns_moderate, by = actor_nick }) | |
| 112 :tag("retracted", { xmlns = xmlns_retract, stamp = dt.datetime() }):up(); | |
| 113 | |
| 114 if reason then | |
| 115 tombstone:text_tag("reason", reason); | |
| 116 end | |
| 117 | |
| 112 local was_replaced = muc_log_archive:set(room_node, stanza_id, tombstone); | 118 local was_replaced = muc_log_archive:set(room_node, stanza_id, tombstone); |
| 113 if not was_replaced then | 119 if not was_replaced then |
| 114 origin.send(st.error_reply(stanza, "wait", "internal-server-error")); | 120 origin.send(st.error_reply(stanza, "wait", "internal-server-error")); |
| 115 return true; | 121 return true; |
| 116 end | 122 end |
