PtokaX forum

Archive => Archived 5.0 boards => Finished Scripts => Topic started by: Ajax on 03 June, 2005, 21:07:50

Title: Usercleaner
Post by: Ajax on 03 June, 2005, 21:07:50
Thise is a good working usercleaner its cleant only regusers not vips ops ore master.


    -- 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
    -- usercommands support added by Plop

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

    --------------------------------------------------------------------- config
    WEEKS = 2 -- every1 older then x weeks is deleted
    Bot = frmHub:GetHubBotName()
    AUTO = 1 -- use 1 for automode, 0 for manual
    CleanLevels = {[1]=1,[2]=1,[3]=1,[4]=1} -- levels it needs 2 clean (0=Master, 1=Operator, 2=Vip, 3=Reg, 4=Moderator, 5=Netfounder)

    -- 1=on / 0=off Send Commands
    SendTo = {
   
  • = 1, -- Masters
  • [1] = 1, -- Operators
        [2] = 0, -- Vips
        [3] = 0, -- Regs
        [4] = 1, -- Moderator
        [5] = 1, -- NetFounder
        [-1] = 0, -- Users
        }

        rMenu = "-=Raptor's Cleaner=-" -- The User Cleaner

        function NewUserConnected(user)
        if (SendTo[user.iProfile]==1) then
        user:SendData("$UserCommand 0 3 |")
        customCMDs(user)
        end
        end

        OpConnected=NewUserConnected

        function customCMDs(user)
        user:SendData("$UserCommand 1 3 "..rMenu.."\\Add/Remove Users From UserCleaner List$<%[mynick]> !noclean %[nick] %[line:add/remove]||")
        user:SendData("$UserCommand 1 3 "..rMenu.."\\Show Users That Wont Be Cleaned$<%[mynick]> !shownoclean||")
        user:SendData("$UserCommand 1 3 "..rMenu.."\\Shows All Regged Users$<%[mynick]> !showusers||")
        user:SendData("$UserCommand 1 3 "..rMenu.."\\Manualy Starts The UserCleaner$<%[mynick]> !cleanusers||")
        user:SendData("$UserCommand 1 3 "..rMenu.."\\Shows The Last Time The User Left The Hub$<%[mynick]> !seen %[nick]||")
        end

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

        --------------------------------------------------------------------- loading the last seen database
        function LoadLastSeen()
        filename = "../logs/lastseen.lst"
        if not io.open(filename, "r") then
        local File = io.open( filename, "w" );
        File:flush();
        File:close();
        end
        local file = io.open(filename, "r") -- "r" read
        for line in file:lines() do
        local s,e,name,date = string.find(line, "(.+)$(.+)")
        if name ~= nil then
        Seen[name]=date
        end
        end
        file:flush()
        file:close()
        end

        --------------------------------------------------------------------- saving last seen date
        function SaveSeen()
        filename = "../logs/lastseen.lst"
        local file = io.open(filename, "w+") -- "w" write
        for a,b in Seen do
        Seen[a]=b
        file:write(a.."$"..b.."\n")
        end
        file:flush()
        file:close()
        end

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

        --------------------------------------------------------------------- opening the registered users file from ptokax and inserting the users into the table
        function OpenRegisterdUsersFile()
        filename = "../RegisteredUsers.dat"
        UsersTable = nil
        Clear()
        UsersTable = {}
        local file = io.open(filename, "r") -- "r" read
        for line in file:lines() do
        local name, level
        s,e,name,level = string.find(line,"(.+)|.+|(.+)")
        if CleanLevels[tonumber(level)] then
        UsersTable[name] = 1
        end
        end
        file:flush()
        file:close()
        end

        --------------------------------------------------------------------- extracting the time/date when a user was last seen from the database
        function SeenUser(user, data)
        s,e,who = string.find(data, "%b<>%s%S+%s(.+)")
        if who == nil then
        user:SendData(Bot, "Syntax error, can't read your mind, pls tell me wich user you wanne check|")
        elseif Seen[who] then
        user:SendData(Bot, who.." was last seen on: "..Seen[who].."|")
        else
        user:SendData(Bot, who.." is a unknown user|")
        end
        end

        --------------------------------------------------------------------- shows all the nicks of all registered users
        function NewShowUsers(user)
        local lines = {}
        local info = "\r\n\r\n"
        info = info.." Here are the registered users\r\n"
        info = info.."=====================================\r\n"
        for a,b in UsersTable do
        table.insert(lines, a)
        end
        table.sort(lines)
        for i=1,table.getn(lines) do
        info = info.." "..lines
.."\r\n"
    end
    info = info.."=====================================\r\n"
    user:SendData(Bot, info.." |")
    Clear()
    end

    --------------------------------------------------------------------- shows all the nicks on the no clean list
    function ShowNoClean(user)
    local lines = {}
    local info = "\r\n\r\n"
    info = info.." Here are the users who aren't cleaned\r\n"
    info = info.."=====================================\r\n"
    for a,b in NoClean do
    table.insert(lines, a)
    end
    table.sort(lines)
    for i=1,table.getn(lines) do
    info = info.." "..lines.."\r\n"
    end
    info = info.."=====================================\r\n"
    user:SendData(Bot, info.." |")
    Clear()
    end

    --------------------------------------------------------------------- cleanup old users
    function CleanUsers()
    SendToAll(Bot, "The Usercleaner 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 = string.find(os.date("%x"), "(%d+)%/(%d+)%/(%d+)")
    year = "20"..year
    local juliannow = jdate(tonumber(day), tonumber(month), tonumber(year))
    local oldest = WEEKS*7
    local Count2,Count = 0,0
    for a,b in UsersTable do
    Count = Count+1
    if Seen[a] then
    if NoClean[a]== nil then
    local s,e,monthu,dayu,yearu = string.find(Seen[a], "(%d+)%/(%d+)%/(%d+)")
    yearu = "20"..yearu
    local julianu = jdate(tonumber(dayu), tonumber(monthu), tonumber(yearu))
    if (juliannow - julianu) > oldest then
    Count2 = Count2 +1
    Seen[a] = nil
    DelRegUser(a)
    end
    end
    else
    Seen[a] = os.date("%x")
    end
    end
    if Count ~= 0 then
    SendToAll(Bot, Count.." users were procest, "..Count2.." of them were deleted.|")
    end
    SaveSeen()
    OpenRegisterdUsersFile()
    end

    --------------------------------------------------------------------- don't clean this users adding/removing
    function NoCleanUser(user, data)
    local s,e,who, addrem = string.find(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

    --------------------------------------------------------------------- saving last seen date
    function SaveNoClean()
    filename = "../logs/noclean.lst"
    local file = io.open(filename, "w+") -- "w" write
    for a,b in NoClean do
    file:write(a.."\n")
    end
    file:flush()
    file:close()
    end

    --------------------------------------------------------------------- load no clean users from file
    function LoadNoClean()
    filename = "../logs/noclean.lst"
    if not io.open(filename, "r") then
    local File = io.open( filename, "w" );
    File:flush();
    File:close();
    end
    local file = io.open(filename, "r") -- "r" read
    for line in file:lines() do
    NoClean[line] = 1
    end
    file:flush()
    file:close()
    end

    --------------------------------------------------------------------- do i need 2 explain this ?????
    function ChatArrival(user, data)
    if AUTO == 1 then
    if CleanDay ~= os.date("%x") then -- user cleaning trigger, works as a timer without a timer
    CleanDay = os.date("%x")
    CleanUsers()
    end
    end
    if( string.sub(data, 1, 1) == "<" ) then
    if user.bOperator then
    data=string.sub(data,1,string.len(data)-1)
    s,e,cmd = string.find(data,"%b<>%s+(%S+)")
    if cmd == "!noclean" then
    NoCleanUser(user, data)
    return 1
    elseif cmd == "!showusers" then
    NewShowUsers(user)
    return 1
    elseif cmd == "!shownoclean" then
    ShowNoClean(user)
    return 1
    elseif cmd == "!seen" then
    SeenUser(user, data)
    return 1
    elseif cmd =="!cleanusers" then
    CleanUsers()
    return 1
    end
    end
    end
    end

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

    --------------------------------------------------------------------- do the same stuff for op's if needed
    function OpDisconnected(user)
    if UsersTable[user.sName] then
    Seen[user.sName]=os.date("%x")
    SaveSeen()
    end
    end

    --------------------------------------------------------------------- stuff done on bot startup
    function Main()
    OpenRegisterdUsersFile()
    LoadNoClean()
    LoadLastSeen()
    CleanDay = os.date("%x")
    end





Title:
Post by: bastya_elvtars on 03 June, 2005, 21:13:42
What the fuck is going on this week? All of my friends and me failed on exams, hublist.org stuff, and now stealing of code. this was originally writteny by [size=18]plop[/size].

This is not normal. A cataclism is to come. Please save all your data.
Title:
Post by: Ajax on 03 June, 2005, 21:18:20
yes
Title:
Post by: plop on 03 June, 2005, 22:07:19
QuoteOriginally posted by Ajax
yes

then keep my name in it.
thats all i ask, or is that 2 much ?

plop
Title:
Post by: Dessamator on 03 June, 2005, 22:41:55
well in theory it says it was stripped from a.i, which was made by plop, :),
Title:
Post by: Ajax on 03 June, 2005, 22:52:31
so good
Title:
Post by: plop on 04 June, 2005, 08:26:31
QuoteOriginally posted by Ajax
so good

thx, just the user commands aren't my work.
i made the original lua 4 version and pothead converted it to lua 5.

plop
Title:
Post by: sneaky on 07 August, 2005, 15:35:48
UserCleaner.lua:114: attempt to index local `file' (a nil value)

i get this error when i was running the UserCleaner lua. anyone can help me? plz