Diff

plugins/muc/moderated.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
child 6991:84e01dbb739e
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/muc/moderated.lib.lua	Fri Apr 18 12:19:04 2014 -0400
@@ -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;
+};