-- Date: 13-02-2004 -- code from klownietklowniet -- some small shit by Freed -- optimized some by pur -- Added regbot, by zinden // made optional by bastya_elvtars -- fixed security bug introdused by me :-( -- gg3k added save function (that was ripped from triviabot :)) -- several tiny fixes and other add-ons by bastya_elvtars -----<>------ config start Bot="WarnerBrother" -- lol mawarns=3 botinlist=0 -- 0 to disable bot in userlist, 1 to enable warntime=30 -- bantime in mins -----<>------ config end warnings={} function Main() LoadWarn() if botinlist==1 then frmHub:RegBot(Bot) end end function DataArrival(user,data) local returndata if strsub(data, 1, 4) == "$To:" then data=strsub(data,1,strlen(data)-1) -- is this meant for our bot? local _,_,whoTo = strfind(data,"$To:%s+(%S+)") if (whoTo == Bot) then local _,_,cmd = strfind(data,"$To:%s+%S+%s+From:%s+%S+%s+$%b<>%s+[%!%+%#](%S+)") if cmd then returndata=parsecmds(user,data,strlower(cmd),"PM") end end elseif strsub(data, 1, 1) == "<" then data=strsub(data,1,strlen(data)-1) local _,_,cmd = strfind(data,"%b<>%s+[%!%+%#](%S+)") if cmd then returndata=parsecmds(user,data,strlower(cmd),"MAIN") end end return returndata end function dowarn(user,data,env) if user.bOperator then local _,_,arg,arg2= strfind(data, "%b<>%s+%S+%s+(%S+)%s+(.+)") if arg then local victim=GetItemByName(arg) if victim and not victim.bOperator then if warnings[arg]==nil then warnings[arg]=0 end if warnings[arg]==(maxwarns - 1) then SendPmToNick(Bot, "This was your last warning. Now have a rest for "..warntime.." mins. ;) // "..user.sName) SendToAll(Bot, arg.." could not change his mind ---> we have to go on with 1 user less for "..warntime.." minutes. :P // "..user.sName) victim:TimeBan(warntime) --victim:Disconnect() SaveWarn() else warnings[arg]=warnings[arg]+1 if arg2~=nil then victim:SendPM(Bot,"You have been warned because: "..arg2) SendToAll(Bot, arg.." got his warning #"..warnings[arg]..". Reason: "..arg2.." // "..user.sName) victim:SendPM(Bot, "This is warning #"..warnings[arg]..". Get "..maxwarns.." and you will be banned for "..warntime.." mins...") else user:SendData(parseenv(user,env,Bot).."No reason specified...") end SaveWarn() end elseif victim and victim.bOperator then user:SendData(parseenv(user,env,Bot)..user.sName..", do not warn an operator please.This was your warning #"..maxwarns) user:Disconnect() elseif arg==Bot then user:SendData(parseenv(user,env,Bot).."You cannot warn me! Everything I do is right, agree? This was your warning #"..maxwarns) user:Disconnect() else user:SendData(parseenv(user,env,Bot)..arg.." not online.") end else user:SendData(parseenv(user,env,Bot).."Hmm, who to warn and why? I'm so busy that I missed. ;)") end else user:SendData(parseenv(user,env,Bot).."You do not have sufficient rights to run that command! |") end end function resetwarn(user,data,env) if user.bOperator then local _,_,arg = strfind(data, "%b<>%s+%S+%s+(%S+)") if arg then if warnings[arg] then warnings[arg]=nil user:SendData(parseenv(user,env,Bot)..arg.." - warning(s) deleted.") SaveWarn() else user:SendData(parseenv(user,env,Bot)..arg.." - not found in the list.") end else user:SendData(parseenv(user,env,Bot).."Please specify a nick!") end else user:SendData(parseenv(user,env,Bot).."You do not have sufficient rights to run that command! |") end end function SaveWarn() local handle = openfile("lawmaker/dats/warned.dat", "w") for index, value in warnings do write(handle,index.."|"..value.."\r\n") end closefile(handle) end function LoadWarn() local handle = openfile("lawmaker/dats/warned.dat", "r") if (handle) then local line = read(handle) while line do local arrTmp = tokenize(line, "|") if ((arrTmp[1] ~= nil) and (arrTmp[2] ~= nil)) then warnings[arrTmp[1]] = tonumber(arrTmp[2]) end line = read(handle) end closefile(handle) end end function tokenize (inString,token) _WORDS = {} local matcher = "([^"..token.."]+)" gsub(inString, matcher, function (w) tinsert(_WORDS,w) end) return _WORDS end function parsecmds(user,data,cmd,env) local commandtable={ ["warn"]={dowarn,{user,data,env}}, ["resetwarn"]={resetwarn,{user,data,env}} } if commandtable[cmd] then call (commandtable[cmd][1],commandtable[cmd][2]) return 1 end end function parseenv(user,env,bot) if env=="PM" then return "$To: "..user.sName.." From: "..bot.." $<"..bot.."> " elseif env=="MAIN" then return "<"..bot.."> " end end