mod_track_muc_joins/mod_track_muc_joins.lua
author Matthew Wild <mwild1@gmail.com>
Fri, 23 Sep 2022 22:41:15 +0100
changeset 5058 62480053c87b
parent 2343 443d9dae3216
permissions -rw-r--r--
mod_cloud_notify_encrypted: Additional debug logging when enabling/skipping
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2089
8cb8004091f8 mod_track_muc_joins: Add missing imports (thanks Ge0rG)
Kim Alvefur <zash@zash.se>
parents: 2085
diff changeset
     1
local jid_bare = require "util.jid".bare;
2268
463e43dc0c4d mod_track_muc_joins: Keep the nickname around
Kim Alvefur <zash@zash.se>
parents: 2162
diff changeset
     2
local jid_split = require "util.jid".split;
2089
8cb8004091f8 mod_track_muc_joins: Add missing imports (thanks Ge0rG)
Kim Alvefur <zash@zash.se>
parents: 2085
diff changeset
     3
local sessions = prosody.full_sessions;
2085
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     4
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     5
module:hook("presence/full", function (event)
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     6
	local stanza = event.stanza;
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     7
	local session = sessions[stanza.attr.to];
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     8
	if not session then return end;
2339
eb456fd639d2 mod_track_muc_joins: Check if the map of directed presence exists earlier (fixes traceback due to precedence error) (thanks Link Mauve)
Kim Alvefur <zash@zash.se>
parents: 2306
diff changeset
     9
	if not session.directed then return end -- hasn't sent presence yet
2085
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
	local log = session.log or module._log;
2160
3fcac143fe0b mod_track_muc_joins: Check directed presence
Kim Alvefur <zash@zash.se>
parents: 2089
diff changeset
    11
2085
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
	local muc_x = stanza:get_child("x", "http://jabber.org/protocol/muc#user");
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    13
	if not muc_x then return end -- Not MUC related
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    14
2161
7d1a22ac2a21 mod_track_muc_joins: Only check directed presence when joining (would be gone when leaving)
Kim Alvefur <zash@zash.se>
parents: 2160
diff changeset
    15
	local from_jid = stanza.attr.from;
2160
3fcac143fe0b mod_track_muc_joins: Check directed presence
Kim Alvefur <zash@zash.se>
parents: 2089
diff changeset
    16
	local room = jid_bare(from_jid);
2278
43e647b8dd9f mod_track_muc_joins: Fix saving the room nick (was using the room node)
Kim Alvefur <zash@zash.se>
parents: 2268
diff changeset
    17
	local _,_,nick = jid_split(from_jid);
2085
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    18
	local joined = stanza.attr.type;
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    19
	if joined == nil then
2268
463e43dc0c4d mod_track_muc_joins: Keep the nickname around
Kim Alvefur <zash@zash.se>
parents: 2162
diff changeset
    20
		joined = nick;
2085
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    21
	elseif joined == "unavailable" then
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    22
		joined = nil;
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    23
	else
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    24
		-- Ignore errors and whatever
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    25
		return;
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
	end
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    27
2339
eb456fd639d2 mod_track_muc_joins: Check if the map of directed presence exists earlier (fixes traceback due to precedence error) (thanks Link Mauve)
Kim Alvefur <zash@zash.se>
parents: 2306
diff changeset
    28
	if joined and not session.directed[from_jid] then
2161
7d1a22ac2a21 mod_track_muc_joins: Only check directed presence when joining (would be gone when leaving)
Kim Alvefur <zash@zash.se>
parents: 2160
diff changeset
    29
		return; -- Never sent presence there, can't be a MUC join
7d1a22ac2a21 mod_track_muc_joins: Only check directed presence when joining (would be gone when leaving)
Kim Alvefur <zash@zash.se>
parents: 2160
diff changeset
    30
	end
7d1a22ac2a21 mod_track_muc_joins: Only check directed presence when joining (would be gone when leaving)
Kim Alvefur <zash@zash.se>
parents: 2160
diff changeset
    31
2306
12249570352f mod_track_muc_joins: Use correct number in comment
Kim Alvefur <zash@zash.se>
parents: 2278
diff changeset
    32
	-- Check for status code 110, meaning it's their own reflected presence
2085
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    33
	for status in muc_x:childtags("status") do
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    34
		log("debug", "Status code %d", status.attr.code);
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    35
		if status.attr.code == "110" then
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    36
			log("debug", "%s room %s", joined and "Joined" or "Left", room);
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    37
			local rooms = session.rooms_joined;
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    38
			if not rooms then
2162
de3fb9d2673c mod_track_muc_joins: Skip creating room map if leaving a room and it does not exist
Kim Alvefur <zash@zash.se>
parents: 2161
diff changeset
    39
				if not joined then return; end
2085
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    40
				session.rooms_joined = { [room] = joined };
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    41
			else
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    42
				rooms[room] = joined;
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    43
			end
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    44
			return;
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    45
		end
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    46
	end
2343
443d9dae3216 mod_track_muc_joins: Bump priority up over mod_presence to ensure event is caught
Kim Alvefur <zash@zash.se>
parents: 2339
diff changeset
    47
end, 1);
2085
73096d8d924c mod_track_muc_joins: Module to keep track of joined MUC rooms
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    48