PtokaX forum

Lua 5.3/5.2/5.1 Scripts (for PtokaX 0.4.0.0 and newer) => Conversion Requests => Topic started by: portan on 09 January, 2009, 22:16:49

Title: Need this sharecheck converted 2 new api
Post by: portan on 09 January, 2009, 22:16:49
--[[

ShareCheck 1.01 - LUA 5.1 by Herman
???????????????????????????????????????
F?r att f? b?ttre kontroll p? vad anv?ndarna delar i Privata Hubbar.

--Inneh?ll
F?rslag vilken user som ?r mest l?mplig att kolla just nu
Info n?r senast en user blev kollad
Statistik och listor
mm.

--kort hj?lp hur den funkar
Man f?r ett f?rslag p? en user genom h?gerklicket och l?gger in den i "tagen"
N?r usern ?r f?rdig kontrollerad l?gger man in personen i "klar"
Man kan l?gga in personer i "kolla" om man inte har tid just nu och den ?r en share som ska kontrolleras

-----------------------------------------
1.01 - changelog
added clean mem function
changed some formating
changed  the way to upgrade the sorted list
fixed a few small bugs
added some more things on show info on user
added new RC "myinfo"
-----------------------------------------

-------------------------------------------------
---Not Added functions. maybe later---
-------------------------------------------------
RC  remove "klara"
RC change OP name
cleanup of database
----------------------------------------------
]]--



tSettings = {

-- Bot Name
sBot_I = "#[Bot]Share",

-- Vem som ska f? felmeddelandena
AdminNick = "[Founder]Rag3Rac3r",

-- Max antal f?r den sorterade listan ?ver users som ska kollas.
--1000 borde funka f?r dom flesta. Men om man har en v?ldigt stor hubb (?ka) eller vill spara p? resurser (minska) antalet users i listan
iMaxList = 1500,

-- Dag f?r start av veckokoll om man har ett krav p? antal fillistor i veckan
-- (as a decimal number with Sunday as 0 (0-6) )
iDay = 4,

-- RightClick Menu
sMenu = "-=ShareCheck=-",

-- directory for files
filedir = "sharecheck\\",

-- User DB
fuserDB = "tSC_user.tbl",

-- OP DB
fopDB = "tSC_op.tbl",

-- kollas DB
fkollasDB = "tSC_kollas.tbl",

-- tagna DB
ftagnaDB = "tSC_tagna.tbl",

-- sorterad lista ?ver folk som ska kollas
flistaDB = "tSC_lista.tbl",

-- log ?ver vilka personer som ?r klara
fklaraLOG = "tSC_klara.log",


--exlude people in the list of users to check =  flistaDB
-- Profiles checked [0 = off; 1 = on]
tProfiles = { [-1] = 0, [0] = 1, [1] = 1, [2] = 1, [3] = 1, [4] = 1, [5] = 1 },

--User that not will be checked --use lowercase
tUser = {["[#hubbfriend][15]Angelina"] = 1},

--Prefix that not will be checked --use lowercase
tPrefix = {
"[#dump]",
"[ma]",
"[founder]",
"[owner]"
}
}

--===============================================================================================================
--     Edit below this on your own risk.                 No support if you do :P
--===============================================================================================================

-- username <> times checked, last check, op checked
tuserDB = {} --  ( iCounter, iTime, sOP )

-- opname <> filelist checked, first time checked, last week
topDB = {} --( iCounter, iTime )

-- username <> op reported, time
tkollasDB = {} --( iTime, sOP )

-- username <> op checked, time
ttagnaDB = {} --( iTime, sOP )

-- username
tlistaDB = {}

-- static numbers
statWeek = 604800
statDay = 86400
statHour = 3600



Main = function()
-- Register BotName if not registered
if tSettings.sBot_I ~= frmHub:GetHubBotName() then frmHub:RegBot(tSettings.sBot_I) end
-- Load DB content
--os.execute("mkdir "..tSettings.filedir)
local r,e = os.rename("web","web")
if e then
if not e:find("Permission denied") then
os.execute("mkdir "..tSettings.filedir)
end
end
if loadfile(tSettings.filedir..tSettings.flistaDB) then dofile(tSettings.filedir..tSettings.flistaDB) end
if loadfile(tSettings.filedir..tSettings.ftagnaDB) then dofile(tSettings.filedir..tSettings.ftagnaDB) end
if loadfile(tSettings.filedir..tSettings.fkollasDB) then dofile(tSettings.filedir..tSettings.fkollasDB) end
if loadfile(tSettings.filedir..tSettings.fuserDB) then dofile(tSettings.filedir..tSettings.fuserDB) end
if loadfile(tSettings.filedir..tSettings.fopDB) then dofile(tSettings.filedir..tSettings.fopDB) end


-- make a sorted list of users who shall be checked if it not exist or is to small
if not next(tlistaDB) then
MakeCheckList()
end
end


NewUserConnected = function(user)

local tRealNick = GetRealNick(user.sName,ttagnaDB)
if tRealNick then
SendPmToNick(ttagnaDB[tRealNick].sOP, tSettings.sBot_I, "ShareCheck: User: "..user.sName.." har loggat in. Finns bland dina tagna")
end

-- Supports UserCommands
if user.bUserCommand then
-- For each entry in table
for i, v in pairs(tCommands) do
-- If member
if v.tLevels[user.iProfile] == 1 then
-- For each type
for n in ipairs(v.tRC) do
-- Send
user:SendData("$UserCommand 1 3 "..tSettings.sMenu.."\\"..v.tRC[n][1]..
"$<%[mynick]> !"..i..v.tRC[n][2].."&#124;")
end
end
end
end
end

OpConnected = NewUserConnected

ChatArrival = function(user, data)
local _,_, to = string.find(data, "^$To:%s(%S+)%s+From:")
local _,_, msg = string.find(data, "%b<>%s(.*)|$")
-- Message sent to Bot or in Main
if (to and to == tSettings.sBot_I) or not to then
-- Parse command
local _,_, cmd = string.find(msg, "^%p(%S+)")
-- Exists
if cmd and tCommands[string.lower(cmd)] then
cmd, user.SendPM = string.lower(cmd), user.SendData
-- PM
if to == tSettings.sBot_I then user.SendPM = user.SendPM end
-- If user has permission
if tCommands[cmd].tLevels[user.iProfile] == 1 then
return tCommands[cmd].fFunction(user, msg), 1
else
return SendPmToNick(user.sName, tSettings.sBot_I, "*** Error: You are not allowed to use this command!"), 1
end
end
end
end

ToArrival = ChatArrival

tCommands = {
deltagen = {
fFunction = function(user, data)
local _,_, nick = string.find(data, "^%S+%s+(%S+)$")

if nick then
local tRealNick = GetRealNick(nick,ttagnaDB)
if tRealNick then
ttagnaDB[tRealNick] = nil
local hFile = io.open(tSettings.filedir..tSettings.ftagnaDB, "w+") Serialize(ttagnaDB, "ttagnaDB", hFile); hFile:close()
SendPmToNick(user.sName,tSettings.sBot_I, "Sharecheck: "..nick.." ?r borttagen fr?n tagen listan")
else
SendPmToNick(user.sName, tSettings.sBot_I, "*** Error: "..nick.." finns inte i tagen listan")
end
else
SendPmToNick(user.sName, tSettings.sBot_I, "*** Syntax Error: L?gg till nicknamn")
end

end,
tLevels = {
[-1] = 0, [0] = 1, [1] = 0, [2] = 0, [3] = 0, [4] = 0, [5] = 1,
},
tRC = { { "+ Owner\\Tabort user fr?n tagna", " %[line:Nick]" } }
},
delkollas = {
fFunction = function(user, data)
-- Return
local _,_, nick = string.find(data, "^%S+%s+(%S+)$")
if nick then
local tRealNick = GetRealNick(nick,tkollasDB)
if tRealNick then
tkollasDB[tRealNick] = nil
local hFile = io.open(tSettings.filedir..tSettings.fkollasDB, "w+") Serialize(tkollasDB, "tkollasDB", hFile); hFile:close()
SendPmToNick(user.sName,tSettings.sBot_I, "Sharecheck: "..nick.." ?r borttagen fr?n kollas listan")
else
SendPmToNick(user.sName, tSettings.sBot_I, "*** Error: "..nick.." finns inte i kollas listan")
end
else
SendPmToNick(user.sName, tSettings.sBot_I, "*** Syntax Error: L?gg till nickname")
end

end,
tLevels = {
[-1] = 0, [0] = 1, [1] = 0, [2] = 0, [3] = 0, [4] = 0, [5] = 1,
},
tRC = { { "+ Owner\\Tabort user fr?n kollas", " %[line:Nick]" } }
},
forslaguser = {
fFunction = function(user, data)
--loopar igenom kollas f?rst och ser om n?gon ?r online
if next(tkollasDB) then
for i, v in pairs(tkollasDB) do
if GetItemByName(i) then
SendPmToNick(user.sName,tSettings.sBot_I, "ShareCheck: Den mest l?mpliga usern att kolla nu ?r   -->  "..i)
SendPmToNick(user.sName,tSettings.sBot_I, "ShareCheck: kom ih?g att l?gga in den i tagna f?re du b?rjar")
return 1
end
end
end
--om ingen tr?ff i kollas loopas den andra listan igenom och tar f?rsta personen som ?r online
if next(tlistaDB) then
for i = 1, table.maxn(tlistaDB), 1 do
if GetItemByName(tlistaDB[i]) then
SendPmToNick(user.sName,tSettings.sBot_I, "ShareCheck: Den mest l?mpliga usern att kolla nu ?r   -->  "..tlistaDB[i])
SendPmToNick(user.sName,tSettings.sBot_I, "ShareCheck: kom ih?g att l?gga in den i tagen f?re du b?rjar")
return 1
end
end
end
SendPmToNick(user.sName,tSettings.sBot_I, "ShareCheck: Har ingen att rekommendera just nu men ska updatera databasen s? f?rs?k igen om ett tag.")
MakeCheckList()

end,
tLevels = {
[-1] = 0, [0] = 1, [1] = 1, [2] = 0, [3] = 0, [4] = 0, [5] = 1,
},
tRC = { { "Ge b?sta f?rslaget p? user att kolla", "" } }
},
klarlist = {
fFunction = function(user)
local f = io.open(tSettings.filedir..tSettings.fklaraLOG,"r") --if f then f:close()
if f then
local msg = "made by Herman\r\n"..string.rep("=", 40).."\r\n\tUsers som "..user.sName.." gjort klart\r\n"..string.rep("-", 80).."\r\n"
msg = msg.."Kollade n?r\tOP som addade \tUser\r\n"..string.rep("-", 80).."\r\n"

for line in f:lines() do
local _,_, iTime,sUser,sOp = string.find(line, "(%S+%s%S+)%s(%S+)%s(%S+)")
if string.lower(sOp) == string.lower(user.sName) then
msg = msg..iTime.."\t"..sOp.."  \t"..sUser.."\r\n"
end
end

msg = msg..string.rep("-", 80)
-- Send
SendPmToNick(user.sName, tSettings.sBot_I, msg.."\r\n")

f:close()
else
SendPmToNick(user.sName, tSettings.sBot_I, "*** Error: Det finns ingen klar logfil")
end
end,
tLevels = {
[-1] = 0, [0] = 1, [1] = 1, [2] = 0, [3] = 0, [4] = 0, [5] = 1,
},
tRC = { { "+ Lista\\Users jag har gjort klart", " %[nick]" } }
},
klarlistowner = {
fFunction = function(user, data)
local _,_, nick = string.find(data, "^%S+%s+(%S+)$")
if nick then
local f = io.open(tSettings.filedir..tSettings.fklaraLOG,"r")
if f then
local msg = "made by Herman\r\n"..string.rep("=", 50).."\r\n\t\tUsers som ?r klara\r\n"..string.rep("-", 100).."\r\n"
msg = msg.."Kollade n?r\tOP som addade\t\tUser\r\n"..string.rep("-", 100).."\r\n"

if nick == "alla" then
for line in f:lines() do
local _,_, iTime,sUser,sOp = string.find(line, "(%S+%s%S+)%s(%S+)%s(%S+)")
msg = msg..iTime.."\t"..sOp.."  \t"..sUser.."\r\n"
end
else
for line in f:lines() do
local _,_, iTime,sUser,sOp = string.find(line, "(%S+%s%S+)%s(%S+)%s(%S+)")
if string.lower(sOp) == string.lower(nick) then
msg = msg..iTime.."\t"..sOp.."  \t"..sUser.."\r\n"
end
end
end
msg = msg..string.rep("-", 100)
-- Send
SendPmToNick(user.sName, tSettings.sBot_I, msg.."\r\n")

f:close()
else
SendPmToNick(user.sName, tSettings.sBot_I, "*** Error: Finns ingen klar logfil")
end
end
end,
tLevels = {
[-1] = 0, [0] = 1, [1] = 0, [2] = 0, [3] = 0, [4] = 0, [5] = 1,
},
tRC = { { "+ Owner\\Visa users en op gjort klart", " %[line:OpNick]" }, { "+ Owner\\Visa alla klara users", " alla" } }
},
tagnalist = {
fFunction = function(user, data)
-- Table isn't empty
if next(ttagnaDB) then
local _,_, tVar = string.find(data, "^%S+%s+(%S+)$")

local msg = "made by Herman\r\n"..string.rep("=", 40).."\r\n\tUser i tagna listan:\r\n"..string.rep("-", 80).."\r\n"
msg = msg.."Addade n?r\tUser\t\tOP som addade\r\n"..string.rep("-", 80).."\r\n"
local tCopy ={}
-- Loop through hubbers

for i, v in pairs(ttagnaDB) do
-- Insert stats to temp table
if tVar == "jag" and string.lower(v.sOP)==string.lower(user.sName) then
table.insert(tCopy, { sUser = i, iTime = v.iTime, sOP =v.sOP } )
elseif tVar == "alla" then
table.insert(tCopy, { sUser = i, iTime = v.iTime, sOP =v.sOP } )
end
end
-- Sort by total time
table.sort(tCopy, function(a, b) return (a.iTime < b.iTime) end)
-- Loop through temp table

for i, v in pairs(tCopy) do
msg = msg..os.date("%Y-%m-%d %H:%M",v.iTime).."\t"..v.sUser.."\t"..v.sOP.."\r\n"
end

msg = msg..string.rep("-", 80)
-- Send
SendPmToNick(user.sName, tSettings.sBot_I, msg.."\r\n")
else
SendPmToNick(user.sName, tSettings.sBot_I, "*** Error: tagen listan ?r tom")
end
end,
tLevels = {
[-1] = 0, [0] = 1, [1] = 1, [2] = 0, [3] = 0, [4] = 0, [5] = 1,
},
tRC = { { "+ Lista\\Alla users som ?r tagna", " alla" }, { "+ Lista\\Mina egna users som ?r tagna", " jag" } }
},
kollaslist = {
fFunction = function(user)
-- Table isn't empty
if next(tkollasDB) then

local msg = "made by Herman\r\n"..string.rep("=", 40).."\r\n\tUser i kollas listan:\r\n"..string.rep("-", 80).."\r\n"
msg = msg.."Addade n?r\tUser\t\tOP som addade\r\n"..string.rep("-", 80).."\r\n"
local tCopy ={}
-- Loop through hubbers

for i, v in pairs(tkollasDB) do
-- Insert stats to temp table
table.insert(tCopy, { sUser = i, iTime = v.iTime, sOP =v.sOP } )
end
-- Sort by total time
table.sort(tCopy, function(a, b) return (a.iTime < b.iTime) end)
-- Loop through temp table

for i, v in pairs(tCopy) do
msg = msg..os.date("%Y-%m-%d %H:%M",v.iTime).."\t"..v.sUser.."\t"..v.sOP.."\r\n"
end

msg = msg..string.rep("-", 80)
-- Send
SendPmToNick(user.sName, tSettings.sBot_I, msg.."\r\n")
else
SendPmToNick(user.sName, tSettings.sBot_I, "*** Error: kollas listan ?r tom")
end
end,
tLevels = {
[-1] = 0, [0] = 1, [1] = 1, [2] = 0, [3] = 0, [4] = 0, [5] = 1,
},
tRC = { { "+ Lista\\Users som ska kollas", "" } }
},
sctoplista = {
fFunction = function(user)
if next(topDB) then

local msg = "made by Herman\r\n"..string.rep("=", 40).."\r\n  Top-FilListKollare:\r\n"..string.rep("-", 80).."\r\n"
msg = msg.."Antal\tOp\r\n"..string.rep("-", 80).."\r\n"
local tCopy ={}
-- Loop through hubbers
for i, v in pairs(topDB) do
-- Insert stats to temp table
table.insert(tCopy, { sOp = i, iAntal = v.iCounter } )
end
-- Sort by total time
table.sort(tCopy, function(a, b) return (a.iAntal > b.iAntal) end)
-- Loop through temp table
for i, v in pairs(tCopy) do
msg = msg.."  "..v.iAntal.."\t"..v.sOp.."\r\n"
end

msg = msg..string.rep("-", 80)
-- Send
SendPmToNick(user.sName, tSettings.sBot_I, msg.."\r\n")
else
SendPmToNick(user.sName, tSettings.sBot_I, "*** Error: Finns ingen i OPstats listan")
end
end,
tLevels = {
[-1] = 0, [0] = 1, [1] = 1, [2] = 0, [3] = 0, [4] = 0, [5] = 1,
},
tRC = { { "+ Lista\\Totalt antal kollade", "" }}
},
sctoplistagenomsnitt = {
fFunction = function(user)
-- Table isn't empty
if next(topDB) then

local msg = "made by Herman\r\n"..string.rep("=", 40).."\r\n Genomsnitt per vecka:\r\n"..string.rep("-", 80).."\r\n"
msg = msg.."Snitt\tOp\r\n"..string.rep("-", 80).."\r\n"
local tCopy ={}

--iCounter, iTime )
local iNow = os.time(os.date("*t"))
local iDays, iAntal
-- Loop through hubbers
for i, v in pairs(topDB) do

iDays = (iNow - v.iTime)/statDay
iAntal =string.format("%.2f", ((v.iCounter/iDays)*7))


--iWeeks = math.ceil((iNow - v.iTime)/statWeek)
--iAntal =string.format("<%.2f>", (v.iCounter/iWeeks))

--local _,_,iAntal = string.find((v.iCounter/iWeeks),"(%d+%.?%d?)")




-- Insert stats to temp table
table.insert(tCopy, { sOp = i, iSnitt = tonumber(iAntal) } )
end
-- Sort by total time
table.sort(tCopy, function(a, b) return (a.iSnitt > b.iSnitt) end)
-- Loop through temp table

for i, v in pairs(tCopy) do
msg = msg.."  "..v.iSnitt.."\t"..v.sOp.."\r\n"
end

msg = msg..string.rep("-", 80)
-- Send
SendPmToNick(user.sName, tSettings.sBot_I, msg.."\r\n")
else
SendPmToNick(user.sName, tSettings.sBot_I, "*** Error: Finns ingen i OPstats listan")
end
end,
tLevels = {
[-1] = 0, [0] = 1, [1] = 0, [2] = 0, [3] = 0, [4] = 0, [5] = 1,
},
tRC = { { "+ Owner\\Lista ?ver genomsnitt kollade", "" }}
},
veckolista = {
fFunction = function(user, data)
local _,_, tNumber = string.find(data, "^%S+%s+(%d+)$")
local _,_, tStartW,tStopW = string.find(data, "^%S+%s+(%d+)%-(%d+)$")
if tNumber or tStartW then


-- check what weeks user want to see
local iStartWeek,iStopWeek

if tStartW then
iStartWeek = tStartW
iStopWeek = tStopW
tNumber = tStartW.."-"..tStopW
else
iStartWeek = tNumber
iStopWeek = tNumber
end

local tVLista = VeckoLista(iStartWeek,iStopWeek,nil)

-- Skriver ut listan
local msg = "made by Herman\r\n"..string.rep("=", 30).."\r\n Visar info om veckan/veckorna: "..tNumber.."\r\n"..string.rep("=", 30).."\r\n"
for i, v in pairs(tVLista) do
msg = msg.." "..i.." har tagit "..v.iCounter.." users\r\n\r\n"..v.iUsers.."\r\n"..string.rep("-", 60).."\r\n"
end

SendPmToNick(user.sName, tSettings.sBot_I, msg.."\r\n")
tVLista ={}

end
end,
tLevels = {
[-1] = 0, [0] = 0, [1] = 0, [2] = 0, [3] = 0, [4] = 0, [5] = 1,
},
tRC = {{ "+ Owner\\Visa hur m?nga som ?r gjorda - Veckovis", " %[line:En vecka, 0 = p?g?ende, 1=f?rra -- Flera veckor ex 1-4]" } }
},

scvisauser = {
fFunction = function(user, data)
-- Return
local _,_, nick = string.find(data, "^%S+%s+(%S+)$")

if nick then

local msg = "made by Herman\r\n"..string.rep("-", 60).."\r\n         UserInfo for "..nick..":\r\n"..string.rep("-", 60).."\r\n"
--msg = msg.."Username:      \t"..nick.."\r\n"


local tRealNick = GetRealNick(nick,tuserDB)
if tRealNick then
msg = msg.."Last Check:    \t"..os.date("%Y-%m-%d %H:%M",tuserDB[tRealNick].iTime).."\r\n"
msg = msg.."By Who:        \t"..tuserDB[tRealNick].sOP.."\r\n"
msg = msg.."Times checked: \t"..tuserDB[tRealNick].iCounter.."\r\n"
else
msg = msg.."Last Check:    \tNever\r\n"
end

local tRealNick1 = GetRealNick(nick,ttagnaDB)
if tRealNick1 then
msg = msg.."In \"Tagen\":      \tYes by "..ttagnaDB[tRealNick1].sOP.."\r\n"
else
msg = msg.."In \"Tagen\":      \tNo\r\n"
end
local tRealNick2 = GetRealNick(nick,tkollasDB)
if tRealNick2 then
msg = msg.."In \"kollas\": \tYes\r\n"
else
msg = msg.."In \"kollas\": \tNo\r\n"
end

msg = msg..string.rep("-", 60)
SendPmToNick(user.sName, tSettings.sBot_I, msg.."\r\n")

end
end,
tLevels = {
[-1] = 0, [0] = 1, [1] = 1, [2] = 0, [3] = 0, [4] = 0, [5] = 1,
},
tRC = { { "+ Info\\Visa info om en user", " %[line:Fullst?ndigt Nickname]" }, { "+ Info\\Visa info om denna usern", " %[nick]" } }
},
scvisainfo = {
fFunction = function(user)

local msg = "made by Herman\r\n"..string.rep("=", 30).."\r\n  Information om "..user.sName..":\r\n"..string.rep("=", 30).."\r\n"
--msg = msg.."Username:      \t"..nick.."\r\n"


local tRealNick = GetRealNick(user.sName,topDB)
if tRealNick then

--Veckolistor
local tempDay = tonumber(os.date("%w"))
if tSettings.iDay > tempDay then tempDay = tempDay + 7 end
tempDay = tempDay - tSettings.iDay +7
local tVLista = VeckoLista(0,1,user.sName)

--Genomsnitt
local iDays = (os.time(os.date("*t")) - topDB[tRealNick].iTime)/statDay
local iAntal =string.format("%.2f", ((topDB[tRealNick].iCounter/iDays)*7))


-- Tagna
--local iCount = 0
local sTagna ="\r\nTagna users:\r\n"
for i, v in pairs(ttagnaDB) do
if string.lower(v.sOP)==string.lower(user.sName) then
sTagna = sTagna..os.date("%Y-%m-%d %H:%M",v.iTime).."\t"..i.."\r\n"
--iCount = iCount + 1
end
end

msg = msg.."F?rsta listan kollad:      \t"..os.date("%Y-%m-%d",topDB[tRealNick].iTime).."\r\n"
msg = msg.."Antal listor kollade:      \t"..topDB[tRealNick].iCounter.."\r\n"
msg = msg.."Genomsnitt kollade(vecka): \t"..iAntal.."\r\n\r\n"
msg = msg.."Kollade sista "..tempDay.." dagarna: \t"..tVLista[tRealNick].iCounter.." st\r\n"
msg = msg..tVLista[tRealNick].iUsers.."\r\n"
msg = msg..sTagna.."\r\n"

else
msg = msg.."Du finns inte i databasen. Du m?ste l?gga till en klar f?rst\r\n"
end



msg = msg..string.rep("-", 60)
SendPmToNick(user.sName, tSettings.sBot_I, msg.."\r\n")


end,
tLevels = {
[-1] = 0, [0] = 1, [1] = 1, [2] = 0, [3] = 0, [4] = 0, [5] = 1,
},
tRC = { { "+ Info\\Visa egen info", "" } }
},
sharecheck = {
fFunction = function(user, data)
local _,_, nick,typ = string.find(data, "^%S+%s+(%S+)%s+(%S+)$")

if nick and typ then

if typ == "tagen" then
if GetRealNick(nick,ttagnaDB) then
SendPmToNick(user.sName, tSettings.sBot_I, "*** Error: "..nick.." ?r redan i tagen listan.")
else

local sText = ""
for i, v in pairs(frmHub:GetRegisteredUsers()) do
if string.lower(v.sNick)==string.lower(nick) then
ttagnaDB[v.sNick] ={iTime=os.time(os.date("*t")),sOP=user.sName}
local hFile = io.open(tSettings.filedir..tSettings.ftagnaDB, "w+") Serialize(ttagnaDB, "ttagnaDB", hFile); hFile:close()
sText = "*** Lyckades:"
end
end
if sText == "" then
SendPmToNick(user.sName, tSettings.sBot_I, "*** Failed: "..nick.." ?r ingen Registerad User! Kolla namnet igen")
else
SendPmToNick(user.sName, tSettings.sBot_I, "Sharecheck: La till "..nick.." i tagen listan")

-- Remove the user from sorted check list
if next(tlistaDB) then
for i = 1, table.maxn(tlistaDB), 1 do
if string.lower(tlistaDB[i]) == string.lower(nick)  then
--tlistaDB[i] = nil
table.remove (tlistaDB , i)
local hFile = io.open(tSettings.filedir..tSettings.flistaDB, "w+") Serialize(tlistaDB, "tlistaDB", hFile); hFile:close()
break
end
end
end

-- Remove the user from kollas
local tRealNick = GetRealNick(nick,tkollasDB)
if tRealNick then
tkollasDB[tRealNick] = nil
local hFile = io.open(tSettings.filedir..tSettings.fkollasDB, "w+") Serialize(tkollasDB, "tkollasDB", hFile); hFile:close()
end
end
end
elseif typ == "kollas"  then
if GetRealNick(nick,tkollasDB) then
SendPmToNick(user.sName, tSettings.sBot_I, "*** Error: "..nick.." ?r redan i kollas listan.")
else
local sText = ""
for i, v in pairs(frmHub:GetRegisteredUsers()) do
if string.lower(v.sNick)==string.lower(nick) then
tkollasDB[v.sNick] ={iTime=os.time(os.date("*t")),sOP=user.sName}
local hFile = io.open(tSettings.filedir..tSettings.fkollasDB, "w+") Serialize(tkollasDB, "tkollasDB", hFile); hFile:close()
sText = "*** Lyckades:"
end
end
if sText == "" then
SendPmToNick(user.sName, tSettings.sBot_I, "*** Failed: "..nick.." ?r ingen Registerad User! Kolla namnet igen")
else
SendPmToNick(user.sName, tSettings.sBot_I, "Sharecheck: La till "..nick.." i kollas listan")
end
end
elseif typ == "klar" then

-- check om den usern finns
local iIsReg = 0
for i, v in pairs(frmHub:GetRegisteredUsers()) do
if string.lower(v.sNick)==string.lower(nick) then

-- add to klara logfile
local hFile = io.open(tSettings.filedir..tSettings.fklaraLOG, "a+")
local tTid = os.time(os.date("*t"))

hFile:write(os.date("%Y-%m-%d %H:%M ",tTid)..nick.." "..user.sName.." ".."\r\n")
hFile:close()

-- Remove the user from tagna
local tRealNick = GetRealNick(nick,ttagnaDB)
if ttagnaDB[tRealNick] then
ttagnaDB[tRealNick] = nil
local hFile = io.open(tSettings.filedir..tSettings.ftagnaDB, "w+") Serialize(ttagnaDB, "ttagnaDB", hFile); hFile:close()
end

-- Remove the user from kollas
local tRealNick = GetRealNick(nick,tkollasDB)
if tRealNick then
tkollasDB[tRealNick] = nil
local hFile = io.open(tSettings.filedir..tSettings.fkollasDB, "w+") Serialize(tkollasDB, "tkollasDB", hFile); hFile:close()
end

-- Remove the user from sorted check list
if next(tlistaDB) then
for i = 1, table.maxn(tlistaDB), 1 do
if string.lower(tlistaDB[i]) == string.lower(nick)  then
--tlistaDB[i] = nil
table.remove (tlistaDB , i)
local hFile = io.open(tSettings.filedir..tSettings.flistaDB, "w+") Serialize(tlistaDB, "tlistaDB", hFile); hFile:close()
break
end
end
end

-- add to stat to opDB
local tRealNick = GetRealNick(user.sName,topDB)
if tRealNick then
topDB[tRealNick].iCounter = topDB[tRealNick].iCounter + 1
else
topDB[user.sName] ={iTime=os.time(os.date("*t")),iCounter = 1}
end
local hFile = io.open(tSettings.filedir..tSettings.fopDB, "w+") Serialize(topDB, "topDB", hFile); hFile:close()


-- add to userDB
local tRealNick = GetRealNick(nick,tuserDB)
if tRealNick then
tuserDB[tRealNick].iTime = os.time(os.date("*t"))
tuserDB[tRealNick].sOP = user.sName
tuserDB[tRealNick].iCounter = tuserDB[tRealNick].iCounter + 1
else
tuserDB[nick] ={iTime=os.time(os.date("*t")),sOP=user.sName,iCounter = 1}
end
local hFile = io.open(tSettings.filedir..tSettings.fuserDB, "w+") Serialize(tuserDB, "tuserDB", hFile); hFile:close()

-- send info to all ops in main
SendPmToOps(tSettings.sBot_I, "Sharecheck: "..user.sName.." la till "..nick.." till klara")
--
iIsReg = 1

end
end
-- koll om personen fanns eller inte
if iIsReg == 0 then SendPmToNick(user.sName, tSettings.sBot_I, "*** Failed: "..nick.." ?r ingen Registerad User! Kolla namnet igen") end


else
SendPmToNick(user.sName, tSettings.sBot_I, "*** Syntax Error: Du m?ste v?lja \"tagen\" , \"klar\" or \"kollas\" ")
end
else
SendPmToNick(user.sName, tSettings.sBot_I, "*** Syntax Error: Inget nickname eller typ")
end
--clean Memory
CleanMem()
end,
tLevels = {
[-1] = 0, [0] = 1, [1] = 1, [2] = 0, [3] = 0, [4] = 0, [5] = 1,
},
tRC = { { "L?gg till user", " %[line:Fullst?ndigt Nickname] %[line:typ: tagen, klar, kollas]" }, { "L?gg till den h?r usern", " %[nick] %[line:typ: tagen, klar, kollas]" } }
},

}

MakeCheckList = function()
local iCounter = 0
local tBol
tlistaDB = {}
for i, v in pairs(frmHub:GetRegisteredUsers()) do

--not checked before
if not GetRealNick(v.sNick,tuserDB) then
-- allowed profile
if tSettings.tProfiles[v.iProfile] and tSettings.tProfiles[v.iProfile] == 1 then
--allowed user
if not tSettings.tUser[string.lower(v.sNick)] then
--allowed prefix
tBol = 0
for key, tFix in pairs(tSettings.tPrefix) do
if string.sub(string.lower(v.sNick),1,string.len(tFix)) == string.lower(tFix) then
tBol = 1
end
end
if tBol == 0 then

table.insert(tlistaDB,v.sNick)
iCounter = iCounter + 1

if iCounter >= tSettings.iMaxList then
break
end
end
end
end
end
end


if iCounter < tSettings.iMaxList then
local tCopy = {}
for i, v in pairs(tuserDB) do
table.insert(tCopy, { sUser = i, iTime = v.iTime} )
end
-- Sort by total time
table.sort(tCopy, function(a, b) return (a.iTime < b.iTime) end)
-- Loop through temp table
for i = 1, table.maxn(tCopy), 1 do
-- i exists
if tCopy[i] then
-- Populate
table.insert(tlistaDB,tCopy[i].sUser)
iCounter = iCounter + 1
if iCounter >= tSettings.iMaxList then
break
end
end
end
tCopy = {}
end
--spara listan
local hFile = io.open(tSettings.filedir..tSettings.flistaDB, "w+") Serialize(tlistaDB, "tlistaDB", hFile); hFile:close()
CleanMem()
end


function VeckoLista(startv,stopv,user)
local tTempV = {}
local f = io.open(tSettings.filedir..tSettings.fklaraLOG,"r") --if f then f:close()
if f then
-- calculate time in seconds to the last "check time"
local iNow = os.time(os.date("*t"))
local tempDay = tonumber(os.date("%w",iNow))
if tSettings.iDay > tempDay then tempDay = tempDay + 7 end
tempDay = tempDay - tSettings.iDay
local iDiffSec = tempDay*statDay + os.date("%H",iNow)*statHour + os.date("%M",iNow)*60 + os.date("%S",iNow)
local iCheckStart = iNow - iDiffSec

for line in f:lines() do
local _,_, iY,iM,iD,iMin,iS,sUser,sOp = string.find(line, "(%d+)%-(%d+)%-(%d+)%s(%d+)%:(%d+)%s(%S+)%s(%S+)")

local iTime = os.time({ year = iY, month = iM, day = iD, hour = iH, min = iMin, sec = iS})
local iStop = iCheckStart - (statWeek*stopv)   
local iStart = iCheckStart - (statWeek*startv) + statWeek           

if user and string.lower(user) == string.lower(sOp) or not user then
if tonumber(iTime) < tonumber(iStart) and tonumber(iTime) > tonumber(iStop) then
if tTempV[sOp] then
tTempV[sOp].iCounter=tTempV[sOp].iCounter+1
tTempV[sOp].iUsers=tTempV[sOp].iUsers..sUser.." , "
else
tTempV[sOp]={iCounter=1,iUsers=sUser.." , "}
end
end
end
end
f:close()
end
return tTempV

end

-- Clean the memory
function CleanMem()
collectgarbage()
io.flush()
end

OnError = function(msg)
SendPmToNick("Herman", tSettings.sBot_I ,"<"..tSettings.sBot_I.."> "..msg)
SendPmToNick(tSettings.AdminNick, tSettings.sBot_I ,"<"..tSettings.sBot_I.."> "..msg)
--OnError("----")
end

GetRealNick = function(user,db)
-- For each hubber
for i, v in pairs(db) do
-- Compare
if string.lower(i) == string.lower(user) then
-- Return
return i
end
end
end

Serialize = function(tTable, sTableName, hFile, sTab)
sTab = sTab or "";
hFile:write(sTab..sTableName.." = {\n");
for key, value in pairs(tTable) do
if (type(value) ~= "function") then
local sKey = (type(key) == "string") and string.format("[%q]", key) or string.format("[%d]", key);
if(type(value) == "table") then
Serialize(value, sKey, hFile, sTab.."\t");
else
local sValue = (type(value) == "string") and string.format("%q", value) or tostring(value);
hFile:write(sTab.."\t"..sKey.." = "..sValue);
end
hFile:write(",\n");
end
end
hFile:write(sTab.."}");
end


And this to

Main = function()
frmHub:RegBot("#[Bot]Share",1,"","")
end

OnExit = function()
frmHub:UnregBot("#[Bot]Share")
end


dont need the # infront of [Bot]Share