Software /
code /
prosody
Comparison
plugins/muc/muc.lib.lua @ 6200:57bc52f67564
plugins/muc/muc.lib: Split up get_disco_info into events
This was done so we can split off functionality to other files later (e.g. plugins/muc/password)
author | daurnimator <quae@daurnimator.com> |
---|---|
date | Tue, 01 Apr 2014 15:41:44 -0400 |
parent | 6199:fa858cd913b1 |
child | 6201:b9e8f5268c97 |
comparison
equal
deleted
inserted
replaced
6199:fa858cd913b1 | 6200:57bc52f67564 |
---|---|
395 self:route_stanza(msg); | 395 self:route_stanza(msg); |
396 end | 396 end |
397 end | 397 end |
398 | 398 |
399 function room_mt:get_disco_info(stanza) | 399 function room_mt:get_disco_info(stanza) |
400 local count = 0; for _ in self:each_occupant() do count = count + 1; end | 400 local reply = st.reply(stanza):query("http://jabber.org/protocol/disco#info"); |
401 return st.reply(stanza):query("http://jabber.org/protocol/disco#info") | 401 local form = dataform.new { |
402 :tag("identity", {category="conference", type="text", name=self:get_name()}):up() | 402 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/muc#roominfo" }; |
403 :tag("feature", {var="http://jabber.org/protocol/muc"}):up() | 403 }; |
404 :tag("feature", {var=self:get_password() and "muc_passwordprotected" or "muc_unsecured"}):up() | 404 module:fire_event("muc-disco#info", {room = self; reply = reply; form = form;}); |
405 :tag("feature", {var=self:get_moderated() and "muc_moderated" or "muc_unmoderated"}):up() | 405 reply:add_child(form:form(nil, "result")); |
406 :tag("feature", {var=self:get_members_only() and "muc_membersonly" or "muc_open"}):up() | 406 return reply; |
407 :tag("feature", {var=self:get_persistent() and "muc_persistent" or "muc_temporary"}):up() | 407 end |
408 :tag("feature", {var=self:get_hidden() and "muc_hidden" or "muc_public"}):up() | 408 module:hook("muc-disco#info", function(event) |
409 :tag("feature", {var=self:get_whois() ~= "anyone" and "muc_semianonymous" or "muc_nonanonymous"}):up() | 409 event.reply:tag("identity", {category="conference", type="text", name=event.room:get_name()}):up(); |
410 :add_child(dataform.new({ | 410 end); |
411 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/muc#roominfo" }, | 411 module:hook("muc-disco#info", function(event) |
412 { name = "muc#roominfo_description", label = "Description", value = "" }, | 412 event.reply:tag("feature", {var = "http://jabber.org/protocol/muc"}):up(); |
413 { name = "muc#roominfo_occupants", label = "Number of occupants", value = tostring(count) } | 413 end); |
414 }):form({["muc#roominfo_description"] = self:get_description()}, 'result')) | 414 module:hook("muc-disco#info", function(event) |
415 ; | 415 event.reply:tag("feature", {var = event.room:get_password() and "muc_passwordprotected" or "muc_unsecured"}):up(); |
416 end | 416 end); |
417 module:hook("muc-disco#info", function(event) | |
418 event.reply:tag("feature", {var = event.room:get_moderated() and "muc_moderated" or "muc_unmoderated"}):up(); | |
419 end); | |
420 module:hook("muc-disco#info", function(event) | |
421 event.reply:tag("feature", {var = event.room:get_members_only() and "muc_membersonly" or "muc_open"}):up(); | |
422 end); | |
423 module:hook("muc-disco#info", function(event) | |
424 event.reply:tag("feature", {var = event.room:get_persistent() and "muc_persistent" or "muc_temporary"}):up(); | |
425 end); | |
426 module:hook("muc-disco#info", function(event) | |
427 event.reply:tag("feature", {var = event.room:get_hidden() and "muc_hidden" or "muc_public"}):up(); | |
428 end); | |
429 module:hook("muc-disco#info", function(event) | |
430 event.reply:tag("feature", {var = event.room:get_whois() ~= "anyone" and "muc_semianonymous" or "muc_nonanonymous"}):up(); | |
431 end); | |
432 module:hook("muc-disco#info", function(event) | |
433 table.insert(event.form, { name = "muc#roominfo_description", label = "Description", value = event.room:get_description() }); | |
434 end); | |
435 module:hook("muc-disco#info", function(event) | |
436 local count = 0; for _ in event.room:each_occupant() do count = count + 1; end | |
437 table.insert(event.form, { name = "muc#roominfo_occupants", label = "Number of occupants", value = tostring(count) }); | |
438 end); | |
439 | |
417 function room_mt:get_disco_items(stanza) | 440 function room_mt:get_disco_items(stanza) |
418 local reply = st.reply(stanza):query("http://jabber.org/protocol/disco#items"); | 441 local reply = st.reply(stanza):query("http://jabber.org/protocol/disco#items"); |
419 for room_jid in self:each_occupant() do | 442 for room_jid in self:each_occupant() do |
420 reply:tag("item", {jid = room_jid, name = room_jid:match("/(.*)")}):up(); | 443 reply:tag("item", {jid = room_jid, name = room_jid:match("/(.*)")}):up(); |
421 end | 444 end |