Mercurial > prosody-modules
annotate mod_muc_moderation/mod_muc_moderation.lua @ 4876:0f5f2d4475b9
mod_http_xep227: Add support for import via APIs rather than direct store manipulation
In particular this transitions PEP nodes and data to be imported via mod_pep's
APIs, fixing issues with importing at runtime while PEP data may already be
live in RAM.
Next obvious candidate for this approach is rosters, so clients get immediate
roster pushes and other special handling (such as emitting subscribes to reach
the desired subscription state).
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Tue, 18 Jan 2022 17:01:18 +0000 |
parents | 5f12c75fd210 |
children | 1071a420ff6f |
rev | line source |
---|---|
3900
06971a04216f
mod_muc_moderation: Add a copyright header
Kim Alvefur <zash@zash.se>
parents:
3897
diff
changeset
|
1 -- mod_muc_moderation |
06971a04216f
mod_muc_moderation: Add a copyright header
Kim Alvefur <zash@zash.se>
parents:
3897
diff
changeset
|
2 -- |
4754 | 3 -- Copyright (C) 2015-2021 Kim Alvefur |
3900
06971a04216f
mod_muc_moderation: Add a copyright header
Kim Alvefur <zash@zash.se>
parents:
3897
diff
changeset
|
4 -- |
06971a04216f
mod_muc_moderation: Add a copyright header
Kim Alvefur <zash@zash.se>
parents:
3897
diff
changeset
|
5 -- This file is MIT licensed. |
06971a04216f
mod_muc_moderation: Add a copyright header
Kim Alvefur <zash@zash.se>
parents:
3897
diff
changeset
|
6 -- |
06971a04216f
mod_muc_moderation: Add a copyright header
Kim Alvefur <zash@zash.se>
parents:
3897
diff
changeset
|
7 -- Implements: XEP-0425: Message Moderation |
06971a04216f
mod_muc_moderation: Add a copyright header
Kim Alvefur <zash@zash.se>
parents:
3897
diff
changeset
|
8 -- |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 -- Imports |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 local dt = require "util.datetime"; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 local id = require "util.id"; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 local jid = require "util.jid"; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 local st = require "util.stanza"; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 -- Plugin dependencies |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 local mod_muc = module:depends "muc"; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 local muc_util = module:require "muc/util"; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 local valid_roles = muc_util.valid_roles; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 local muc_log_archive = module:open_store("muc_log", "archive"); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 if not muc_log_archive.set then |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 module:log("warn", "Selected archive storage module does not support message replacement, no tombstones will be saved"); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 -- Namespaces |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 local xmlns_fasten = "urn:xmpp:fasten:0"; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 local xmlns_moderate = "urn:xmpp:message-moderate:0"; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 local xmlns_retract = "urn:xmpp:message-retract:0"; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 -- Discovering support |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 module:hook("muc-disco#info", function (event) |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 event.reply:tag("feature", { var = xmlns_moderate }):up(); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 end); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 -- Main handling |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 module:hook("iq-set/bare/" .. xmlns_fasten .. ":apply-to", function (event) |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 local stanza, origin = event.stanza, event.origin; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 -- Collect info we need |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 local apply_to = stanza.tags[1]; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 local moderate_tag = apply_to:get_child("moderate", xmlns_moderate); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 if not moderate_tag then return end -- some other kind of fastening? |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
45 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
46 local reason = moderate_tag:get_child_text("reason"); |
4814
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
47 local retract = moderate_tag:get_child("retract", xmlns_retract); |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
48 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
49 local room_jid = stanza.attr.to; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
50 local room_node = jid.split(room_jid); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
51 local room = mod_muc.get_room_from_jid(room_jid); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
53 local stanza_id = apply_to.attr.id; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
54 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
55 -- Permissions |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
56 local actor = stanza.attr.from; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
57 local actor_nick = room:get_occupant_jid(actor); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
58 local affiliation = room:get_affiliation(actor); |
4749
3a7953a5ee5b
mod_muc_moderation: Clarify behavior with a comment
Kim Alvefur <zash@zash.se>
parents:
4177
diff
changeset
|
59 -- Retrieve their current role, iff they are in the room, otherwise what they |
3a7953a5ee5b
mod_muc_moderation: Clarify behavior with a comment
Kim Alvefur <zash@zash.se>
parents:
4177
diff
changeset
|
60 -- would have based on affiliation. |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
61 local role = room:get_role(actor_nick) or room:get_default_role(affiliation); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
62 if valid_roles[role or "none"] < valid_roles.moderator then |
4177
a38e6a8a781a
mod_muc_moderation: Improve error message to be more helpful
Kim Alvefur <zash@zash.se>
parents:
3902
diff
changeset
|
63 origin.send(st.error_reply(stanza, "auth", "forbidden", "You need a role of at least 'moderator'")); |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
64 return true; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
65 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
66 |
4750
98429b646bd4
mod_muc_moderation: Use reserved nickname as fallback
Kim Alvefur <zash@zash.se>
parents:
4749
diff
changeset
|
67 if not actor_nick then |
98429b646bd4
mod_muc_moderation: Use reserved nickname as fallback
Kim Alvefur <zash@zash.se>
parents:
4749
diff
changeset
|
68 local reserved_nickname = room:get_affiliation_data(jid.bare(actor), "reserved_nickname"); |
98429b646bd4
mod_muc_moderation: Use reserved nickname as fallback
Kim Alvefur <zash@zash.se>
parents:
4749
diff
changeset
|
69 if reserved_nickname then |
4806
80f871bedcdf
mod_muc_moderation: Fix actor JID when moderated from outside (thanks lovetox)
Kim Alvefur <zash@zash.se>
parents:
4754
diff
changeset
|
70 actor_nick = room.jid .. "/" .. reserved_nickname; |
4750
98429b646bd4
mod_muc_moderation: Use reserved nickname as fallback
Kim Alvefur <zash@zash.se>
parents:
4749
diff
changeset
|
71 end |
98429b646bd4
mod_muc_moderation: Use reserved nickname as fallback
Kim Alvefur <zash@zash.se>
parents:
4749
diff
changeset
|
72 end |
98429b646bd4
mod_muc_moderation: Use reserved nickname as fallback
Kim Alvefur <zash@zash.se>
parents:
4749
diff
changeset
|
73 |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
74 -- Original stanza to base tombstone on |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
75 local original, err; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
76 if muc_log_archive.get then |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 original, err = muc_log_archive:get(room_node, stanza_id); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
78 else |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
79 -- COMPAT missing :get API |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
80 err = "item-not-found"; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
81 for i, item in muc_log_archive:find(room_node, { key = stanza_id, limit = 1 }) do |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
82 if i == stanza_id then |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
83 original, err = item, nil; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
84 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
85 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
86 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
87 if not original then |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
88 if err == "item-not-found" then |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
89 origin.send(st.error_reply(stanza, "modify", "item-not-found")); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
90 else |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
91 origin.send(st.error_reply(stanza, "wait", "internal-server-error")); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
92 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
93 return true; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
94 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
95 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
96 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
97 local announcement = st.message({ from = room_jid, type = "groupchat", id = id.medium(), }) |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
98 :tag("apply-to", { xmlns = xmlns_fasten, id = stanza_id }) |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
99 :tag("moderated", { xmlns = xmlns_moderate, by = actor_nick }) |
4814
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
100 |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
101 if retract then |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
102 announcement:tag("retract", { xmlns = xmlns_retract }):up(); |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
103 end |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
104 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
105 if reason then |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
106 announcement:text_tag("reason", reason); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
107 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
108 |
4814
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
109 if muc_log_archive.set and retract then |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
110 local tombstone = st.message({ from = original.attr.from, type = "groupchat", id = original.attr.id }) |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
111 :tag("moderated", { xmlns = xmlns_moderate, by = actor_nick }) |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
112 :tag("retracted", { xmlns = xmlns_retract, stamp = dt.datetime() }):up(); |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
113 |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
114 if reason then |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
115 tombstone:text_tag("reason", reason); |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
116 end |
5f12c75fd210
mod_muc_moderation: Handle non-retraction moderation
Kim Alvefur <zash@zash.se>
parents:
4806
diff
changeset
|
117 |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
118 local was_replaced = muc_log_archive:set(room_node, stanza_id, tombstone); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
119 if not was_replaced then |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
120 origin.send(st.error_reply(stanza, "wait", "internal-server-error")); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
121 return true; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
122 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
123 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
124 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
125 -- Done, tell people about it |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
126 module:log("info", "Message with id '%s' in room %s moderated by %s, reason: %s", stanza_id, room_jid, actor, reason); |
3902
341850e8866f
mod_muc_moderation: Broadcast retraction via method that saves it
Kim Alvefur <zash@zash.se>
parents:
3901
diff
changeset
|
127 room:broadcast_message(announcement); |
3897
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
128 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
129 origin.send(st.reply(stanza)); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
130 return true; |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
131 end); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
132 |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
133 module:hook("muc-message-is-historic", function (event) |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
134 -- Ensure moderation messages are stored |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
135 if event.stanza.attr.from == event.room.jid then |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
136 return event.stanza:get_child("apply-to", xmlns_fasten); |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
137 end |
3a96070f4a14
mod_muc_moderation: Initial commit of XEP-0425: Message Moderation
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
138 end, 1); |