plugins/groupchat.lua

changeset 187
7ad218bd5fde
parent 186
bb34b8bc00ae
child 189
033f1bd7420d
equal deleted inserted replaced
186:bb34b8bc00ae 187:7ad218bd5fde
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

mercurial