Software / code / prosody
Comparison
plugins/mod_muc.lua @ 834:596a6b425eb9
MUC: Replaced some duplicate code
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Sat, 21 Feb 2009 01:49:09 +0500 |
| parent | 833:5da1130054d1 |
| child | 835:2a8bfb7dee77 |
comparison
equal
deleted
inserted
replaced
| 833:5da1130054d1 | 834:596a6b425eb9 |
|---|---|
| 184 local pr = get_filtered_presence(stanza); | 184 local pr = get_filtered_presence(stanza); |
| 185 pr.attr.from = current_nick; | 185 pr.attr.from = current_nick; |
| 186 if type == "error" then -- error, kick em out! | 186 if type == "error" then -- error, kick em out! |
| 187 if current_nick then | 187 if current_nick then |
| 188 log("debug", "kicking %s from %s", current_nick, room); | 188 log("debug", "kicking %s from %s", current_nick, room); |
| 189 local data = rooms:get(room, current_nick); | 189 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 presence')); -- send unavailable |
| 190 data.role = 'none'; | |
| 191 local pr = st.presence({type='unavailable', from=current_nick}):tag('status'):text('This participant is kicked from the room because he sent an error presence'):up() | |
| 192 broadcast_presence_stanza(room, pr); | |
| 193 rooms:remove(room, current_nick); | |
| 194 jid_nick:remove(from, room); | |
| 195 end | 190 end |
| 196 elseif type == "unavailable" then -- unavailable | 191 elseif type == "unavailable" then -- unavailable |
| 197 if current_nick then | 192 if current_nick then |
| 198 log("debug", "%s leaving %s", current_nick, room); | 193 log("debug", "%s leaving %s", current_nick, room); |
| 199 local data = rooms:get(room, current_nick); | 194 local data = rooms:get(room, current_nick); |
| 231 end | 226 end |
| 232 end | 227 end |
| 233 end | 228 end |
| 234 else -- possible rejoin | 229 else -- possible rejoin |
| 235 log("debug", "%s had connection replaced", current_nick); | 230 log("debug", "%s had connection replaced", current_nick); |
| 236 local pr_ = st.presence({type='unavailable', from=from, to=current_nick}):tag('status'):text('Replaced by new connection'); | 231 handle_to_occupant(origin, st.presence({type='unavailable', from=from, to=to}):tag('status'):text('Replaced by new connection')); -- send unavailable |
| 237 handle_to_occupant(origin, pr_); -- send unavailable | |
| 238 handle_to_occupant(origin, stanza); -- resend available | 232 handle_to_occupant(origin, stanza); -- resend available |
| 239 end | 233 end |
| 240 else -- enter room | 234 else -- enter room |
| 241 local new_nick = to; | 235 local new_nick = to; |
| 242 if rooms:get(room, to) then | 236 if rooms:get(room, to) then |
| 289 elseif not current_nick then -- not in room | 283 elseif not current_nick then -- not in room |
| 290 origin.send(st.error_reply(stanza, "cancel", "not-acceptable")); | 284 origin.send(st.error_reply(stanza, "cancel", "not-acceptable")); |
| 291 elseif stanza.name == "message" and type == "groupchat" then -- groupchat messages not allowed in PM | 285 elseif stanza.name == "message" and type == "groupchat" then -- groupchat messages not allowed in PM |
| 292 origin.send(st.error_reply(stanza, "modify", "bad-request")); | 286 origin.send(st.error_reply(stanza, "modify", "bad-request")); |
| 293 elseif stanza.name == "message" and type == "error" then | 287 elseif stanza.name == "message" and type == "error" then |
| 294 if current_nick then | 288 log("debug", "%s kicked from %s for sending an error message", current_nick, room); |
| 295 log("debug", "%s kicked from %s for sending an error message", current_nick, room); | 289 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 |
| 296 local data = rooms:get(room, to); | |
| 297 data.role = 'none'; | |
| 298 local pr = st.presence({type='unavailable', from=current_nick}):tag('status'):text('This participant is kicked from the room because he sent an error message to another occupant'):up() | |
| 299 :tag("x", {xmlns='http://jabber.org/protocol/muc#user'}) | |
| 300 :tag("item", {affiliation=data.affiliation, role=data.role}):up(); | |
| 301 broadcast_presence_stanza(room, pr); | |
| 302 rooms:remove(room, to); | |
| 303 jid_nick:remove(from, room); | |
| 304 end | |
| 305 else -- private stanza | 290 else -- private stanza |
| 306 local o_data = rooms:get(room, to); | 291 local o_data = rooms:get(room, to); |
| 307 if o_data then | 292 if o_data then |
| 308 log("debug", "%s sent private stanza to %s (%s)", from, to, o_data.jid); | 293 log("debug", "%s sent private stanza to %s (%s)", from, to, o_data.jid); |
| 309 local jid = o_data.jid; | 294 local jid = o_data.jid; |