annotate mod_muc_intercom/mod_muc_intercom.lua @ 2712:d89ab70808f6

mod_cloud_notify: fix bug when multiple resources are used This bug was triggered under the rare circumstances that a message arrived and one resource was smacks hibernated while the other one(s) were offline. Then only the hibernated resource but not the offline one(s) (or the other way round) got notified.
author tmolitor <thilo@eightysoft.de>
date Mon, 08 May 2017 18:24:29 +0200
parents 9c894b56b4e4
children 6d3935226ffb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
247
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 -- Relay messages between rooms
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2 -- By Kim Alvefur <zash@zash.se>
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4 local host_session = prosody.hosts[module.host];
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5 local st_msg = require "util.stanza".message;
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6 local jid = require "util.jid";
285
108ac6f16d2d mod_muc_intercom: Add a delay to the forwarded message.
Kim Alvefur <zash@zash.se>
parents: 280
diff changeset
7 local now = require "util.datetime".datetime;
247
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8
1425
9c894b56b4e4 mod_muc_intercom: Make compatible with new MUC API.
Waqas Hussain <waqas20@gmail.com>
parents: 285
diff changeset
9 local function get_room_by_jid(mod_muc, jid)
9c894b56b4e4 mod_muc_intercom: Make compatible with new MUC API.
Waqas Hussain <waqas20@gmail.com>
parents: 285
diff changeset
10 if mod_muc.get_room_by_jid then
9c894b56b4e4 mod_muc_intercom: Make compatible with new MUC API.
Waqas Hussain <waqas20@gmail.com>
parents: 285
diff changeset
11 return mod_muc.get_room_by_jid(jid);
9c894b56b4e4 mod_muc_intercom: Make compatible with new MUC API.
Waqas Hussain <waqas20@gmail.com>
parents: 285
diff changeset
12 elseif mod_muc.rooms then
9c894b56b4e4 mod_muc_intercom: Make compatible with new MUC API.
Waqas Hussain <waqas20@gmail.com>
parents: 285
diff changeset
13 return mod_muc.rooms[jid]; -- COMPAT 0.9, 0.10
9c894b56b4e4 mod_muc_intercom: Make compatible with new MUC API.
Waqas Hussain <waqas20@gmail.com>
parents: 285
diff changeset
14 end
9c894b56b4e4 mod_muc_intercom: Make compatible with new MUC API.
Waqas Hussain <waqas20@gmail.com>
parents: 285
diff changeset
15 end
9c894b56b4e4 mod_muc_intercom: Make compatible with new MUC API.
Waqas Hussain <waqas20@gmail.com>
parents: 285
diff changeset
16
247
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 function check_message(data)
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 local origin, stanza = data.origin, data.stanza;
1425
9c894b56b4e4 mod_muc_intercom: Make compatible with new MUC API.
Waqas Hussain <waqas20@gmail.com>
parents: 285
diff changeset
19 local mod_muc = host_session.muc;
9c894b56b4e4 mod_muc_intercom: Make compatible with new MUC API.
Waqas Hussain <waqas20@gmail.com>
parents: 285
diff changeset
20 if not mod_muc then return; end
247
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21
1425
9c894b56b4e4 mod_muc_intercom: Make compatible with new MUC API.
Waqas Hussain <waqas20@gmail.com>
parents: 285
diff changeset
22 local this_room = get_room_by_jid(mod_muc, stanza.attr.to);
247
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 if not this_room then return; end -- no such room
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 local from_room_jid = this_room._jid_nick[stanza.attr.from];
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 if not from_room_jid then return; end -- no such nick
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 local from_room, from_host, from_nick = jid.split(from_room_jid);
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 local body = stanza:get_child("body");
253
7410d1005fea mod_muc_intercom: Fix traceback on topic changes
Kim Alvefur <zash@zash.se>
parents: 247
diff changeset
31 if not body then return; end -- No body, like topic changes
247
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 body = body and body:get_text(); -- I feel like I want to do `or ""` there :/
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 local target_room, message = body:match("^@([^:]+):(.*)");
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 if not target_room or not message then return; end
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 if target_room == from_room then return; end -- don't route to itself
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 module:log("debug", "target room is %s", target_room);
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 local bare_room = jid.join(target_room, from_host);
1425
9c894b56b4e4 mod_muc_intercom: Make compatible with new MUC API.
Waqas Hussain <waqas20@gmail.com>
parents: 285
diff changeset
40 local dest_room = get_room_by_jid(mod_muc, bare_room);
9c894b56b4e4 mod_muc_intercom: Make compatible with new MUC API.
Waqas Hussain <waqas20@gmail.com>
parents: 285
diff changeset
41 if not dest_room then return; end -- TODO send a error
247
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42 module:log("info", "message from %s in %s to %s", from_nick, from_room, target_room);
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 local sender = jid.join(target_room, module.host, from_room .. "/" .. from_nick);
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 local forward_stanza = st_msg({from = sender, to = bare_room, type = "groupchat"}, message);
285
108ac6f16d2d mod_muc_intercom: Add a delay to the forwarded message.
Kim Alvefur <zash@zash.se>
parents: 280
diff changeset
46 forward_stanza:tag("delay", { xmlns = 'urn:xmpp:delay', from = from_room_jid, stamp = now() }):up();
247
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
48 module:log("debug", "broadcasting message to target room");
1425
9c894b56b4e4 mod_muc_intercom: Make compatible with new MUC API.
Waqas Hussain <waqas20@gmail.com>
parents: 285
diff changeset
49 dest_room:broadcast_message(forward_stanza);
247
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50 end
fbddb9db1c82 adds mod_muc_intercom; forwards messages between rooms on a muc host
Kim Alvefur <zash@zash.se>
parents:
diff changeset
51
280
6d72c5172c74 mod_muc_intercom: Increase priority.
Kim Alvefur <zash@zash.se>
parents: 253
diff changeset
52 module:hook("message/bare", check_message, 10);