Software /
code /
prosody-modules
File
mod_delay/mod_delay.lua @ 3268:4cdd1ddae72c
mod_auto_answer_disco_info: Simplify iq handling by hooking on the full payload tag instead of iq/full.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Fri, 24 Aug 2018 20:55:10 +0200 |
parent | 3054:5e94061c1aa7 |
line wrap: on
line source
-- Copyright (C) 2016-2017 Thilo Molitor -- -- This project is MIT/X11 licensed. Please see the -- COPYING file in the source package for more information. -- local add_filter = require "util.filters".add_filter; local remove_filter = require "util.filters".remove_filter; local datetime = require "util.datetime"; local xmlns_delay = "urn:xmpp:delay"; -- Raise an error if the modules has been loaded as a component in prosody's config if module:get_host_type() == "component" then error(module.name.." should NOT be loaded as a component, check out http://prosody.im/doc/components", 0); end local add_delay = function(stanza, session) if stanza and stanza.name == "message" and stanza:get_child("delay", xmlns_delay) == nil then -- only add delay tag to chat or groupchat messages (should we add a delay to anything else, too???) if stanza.attr.type == "chat" or stanza.attr.type == "groupchat" then -- session.log("debug", "adding delay to message %s", tostring(stanza)); stanza = stanza:tag("delay", { xmlns = xmlns_delay, from = session.host, stamp = datetime.datetime()}); end end return stanza; end module:hook("resource-bind", function(event) add_filter(event.session, "stanzas/in", add_delay, 1); end); module:hook("smacks-hibernation-end", function(event) -- older smacks module versions send only the "intermediate" session in event.session and no session.resumed one if event.resumed then add_filter(event.resumed, "stanzas/in", add_delay, 1); end end); module:hook("pre-resource-unbind", function (event) remove_filter(event.session, "stanzas/in", add_delay); end);