Anybody convert regcleaner 2 lua5.1 please
 

News:

29 December 2022 - PtokaX 0.5.3.0 (20th anniversary edition) released...
11 April 2017 - PtokaX 0.5.2.2 released...
8 April 2015 Anti child and anti pedo pr0n scripts are not allowed anymore on this board!
28 September 2015 - PtokaX 0.5.2.1 for Windows 10 IoT released...
3 September 2015 - PtokaX 0.5.2.1 released...
16 August 2015 - PtokaX 0.5.2.0 released...
1 August 2015 - Crowdfunding for ADC protocol support in PtokaX ended. Clearly nobody want ADC support...
30 June 2015 - PtokaX 0.5.1.0 released...
30 April 2015 Crowdfunding for ADC protocol support in PtokaX
26 April 2015 New support hub!
20 February 2015 - PtokaX 0.5.0.3 released...
13 April 2014 - PtokaX 0.5.0.2 released...
23 March 2014 - PtokaX testing version 0.5.0.1 build 454 is available.
04 March 2014 - PtokaX.org sites were temporary down because of DDOS attacks and issues with hosting service provider.

Main Menu

Anybody convert regcleaner 2 lua5.1 please

Started by nightshadow, 11 April, 2006, 00:03:54

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

nightshadow

-- auto/manual registered user cleaner if user hasn't been in the hub for x weeks
-- made by plop
-- julian day function made by the guru tezlo
-- code stripped from artificial insanety bot
-- updated to LUA 5 by Pothead
-- updated to PtokaX 16.09 by [_XStaTiC_]  Removed the seen part sorry :) i don't use it :)
--- touched by Herodes (optimisation tsunami, and added !seen again)
--- thx to god for giving TimeTraveler the ability to discover those bugs.. notice the plural? :)
--- should be working flawlessly now. 15:18 - 31/3/2005
--- ( before you doubt the above line be sure that you have a 'logs' folder in 'scripts' folder)

-- !noclean <user_name> add/remove  - adds/removes users from/to the list which aren't cleaned
-- !showusers - shows all registered users
-- !seen <user_name> - shows the last time the user left the hub
-- !shownoclean - shows all names wich are on the noclean list
-- !cleanusers - manualy start the usercleaner

cl = {}
cl.sets = {}
--------------------------------------------------------------------- config
cl.sets.weeks = 4 -- every1 older then x weeks is deleted
cl.sets.bot = "Guardian" -- the bot Name...
cl.sets.auto = 1 -- 0:disables / 1:enables , automatic mode ( if disabled use !cleanusers to clean )
cl.levels = { [3]=1, [2]=1} -- levels it needs 2 clean 3=reg 2=vip
cl.files = { no = "logs/NoClean.lst", user = "logs/CleanUser.lst" } -- these are the files..
--------------------------------------------------------------------- the needed tables // pls dont edit anything here..
cl.user = {}
cl.no = {}
cl.funcs = {}

--------------------------------------------------------------------- julian day function 2 calcute the time users spend in the hub
function cl.funcs.jdate(d, m, y)
	local a, b, c = 0, 0, 0
	if m <= 2 then y = y - 1; m = m + 12; end
	if (y*10000 + m*100 + d) >= 15821015 then
		a = math.floor(y/100); b = 2 - a + math.floor(a/4)
	end
	if y <= 0 then c = 0.75 end
	return math.floor(365.25*y - c) + math.floor(30.6001*(m+1) + d + 1720994 + b)
end

--------------------------------------------------------------------- Load a file
function cl.funcs.load(file, tbl)
	local f = io.open(file, "r")
	if f then
		for line in f:lines() do
			local s,e,name,date = string.find(line, "(.+)$(.+)")
			if name then tbl[name] = date; end
		end; f:close();
	end
end

--------------------------------------------------------------------- Save to file
function cl.funcs.save(file, tbl)
	local f = io.open(file, "w+")
	for a,b in tbl do f:write(a.."$"..b.."\n"); end; f:close()
end

--------------------------------------------------------------------- call the garbage man
function cl.funcs.cls()
	collectgarbage();io.flush();
end

--------------------------------------------------------------------- Display some table
function cl.funcs.showusers( user, data )
	local tbl, txt, sep = {}, "users who aren't cleaned", string.rep("=", 40);
	if (type(data) == "string") then
		local s,e,Profile = string.find(data, "%b<>%s+%S+%s+(%S+)")
		if not Profile then user:SendData(cl.sets.bot , "Syntax Error, Use: !showusers <profile_name>"); return 1; end
		tbl = GetUsersByProfile(Profile); txt = "registered users with Profile ("..Profile..")";
	else
		local c=1; for i,v in data do tbl[c] = i; c=c+1;end;
	end
	local c = table.getn(tbl);
	if (c > 0) then
		local info = "\r\n Here are the "..txt.."\r\n "..sep.."\r\n"
		for i=1,c do info = info.."   ? "..tbl[i].."\r\n "; end
		user:SendData( "$To: "..user.sName.." From: "..user.sName.." $<"..cl.sets.bot.."> "..info..sep.."\r\n");
		cl.funcs.cls();return 1;
	end
	user:SendData( cl.sets.bot, "There are no "..txt);cl.funcs.cls();return 1;
end


--------------------------------------------------------------------- cleanup old users
function cl.funcs.clean()
	SendToAll(cl.sets.bot , "The Cleaner has been called. Every registered user who hasn't been in the hub for "..cl.sets.weeks.." weeks will be deleted. ")
	SendToAll(cl.sets.bot , "(contact an Operator if you are going to be away for a longer period than that)")
	local juliannow = cl.funcs.jdate(tonumber(os.date("%d")), tonumber(os.date("%m")), tonumber(os.date("%Y")))
	local oldest, chkd, clnd,x = (cl.sets.weeks*7),0,0,os.clock()
	for prof, v in cl.levels do
		for a, b in GetUsersByProfile(GetProfileName(prof)) do
			chkd = chkd + 1
			if cl.user[b] then
					if not cl.no[b] then
						local s, e, month, day, year = string.find(cl.user[b], "(%d+)%/(%d+)%/(%d+)");
						local julian = cl.funcs.jdate( tonumber(day), tonumber(month), tonumber("20"..year) )
						if ((juliannow - julian) > oldest) then cl.user[b] = nil; DelRegUser(b); clnd = clnd + 1; end;
					end
			else cl.user[b] = os.date("%x");
			end
		end
	end
	cl.funcs.save(cl.files.user, cl.user);
	if (chkd > 0) then SendToAll(cl.sets.bot , chkd.." users were processed, "..clnd.." were deleted ( "..string.format("%0.2f",((clnd*100)/chkd)).."% ) in: "..string.format("%0.4f", os.clock()-x ).." seconds.");return 1; end;
	SendToAll(cl.sets.bot ,"Nobody to clean :(");return 1;
end

--------------------------------------------------------------------- don't clean this users adding/removing
function cl.funcs.addnocl( user, data )
	local s,e,who, addrem = string.find(data, "%b<>%s+%S+%s+(%S+)%s+(%S+)%s*")
	if who and addrem then
		if frmHub:isNickRegged(who) then
			if (addrem == "add") then
				if cl.no[who] then user:SendData(cl.sets.bot , who.." is already on the immune list.");return 1; end;
				cl.no[who] = 1; cl.funcs.save(cl.files.no, cl.no);
				user:SendData(cl.sets.bot , who.." is added to the immune list and won't be cleaned.");return 1;
			elseif addrem == "remove" then
				if not cl.no[who] then user:SendData(cl.sets.bot , who.." was not on the immune list.");return 1; end
				cl.no[who] = nil; cl.funcs.save(cl.files.no, cl.no);
				user:SendData(cl.sets.bot , who.." is removed from the immune list.");return 1;
			end; user:SendData(cl.sets.bot , "Syntax Error, Use: !noclean <nick> <add or remove>");return 1;
		end; user:SendData(cl.sets.bot , who.." isn't a registered user.");return 1;
	end; user:SendData(cl.sets.bot , "Syntax Error, Use: !noclean <nick> <add or remove>");return 1;
end
--------------------------------------------------------------------- Respond to a !seen
function cl.funcs.seen( user, data )
	local s,e,who = string.find( data, "%b<>%s+%S+%s+(%S+)" )
	if who then
		if (who ~= user.sName) then
			if not GetItemByName(who) then
				if cl.user[who] then user:SendData( cl.sets.bot, who.." was last seen on the "..cl.user[who]);return 1; end
				user:SendData( cl.sets.bot, "How should I know when "..who.." was last seen ?");return 1;
			end; user:SendData( cl.sets.bot, who.." is online... open those eyes of yours..");return 1;
		end; user:SendData( cl.sets.bot, "aren't you that guy?");return 1;
	end; user:SendData( cl.sets.bot, "Syntax Error, Use: !seen <nick>");return 1;
end
--------------------------------------------------------------------- do i need 2 explain this ?????
function ChatArrival(user, data)
	if ( (cl.sets.auto == 1) and (cl.day ~= os.date("%x")) ) then -- user cleaning trigger, works as a timer without a timer
		cl.day = os.date("%x"); cl.funcs.clean();
	end
	if (user.bOperator) then
		data = string.sub(data,1,-2)
		local s,e,cmd = string.find(data,"%b<>%s+(%S+)")
		if cmd then
			if (cmd == "!noclean") then return cl.funcs.addnocl(user, data);
			elseif (cmd == "!seen") then return cl.funcs.seen(user, data);
			elseif (cmd == "!showusers") then return cl.funcs.showusers( user, data );
			elseif (cmd == "!shownoclean") then return cl.funcs.showusers( user, cl.no );
			elseif (cmd =="!cleanusers") then return cl.funcs.clean();
			end
		end
	end
end

--------------------------------------------------------------------- stuff done when a user/vip leaves or come
function NewUserConnected(user)
	if cl.user[user.sName] then
		cl.user[user.sName] = nil; cl.funcs.save(cl.files.user, cl.user);
	end
end
OpConnected = NewUserConnected

function UserDisconnected(user)
	if (cl.levels[user.iProfile] == 1) then
		cl.user[user.sName] = os.date("%x"); cl.funcs.save(cl.files.user, cl.user);
	end
end
OpDisconnected = UserDisconnected

--------------------------------------------------------------------- stuff done on bot startup
function Main()
	cl.funcs.load(cl.files.no, cl.no);
	cl.funcs.load(cl.files.user, cl.user);
	cl.day = os.date("%x")
end


Greetz
NS


SMF spam blocked by CleanTalk