Mercurial > prosody-hg
comparison plugins/muc/muc.lib.lua @ 1768:802c40384dd0
MUC: Don't kick on errors in private messages.
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Wed, 09 Sep 2009 20:32:37 +0500 |
| parents | c00d4ba8d2f3 |
| children | 39865fbbb2f7 |
comparison
equal
deleted
inserted
replaced
| 1767:649dd3439809 | 1768:802c40384dd0 |
|---|---|
| 293 end | 293 end |
| 294 elseif not current_nick and type ~= "error" and type ~= "result" then -- not in room | 294 elseif not current_nick and type ~= "error" and type ~= "result" then -- not in room |
| 295 origin.send(st.error_reply(stanza, "cancel", "not-acceptable")); | 295 origin.send(st.error_reply(stanza, "cancel", "not-acceptable")); |
| 296 elseif stanza.name == "message" and type == "groupchat" then -- groupchat messages not allowed in PM | 296 elseif stanza.name == "message" and type == "groupchat" then -- groupchat messages not allowed in PM |
| 297 origin.send(st.error_reply(stanza, "modify", "bad-request")); | 297 origin.send(st.error_reply(stanza, "modify", "bad-request")); |
| 298 elseif stanza.name == "message" and type == "error" and get_kickable_error(stanza) then | |
| 299 log("debug", "%s kicked from %s for sending an error message", current_nick, room); | |
| 300 self:handle_to_occupant(origin, st.presence({type='unavailable', from=from, to=to}):tag('status'):text('This participant is kicked from the room because he sent an error message to another occupant')); -- send unavailable | |
| 301 else -- private stanza | 298 else -- private stanza |
| 302 local o_data = self._occupants[to]; | 299 local o_data = self._occupants[to]; |
| 303 if o_data then | 300 if o_data then |
| 304 log("debug", "%s sent private stanza to %s (%s)", from, to, o_data.jid); | 301 log("debug", "%s sent private stanza to %s (%s)", from, to, o_data.jid); |
| 305 local jid = o_data.jid; | 302 local jid = o_data.jid; |
| 444 self:set_subject(current_nick, subject); -- TODO use broadcast_message_stanza | 441 self:set_subject(current_nick, subject); -- TODO use broadcast_message_stanza |
| 445 else | 442 else |
| 446 self:broadcast_message(stanza, true); | 443 self:broadcast_message(stanza, true); |
| 447 end | 444 end |
| 448 end | 445 end |
| 446 elseif stanza.name == "message" and type == "error" and get_kickable_error(stanza) then | |
| 447 local current_nick = self._jid_nick[stanza.attr.from]; | |
| 448 log("debug", "%s kicked from %s for sending an error message", current_nick, self.jid); | |
| 449 self:handle_to_occupant(origin, st.presence({type='unavailable', from=stanza.attr.from, to=stanza.attr.to}) | |
| 450 :tag('status'):text('This participant is kicked from the room because he sent an error message to another occupant')); -- send unavailable | |
| 449 elseif stanza.name == "presence" then -- hack - some buggy clients send presence updates to the room rather than their nick | 451 elseif stanza.name == "presence" then -- hack - some buggy clients send presence updates to the room rather than their nick |
| 450 local to = stanza.attr.to; | 452 local to = stanza.attr.to; |
| 451 local current_nick = self._jid_nick[stanza.attr.from]; | 453 local current_nick = self._jid_nick[stanza.attr.from]; |
| 452 if current_nick then | 454 if current_nick then |
| 453 stanza.attr.to = current_nick; | 455 stanza.attr.to = current_nick; |
