Diff

mod_muc_log/mod_muc_log.lua @ 1032:b69e5d63a4fe

mod_muc_log, mod_muc_log_http: backport changes from Metronome.
author Marco Cirillo <maranda@lightwitch.org>
date Sat, 01 Jun 2013 23:37:39 +0200
parent 1004:290c21a5e0ee
child 1034:a0fbe738317c
line wrap: on
line diff
--- a/mod_muc_log/mod_muc_log.lua	Sat Jun 01 19:05:51 2013 +0200
+++ b/mod_muc_log/mod_muc_log.lua	Sat Jun 01 23:37:39 2013 +0200
@@ -1,7 +1,7 @@
 local prosody = prosody;
 local hosts = prosody.hosts;
 local tostring = tostring;
-local splitJid = require "util.jid".split;
+local split_jid = require "util.jid".split;
 local cm = require "core.configmanager";
 local datamanager = require "util.datamanager";
 local data_load, data_store, data_getpath = datamanager.load, datamanager.store, datamanager.getpath;
@@ -10,7 +10,7 @@
 local storagemanager = storagemanager;
 
 local mod_host = module:get_host();
-local config = nil;
+local log_presences = module:get_option_boolean("muc_log_presences", false);
 
 -- Helper Functions
 
@@ -30,14 +30,14 @@
 
 -- Module Definitions
 
-function logIfNeeded(e)
+function log_if_needed(e)
 	local stanza, origin = e.stanza, e.origin;
 	
 	if	(stanza.name == "presence") or
 		(stanza.name == "iq") or
 	   	(stanza.name == "message" and tostring(stanza.attr.type) == "groupchat")
 	then
-		local node, host = splitJid(stanza.attr.to);
+		local node, host = split_jid(stanza.attr.to);
 		local muc = hosts[host].muc;
 		if node and host then
 			local bare = node .. "@" .. host;
@@ -45,19 +45,22 @@
 				local room = muc.rooms[bare]
 				local today = os.date("%y%m%d");
 				local now = os.date("%X")
-				local mucTo = nil
-				local mucFrom = nil;
-				local alreadyJoined = false;
+				local muc_to = nil
+				local muc_from = nil;
+				local already_joined = false;
 				
 				if room._data.hidden then -- do not log any data of private rooms
 					return;
 				end
+				if not room._data.logging then -- do not log where logging is not enabled
+					return;
+				end
 				
 				if stanza.name == "presence" and stanza.attr.type == nil then
-					mucFrom = stanza.attr.to;
-					if room._occupants and room._occupants[stanza.attr.to] then -- if true, the user has already joined the room
-						alreadyJoined = true;
-						stanza:tag("alreadyJoined"):text("true"); -- we need to log the information that the user has already joined, so add this and remove after logging
+					muc_from = stanza.attr.to;
+					if room._occupants and room._occupants[stanza.attr.to] then
+						already_joined = true;
+						stanza:tag("alreadyJoined"):text("true"); 
 					end
 				elseif stanza.name == "iq" and stanza.attr.type == "set" then -- kick, to is the room, from is the admin, nick who is kicked is attr of iq->query->item
 					if stanza.tags[1] and stanza.tags[1].name == "query" then
@@ -66,7 +69,7 @@
 							tmp = tmp.tags[1];
 							for jid, nick in pairs(room._jid_nick) do
 								if nick == stanza.attr.to .. "/" .. tmp.attr.nick then
-									mucTo = nick;
+									muc_to = nick;
 									break;
 								end
 							end
@@ -75,13 +78,13 @@
 				else
 					for jid, nick in pairs(room._jid_nick) do
 						if jid == stanza.attr.from then
-							mucFrom = nick;
+							muc_from = nick;
 							break;
 						end
 					end
 				end
 
-				if (mucFrom or mucTo) then
+				if (muc_from or muc_to) then
 					local data = data_load(node, host, datastore .. "/" .. today);
 					local realFrom = stanza.attr.from;
 					local realTo = stanza.attr.to;
@@ -90,12 +93,12 @@
 						data = {};
 					end
 					
-					stanza.attr.from = mucFrom;
-					stanza.attr.to = mucTo;
+					stanza.attr.from = muc_from;
+					stanza.attr.to = muc_to;
 					data[#data + 1] = "<stanza time=\"".. now .. "\">" .. tostring(stanza) .. "</stanza>\n";
 					stanza.attr.from = realFrom;
 					stanza.attr.to = realTo;
-					if alreadyJoined == true then
+					if already_joined == true then
 						if stanza[#stanza].name == "alreadyJoined" then  -- normaly the faked element should be the last, remove it when it is the last
 							stanza[#stanza] = nil;
 						else
@@ -114,9 +117,9 @@
 	end
 end
 
-module:hook("message/bare", logIfNeeded, 500);
-module:hook("iq/bare", logIfNeeded, 500);
-module:hook("presence/full", logIfNeeded, 500);
+module:hook("message/bare", log_if_needed, 50);
+module:hook("iq/bare", log_if_needed, 50);
+if log_presences then module:hook("presence/full", log_if_needed, 50); end
 
 local function reload()
 	inject_storage_config();