Mercurial > prosody-hg
comparison plugins/muc/muc.lib.lua @ 6226:7582deb85812
plugins/muc: Move 'moderated' code to seperate file; changes default "muc-get-default-role" behaviour
| author | daurnimator <quae@daurnimator.com> |
|---|---|
| date | Fri, 18 Apr 2014 12:19:04 -0400 |
| parents | 12537f1c1fec |
| children | bb75c011b15e |
comparison
equal
deleted
inserted
replaced
| 6225:12537f1c1fec | 6226:7582deb85812 |
|---|---|
| 47 return role, valid_roles[role or "none"]; | 47 return role, valid_roles[role or "none"]; |
| 48 end | 48 end |
| 49 module:hook("muc-get-default-role", function(event) | 49 module:hook("muc-get-default-role", function(event) |
| 50 if event.affiliation_rank >= valid_affiliations.admin then | 50 if event.affiliation_rank >= valid_affiliations.admin then |
| 51 return "moderator"; | 51 return "moderator"; |
| 52 elseif event.affiliation_rank >= valid_affiliations.member then | 52 elseif event.affiliation_rank >= valid_affiliations.none then |
| 53 return "participant"; | 53 return "participant"; |
| 54 end | 54 end |
| 55 end); | 55 end); |
| 56 module:hook("muc-get-default-role", function(event) | |
| 57 if not event.affiliation then | |
| 58 return event.room:get_moderated() and "visitor" or "participant"; | |
| 59 end | |
| 60 end, -1); | |
| 61 | 56 |
| 62 --- Occupant functions | 57 --- Occupant functions |
| 63 function room_mt:new_occupant(bare_real_jid, nick) | 58 function room_mt:new_occupant(bare_real_jid, nick) |
| 64 local occupant = occupant_lib.new(bare_real_jid, nick); | 59 local occupant = occupant_lib.new(bare_real_jid, nick); |
| 65 local affiliation = self:get_affiliation(bare_real_jid); | 60 local affiliation = self:get_affiliation(bare_real_jid); |
| 276 end | 271 end |
| 277 module:hook("muc-disco#info", function(event) | 272 module:hook("muc-disco#info", function(event) |
| 278 event.reply:tag("feature", {var = "http://jabber.org/protocol/muc"}):up(); | 273 event.reply:tag("feature", {var = "http://jabber.org/protocol/muc"}):up(); |
| 279 end); | 274 end); |
| 280 module:hook("muc-disco#info", function(event) | 275 module:hook("muc-disco#info", function(event) |
| 281 event.reply:tag("feature", {var = event.room:get_moderated() and "muc_moderated" or "muc_unmoderated"}):up(); | |
| 282 end); | |
| 283 module:hook("muc-disco#info", function(event) | |
| 284 local count = iterators.count(event.room:each_occupant()); | 276 local count = iterators.count(event.room:each_occupant()); |
| 285 table.insert(event.form, { name = "muc#roominfo_occupants", label = "Number of occupants", value = tostring(count) }); | 277 table.insert(event.form, { name = "muc#roominfo_occupants", label = "Number of occupants", value = tostring(count) }); |
| 286 end); | 278 end); |
| 287 | 279 |
| 288 function room_mt:get_disco_items(stanza) | 280 function room_mt:get_disco_items(stanza) |
| 309 :tag("status", {code = "307"}) | 301 :tag("status", {code = "307"}) |
| 310 self:publicise_occupant_status(occupant, x); | 302 self:publicise_occupant_status(occupant, x); |
| 311 return true; | 303 return true; |
| 312 end | 304 end |
| 313 | 305 |
| 314 function room_mt:set_moderated(moderated) | |
| 315 moderated = moderated and true or nil; | |
| 316 if self._data.moderated ~= moderated then | |
| 317 self._data.moderated = moderated; | |
| 318 if self.save then self:save(true); end | |
| 319 end | |
| 320 end | |
| 321 function room_mt:get_moderated() | |
| 322 return self._data.moderated; | |
| 323 end | |
| 324 | |
| 325 -- Give the room creator owner affiliation | 306 -- Give the room creator owner affiliation |
| 326 module:hook("muc-room-pre-create", function(event) | 307 module:hook("muc-room-pre-create", function(event) |
| 327 event.room:set_affiliation(true, jid_bare(event.stanza.attr.from), "owner"); | 308 event.room:set_affiliation(true, jid_bare(event.stanza.attr.from), "owner"); |
| 328 end, -1); | 309 end, -1); |
| 329 | |
| 330 | 310 |
| 331 -- check if user is banned | 311 -- check if user is banned |
| 332 module:hook("muc-occupant-pre-join", function(event) | 312 module:hook("muc-occupant-pre-join", function(event) |
| 333 local room, stanza = event.room, event.stanza; | 313 local room, stanza = event.room, event.stanza; |
| 334 local affiliation = room:get_affiliation(stanza.attr.from); | 314 local affiliation = room:get_affiliation(stanza.attr.from); |
| 600 value = 'http://jabber.org/protocol/muc#roomconfig' | 580 value = 'http://jabber.org/protocol/muc#roomconfig' |
| 601 } | 581 } |
| 602 }); | 582 }); |
| 603 return module:fire_event("muc-config-form", { room = self, actor = actor, form = form }) or form; | 583 return module:fire_event("muc-config-form", { room = self, actor = actor, form = form }) or form; |
| 604 end | 584 end |
| 605 module:hook("muc-config-form", function(event) | |
| 606 table.insert(event.form, { | |
| 607 name = 'muc#roomconfig_moderatedroom', | |
| 608 type = 'boolean', | |
| 609 label = 'Make Room Moderated?', | |
| 610 value = event.room:get_moderated() | |
| 611 }); | |
| 612 end); | |
| 613 | 585 |
| 614 function room_mt:process_form(origin, stanza) | 586 function room_mt:process_form(origin, stanza) |
| 615 local form = stanza.tags[1]:get_child("x", "jabber:x:data"); | 587 local form = stanza.tags[1]:get_child("x", "jabber:x:data"); |
| 616 if form.attr.type == "cancel" then | 588 if form.attr.type == "cancel" then |
| 617 origin.send(st.reply(stanza)); | 589 origin.send(st.reply(stanza)); |
| 649 else | 621 else |
| 650 origin.send(st.error_reply(stanza, "cancel", "bad-request", "Not a submitted form")); | 622 origin.send(st.error_reply(stanza, "cancel", "bad-request", "Not a submitted form")); |
| 651 end | 623 end |
| 652 return true; | 624 return true; |
| 653 end | 625 end |
| 654 module:hook("muc-config-submitted", function(event) | |
| 655 event.update_option("moderated", "muc#roomconfig_moderatedroom"); | |
| 656 end); | |
| 657 | 626 |
| 658 -- Removes everyone from the room | 627 -- Removes everyone from the room |
| 659 function room_mt:clear(x) | 628 function room_mt:clear(x) |
| 660 x = x or st.stanza("x", {xmlns='http://jabber.org/protocol/muc#user'}); | 629 x = x or st.stanza("x", {xmlns='http://jabber.org/protocol/muc#user'}); |
| 661 local occupants_updated = {}; | 630 local occupants_updated = {}; |
| 1117 | 1086 |
| 1118 local members_only = module:require "muc/members_only"; | 1087 local members_only = module:require "muc/members_only"; |
| 1119 room_mt.get_members_only = members_only.get; | 1088 room_mt.get_members_only = members_only.get; |
| 1120 room_mt.set_members_only = members_only.set; | 1089 room_mt.set_members_only = members_only.set; |
| 1121 | 1090 |
| 1091 local moderated = module:require "muc/moderated"; | |
| 1092 room_mt.get_moderated = moderated.get; | |
| 1093 room_mt.set_moderated = moderated.set; | |
| 1094 | |
| 1122 local persistent = module:require "muc/persistent"; | 1095 local persistent = module:require "muc/persistent"; |
| 1123 room_mt.get_persistent = persistent.get; | 1096 room_mt.get_persistent = persistent.get; |
| 1124 room_mt.set_persistent = persistent.set; | 1097 room_mt.set_persistent = persistent.set; |
| 1125 | 1098 |
| 1126 local subject = module:require "muc/subject"; | 1099 local subject = module:require "muc/subject"; |
