Mercurial > prosody-modules
annotate mod_muc_adhoc_bots/mod_muc_adhoc_bots.lua @ 5715:8488ebde5739
mod_http_oauth2: Skip consent screen if requested by client and same scopes already granted
This follows the intent behind the OpenID Connect 'prompt' parameter
when it does not include the 'consent' keyword, that is the client
wishes to skip the consent screen. If the user has already granted the
exact same scopes to the exact same client in the past, then one can
assume that they may grant it again.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 14 Nov 2023 23:03:37 +0100 |
parents | eade7ff9f52c |
children | 8b868c00e38e |
rev | line source |
---|---|
5652
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
1 local jid = require "util.jid"; |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
2 local json = require "util.json"; |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
3 local promise = require "util.promise"; |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
4 local st = require "util.stanza"; |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
5 local uuid = require "util.uuid"; |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
6 |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
7 local xmlns_cmd = "http://jabber.org/protocol/commands"; |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
8 |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
9 module:hook("muc-disco#info", function(event) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
10 event.reply:tag("feature", {var = xmlns_cmd}):up(); |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
11 end); |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
12 |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
13 module:hook("iq-get/bare/http://jabber.org/protocol/disco#items:query", function (event) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
14 local room = prosody.hosts[module:get_host()].modules.muc.get_room_from_jid(event.stanza.attr.to); |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
15 local occupant = room:get_occupant_by_real_jid(event.stanza.attr.from) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
16 if event.stanza.tags[1].attr.node ~= xmlns_cmd or not occupant then |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
17 return |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
18 end |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
19 |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
20 local bots = module:get_option_array("adhoc_bots", {}) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
21 bots:map(function(bot) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
22 return module:send_iq( |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
23 st.iq({ type = "get", id = uuid.generate(), to = bot, from = room:get_occupant_jid(event.stanza.attr.from) }) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
24 :tag("query", { xmlns = "http://jabber.org/protocol/disco#items", node = xmlns_cmd }):up(), |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
25 nil, |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
26 5 |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
27 ) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
28 end) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
29 |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
30 promise.all_settled(bots):next(function (bot_commands) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
31 local reply = st.reply(event.stanza):query("http://jabber.org/protocol/disco#items") |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
32 for i, one_bot_reply in ipairs(bot_commands) do |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
33 if one_bot_reply.status == "fulfilled" then |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
34 local query = one_bot_reply.value.stanza:get_child("query", "http://jabber.org/protocol/disco#items") |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
35 if query then |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
36 -- Should use query:childtags("item") but it doesn't work |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
37 for j,item in ipairs(query.tags) do |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
38 item.attr.node = json.encode({ jid = item.attr.jid, node = item.attr.node }) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
39 item.attr.jid = event.stanza.attr.to |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
40 reply:add_child(item):up() |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
41 end |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
42 end |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
43 end |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
44 end |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
45 event.origin.send(reply:up()) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
46 end):catch(function (e) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
47 module:log("error", e) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
48 end) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
49 |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
50 return true; |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
51 end, 500); |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
52 |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
53 local function is_adhoc_bot(jid) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
54 for i, bot_jid in ipairs(module:get_option_array("adhoc_bots", {})) do |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
55 if jid == bot_jid then |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
56 return true |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
57 end |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
58 end |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
59 |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
60 return false |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
61 end |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
62 |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
63 module:hook("iq-set/bare/"..xmlns_cmd..":command", function (event) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
64 local origin, stanza = event.origin, event.stanza; |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
65 local node = stanza.tags[1].attr.node |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
66 local meta = json.decode(node) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
67 local room = prosody.hosts[module:get_host()].modules.muc.get_room_from_jid(stanza.attr.to); |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
68 local occupant = room:get_occupant_by_real_jid(event.stanza.attr.from) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
69 if meta and occupant and is_adhoc_bot(meta.jid) then |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
70 local fwd = st.clone(stanza) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
71 fwd.attr.to = meta.jid |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
72 fwd.attr.from = room:get_occupant_jid(event.stanza.attr.from) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
73 local command = fwd:get_child("command", "http://jabber.org/protocol/commands") |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
74 command.attr.node = meta.node |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
75 module:send_iq(fwd):next(function(response) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
76 local response_command = response.stanza:get_child("command", "http://jabber.org/protocol/commands") |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
77 response.stanza.attr.from = stanza.attr.to |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
78 response.stanza.attr.to = stanza.attr.from |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
79 response_command.attr.node = node |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
80 origin.send(response.stanza) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
81 end):catch(function (e) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
82 module:log("error", e) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
83 end) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
84 |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
85 return true |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
86 end |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
87 |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
88 return |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
89 end, 500); |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
90 |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
91 local function clean_xmlns(node) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
92 -- Recursively remove "jabber:client" attribute from node. |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
93 -- In Prosody internal routing, xmlns should not be set. |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
94 -- Keeping xmlns would lead to issues like mod_smacks ignoring the outgoing stanza, |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
95 -- so we remove all xmlns attributes with a value of "jabber:client" |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
96 if node.attr.xmlns == 'jabber:client' then |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
97 for childnode in node:childtags() do |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
98 clean_xmlns(childnode) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
99 end |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
100 node.attr.xmlns = nil |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
101 end |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
102 end |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
103 |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
104 module:hook("message/bare", function (event) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
105 local origin, stanza = event.origin, event.stanza; |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
106 if not is_adhoc_bot(stanza.attr.from) then return; end |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
107 local room = prosody.hosts[module:get_host()].modules.muc.get_room_from_jid(stanza.attr.to); |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
108 if room == nil then return; end |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
109 local privilege = stanza:get_child("privilege", "urn:xmpp:privilege:2") |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
110 if privilege == nil then return; end |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
111 local fwd = privilege:get_child("forwarded", "urn:xmpp:forward:0") |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
112 if fwd == nil then return; end |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
113 local message = fwd:get_child("message", "jabber:client") |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
114 if message == nil then return; end |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
115 if message.attr.to ~= stanza.attr.to or jid.bare(message.attr.from) ~= stanza.attr.to then |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
116 return |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
117 end |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
118 |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
119 clean_xmlns(message) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
120 room:broadcast_message(message) |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
121 return true |
eade7ff9f52c
mod_muc_adhoc_bots: add module
Stephen Paul Weber <singpolyma@singpolyma.net>
parents:
diff
changeset
|
122 end) |