view mod_muc_ping/mod_muc_ping.lua @ 4646:072d078be095

mod_storage_xmlarchive: Advertise capabilities (none atm) Both 'total' and 'quota' would be prohibitively expensive for the kind of archives this module targets as it would require counting items across the entire archive.
author Kim Alvefur <zash@zash.se>
date Fri, 13 Aug 2021 01:18:32 +0200
parents a0ca5d0a49ba
children
line wrap: on
line source

local st = require "util.stanza";
local jid_bare = import("util.jid", "bare");

local mod_muc = module:depends"muc";
local rooms = rawget(mod_muc, "rooms");
if not rooms then
	module:log("warn", "mod_%s is compatible with Prosody up to 0.10.x", module.name);
	return;
end

module:hook("iq/full", function (event)
	local origin, stanza = event.origin, event.stanza;
	if stanza.attr.type ~= "get" or not stanza:get_child("ping", "urn:xmpp:ping") then
		return;
	end

	local from = stanza.attr.from;
	local room_nick = stanza.attr.to;
	local room_jid = jid_bare(room_nick);

	local room = rooms[room_jid];
	if not room then return; end

	if room._jid_nick[from] == room_nick then
		origin.send(st.reply(stanza));
		return true;
	end
end);

module:hook("muc-disco#info", function(event)
	event.reply:tag("feature", {var="urn:xmpp:ping"}):up();
	event.reply:tag("feature", {var = "http://jabber.org/protocol/muc#self-ping-optimization"}):up();
end);