plugins/groupchat.lua

changeset 9
8c3bec93087b
parent 0
7d84f4403d67
child 14
3df63aaba9e3
equal deleted inserted replaced
8:9663866ca475 9:8c3bec93087b
58 events = events.new() }, room_mt); 58 events = events.new() }, room_mt);
59 self.rooms[jid] = room; 59 self.rooms[jid] = room;
60 local occupants = room.occupants; 60 local occupants = room.occupants;
61 room:hook("presence", function (presence) 61 room:hook("presence", function (presence)
62 local nick = presence.nick; 62 local nick = presence.nick;
63 if not occupants[nick] then 63 if not occupants[nick] and presence.stanza.attr.type ~= "unavailable" then
64 if presence.type ~= "unavailable" then 64 occupants[nick] = {
65 occupants[nick] = { 65 nick = nick;
66 nick = nick; 66 jid = presence.stanza.attr.from;
67 jid = presence.stanza.attr.from; 67 presence = presence.stanza;
68 presence = presence.stanza; 68 };
69 }; 69 if nick == room.nick then
70 if nick == room.nick then 70 room.bot:event("groupchat/joined", room);
71 room.bot:event("groupchat/joined", room);
72 else
73 room:event("occupant-joined", occupants[nick]);
74 end
75 else 71 else
76 occupants[nick].presence = presence.stanza; 72 room:event("occupant-joined", occupants[nick]);
77 room:event("occupant-left", occupants[nick]);
78 occupants[nick] = nil;
79 end 73 end
74 elseif occupants[nick] and presence.stanza.attr.type == "unavailable" then
75 occupants[nick].presence = presence.stanza;
76 room:event("occupant-left", occupants[nick]);
77 occupants[nick] = nil;
80 end 78 end
81 end); 79 end);
82 self:send(st.presence({to = jid.."/"..nick})); 80 self:send(st.presence({to = jid.."/"..nick}));
83 self:event("groupchat/joining", room); 81 self:event("groupchat/joining", room);
84 return room; 82 return room;

mercurial