plugins/groupchat.lua

changeset 42
5ee2eccabcc9
parent 36
ccce42f781de
child 44
8e508f08cc7f
equal deleted inserted replaced
41:b00d05814d0d 42:5ee2eccabcc9
84 room.bot:event("groupchat/joined", room); 84 room.bot:event("groupchat/joined", room);
85 else 85 else
86 room:event("occupant-joined", occupants[nick]); 86 room:event("occupant-joined", occupants[nick]);
87 end 87 end
88 elseif occupants[nick] and presence.stanza.attr.type == "unavailable" then 88 elseif occupants[nick] and presence.stanza.attr.type == "unavailable" then
89 occupants[nick].presence = presence.stanza; 89 if nick == room.nick then
90 room:event("occupant-left", occupants[nick]); 90 room.bot:event("groupchat/left", room);
91 occupants[nick] = nil; 91 self.rooms[room.jid] = nil;
92 else
93 occupants[nick].presence = presence.stanza;
94 room:event("occupant-left", occupants[nick]);
95 occupants[nick] = nil;
96 end
92 end 97 end
93 end); 98 end);
94 self:send(st.presence({to = jid.."/"..nick}) 99 self:send(st.presence({to = jid.."/"..nick})
95 :tag("x",{xmlns = xmlns_muc}):tag("history",{maxstanzas = 0})); 100 :tag("x",{xmlns = xmlns_muc}):tag("history",{maxstanzas = 0}));
96 self:event("groupchat/joining", room); 101 self:event("groupchat/joining", room);
113 end 118 end
114 119
115 function room_mt:leave(message) 120 function room_mt:leave(message)
116 self.bot:event("groupchat/leaving", room); 121 self.bot:event("groupchat/leaving", room);
117 self:send(st.presence({type="unavailable"})); 122 self:send(st.presence({type="unavailable"}));
118 self.bot:event("groupchat/left", room);
119 end 123 end
120 124
121 function room_mt:event(name, arg) 125 function room_mt:event(name, arg)
122 self.bot.stream:debug("Firing room event: %s", name); 126 self.bot.stream:debug("Firing room event: %s", name);
123 return self.events.fire_event(name, arg); 127 return self.events.fire_event(name, arg);

mercurial