Software /
code /
prosody
Comparison
plugins/muc/subject.lib.lua @ 8929:415b2e9d8ba8
MUC: Record timestamp of subject changes and stamp delay tag later
Thanks whoever mentioned this. Can't find who it was now.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 26 Jun 2018 02:24:56 +0200 |
parent | 8928:d41f8ce67c8e |
child | 8930:2e45b1b47918 |
comparison
equal
deleted
inserted
replaced
8928:d41f8ce67c8e | 8929:415b2e9d8ba8 |
---|---|
6 -- This project is MIT/X11 licensed. Please see the | 6 -- This project is MIT/X11 licensed. Please see the |
7 -- COPYING file in the source package for more information. | 7 -- COPYING file in the source package for more information. |
8 -- | 8 -- |
9 | 9 |
10 local st = require "util.stanza"; | 10 local st = require "util.stanza"; |
11 local dt = require "util.datetime"; | |
11 | 12 |
12 local muc_util = module:require "muc/util"; | 13 local muc_util = module:require "muc/util"; |
13 local valid_roles = muc_util.valid_roles; | 14 local valid_roles = muc_util.valid_roles; |
14 | 15 |
15 local function create_subject_message(subject, from) | 16 local function create_subject_message(subject, from) |
54 local function get_subject(room) | 55 local function get_subject(room) |
55 -- a <message/> stanza from the room JID (or from the occupant JID of the entity that set the subject) | 56 -- a <message/> stanza from the room JID (or from the occupant JID of the entity that set the subject) |
56 return room._data.subject, room._data.subject_from or room.jid; | 57 return room._data.subject, room._data.subject_from or room.jid; |
57 end | 58 end |
58 | 59 |
59 local function send_subject(room, to) | 60 local function send_subject(room, to, time) |
60 local msg = create_subject_message(get_subject(room)); | 61 local msg = create_subject_message(get_subject(room)); |
61 msg.attr.to = to; | 62 msg.attr.to = to; |
63 if time then | |
64 msg:tag("delay", { | |
65 xmlns = "urn:xmpp:delay", | |
66 from = room.jid, | |
67 stamp = dt.datetime(time); | |
68 }):up(); | |
69 end | |
62 room:route_stanza(msg); | 70 room:route_stanza(msg); |
63 end | 71 end |
64 | 72 |
65 local function set_subject(room, subject, from) | 73 local function set_subject(room, subject, from) |
66 if subject == "" then subject = nil; end | 74 if subject == "" then subject = nil; end |
67 local old_subject, old_from = get_subject(room); | 75 local old_subject, old_from = get_subject(room); |
68 if old_subject == subject and old_from == from then return false; end | 76 if old_subject == subject and old_from == from then return false; end |
69 room._data.subject_from = from; | 77 room._data.subject_from = from; |
70 room._data.subject = subject; | 78 room._data.subject = subject; |
79 room._data.subject_time = os.time(); | |
71 local msg = create_subject_message(subject, from); | 80 local msg = create_subject_message(subject, from); |
72 room:broadcast_message(msg); | 81 room:broadcast_message(msg); |
73 return true; | 82 return true; |
74 end | 83 end |
75 | 84 |
76 -- Send subject to joining user | 85 -- Send subject to joining user |
77 module:hook("muc-occupant-session-new", function(event) | 86 module:hook("muc-occupant-session-new", function(event) |
78 send_subject(event.room, event.stanza.attr.from); | 87 send_subject(event.room, event.stanza.attr.from, event.room._data.subject_time); |
79 end, 20); | 88 end, 20); |
80 | 89 |
81 -- Prosody has made the decision that messages with <subject/> are exclusively subject changes | 90 -- Prosody has made the decision that messages with <subject/> are exclusively subject changes |
82 -- e.g. body will be ignored; even if the subject change was not allowed | 91 -- e.g. body will be ignored; even if the subject change was not allowed |
83 module:hook("muc-occupant-groupchat", function(event) | 92 module:hook("muc-occupant-groupchat", function(event) |