Mercurial > prosody-modules
view mod_track_muc_joins/mod_track_muc_joins.lua @ 2212:57dcad6543c9
mod_e2e_policy: Initial commit
author | Michel Le Bihan <michel@lebihan.pl> |
---|---|
date | Tue, 14 Jun 2016 18:03:05 +0200 |
parents | de3fb9d2673c |
children | 463e43dc0c4d |
line wrap: on
line source
local jid_bare = require "util.jid".bare; local sessions = prosody.full_sessions; module:hook("presence/full", function (event) local stanza = event.stanza; local session = sessions[stanza.attr.to]; if not session then return end; local log = session.log or module._log; local muc_x = stanza:get_child("x", "http://jabber.org/protocol/muc#user"); if not muc_x then return end -- Not MUC related local from_jid = stanza.attr.from; local room = jid_bare(from_jid); local joined = stanza.attr.type; if joined == nil then joined = true; elseif joined == "unavailable" then joined = nil; else -- Ignore errors and whatever return; end if joined and not session.directed or not session.directed[from_jid] then return; -- Never sent presence there, can't be a MUC join end -- Check for status code 100, meaning it's their own reflected presence for status in muc_x:childtags("status") do log("debug", "Status code %d", status.attr.code); if status.attr.code == "110" then log("debug", "%s room %s", joined and "Joined" or "Left", room); local rooms = session.rooms_joined; if not rooms then if not joined then return; end session.rooms_joined = { [room] = joined }; else rooms[room] = joined; end return; end end end);