MUC: Kick participants sending error messages to other participants

Mon, 16 Feb 2009 20:05:58 +0500

author
Waqas Hussain <waqas20@gmail.com>
date
Mon, 16 Feb 2009 20:05:58 +0500
changeset 811
1dbcf57154bd
parent 810
863046d84b56
child 812
ebfb904640d8

MUC: Kick participants sending error messages to other participants

plugins/mod_muc.lua file | annotate | diff | comparison | revisions
--- a/plugins/mod_muc.lua	Mon Feb 16 20:05:03 2009 +0500
+++ b/plugins/mod_muc.lua	Mon Feb 16 20:05:58 2009 +0500
@@ -329,9 +329,19 @@
 		end
 	elseif not current_nick then -- not in room
 		origin.send(st.error_reply(stanza, "cancel", "not-acceptable"));
-	elseif stanza.name == "message" and type == "groupchat" then
-		-- groupchat messages not allowed in PM
+	elseif stanza.name == "message" and type == "groupchat" then -- groupchat messages not allowed in PM
 		origin.send(st.error_reply(stanza, "modify", "bad-request"));
+	elseif stanza.name == "message" and type == "error" then
+		if current_nick then
+			local data = rooms:get(room, to);
+			data.role = 'none';
+			local pr = st.presence({type='unavailable', from=current_nick}):tag('status'):text('This participant is kicked from the room because he sent an error message to another occupant'):up()
+				:tag("x", {xmlns='http://jabber.org/protocol/muc#user'})
+				:tag("item", {affiliation=data.affiliation, role=data.role}):up();
+			broadcast_presence_stanza(room, pr);
+			rooms:remove(room, to);
+			jid_nick:remove(from, room);
+		end
 	else -- private stanza
 		local o_data = rooms:get(room, to);
 		if o_data then

mercurial