Comparison

plugins/mod_muc.lua @ 1139:ed4d43c3eaf2

mod_muc: Extracted sending of occupant list into its own function
author Waqas Hussain <waqas20@gmail.com>
date Fri, 08 May 2009 01:27:22 +0500
parent 1138:0310a0f5ce3a
child 1140:76bd1bd14234
comparison
equal deleted inserted replaced
1138:0310a0f5ce3a 1139:ed4d43c3eaf2
214 core_route_stanza(component, msg); 214 core_route_stanza(component, msg);
215 end 215 end
216 end 216 end
217 if rooms_info:get(room, 'subject') then 217 if rooms_info:get(room, 'subject') then
218 core_route_stanza(component, st.message({type='groupchat', from=room, to=to}):tag("subject"):text(rooms_info:get(room, 'subject'))); 218 core_route_stanza(component, st.message({type='groupchat', from=room, to=to}):tag("subject"):text(rooms_info:get(room, 'subject')));
219 end
220 end
221 function send_occupant_list(room, to)
222 local r = rooms:get(room);
223 if r then
224 local current_nick = jid_nick:get(to, room);
225 for occupant, o_data in pairs(r) do
226 if occupant ~= current_nick then
227 local pres = get_filtered_presence(o_data.sessions[o_data.jid]);
228 pres.attr.to, pres.attr.from = to, occupant;
229 pres:tag("x", {xmlns='http://jabber.org/protocol/muc#user'})
230 :tag("item", {affiliation=o_data.affiliation, role=o_data.role}):up();
231 core_route_stanza(component, pres);
232 end
233 end
219 end 234 end
220 end 235 end
221 236
222 function handle_to_occupant(origin, stanza) -- PM, vCards, etc 237 function handle_to_occupant(origin, stanza) -- PM, vCards, etc
223 local from, to = stanza.attr.from, stanza.attr.to; 238 local from, to = stanza.attr.from, stanza.attr.to;
295 if not data then -- new occupant 310 if not data then -- new occupant
296 data = {affiliation='none', role='participant', jid=from, sessions={[from]=get_filtered_presence(stanza)}}; 311 data = {affiliation='none', role='participant', jid=from, sessions={[from]=get_filtered_presence(stanza)}};
297 end 312 end
298 rooms:set(room, to, data); 313 rooms:set(room, to, data);
299 jid_nick:set(from, room, to); 314 jid_nick:set(from, room, to);
300 local r = rooms:get(room); 315 send_occupant_list(room, from);
301 if r then
302 for occupant, o_data in pairs(r) do
303 if occupant ~= to then
304 local pres = get_filtered_presence(o_data.sessions[o_data.jid]);
305 pres.attr.to, pres.attr.from = from, occupant;
306 pres:tag("x", {xmlns='http://jabber.org/protocol/muc#user'})
307 :tag("item", {affiliation=o_data.affiliation, role=o_data.role}):up();
308 core_route_stanza(component, pres);
309 end
310 end
311 end
312 pr.attr.from = to; 316 pr.attr.from = to;
313 broadcast_presence_stanza(room, pr); 317 broadcast_presence_stanza(room, pr);
314 broadcast_history(room, from); 318 broadcast_history(room, from);
315 end 319 end
316 end 320 end