11 stream:add_plugin("presence") |
11 stream:add_plugin("presence") |
12 stream.rooms = {}; |
12 stream.rooms = {}; |
13 |
13 |
14 stream:hook("stanza", function (stanza) |
14 stream:hook("stanza", function (stanza) |
15 local room_jid = jid.bare(stanza.attr.from); |
15 local room_jid = jid.bare(stanza.attr.from); |
16 local room = stream.rooms[room_jid] or stream.rooms[stanza.attr.to.." "..room_jid] or nil |
16 if not room_jid then return end |
|
17 local room = stream.rooms[room_jid] |
|
18 if not room and stanza.attr.to and room_jid then |
|
19 room = stream.rooms[stanza.attr.to.." "..room_jid] |
|
20 end |
17 if room and room.opts.source and stanza.attr.to ~= room.opts.source then return end |
21 if room and room.opts.source and stanza.attr.to ~= room.opts.source then return end |
18 if room then |
22 if room then |
19 local nick = select(3, jid.split(stanza.attr.from)); |
23 local nick = select(3, jid.split(stanza.attr.from)); |
20 local body = stanza:get_child("body"); |
24 local body = stanza:get_child("body"); |
21 local delay = stanza:get_child("delay", xmlns_delay); |
25 local delay = stanza:get_child("delay", xmlns_delay); |
35 |
39 |
36 function stream:join_room(jid, nick, opts) |
40 function stream:join_room(jid, nick, opts) |
37 if not nick then |
41 if not nick then |
38 return false, "no nickname supplied" |
42 return false, "no nickname supplied" |
39 end |
43 end |
|
44 opts = opts or {}; |
40 local room = setmetatable({ |
45 local room = setmetatable({ |
41 stream = stream, jid = jid, nick = nick, |
46 stream = stream, jid = jid, nick = nick, |
42 subject = nil, |
47 subject = nil, |
43 occupants = {}, |
48 occupants = {}, |
44 opts = opts, |
49 opts = opts, |
114 |
119 |
115 function room_mt:send(stanza) |
120 function room_mt:send(stanza) |
116 if stanza.name == "message" and not stanza.attr.type then |
121 if stanza.name == "message" and not stanza.attr.type then |
117 stanza.attr.type = "groupchat"; |
122 stanza.attr.type = "groupchat"; |
118 end |
123 end |
119 if stanza.name == "presence" or not stanza.attr.to then |
124 if stanza.name == "presence" then |
120 stanza.attr.to = self.jid .."/"..self.nick; |
125 stanza.attr.to = self.jid .."/"..self.nick; |
121 end |
126 end |
122 if stanza.attr.type == "groupchat" or not stanza.attr.to then |
127 if stanza.attr.type == "groupchat" or not stanza.attr.to then |
123 stanza.attr.to = self.jid; |
128 stanza.attr.to = self.jid; |
124 end |
129 end |