File

mod_delay/mod_delay.lua @ 2608:362ca94192ee

mod_smacks: Add resumed session to event "smacks-hibernation-end" Older versions of this event only have the "intermediate" session in event.session (the one used to resume the existing session), but not the resumed one. This adds event.resumed which contains the resumed one alongside to event.session.
author tmolitor <thilo@eightysoft.de>
date Sat, 11 Mar 2017 01:37:28 +0100
parent 2435:05248d5a7166
child 3054:5e94061c1aa7
line wrap: on
line source

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("pre-resource-unbind", function (event)
	remove_filter(event.session, "stanzas/in", add_delay);
end);