UserCleaner
 

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

UserCleaner

Started by TS-SkyNet, 03 November, 2006, 18:35:15

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

TS-SkyNet

Hi all wondering if someone could give me some help been out of scripting for a while now  i need plops cool script to clean all profiles script  and profiles i need below would be greatfull if someone could help thx
-- 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
-- Mod by Mutor, check for & create logs folder if non-existent, added process time for nightshadow
-- Corrected a few ancient spelling errors.

-- !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 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
--------------------------------------------------------------------- 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)
			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
--------------------------------------------------------------------- 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()
	local f,e = io.open(cl.files.user)
	if f == nil then
		if os.execute("dir logs") ~= 0 then
			os.execute("md logs")
			cl.funcs.clean()
			Main()
		end
	else
	f:close()
	cl.funcs.load(cl.files.no)
	cl.funcs.load(cl.files.user)
	cl.day = os.date("%x")
	end
end

TS-SkyNet

my profiles are

<Profiles>
    <Profile>
        <Name>Master</Name>
        <Permissions>1111111111110111111011111110111101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Permissions>
    </Profile>
    <Profile>
        <Name>Operator</Name>
        <Permissions>1111111110110111111011000010111101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Permissions>
    </Profile>
    <Profile>
        <Name>VIP</Name>
        <Permissions>0111110000100011111000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Permissions>
    </Profile>
    <Profile>
        <Name>Reg</Name>
        <Permissions>0000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Permissions>
    </Profile>
    <Profile>
        <Name>Moderator</Name>
        <Permissions>1111111110110111111011100110111101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Permissions>
    </Profile>
    <Profile>
        <Name>NetFounder</Name>
        <Permissions>1111111111111111111011111110111111011000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</Permissions>
    </Profile>
</Profiles>

jiten

If you want to check and clean every profile, have a look at this:

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


As you can see, you must add the profile number as the index, and the amount of weeks as the value in the above pasted table.

Note that you have the following profiles:

- Reg [3];
- VIP [2];
- Operator [1];
- Moderator [4];
- Master [0];
- NetFounder [5].


Oh, I'm not sure if you've checked the RegCleaner thread but, I've released a rewritten version of this bot :P

TS-SkyNet


SMF spam blocked by CleanTalk