view mod_muc_ping/mod_muc_ping.lua @ 3902:341850e8866f

mod_muc_moderation: Broadcast retraction via method that saves it Otherwise the retraction is not saved to history, so that those who join after it was sent are unaware of the retraction
author Kim Alvefur <zash@zash.se>
date Sat, 22 Feb 2020 21:41:31 +0100
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);