author | Matthew Wild <mwild1@gmail.com> |
Fri, 23 Sep 2022 22:39:49 +0100 | |
changeset 5056 | d7ece68de066 |
parent 4194 | e06258fc6cf1 |
permissions | -rw-r--r-- |
4004 | 1 |
-- This module allows you to probe the MUC presences for multiple occupants. |
2 |
-- Copyright (C) 2020 JC Brand |
|
3 |
||
4 |
local st = require "util.stanza"; |
|
5 |
local mod_muc = module:depends"muc"; |
|
6 |
local get_room_from_jid = rawget(mod_muc, "get_room_from_jid") or |
|
7 |
function (jid) |
|
8 |
local rooms = rawget(mod_muc, "rooms"); |
|
9 |
return rooms[jid]; |
|
10 |
end |
|
11 |
||
12 |
module:log("debug", "Module loaded"); |
|
13 |
||
14 |
local function respondToBatchedProbe(event) |
|
15 |
local stanza = event.stanza; |
|
16 |
if stanza.attr.type ~= "get" then |
|
17 |
return; |
|
18 |
end |
|
19 |
local query = stanza:get_child("query", "http://jabber.org/protocol/muc#user"); |
|
20 |
if not query then |
|
21 |
return; |
|
22 |
end; |
|
23 |
||
4192
4611999fd8d3
mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents:
4011
diff
changeset
|
24 |
local origin = event.origin; |
4004 | 25 |
local room = get_room_from_jid(stanza.attr.to); |
4192
4611999fd8d3
mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents:
4011
diff
changeset
|
26 |
local probing_occupant = room:get_occupant_by_real_jid(stanza.attr.from); |
4611999fd8d3
mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents:
4011
diff
changeset
|
27 |
if probing_occupant == nil then |
4611999fd8d3
mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents:
4011
diff
changeset
|
28 |
origin.send(st.error_reply(stanza, "cancel", "not-acceptable", "You are not currently connected to this chat", room.jid)); |
4611999fd8d3
mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents:
4011
diff
changeset
|
29 |
return true; |
4611999fd8d3
mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents:
4011
diff
changeset
|
30 |
end |
4611999fd8d3
mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents:
4011
diff
changeset
|
31 |
|
4011
845d13ab0dc0
mod_muc_batched_probe: Call instance method
JC Brand <jc@opkode.com>
parents:
4004
diff
changeset
|
32 |
for item in query:children() do |
4004 | 33 |
local probed_jid = item.attr.jid; |
4192
4611999fd8d3
mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents:
4011
diff
changeset
|
34 |
local probed_occupant = room:get_occupant_by_nick(probed_jid); |
4611999fd8d3
mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents:
4011
diff
changeset
|
35 |
if probed_occupant == nil then |
4611999fd8d3
mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents:
4011
diff
changeset
|
36 |
local pr = room:build_unavailable_presence(probed_jid, stanza.attr.from); |
4611999fd8d3
mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents:
4011
diff
changeset
|
37 |
if pr then |
4611999fd8d3
mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents:
4011
diff
changeset
|
38 |
room:route_stanza(pr); |
4611999fd8d3
mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents:
4011
diff
changeset
|
39 |
end |
4194
e06258fc6cf1
muc_batched_probe: don't return too quickly
JC Brand <jc@opkode.com>
parents:
4192
diff
changeset
|
40 |
else |
e06258fc6cf1
muc_batched_probe: don't return too quickly
JC Brand <jc@opkode.com>
parents:
4192
diff
changeset
|
41 |
local x = st.stanza("x", {xmlns = "http://jabber.org/protocol/muc#user"}); |
e06258fc6cf1
muc_batched_probe: don't return too quickly
JC Brand <jc@opkode.com>
parents:
4192
diff
changeset
|
42 |
room:publicise_occupant_status(probed_occupant, x, nil, nil, nil, nil, false, probing_occupant); |
4192
4611999fd8d3
mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents:
4011
diff
changeset
|
43 |
end |
4004 | 44 |
end |
4192
4611999fd8d3
mod_muc_batched_probe: don't rely on mt_room:respond_to_probe method
JC Brand <jc@opkode.com>
parents:
4011
diff
changeset
|
45 |
origin.send(st.reply(stanza)); |
4004 | 46 |
return true; |
47 |
end |
|
48 |
||
49 |
||
50 |
module:hook("iq/bare", respondToBatchedProbe, 1); |