RegCleaner by Plop et al.
 

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

RegCleaner by Plop et al.

Started by Pothead, 11 April, 2006, 02:30:45

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Pothead

-- 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? :)
-- Pothead changed to allow different profiles to have a different cleaning time and updated to lua 5.1

-- !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

--------------------------------------------------------------------- the needed tables // pls dont edit anything here..
cl = {}
cl.sets = {}
cl.levels = {}
cl.user = {}
cl.no = {}
cl.funcs = {}
--------------------------------------------------------------------- config
cl.sets.bot = frmHub:GetHubBotName() -- the bot Name...
cl.sets.auto = 1 -- 0:disables / 1:enables , automatic mode ( if disabled use !cleanusers to clean )
cl.files = { no = "logs/NoClean.lst", user = "logs/CleanUser.lst" } -- these are the files..

cl.levels = { [3]=2, [2]=26} -- levels it needs 2 clean 3=reg 2=vip , then = the amount of weeks to clean them in

--------------------------------------------------------------------- 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)
	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 cl.user[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 pairs(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;
	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 , "RTFM ;). It's !showusers <Profile_name>"); return 1; end
		tbl = GetUsersByProfile(Profile);
		txt = "registered users with Profile ("..Profile..")"
	else
		local function to_array(t) local r={}; for i , v in pairs(t) do table.insert(r, i); end; return r; end
		tbl = to_array(data)
		txt = "users who aren't cleaned"
	end
	local info = "\n Here are the "..txt.."\n"
	info = info.."=====================================\n"
	for i,nick in pairs(tbl) do info = info.."  "..nick.."\n"; end
	info = info.."=====================================\n"
	user:SendData( "$To: "..user.sName.." From: "..user.sName.." $<"..cl.sets.bot.."> "..info)
	cl.funcs.cls()
end
--------------------------------------------------------------------- cleanup old users
function cl.funcs.clean()
	local juliannow = cl.funcs.jdate(tonumber(os.date("%d")), tonumber(os.date("%m")), tonumber(os.date("%Y")))
	local chkd, clnd, totalchecked = 0,0,0
	local msg = "The_Cleaner has just ran."
	for prof, v in pairs(cl.levels) do
		msg = msg.."\r\nEvery "..GetProfileName(prof).." user who hasn't been in the hub for "..cl.levels[prof].." weeks will be deleted."
		local oldest = cl.levels[prof] * 7
		for a, b in pairs(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+)");
					year = "20"..year
					local julian = cl.funcs.jdate( tonumber(day), tonumber(month), tonumber(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
		msg = msg.." "..chkd.." users were procest, "..clnd.." of them were deleted."
		totalchecked = totalchecked + chkd
		chkd = 0
		clnd = 0
	end
	msg = msg.. "\r\n\r\n(Please contact the OP's if your gone be away for a period longer than the one mentioned)"
	SendToAll(cl.sets.bot , msg)
	cl.funcs.save(cl.files.user, cl.user);
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 imune list.")
				else
					cl.no[who] = 1
					user:SendData(cl.sets.bot , who.." is added to the imune list and won't be cleaned.")
					cl.funcs.save(cl.files.no, cl.no)
				end
			elseif addrem == "remove" then
				if cl.no[who] then
					cl.no[who] = nil
					user:SendData(cl.sets.bot , who.." is removed from the imune list.")
					cl.funcs.save(cl.files.no, cl.no)
				else
					user:SendData(cl.sets.bot , who.." was not on the imune list.")
				end
			else
				user:SendData(cl.sets.bot , "RTFM ;). it's !noclean <user_name> <add/remove>")
			end
		else
			user:SendData(cl.sets.bot , who.." isn't a registered user.")
		end
	else
		user:SendData(cl.sets.bot , "Syntax Error, Use: !noclean <nick> <add or remove>")
	end
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])
				else
					user:SendData( cl.sets.bot, "How should I know when "..who.." was last seen ?")
				end
			else
				user:SendData( cl.sets.bot, who.." is online ... open those eyes of yours..")
			end
		else
			user:SendData( cl.sets.bot, "aren't you that guy ?")
		end
	else
		user:SendData( cl.sets.bot, "Syntax Error, Use: !seen <nick>")
	end
end
--------------------------------------------------------------------- do i need 2 explain this ?????
function ChatArrival(user, data)
	if (cl.sets.auto == 1) then
		if 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
	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 cl.funcs.addnocl(user, data); return 1;
			elseif (cmd == "!seen") then cl.funcs.seen(user, data); return 1;
			elseif (cmd == "!showusers") then cl.funcs.showusers( user, data ); return 1;
			elseif (cmd == "!shownoclean") then cl.funcs.showusers( user, cl.no ); return 1;
			elseif (cmd =="!cleanusers") then cl.funcs.clean(); return 1;
			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] ~= nil) 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.funcs.load(cl.files.user)
	cl.day = os.date("%x")
end
:)

nightshadow

If i manuel call !cleanusers the i have the next error  :'(

Syntax I:\Ptokax0340c\scripts\regcleaner51.lua:56: attempt to index local 'f' (a nil value)


Greets
NS

DJ Bert

You need to get a folder logs in the scripts folder and there you need the files NoClean.lst and CleanUser.lst. When this added it works. Maybe Pothead can adding in script for auto adding this files.

Pothead

Sure it does makes the files already. 
Only way i can think of to get around the directory not exist problem is use the ptokaX root\logs directory.
I did change it to goto that directory for the LUA 5 update, but it's got changed back by someone.  ???

nightshadow

Works now  :)

But can you add wenn the cleaner has ran that it the time say like:

The_Cleaner has just ran.
Every Reg user who hasn't been in the hub for 4 weeks will be deleted. 1 users were procest, 0 of them were deleted.
Every VIP user who hasn't been in the hub for 8 weeks will be deleted. 0 users were procest, 0 of them were deleted.

This cleanup took: 0.000 seconds.

(Please contact one of the OP's if your gone be away for a period longer than the one mentioned)

Greetz
NS

Pothead

Why say how long it took ?  Fair eoungh, maybe inform owner, if they are curious, but there is no need to spam the users with that.
Thanks though, you just made me think of a profile, specific spam. :)
E.g. reg's see the reg one.
vip's see the vip one.
op's see both.
unregged see neither.

:)

Madman

Quote from: Pothead on 12 April, 2006, 00:21:23
Sure it does makes the files already.?
Only way i can think of to get around the directory not exist problem is use the ptokaX root\logs directory.
I did change it to goto that directory for the LUA 5 update, but it's got changed back by someone.? ???
function Main()
	cl.funcs.load(cl.files.no)
	cl.funcs.load(cl.files.user)
	cl.day = os.date("%x")
	FindFolder()
end

function FindFolder()
	noFolder = string.gsub(cl.files.no, "%/", "\\\\")
	local _,_,nFolder = string.find(noFolder, "(.*)\\\\%S+%.%S+")
	userFolder = string.gsub(cl.files.user, "%/", "\\\\")
	local _,_,uFolder = string.find(userFolder, "(.*)\\\\%S+%.%S+")
	MakeFolder(nFolder,uFolder)
end

function MakeFolder(noF, userF)
	if os.execute("dir " ..noF) ~= 0 then
		os.execute("md " ..noF)
	elseif os.execute("dir " ..userF) ~= 0 then
		os.execute("md " ..userF)
	end
end


Just a quickie...
We suffer in silence, we lurk in the shadows, we kill in the night
Site currently down, ETA of returning online is 2099 ;p

bluebear

Maybe we just need a wrapper for the OS functions like access, FileExists, PathFileExists, ect..
Sincerely,
bluebear
--
http://www.thewildplace.dk/ is is closed - Use the following mirrors instead
http://bluebear.psycho-chihuahua.net
http://pxextension.piratez.dk/
[Lua extensions - Chat stats - YnHub PMSpy - DC Source code - and more]

nightshadow

Nobody can add this. I like it to have it into this script.

This cleanup took: 0.000 seconds.

Greetz
NS

Pothead

Quote from: nightshadow on 12 April, 2006, 23:33:38
Nobody can add this. I like it to have it into this script.

This cleanup took: 0.000 seconds.

Greetz
NS

Why say it took 0 seconds to do ? What's the poiint ?

nightshadow

Just like i said. I like to see how long in seconds it needs to clean users.
Exmaple:

The_Cleaner has just ran.
Every Reg user who hasn't been in the hub for 4 weeks will be deleted. 157 users were procest, 4 of them were deleted.
Every VIP user who hasn't been in the hub for 8 weeks will be deleted. 87 users were procest, 0 of them were deleted.

This cleanup took: 0.069 seconds.

(Please contact one of the OP's if your gone be away for a period longer than the one mentioned)

Greetz
NS

nightshadow

Thanks Mutor,

Keep up good works

Greetz
NS

DJ Bert

I changed Mutors code a little about cleanup.
It shows: This cleanup took: 75526.9520 seconds

Code by Mutor

function cl.funcs.clean()
	local start = os.clock()
	local juliannow = cl.funcs.jdate(tonumber(os.date("%d")), tonumber(os.date("%m")), tonumber(os.date("%Y")))
	local chkd, clnd, totalchecked = 0,0,0
	local msg = "\r\nThe Cleaner has just ran.\r\n"
	for prof, v in pairs(cl.levels) do
		msg = msg.."\r\nEvery "..GetProfileName(prof).." user who hasn't been in the hub for "..cl.levels[prof].." weeks will be deleted."
		local oldest = cl.levels[prof] * 7
		for a, b in pairs(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+)");
					year = "20"..year
					local julian = cl.funcs.jdate( tonumber(day), tonumber(month), tonumber(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
		msg = msg.." "..chkd.." users were processed, "..clnd.." of them were deleted."
		totalchecked = totalchecked + chkd
		chkd = 0
		clnd = 0
	end
	msg = msg.. "\r\n\r\nThis cleanup took: "..string.format("%8.6f seconds",os.difftime(os.clock(),start))..
	"\r\n\r\n(Please contact the OP's if your going to be away for a period longer than the one mentioned)"
	SendToAll(cl.sets.bot , msg)
	cl.funcs.save(cl.files.user, cl.user);
end


Changed and shows now: This cleanup took: 0.0520 seconds

cl.funcs.clean = function()
	local juliannow = cl.funcs.jdate(tonumber(os.date("%d")), tonumber(os.date("%m")), tonumber(os.date("%Y")))
	local chkd, clnd, totalchecked = 0,0,0
	local msg = "\r\n\r\nThe Cleaner has just ran."
	for prof, v in pairs(cl.levels) do
		msg = msg.."\r\nEvery "..GetProfileName(prof).." user who hasn't been in the hub for "..cl.levels[prof].." weeks will be deleted."
		local oldest = cl.levels[prof] * 7
		for a, b in pairs(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+)");
					year = "20"..year
					local julian = cl.funcs.jdate( tonumber(day), tonumber(month), tonumber(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
		msg = msg.." "..chkd.." users were procest, "..clnd.." of them were deleted."
		totalchecked = totalchecked + chkd
		chkd = 0
		clnd = 0
	end
	local x = os.clock()
	local s = 0
	for i=1,100000 do s = s + i 
	end
	msg = msg.. "\r\n\r\nThis cleanup took: "..string.format("%0.4f seconds",os.clock()-x,start)..
	"\r\n\r\n(Please contact the OP's if your going to be away for a period longer than the one mentioned)"
	SendToAll(Bot , msg)
	cl.funcs.save(cl.files.user, cl.user);
end


exlepra

Is ther a way to make the script case insensitive to nicks?
Leyt say I have the registered nickname Exlepra in the hub, of course I am able to log in as exlepra, the script only looks for Exlepra so despite I am online I would be still deleted.

YouAlreadyKnow

#14
Thanks for this script....but when i use it it makes it for i cant chat in The maine chat...i didnt chang the script at all
these are the scripts im useing when i trie to use it

Chatstats-v3-Lua_5.1
Clone_Killer_1.0d-LUA_5.0-5.1
Dynamic-Profile
massbot_1.0_l5.1
QuickReg-1.0-LUA_5.0-5.1
Release_Bot-v3a-LUA_5.0.2-5.1
Request_Bot-v3a-LUA_5.0.2-5.1
Share_Tool-1.0-LUA_5.0-5.1
WelcomeMessage-LUA_5.1

thanks for any help..Yak

EDIT.....i just ternd off  all my scripts i use and left just the regcleaner on  and im still muted from the main chat
so it is sumthing in the script.......if any one can pls help

thanks...YAK

Pothead

Can you post if you disable all scripts ?
Did you copy / paste the script correctly ?
Is it giving any error messages ?

YouAlreadyKnow

Quote from: Pothead on 29 May, 2006, 13:27:17
Can you post if you disable all scripts ?
Did you copy / paste the script correctly ?
Is it giving any error messages ?

yea i can post when i turn the scripts off

im pretty shure i copy/pasted it fine iv tried a few times just to make shure

and no thats the thing no error messages

pls help if u can....or mabee if some one knows of another regcleaner script pls let me know

...YAK

Cêñoßy†ê

Quote from: YouAlreadyKnow on 29 May, 2006, 00:27:48
Thanks for this script....but when i use it it makes it for i cant chat in The maine chat...i didnt chang the script at all

Heres your fix for it =)

Change:
function ChatArrival(user, data)
	if (cl.sets.auto == 1) then
		if 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
	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 cl.funcs.addnocl(user, data)
			elseif (cmd == "!seen") then cl.funcs.seen(user, data)
			elseif (cmd == "!showusers") then cl.funcs.showusers( user, data )
			elseif (cmd == "!shownoclean") then cl.funcs.showusers( user, cl.no )
			elseif (cmd =="!cleanusers") then cl.funcs.clean()
			end
			return 1
		end
	end
end


To this:
function ChatArrival(user, data)
	if (cl.sets.auto == 1) then
		if 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
	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 cl.funcs.addnocl(user, data)
			elseif (cmd == "!seen") then cl.funcs.seen(user, data)
			elseif (cmd == "!showusers") then cl.funcs.showusers( user, data )
			elseif (cmd == "!shownoclean") then cl.funcs.showusers( user, cl.no )
			elseif (cmd =="!cleanusers") then cl.funcs.clean()
			return 1
			end
		end
	end
end
Powered By Leviathan™ 2nd Generation v. 1.9

jiten

#18
--[[

	RegCleaner 1.01 - LUA 5.0/5.1 by jiten (9/13/2006)
	??????????????????????????????????????????????????
	Based on: RegCleaner by plop et al

	DESCRIPTION:
	????????????
	Auto/manual registered user cleaner if user hasn't been in the hub for x weeks

	CHANGELOG:
	??????????
	Stripped: Code 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? :)
	Changed: To allow different profiles to have a different cleaning time and updated to lua 5.1 by Pothead;
	Changed: Check for & create logs folder if non-existent, added process time for nightshadow by Mutor;
	Corrected: Few ancient spelling errors;

	Rewritten: Almost whole code structure by jiten (9/13/2006)
	Changed: Table structure - lowered nicks to face case-sensitive stuff - requested by speedX;
	Fixed: User's table entry was deleted on connect (10/2/2006)

]]--

speedX

hey jiten wat is Immune user?? and wat is use of it??
Posted on: 02 October 2006, 07:22:20
hey and how can i disable rightclick of VIP and reg user ??
Thanking You,

speedX

TiMeTrAVelleR

Quote from: speedX on 02 October, 2006, 06:22:20
hey jiten wat is Immune user?? and wat is use of it??
not been cleaned

Quote from: speedX on 02 October, 2006, 06:30:59
hey and how can i disable rightclick of VIP and reg user ??

tLevels = {
         [-1] = 0,
  • = 1, [1] = 1, [2] = 0, [3] = 0, [4] = 1, [5] = 1,
          },

    1=0n     0=off



speedX

but no clean command also does the same thing as Immune??
Posted on: 02 October 2006, 10:59:17
and one more thing.....my nick is speedX and if other user wants to check the last time i logged in and types !seen speedx  he shud get the result......("x" is small)
Thanking You,

speedX

TiMeTrAVelleR

Quote from: speedX on 02 October, 2006, 09:59:17
but no clean command also does the same thing as Immune??


yup you add user to imune list
Posted on: 02 October 2006, 14:57:59
Quote from: speedX on 02 October, 2006, 10:06:02
and one more thing.....my nick is speedX and if other user wants to check the last time i logged in and types !seen speedx  he shud get the result......("x" is small)


you need to put correckt name there

speedX

ya i kno.....but is it possible?? tht if a users nick is speedX and even if i type !seen speedx thn i shud get the result......
Thanking You,

speedX

jiten

First post has been updated with speedX's request and a small, yet important fix.

Attention: In order to use this version, you must delete your older databases [tUser.tbl and tImmune.tbl].

Notice that if there's a need for a converter [1.0 to higher] just let me know.

SMF spam blocked by CleanTalk