Mercurial > prosody-modules
changeset 883:bec0a995f5df
mod_last_offline: New module that stores last logut time and attaches this timestamp to unavailable presence.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 20 Dec 2012 12:12:36 +0100 |
parents | 4939788a47ea |
children | 2ece37bf9cc6 |
files | mod_last_offline/mod_last_offline.lua |
diffstat | 1 files changed, 33 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_last_offline/mod_last_offline.lua Thu Dec 20 12:12:36 2012 +0100 @@ -0,0 +1,33 @@ +local datamanager = require "util.datamanager"; +local jid_split = require "util.jid".split; +local time = os.time; +local NULL = {}; +local host = module.host; + +module:hook("resource-unbind", function(event) + local session = event.session; + if session.username then + datamanager.store(session.username, host, "last_online", { + timestamp = time(), + }); + end +end); + +local function offline_stamp(event) + local stanza = event.stanza; + local node, to_host = jid_split(stanza.attr.from); + if to_host == host and event.origin == hosts[host] and stanza.attr.type == "unavailable" then + local timestamp = (datamanager.load(node, host, "last_online") or NULL).timestamp; + if timestamp then + stanza:tag("delay", { + xmlns = "urn:xmpp:delay", + from = host, + stamp = datetime.datetime(timestamp), + }):up(); + end + end +end + +module:hook("pre-presence/bare", offline_stamp); +module:hook("pre-presence/full", offline_stamp); +