REQ: Need a bot to delete unused accounts
 

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

REQ: Need a bot to delete unused accounts

Started by YASHOV, 25 November, 2003, 10:48:28

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

YASHOV

Hi

I need a bot that would delete users that have not logged in for 4 weeks.
But I also need it to have a immune user list, MODs should be able to edit this list.

Thank you very much

[ES]latinmusic

Supporting this request, but is very hard to do it, is a question for plop or tezlo or for all scripters together, probaly it can not make it now because registerusers.dat does not preserve the original date when the user was registered, and also user statictics are not working good at least with last beta builds is not available.

c h i l l a

dunno wasn't actually too hard...
its not doing by the reg date cause as you said its not in the reg.dat   but it delets the account after a few days , you set it.
but not userlist.

Logger  does it :)

[ES]latinmusic

hmm, you don't catch the point
you need to know what accounts delete and for this you need to know that the account have been not used by XX days so, for this you need to have an statistic file to compares last date of user connection to current date in hosted machine. With both values you have to do something like:
If (currentdate - last connectiondate) >= time then
 delete user account
 display op message
end
For do this you need to work in the following 3 ways:
1.- Using statistics generated by ptokax
Some problems are implyed here because statistics in public releases are buggy and in the betas is temporarily disable besides you need to retrieve the info stored in a .mdb database and is not easy all time.
2.- Using a file generated through lua script to store statistics. Could be a temporal solution.
Problems: High resources consuming, in busy hubs long txt file is generated.
3.- Using registeredusers.dat.
Problem: currently imposible because date of creation the account is not stored actually to work with lua support.
A feature request for new ptokax could be this, perhaps something like:
frmHub:GetAccountDate(NickName)
Ptacek is the only one for take care about point 3.

plop

QuoteOriginally posted by [ES]latinmusic
Supporting this request, but is very hard to do it, is a question for plop or tezlo or for all scripters together, probaly it can not make it now because registerusers.dat does not preserve the original date when the user was registered, and also user statictics are not working good at least with last beta builds is not available.
am i that good ?????  lol

it's posible if you use the !seen bot, but i won't suggest 2 make it run on a timer because it can be using a lot of resources.
using a normal command wich can be triggered on your request (moments when the hub is quiet/sleeping) is much better.
just go thru the regusers file step for step and check the date from !seen and if older then the time you want delete the account.
like chilla said, it's not that hard 2 do.
gone put it on my 2 do list for a.i. bot and when done i'll release it as stand alone script.
when i don't know, bit busy here but i sure love the idea.

plop
http://www.plop.nl lua scripts/howto\'s.
http://www.thegoldenangel.net
http://www.vikingshub.com
http://www.lua.org

>>----> he who fights hatred with hatred, drives the spreading of hatred <----<<

YASHOV

QuoteOriginally posted by plop
i won't suggest 2 make it run on a timer because it can be using a lot of resources. using a normal command which can be triggered on your request (moments when the hub is quiet/sleeping) is much better.

It would be great if it could run once a day (say midnight with an option to turn the timer off) and by command.
But I really need the  'immune user list', this list is for users that have informed a MOD that they will be away from the hub for longer than 4 weeks. The MOD then adds user's nick to the 'immune user list'.
So when the bot is running and finds a user that has not connected for over 4 weeks, it would check against the 'immune user list' before deleting that user.

Thank you very much for all your help!!!!!  :D  :D

c h i l l a

#6
es, sorry must disagree..

if i say it does it then it does ;).
and there are easier ways to do it..  well.
okey since you can't get the regged date..  and I don't work with the user stat i did it a other simpler way.
plop  I use a timer,  but it only triggers once a day.. and I calculated the time used to run though a table with like 1000000 entries..  its not much compared to one day. around 10 seconds..  okey the kernel  fucks it up anyways, but its around that time...

plop

QuoteOriginally posted by c h i l l a
es, sorry must disagree..

if i say it does it then it does ;).
and there are easier ways to do it..  well.
okey since you can't get the regged date..  and I don't work with the user stat i did it a other simpler way.
plop  I use a timer,  but it only triggers once a day.. and I calculated the time used to run though a table with like 1000000 entries..  its not much compared to one day. around 10 seconds..  okey the kernel  fucks it up anyways, but its around that time...
i should take a close look @ your logger bot, only had a quick look @ it so far.
sure want 2 see how you solved this.
for me personaly if something lasts 10 secs i'm gone get some complaining hub owners in pm.  lol

plop
http://www.plop.nl lua scripts/howto\'s.
http://www.thegoldenangel.net
http://www.vikingshub.com
http://www.lua.org

>>----> he who fights hatred with hatred, drives the spreading of hatred <----<<

c h i l l a

well plop i did it simply...  i just tiggers once a day.. and if the user isn't there then he geth +1 in Inactive...
if he does log in again then Inactive = -1 again...
but if you think then I guess the table wouldn't really get bigger than 100.000 entries.. and that only with really big hubs holding ore than 1000 users,  so it would take 1 second maximum....
but that is just my script cause it loggs the user as well  so I have hold all logged users + regged users... but if you only hold regged useres in your table then... it will be smaller for sure...

plop

QuoteOriginally posted by c h i l l a
well plop i did it simply...  i just tiggers once a day.. and if the user isn't there then he geth +1 in Inactive...
if he does log in again then Inactive = -1 again...
but if you think then I guess the table wouldn't really get bigger than 100.000 entries.. and that only with really big hubs holding ore than 1000 users,  so it would take 1 second maximum....
but that is just my script cause it loggs the user as well  so I have hold all logged users + regged users... but if you only hold regged useres in your table then... it will be smaller for sure...
thats indeed a nice and simple way, not full proof but working.
the time it takes can easely be checked.
put this on the 1st line on the function.
check = clock()
and this on the last.
SendToAll(Bot, clock()-check)
1 of our hub's has 600 - 1400 users and yes i got a table for the regged users.
also got 1 if the bot has 2 calculate how long a user has/is in the hub.
this last 1 is better 2 be disabled on hub's with that amount of users.
the julian day is not a light thing 2 use.
for the way 2 clean the reg users i have in mind i'm gone need the same function.
got some other nifty idea in my head wich i have 2 check 1st, but if that works like i hope the hub won't have any lag/load from it @ all.
but you'll see later.

yashov: that imune list is the easy part.
but for now i suggest you use chilla's logger bot.

plop
http://www.plop.nl lua scripts/howto\'s.
http://www.thegoldenangel.net
http://www.vikingshub.com
http://www.lua.org

>>----> he who fights hatred with hatred, drives the spreading of hatred <----<<

YASHOV

QuoteOriginally posted by plop
yashov: that imune list is the easy part.
but for now i suggest you use chilla's logger bot.

plop

OK, thank you :)

c h i l l a

#11
plop,  just remeber.. that it does depend on the cpu, I was testing my test, readable here

http://board.univ-angers.fr/thread.php?threadid=393&boardid=17&styleid=1&sid=e16c1d866bccc75fa2d0336afda579c5

on a 2,4 GHz P4
and well as winxp isn't a realtime system the clock() function won't work, you will need to run, it like 1000send of times to get a chance of how long it really takes and even then it's hard to tell since the times are so small, as I said the kernel fucks it up.

but plop you must tell whats not proof in the way of the logger, so I can improve the script.

Optimus

Can this be done with Date?

then you can put the Registerd user that goes offline in a table with that date.

Then make a command that checks the table and compares the dates with the current date.

If more then 3 weeks then delete/remove acount

some like that duno for sure

plop

QuoteOriginally posted by Optimus
Can this be done with Date?

then you can put the Registerd user that goes offline in a table with that date.

Then make a command that checks the table and compares the dates with the current date.

If more then 3 weeks then delete/remove acount

some like that duno for sure
thats why i had the seen command in mind, i allready store the latest date/time a user left the hub in that.
on my a.i. bot the seen and reg users are both an associative array so it's easy 2 compair the dates and find the users who haven't been in the hub for x weeks.
i allready do the same 2 remove the logs older then x weeks.
i'll check if i can make this 2morrow but can't promise anything.

chilla: sorry still haven't looked @ your logger bot closely.
i'm a bit sick here and had a busy weekend.

plop
http://www.plop.nl lua scripts/howto\'s.
http://www.thegoldenangel.net
http://www.vikingshub.com
http://www.lua.org

>>----> he who fights hatred with hatred, drives the spreading of hatred <----<<

Optimus

cool, i will be waiting for a example Plop. It's a good discussion.

btw, got that code to work you gave me. verry happy with it. thx

c h i l l a

Optimus,  truly I think its no use to compare dates, because, you would need to run throug the table anyways, only if your hub is like offline for a week and you still want to delete the account after 20 days. else a running number( i = i +1) is less cpu intense, than cpmapring 2 dates.
well plop no worries, but then you can't say its not proof if you didn't check it.

Optimus

mm, didn't thought about that for beeing offline for 2 weeks. You got a point there.

That's indeed not Proof *lol*

well me got to think again

plop

QuoteOriginally posted by c h i l l a
Optimus,  truly I think its no use to compare dates, because, you would need to run throug the table anyways, only if your hub is like offline for a week and you still want to delete the account after 20 days. else a running number( i = i +1) is less cpu intense, than cpmapring 2 dates.
well plop no worries, but then you can't say its not proof if you didn't check it.
just from your story, have 2 check it fully 2 be sure.
i gues your smart enough 2 reset the vallue 2 -1 instead of  subtracting the counter by 1.
this wasn't really clear 2 me.
nearly done with my way, only have 2 add the imune users.
and indeed if the hub has been offline for 2 weeks there is a problem with my way.
but that can be solved, just change the cleaner 2 6 weeks. lol
if the last hub uptime date is saved 2 file this be can fixed automaticly, just this has 2 go on for 2 weeks.
tricky but posible, have 2 think how 2 solve that nicely.  lol

plop
http://www.plop.nl lua scripts/howto\'s.
http://www.thegoldenangel.net
http://www.vikingshub.com
http://www.lua.org

>>----> he who fights hatred with hatred, drives the spreading of hatred <----<<

plop

i hope i stripped it without bugs. lol
here it is.
-- auto 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


--------------------------------------------------------------------- config
WEEKS = 4    -- every1 older then x weeks
Bot = "The_Cleaner"

---------------------------------------------------------------------  the needed tables
UsersTable = {}
Seen = {}
NoClean = {}


--------------------------------------------------------------------- julian day function 2 calcute the time users spend in the hub
function 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 = floor(y/100)
		b = 2 - a + floor(a/4)
	end
	if y <= 0 then c = 0.75 end
	return floor(365.25*y - c) + floor(30.6001*(m+1) + d + 1720994 + b)
end

--------------------------------------------------------------------- loading the last seen database
function LoadLastSeen()
   readfrom("userinfo/lastseen.lst")
   while 1 do
      local line = read()
      if line ==  nil then
         break
      end
      local s,e,name,date = strfind(line, "(.+)$(.+)")
      if name ~= nil then
         Seen[name]=date
      end
   end
   readfrom()
end

--------------------------------------------------------------------- saving last seen date
function SaveSeen()
   writeto("userinfo/lastseen.lst")
   for a,b in Seen do
      Seen[a]=b
      write(a.."$"..b.."\n")
   end
   writeto()
end

--------------------------------------------------------------------- call the garbage man
function Clear() 
   collectgarbage() 
   flush() 
end

--------------------------------------------------------------------- opening the registered users file from ptokax and inserting the users into the table
function OpenRegisterdUsersFile()
   readfrom("../RegisteredUsers.dat")
   UsersTable = nil
   Clear()
   UsersTable = {}
   while 1 do
      local line = read()
      local name, level 
      if line == nil then 
         readfrom()
         break 
      end
      s,e,name,level = strfind(line,"(.+)|.+|(.+)")
      if tonumber(level) == 3 then
         UsersTable[name] = 1
      end
   end   
end

--------------------------------------------------------------------- cleanup old users
function CleanUsers()
   SendToAll(Bot, "The cleaner has been called. Every registered user who hasn't been in the hub for "..WEEKS.." weeks will be deleted. (contact the OP's if your gone be away for a period longer then that)|")
   OpenRegisterdUsersFile()
   local s,e,month,day,year = strfind(date("%x"), "(%d+)%/(%d+)%/(%d+)")
   year = "20"..year
   local juliannow = jdate(tonumber(day), tonumber(month), tonumber(year))
   local oldest = WEEKS*7
   for a,b in UsersTable do
      if Seen[a] then
         local s,e,monthu,dayu,yearu = strfind(Seen[a], "(%d+)%/(%d+)%/(%d+)")
         yearu = "20"..yearu
         local julianu = jdate(tonumber(dayu), tonumber(monthu), tonumber(yearu))
         if (juliannow - julianu) > oldest then
            SendToAll(Bot, a.." has been cleaned")
            Seen[a] = nil
            DelRegUser(a)
         end
      else
         Seen[a] = date("%x")
      end
   end 
   SaveSeen()
   OpenRegisterdUsersFile()
end

--------------------------------------------------------------------- don't clean this users adding/removing
function NoCleanUser(user, data)
   local who, addrem = Get2ArgsML(data)
   if (who or addrem) == nil then
      user:SendData(Bot, "RTFM ;). it's !noclean  |")
   elseif UsersTable[who] then
      if addrem == "add" then
         if NoClean[who] then
            user:SendData(Bot, who.." is allready on the imune list.|")
         else
            NoClean[who] = 1
            user:SendData(Bot, who.." is added to the imune list and won't be cleaned.|")
            SaveNoClean()
         end
      elseif addrem == "remove" then
         if NoClean[who] then
            NoClean[who] = nil
            user:SendData(Bot, who.." is removed from the imune list.|")
            SaveNoClean()
         else
            user:SendData(Bot, who.." was not on the imune list.|")
         end
      else
         user:SendData(Bot, "RTFM ;). it's !noclean  |")
      end
   else
      user:SendData(Bot, who.." isn't a registered user.|")
   end
end

--------------------------------------------------------------------- save no clean users 2 file
function SaveNoClean()
   writeto("userinfo/noclean.lst")
   for a,b in NoClean do
      write(a.."\n")
   end
   writeto()
end

--------------------------------------------------------------------- load no clean users from file
function LoadNoClean()
   readfrom("userinfo/noclean.lst")
   while 1 do
      local line = read()
      if line == nil then 
         readfrom()
         break 
      end
      NoClean[line] = 1
   end 
end

--------------------------------------------------------------------- do i need 2 explain this ?????
function DataArrival(user, data) 
   if CleanDay ~= date("%x") then -- user cleaning trigger, works as a timer without a timer
      CleanDay = date("%x")
      CleanUsers()
   end
   if( strsub(data, 1, 1) == "<" ) then 
      if user.bOperator then
         data=strsub(data,1,strlen(data)-1) 
         s,e,cmd = strfind(data,"%b<>%s+(%S+)") 
         if cmd == "!noclean" then
            NoCleanUser(user, data)
            return 1
         end
      end
   end
end

--------------------------------------------------------------------- stuff done when a user/vip leaves
function UserDisconnected(user)
	if UsersTable[user.sName] then
      Seen[user.sName]=date("%x")
      SaveSeen()
   end
end

--------------------------------------------------------------------- stuff done on bot startup
function Main()
   OpenRegisterdUsersFile()
   LoadNoClean()
   LoadLastSeen()
end
plop
http://www.plop.nl lua scripts/howto\'s.
http://www.thegoldenangel.net
http://www.vikingshub.com
http://www.lua.org

>>----> he who fights hatred with hatred, drives the spreading of hatred <----<<

YASHOV

#19
plop,

I get:
Syntax Error: attempt to call global `Get2ArgsML' (a nil value)
When I enter:
!noclean Yashov add
or
!noclean who


Thank you

plop

QuoteOriginally posted by YASHOV
plop,

I get:
Syntax Error: attempt to call global `Get2ArgsML' (a nil value)
When I enter:
!noclean Yashov add
or
!noclean who


Thank you
sorry forgot 2 strip a tiny piece.
solved it now.
-- auto 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


--------------------------------------------------------------------- config
WEEKS = 4    -- every1 older then x weeks
Bot = "The_Cleaner"

---------------------------------------------------------------------  the needed tables
UsersTable = {}
Seen = {}
NoClean = {}


--------------------------------------------------------------------- julian day function 2 calcute the time users spend in the hub
function 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 = floor(y/100)
		b = 2 - a + floor(a/4)
	end
	if y <= 0 then c = 0.75 end
	return floor(365.25*y - c) + floor(30.6001*(m+1) + d + 1720994 + b)
end

--------------------------------------------------------------------- loading the last seen database
function LoadLastSeen()
   readfrom("userinfo/lastseen.lst")
   while 1 do
      local line = read()
      if line ==  nil then
         break
      end
      local s,e,name,date = strfind(line, "(.+)$(.+)")
      if name ~= nil then
         Seen[name]=date
      end
   end
   readfrom()
end

--------------------------------------------------------------------- saving last seen date
function SaveSeen()
   writeto("userinfo/lastseen.lst")
   for a,b in Seen do
      Seen[a]=b
      write(a.."$"..b.."\n")
   end
   writeto()
end

--------------------------------------------------------------------- call the garbage man
function Clear() 
   collectgarbage() 
   flush() 
end

--------------------------------------------------------------------- opening the registered users file from ptokax and inserting the users into the table
function OpenRegisterdUsersFile()
   readfrom("../RegisteredUsers.dat")
   UsersTable = nil
   Clear()
   UsersTable = {}
   while 1 do
      local line = read()
      local name, level 
      if line == nil then 
         readfrom()
         break 
      end
      s,e,name,level = strfind(line,"(.+)|.+|(.+)")
      if tonumber(level) == 3 then
         UsersTable[name] = 1
      end
   end   
end

--------------------------------------------------------------------- cleanup old users
function CleanUsers()
   SendToAll(Bot, "The cleaner has been called. Every registered user who hasn't been in the hub for "..WEEKS.." weeks will be deleted. (contact the OP's if your gone be away for a period longer then that)|")
   OpenRegisterdUsersFile()
   local s,e,month,day,year = strfind(date("%x"), "(%d+)%/(%d+)%/(%d+)")
   year = "20"..year
   local juliannow = jdate(tonumber(day), tonumber(month), tonumber(year))
   local oldest = WEEKS*7
   for a,b in UsersTable do
      if Seen[a] then
         local s,e,monthu,dayu,yearu = strfind(Seen[a], "(%d+)%/(%d+)%/(%d+)")
         yearu = "20"..yearu
         local julianu = jdate(tonumber(dayu), tonumber(monthu), tonumber(yearu))
         if (juliannow - julianu) > oldest then
            SendToAll(Bot, a.." has been cleaned")
            Seen[a] = nil
            DelRegUser(a)
         end
      else
         Seen[a] = date("%x")
      end
   end 
   SaveSeen()
   OpenRegisterdUsersFile()
end

--------------------------------------------------------------------- don't clean this users adding/removing
function NoCleanUser(user, data)
   local who, addrem = strfind(data, "%b<>%s+%S+%s+(%S+)%s+(%S+)%s*")
   if (who or addrem) == nil then
      user:SendData(Bot, "RTFM ;). it's !noclean  |")
   elseif UsersTable[who] then
      if addrem == "add" then
         if NoClean[who] then
            user:SendData(Bot, who.." is allready on the imune list.|")
         else
            NoClean[who] = 1
            user:SendData(Bot, who.." is added to the imune list and won't be cleaned.|")
            SaveNoClean()
         end
      elseif addrem == "remove" then
         if NoClean[who] then
            NoClean[who] = nil
            user:SendData(Bot, who.." is removed from the imune list.|")
            SaveNoClean()
         else
            user:SendData(Bot, who.." was not on the imune list.|")
         end
      else
         user:SendData(Bot, "RTFM ;). it's !noclean  |")
      end
   else
      user:SendData(Bot, who.." isn't a registered user.|")
   end
end

--------------------------------------------------------------------- save no clean users 2 file
function SaveNoClean()
   writeto("userinfo/noclean.lst")
   for a,b in NoClean do
      write(a.."\n")
   end
   writeto()
end

--------------------------------------------------------------------- load no clean users from file
function LoadNoClean()
   readfrom("userinfo/noclean.lst")
   while 1 do
      local line = read()
      if line == nil then 
         readfrom()
         break 
      end
      NoClean[line] = 1
   end 
end

--------------------------------------------------------------------- do i need 2 explain this ?????
function DataArrival(user, data) 
   if CleanDay ~= date("%x") then -- user cleaning trigger, works as a timer without a timer
      CleanDay = date("%x")
      CleanUsers()
   end
   if( strsub(data, 1, 1) == "<" ) then 
      if user.bOperator then
         data=strsub(data,1,strlen(data)-1) 
         s,e,cmd = strfind(data,"%b<>%s+(%S+)") 
         if cmd == "!noclean" then
            NoCleanUser(user, data)
            return 1
         end
      end
   end
end

--------------------------------------------------------------------- stuff done when a user/vip leaves
function UserDisconnected(user)
	if UsersTable[user.sName] then
      Seen[user.sName]=date("%x")
      SaveSeen()
   end
end

--------------------------------------------------------------------- stuff done on bot startup
function Main()
   OpenRegisterdUsersFile()
   LoadNoClean()
   LoadLastSeen()
end
plop
http://www.plop.nl lua scripts/howto\'s.
http://www.thegoldenangel.net
http://www.vikingshub.com
http://www.lua.org

>>----> he who fights hatred with hatred, drives the spreading of hatred <----<<

YASHOV

Thank you!

No syntax errors :)

But, I get: 1 isn't a registered user.
When I enter: !noclean Yashov add

Also, I get: RTFM ;). it's !noclean
When I enter: !noclean who <--- is this a valid command??

Is there a way to see who is on the imune list???
And is there a way to triger the cleaner manually??


Thank you very much!!

plop

QuoteOriginally posted by YASHOV
Thank you!

No syntax errors :)

But, I get: 1 isn't a registered user.
When I enter: !noclean Yashov add
i bet you are a operator. you can only add users who are registered.
QuoteOriginally posted by YASHOV
Also, I get: RTFM ;). it's !noclean
When I enter: !noclean who <--- is this a valid command??
thats not a valid command.
QuoteOriginally posted by YASHOV
Is there a way to see who is on the imune list???
And is there a way to triger the cleaner manually??

Thank you very much!!
i'll see if i can add those 2 2morrow.
adding a user who is allready on the imune list can't be done, you'll get a msg about that.

plop
http://www.plop.nl lua scripts/howto\'s.
http://www.thegoldenangel.net
http://www.vikingshub.com
http://www.lua.org

>>----> he who fights hatred with hatred, drives the spreading of hatred <----<<

YASHOV

QuoteOriginally posted by plop
QuoteThank you!

No syntax errors :)

But, I get: 1 isn't a registered user.
When I enter: !noclean Yashov add
i bet you are a operator. you can only add users who are registered.

No, [OP]Yashov is an operator, Yashov is a registered user, I have also tried other users and I always get same message :(

Quotei'll see if i can add those 2 2morrow.
adding a user who is allready on the imune list can't be done, you'll get a msg about that.

plop

Thank you very much!!!!

plop

i'll also add a command 2 show all the registered users.
maby that can help 2 find out whats going wrong on your hub as here it's working fine.

plop
http://www.plop.nl lua scripts/howto\'s.
http://www.thegoldenangel.net
http://www.vikingshub.com
http://www.lua.org

>>----> he who fights hatred with hatred, drives the spreading of hatred <----<<

SMF spam blocked by CleanTalk