plugins/muc: Move 'moderated' code to seperate file; changes default "muc-get-default-role" behaviour

remotes/origin/0.11
daurnimator 12 years ago
parent aa2da859d0
commit 7c55b4a2e2
  1. 53
      plugins/muc/moderated.lib.lua
  2. 37
      plugins/muc/muc.lib.lua

@ -0,0 +1,53 @@
-- Prosody IM
-- Copyright (C) 2008-2010 Matthew Wild
-- Copyright (C) 2008-2010 Waqas Hussain
-- Copyright (C) 2014 Daurnimator
--
-- This project is MIT/X11 licensed. Please see the
-- COPYING file in the source package for more information.
--
local function get_moderated(room)
return room._data.moderated;
end
local function set_moderated(room, moderated)
moderated = moderated and true or nil;
if get_moderated(room) == moderated then return false; end
room._data.moderated = moderated;
if room.save then room:save(true); end
return true;
end
module:hook("muc-disco#info", function(event)
event.reply:tag("feature", {var = get_moderated(event.room) and "muc_moderated" or "muc_unmoderated"}):up();
end);
module:hook("muc-config-form", function(event)
table.insert(event.form, {
name = "muc#roomconfig_moderatedroom";
type = "boolean";
label = "Make Room Moderated?";
value = get_moderated(event.room);
});
end);
module:hook("muc-config-submitted", function(event)
local new = event.fields["muc#roomconfig_moderatedroom"];
if new ~= nil and set_moderated(event.room, new) then
event.status_codes["104"] = true;
end
end);
module:hook("muc-get-default-role", function(event)
if event.affiliation == nil then
if get_moderated(event.room) then
return "visitor"
end
end
end, 1);
return {
get = get_moderated;
set = set_moderated;
};

@ -49,15 +49,10 @@ end
module:hook("muc-get-default-role", function(event)
if event.affiliation_rank >= valid_affiliations.admin then
return "moderator";
elseif event.affiliation_rank >= valid_affiliations.member then
elseif event.affiliation_rank >= valid_affiliations.none then
return "participant";
end
end);
module:hook("muc-get-default-role", function(event)
if not event.affiliation then
return event.room:get_moderated() and "visitor" or "participant";
end
end, -1);
--- Occupant functions
function room_mt:new_occupant(bare_real_jid, nick)
@ -277,9 +272,6 @@ end
module:hook("muc-disco#info", function(event)
event.reply:tag("feature", {var = "http://jabber.org/protocol/muc"}):up();
end);
module:hook("muc-disco#info", function(event)
event.reply:tag("feature", {var = event.room:get_moderated() and "muc_moderated" or "muc_unmoderated"}):up();
end);
module:hook("muc-disco#info", function(event)
local count = iterators.count(event.room:each_occupant());
table.insert(event.form, { name = "muc#roominfo_occupants", label = "Number of occupants", value = tostring(count) });
@ -311,23 +303,11 @@ function room_mt:handle_kickable(origin, stanza)
return true;
end
function room_mt:set_moderated(moderated)
moderated = moderated and true or nil;
if self._data.moderated ~= moderated then
self._data.moderated = moderated;
if self.save then self:save(true); end
end
end
function room_mt:get_moderated()
return self._data.moderated;
end
-- Give the room creator owner affiliation
module:hook("muc-room-pre-create", function(event)
event.room:set_affiliation(true, jid_bare(event.stanza.attr.from), "owner");
end, -1);
-- check if user is banned
module:hook("muc-occupant-pre-join", function(event)
local room, stanza = event.room, event.stanza;
@ -602,14 +582,6 @@ function room_mt:get_form_layout(actor)
});
return module:fire_event("muc-config-form", { room = self, actor = actor, form = form }) or form;
end
module:hook("muc-config-form", function(event)
table.insert(event.form, {
name = 'muc#roomconfig_moderatedroom',
type = 'boolean',
label = 'Make Room Moderated?',
value = event.room:get_moderated()
});
end);
function room_mt:process_form(origin, stanza)
local form = stanza.tags[1]:get_child("x", "jabber:x:data");
@ -651,9 +623,6 @@ function room_mt:process_form(origin, stanza)
end
return true;
end
module:hook("muc-config-submitted", function(event)
event.update_option("moderated", "muc#roomconfig_moderatedroom");
end);
-- Removes everyone from the room
function room_mt:clear(x)
@ -1119,6 +1088,10 @@ local members_only = module:require "muc/members_only";
room_mt.get_members_only = members_only.get;
room_mt.set_members_only = members_only.set;
local moderated = module:require "muc/moderated";
room_mt.get_moderated = moderated.get;
room_mt.set_moderated = moderated.set;
local persistent = module:require "muc/persistent";
room_mt.get_persistent = persistent.get;
room_mt.set_persistent = persistent.set;

Loading…
Cancel
Save