Mercurial > prosody-modules
comparison mod_muc_ping/mod_muc_ping.lua @ 3349:35dc7c38e362
mod_muc_ping: Implements the Server Optimization part of XEP-0410: MUC Self-Ping
Also see #1220
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 07 Oct 2018 03:39:35 +0200 |
parents | |
children | a0ca5d0a49ba |
comparison
equal
deleted
inserted
replaced
3348:f753cf4f7224 | 3349:35dc7c38e362 |
---|---|
1 local st = require "util.stanza"; | |
2 local jid_bare = import("util.jid", "bare"); | |
3 | |
4 local mod_muc = module:depends"muc"; | |
5 local rooms = rawget(mod_muc, "rooms"); | |
6 if not rooms then | |
7 module:log("warn", "mod_%s is compatible with Prosody up to 0.10.x", module.name); | |
8 return; | |
9 end | |
10 | |
11 module:hook("iq/full", function (event) | |
12 local origin, stanza = event.origin, event.stanza; | |
13 if stanza.attr.type ~= "get" or not stanza:get_child("ping", "urn:xmpp:ping") then | |
14 return; | |
15 end | |
16 | |
17 local from = stanza.attr.from; | |
18 local room_nick = stanza.attr.to; | |
19 local room_jid = jid_bare(room_nick); | |
20 | |
21 local room = rooms[room_jid]; | |
22 if not room then return; end | |
23 | |
24 if room._jid_nick[from] == room_nick then | |
25 origin.send(st.reply(stanza)); | |
26 return true; | |
27 end | |
28 end); | |
29 | |
30 module:hook("muc-disco#info", function(event) | |
31 event.reply:tag("feature", {var="urn:xmpp:ping"}):up(); | |
32 end); |