Mercurial > prosody-hg
comparison plugins/muc/muc.lib.lua @ 6431:540f4e33394a
muc: Add 'occupant' to muc-occupant-{joined,left,session-new} events (thanks daurnimator/fippo)
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Fri, 26 Sep 2014 17:34:15 +0100 |
| parents | 675aea867574 |
| children | 385932a83013 |
comparison
equal
deleted
inserted
replaced
| 6430:ceaf2a0d05eb | 6431:540f4e33394a |
|---|---|
| 396 is_last_session = is_last_orig_session; | 396 is_last_session = is_last_orig_session; |
| 397 }; | 397 }; |
| 398 if orig_occupant == nil then | 398 if orig_occupant == nil then |
| 399 event_name = "muc-occupant-pre-join"; | 399 event_name = "muc-occupant-pre-join"; |
| 400 event.is_new_room = is_new_room; | 400 event.is_new_room = is_new_room; |
| 401 event.occupant = dest_occupant; | |
| 401 elseif dest_occupant == nil then | 402 elseif dest_occupant == nil then |
| 402 event_name = "muc-occupant-pre-leave"; | 403 event_name = "muc-occupant-pre-leave"; |
| 404 event.occupant = orig_occupant; | |
| 403 else | 405 else |
| 404 event_name = "muc-occupant-pre-change"; | 406 event_name = "muc-occupant-pre-change"; |
| 407 event.orig_occupant = orig_occupant; | |
| 408 event.dest_occupant = dest_occupant; | |
| 405 end | 409 end |
| 406 if module:fire_event(event_name, event) then return true; end | 410 if module:fire_event(event_name, event) then return true; end |
| 407 | 411 |
| 408 -- Check for nick conflicts | 412 -- Check for nick conflicts |
| 409 if dest_occupant ~= nil and not is_first_dest_session and bare_jid ~= jid_bare(dest_occupant.bare_jid) then -- new nick or has different bare real jid | 413 if dest_occupant ~= nil and not is_first_dest_session and bare_jid ~= jid_bare(dest_occupant.bare_jid) then -- new nick or has different bare real jid |
| 458 end | 462 end |
| 459 self:save_occupant(orig_occupant); | 463 self:save_occupant(orig_occupant); |
| 460 self:publicise_occupant_status(orig_occupant, orig_x, dest_nick); | 464 self:publicise_occupant_status(orig_occupant, orig_x, dest_nick); |
| 461 | 465 |
| 462 if is_last_orig_session then | 466 if is_last_orig_session then |
| 463 module:fire_event("muc-occupant-left", {room = self; nick = orig_occupant.nick;}); | 467 module:fire_event("muc-occupant-left", {room = self; nick = orig_occupant.nick; occupant = orig_occupant;}); |
| 464 end | 468 end |
| 465 end | 469 end |
| 466 | 470 |
| 467 if dest_occupant ~= nil then | 471 if dest_occupant ~= nil then |
| 468 dest_occupant:set_session(real_jid, stanza); | 472 dest_occupant:set_session(real_jid, stanza); |
| 496 self:route_stanza(pr); | 500 self:route_stanza(pr); |
| 497 end | 501 end |
| 498 | 502 |
| 499 if orig_occupant == nil then | 503 if orig_occupant == nil then |
| 500 if is_first_dest_session then | 504 if is_first_dest_session then |
| 501 module:fire_event("muc-occupant-joined", {room = self; nick = dest_occupant.nick; stanza = stanza;}); | 505 module:fire_event("muc-occupant-joined", {room = self; nick = dest_occupant.nick; occupant = dest_occupant;}); |
| 502 end | 506 end |
| 503 module:fire_event("muc-occupant-session-new", {room = self; nick = dest_occupant.nick; stanza = stanza; jid = real_jid;}); | 507 module:fire_event("muc-occupant-session-new", {room = self; nick = dest_occupant.nick; occupant = dest_occupant; stanza = stanza; jid = real_jid;}); |
| 504 end | 508 end |
| 505 end | 509 end |
| 506 elseif type ~= 'result' then -- bad type | 510 elseif type ~= 'result' then -- bad type |
| 507 if type ~= 'visible' and type ~= 'invisible' then -- COMPAT ejabberd can broadcast or forward XEP-0018 presences | 511 if type ~= 'visible' and type ~= 'invisible' then -- COMPAT ejabberd can broadcast or forward XEP-0018 presences |
| 508 origin.send(st.error_reply(stanza, "modify", "bad-request")); -- FIXME correct error? | 512 origin.send(st.error_reply(stanza, "modify", "bad-request")); -- FIXME correct error? |
| 667 self:save_occupant(occupant); | 671 self:save_occupant(occupant); |
| 668 occupants_updated[occupant] = true; | 672 occupants_updated[occupant] = true; |
| 669 end | 673 end |
| 670 for occupant in pairs(occupants_updated) do | 674 for occupant in pairs(occupants_updated) do |
| 671 self:publicise_occupant_status(occupant, x); | 675 self:publicise_occupant_status(occupant, x); |
| 672 module:fire_event("muc-occupant-left", { room = self; nick = occupant.nick; }); | 676 module:fire_event("muc-occupant-left", { room = self; nick = occupant.nick; occupant = occupant;}); |
| 673 end | 677 end |
| 674 end | 678 end |
| 675 | 679 |
| 676 function room_mt:destroy(newjid, reason, password) | 680 function room_mt:destroy(newjid, reason, password) |
| 677 local x = st.stanza("x", {xmlns = "http://jabber.org/protocol/muc#user"}) | 681 local x = st.stanza("x", {xmlns = "http://jabber.org/protocol/muc#user"}) |
