aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordaurnimator <quae@daurnimator.com>2014-03-24 13:10:54 -0400
committerdaurnimator <quae@daurnimator.com>2014-03-24 13:10:54 -0400
commit8de79917fccca8e42804ff91547ff215f4e94c86 (patch)
treecdf98e5884477502407affc2b01d89eb737682b2
parenta86714d770459194c8be1e6350220e2bd9c844e5 (diff)
downloadprosody-8de79917fccca8e42804ff91547ff215f4e94c86.tar.gz
prosody-8de79917fccca8e42804ff91547ff215f4e94c86.zip
plugins/muc/muc.lib: Add muc-broadcast-message event. Use it for saving to history
-rw-r--r--plugins/muc/muc.lib.lua34
1 files changed, 19 insertions, 15 deletions
diff --git a/plugins/muc/muc.lib.lua b/plugins/muc/muc.lib.lua
index 821cb082..4366716a 100644
--- a/plugins/muc/muc.lib.lua
+++ b/plugins/muc/muc.lib.lua
@@ -119,25 +119,29 @@ function room_mt:broadcast_presence(stanza, sid, code, nick)
self:_route_stanza(stanza);
end
function room_mt:broadcast_message(stanza, historic)
+ module:fire_event("muc-broadcast-message", {room = self, stanza = stanza, historic = historic});
for occupant_jid, o_data in pairs(self._occupants) do
self:route_to_occupant(o_data, stanza)
end
- if historic then -- add to history
- return self:save_to_history(stanza)
- end
-end
-function room_mt:save_to_history(stanza)
- local history = self._data['history'];
- if not history then history = {}; self._data['history'] = history; end
- stanza = st.clone(stanza);
- stanza.attr.to = "";
- local stamp = datetime.datetime();
- stanza:tag("delay", {xmlns = "urn:xmpp:delay", from = module.host, stamp = stamp}):up(); -- XEP-0203
- stanza:tag("x", {xmlns = "jabber:x:delay", from = module.host, stamp = datetime.legacy()}):up(); -- XEP-0091 (deprecated)
- local entry = { stanza = stanza, stamp = stamp };
- t_insert(history, entry);
- while #history > (self._data.history_length or default_history_length) do t_remove(history, 1) end
end
+
+-- add to history
+module:hook("muc-broadcast-message", function(event)
+ if event.historic then
+ local room = event.room
+ local history = room._data['history'];
+ if not history then history = {}; room._data['history'] = history; end
+ local stanza = st.clone(event.stanza);
+ stanza.attr.to = "";
+ local stamp = datetime.datetime();
+ stanza:tag("delay", {xmlns = "urn:xmpp:delay", from = module.host, stamp = stamp}):up(); -- XEP-0203
+ stanza:tag("x", {xmlns = "jabber:x:delay", from = module.host, stamp = datetime.legacy()}):up(); -- XEP-0091 (deprecated)
+ local entry = { stanza = stanza, stamp = stamp };
+ t_insert(history, entry);
+ while #history > room:get_historylength() do t_remove(history, 1) end
+ end
+end)
+
function room_mt:broadcast_except_nick(stanza, nick)
for rnick, occupant in pairs(self._occupants) do
if rnick ~= nick then