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); |