PtokaX forum

Archive => Archived 5.0 boards => Finished Scripts => Topic started by: TTB on 15 May, 2005, 03:57:01

Title: IP Ranger from Thor 2.0
Post by: TTB on 15 May, 2005, 03:57:01
IP-Ranger, standalone now, in LUA5.

You need to make a folder/file:
/scripts/ranges/AllowR.dat
/scripts/ranges/DenyR.dat

Put in AllowR.dat this table:
AllowR = {

}

and in DenyR.dat this table:
DenyR = {

}

Here is the script... Report bugs, maybe I can fix them :)

-----------------------------------------------------------
--// IP-Ranger: Thor Add-on ? NightLitch 2004
--// Converted to LUA5 by TTB
--// Date: 15-05-2005
--// Update by TTB, 19-10-05
-----------------------------------------------------------

Ranger_Name = "-IP-Ranger-"
ISP_Check = 1
ByPassVIP = 1

--// Tables
AllowR = {}
DenyR = {}
RegTable = {}

--// Files
FILE = {
AllowF = "ranges/AllowR.dat",
DenyF = "ranges/DenyR.dat",
}

--// Main Function
function Main()
LoadIPFile(FILE.AllowF)
LoadIPFile(FILE.DenyF)
frmHub:RegBot(Ranger_Name)
end

function ToArrival(curUser,data)
local _,_,whoTo,mes = string.find(data,"$To:%s+(%S+)%s+From:%s+%S+%s+$(.*)")
if (whoTo == Ranger_Name and string.find(mes,"%b<>%s+(.*)")) then
data = string.sub(mes,1,string.len(mes)-1)
ParseRanger(curUser,data)
return 1
end
end

function NewUserConnected(curUser,data)
rIPCheck(curUser)
end

--// Compute IP
function ComputeIP(curIP)
local _,_,a,b,c,d = string.find(curIP, "(%d+).(%d+).(%d+).(%d+)")
return a*16777216 + b*65536 + c*256 + d
end

--// IP-Check Function
function rIPCheck(sUser)
local AllowOK, ARange = GetRange(sUser.sIP, AllowR)
local DenyOK, DRange = GetRange(sUser.sIP, DenyR)
if ByPassVIP==1 and sUser.iProfile == 2 then return 1 end
if DenyOK==1 then
sUser:SendData(Ranger_Name, "Your IP ( "..sUser.sIP.." ) is Denyed here...")
sUser:SendData(Ranger_Name, "*** Disconnected...")
sUser:Disconnect()
return 1
else
if AllowOK==1 then
local ISPTagOK = GetISP(sUser,AllowR[ARange][2])
if ISPTagOK==0 and ISP_Check==1 then
SendErrorTag(sUser,ARange)
elseif ISPTagOK == 2 and ISP_Check==1 then
SendErrorLevel(sUser,ARange)
end
else
sUser:SendData(Ranger_Name, "Your IP ( "..sUser.sIP.." ) is not Allowed here...")
sUser:SendData(Ranger_Name, "*** Disconnected...")
sUser:Disconnect()
return 1
end
end
end

--// Send Error Message
function SendErrorTag(sUser,ARange)
sUser:SendData(Ranger_Name, "Your ISP Tag is not Allowed here...")
sUser:SendData(Ranger_Name, "Allowed ISP Tag's for you:\r\n\t"..GetTags(AllowR[ARange][2],0).."\r\n")
sUser:SendData(Ranger_Name, "*** Disconnected...")
sUser:Disconnect()
end

--// Check Range
function GetRange(ip,table)
local _,_,a,b,c,d = string.find(ip, "(%d*).(%d*).(%d*).(%d*)")
if ( tonumber(a) and tonumber(b) and tonumber(c) and tonumber(d) ) then
local uip = ComputeIP(ip)
if uip then
local c = ""
for r,i in table do
local _,_,range1,range2 = string.find(r, "(.*)-(.*)")
range1 = ComputeIP(range1)
range2 = ComputeIP(range2)
if uip>=range1 and uip<=range2 then
c = "1"
return 1,r
end
end
end
end
end

--// Check ISP Tag
function GetISP(nick,table)
local _,_,isp,name = string.find(string.lower(nick.sName), "^(%[%S+%])(%S+)")
check = 0
if isp~=nil then
for key,tags in table do
if tonumber(key) then
tags = string.lower(tags)
if isp==tags then
check = 1
end
end
end
if check==1 then
return 1
elseif check==0 then
return 0
else
return 0
end
else
return 0
end
end

--// Get Tags
function GetTags(table,num)
local line = ""
local t = ""
for id, isp in table do
if not tonumber(isp) then
line = line..t..isp
if num==1 then
if t == "" then t = "," end
else
if t == "" then t = "   " end
end
end
end
return line
end

--// Parse Ranger Commands
function ParseRanger(sUser,sData)
local _,_,cmd = string.find(sData,"%b<>%s+%!(%S+)")
if cmd then
if Ranger_Commands[cmd] and sUser.iProfile==0 then
return Ranger_Commands[cmd](sUser,sData)
else
return 0
end
end
end

--// Ranger Commands
Ranger_Commands = {
["addrange"] = function(sUser,sData) return DoAddRange(sUser,sData) end,
["delrange"] = function(sUser,sData) return DoDelRange(sUser,sData) end,
["show"] = function(sUser,sData) return DoShowRange(sUser,sData) end,
["addisp"] = function(sUser,sData) return DoAddISP(sUser,sData) end,
["delisp"] = function(sUser,sData) return DoDelISP(sUser,sData) end,
["help"] = function(sUser,sData) return DoIPHelp(sUser,sData) end,
}

--// AddRange Function
function DoAddRange(sUser,sData)
local _,_,range,network,value = string.find(sData,"%b<>%s+%S+%s+(%S+-%S+)%s+(%S+)%s+(%S+)")
if range==nil or network==nil or value==nil then
sUser:SendPM(Ranger_Name,"Syntax: !addrange ")
return 1
end
if string.lower(value)=="allow" then
if AllowR[range] then
sUser:SendPM(Ranger_Name,range.." is already in Allow File...")
return 1
end
AllowR[range] = {network, {"["..network.."]"}}
sUser:SendPM(Ranger_Name,"Range: ( "..range.." ) - Network: "..network.." is added to Allow File")
SaveIPFile(AllowR , "AllowR", FILE.AllowF)
return 1
elseif string.lower(value)=="deny" then
if DenyR[range] then
sUser:SendPM(Ranger_Name,range.." is already in Deny File...")
return 1
end
DenyR[range] = {network,{"["..network.."]"}}
sUser:SendPM(Ranger_Name,"Range: ( "..range.." ) - Network: "..network.." is added to Deny File")
SaveIPFile(DenyR , "DenyR", FILE.DenyF)
return 1
else
sUser:SendPM(Ranger_Name,"Wrong arg input! ( allow ) or ( deny ) not ( "..value.." )")
return 1
end
end

--// DelRange Function
function DoDelRange(sUser,sData)
local _,_,range,value = string.find(sData,"%b<>%s+%S+%s+(%S+-%S+)%s+(%S+)")
if range==nil or value==nil then
sUser:SendPM(Ranger_Name,"Syntax: !delrange ")
return 1
end
if string.lower(value)=="allow" then
if AllowR[range] then
AllowR[range] = nil
sUser:SendPM(Ranger_Name,"Range: ( "..range.." ) is deleted from Allow File.")
SaveIPFile(AllowR , "AllowR", FILE.AllowF)
return 1
else
sUser:SendPM(Ranger_Name,"Range: ( "..range.." ) is not found in Allow File.")
return 1
end
elseif string.lower(value)=="deny" then
if DenyR[range] then
DenyR[range] = nil
sUser:SendPM(Ranger_Name,"Range: ( "..range.." ) is deleted from Deny File.")
SaveIPFile(DenyR , "DenyR", FILE.DenyF)
return 1
else
sUser:SendPM(Ranger_Name,"Range: ( "..range.." ) is not found in Deny File.")
return 1
end
else
sUser:SendPM(Ranger_Name,"Wrong arg input! ( allow ) or ( deny ) not ( "..value.." )")
return 1
end
end

--// Show Ranges Function
function DoShowRange(sUser,sData)
local _,_,v = string.find(sData, "%b<>%s+%S+%s+(%S+)")
local msg,c = "\r\n", 0
if v==nil then
sUser:SendPM(Ranger_Name, "Syntax: !show ")
return 1
end
local t,n = "",""
if string.lower(v)=="allow" then
t = AllowR
n = "Allow Range List"
elseif string.lower(v)=="deny" then
t = DenyR
n = "Deny Range List"
else
sUser:SendPM(Ranger_Name, "Parameter error: not "..v.." !!")
return 1
end
msg=msg.."\r\n\t ? ? ? "..n.." ? ? ?"
msg=msg.."\r\n   ???????????????????????????????????????????????????????????????????????????
??????????????????????????"
msg=msg.."\r\n\t Network's Range's Isp's"
msg=msg.."\r\n\t ???????? ??????? ???? "
for range,index in t do
table.sort(t)
c = c +1
msg=msg.."\r\n\t"..index[1]..""..string.rep("\t", 60/(20+string.len(index[1])))..""..range..""..string.rep("\t", 70/(8+string.len(range)))..""..GetTags(index[2],0)
end
msg=msg.."\r\n   ___________________________________________________________________________
__________________________"
sUser:SendPM(Ranger_Name,msg)
return 1
end

--// Add ISP Function
function DoAddISP(sUser,sData)
local _,_,range,i1,i2,i3,i4,i5,i6,i7,i8 = string.find(sData, "%b<>%s+%S+%s+(%S+-%S+)%s*(%S*)%s*(%S*)%s*(%S*)%s*(%S*)%s*(%S*)%s*(%S*)%s*(%S*)%s*(%S*)")
if range==nil then
sUser:SendPM(Ranger_Name, "Syntax: !addisp ")
return 1
end
if i1=="" then i1 = nil end
if i2=="" then i2 = nil end
if i3=="" then i3 = nil end
if i4=="" then i4 = nil end
if i5=="" then i5 = nil end
if i6=="" then i6 = nil end
if i7=="" then i7 = nil end
if i8=="" then i8 = nil end
if AllowR[range] then
AllowR[range] = {AllowR[range][1], {GetTags(AllowR[range][2],1), i1,i2,i3,i4,i5,i6,i7,i8},}
sUser:SendPM(Ranger_Name, "\r\n\r\n?ISP: ( "..i1.." ) have been added to: \r\n\r\n?Range: "..range.." \r\n?Network: "..AllowR[range][1].." \r\n?ISP's: "..GetTags(AllowR[range][2],0).." ")
SaveIPFile(AllowR , "AllowR", FILE.AllowF)
return 1
else
sUser:SendPM(Ranger_Name, "?Range: ( "..range.." ) is not found in database !! ")
return 1
end
end

--// Del ISP Function
function DoDelISP(sUser,sData)
local _,_,range,isp = string.find(sData, "%b<>%s+%S+%s+(%S+-%S+)%s+(%S+)")
if range==nil or isp==nil then
sUser:SendPM(Ranger_Name, "Syntax: !delisp ")
return 1
end
if AllowR[range] then
local check = 0
for i = 1,table.getn(AllowR[range][2]) do
if isp==AllowR[range][2][i] then
AllowR[range][2][i] = nil
check = 1
end
end
if check==1 then
sUser:SendPM(Ranger_Name, "\r\n\r\n?ISP: ( "..isp.." ) have been removed from: \r\n\r\n?Range: "..range.." \r\n?Network: "..AllowR[range][1].." \r\n?ISP's: "..GetTags(AllowR[range][2],0).." ")
SaveIPFile(AllowR , "AllowR", FILE.AllowF)
return 1
else
sUser:SendPM(Ranger_Name, "?ISP: ( "..isp.." ) is not found in Range: ( "..range.." ) ")
return 1
end
else
sUser:SendPM(Ranger_Name, "?Range: ( "..range.." ) is not found in database !! ")
return 1
end
end

function DoIPHelp(sUser,sData)
local msg = "\r\n"
msg=msg.."\r\n\t ? ? ? IP-Ranger Help ? ? ?"
msg=msg.."\r\n   ???????????????????????????????????????????????????????????????????????????
??????????????????????????"
msg=msg.."\r\n\t !addrange - Add range to specific type"
msg=msg.."\r\n\t !delrange - Del range to specific type"
msg=msg.."\r\n\t !addisp - Add isp to range"
msg=msg.."\r\n\t !delisp - Del isp to range"
msg=msg.."\r\n\t !show - Show specific list"
msg=msg.."\r\n   ___________________________________________________________________________
__________________________"
sUser:SendPM(Ranger_Name,msg)
return 1
end

function Serialize(tTable, sTableName, hFile, sTab)
sTab = sTab or "";
hFile:write(sTab..sTableName.." = {\n" );
for key, value in tTable do
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
hFile:write(sTab.."}");
end

function LoadIPFile(file)
local handle = io.open(file,"r")
        if (handle ~= nil) then
                dofile(file)
handle:flush()
handle:close()
        end
end


function SaveIPFile(table,tablename,filename)
local hFile = io.open (filename,"w");
Serialize(table, tablename, hFile);
hFile:close()
end
Title:
Post by: GrinSlaW on 17 May, 2005, 18:43:17
Hi

how can i change so that all op's can use the help menu in ip ranger ?

ihave robocop v10 profiles

cheers
Title:
Post by: jiten on 17 May, 2005, 19:11:20
Quotehow can i change so that all op's can use the help menu in ip ranger ?
Change your ParseRanger function to this:
--// Parse Ranger Commands
function ParseRanger(sUser,sData)
local _,_,cmd = string.find(sData,"%b<>%s+%!(%S+)")
if cmd then
if Ranger_Commands[cmd] and sUser.bOperator then
return Ranger_Commands[cmd](sUser,sData)
else
return 0
end
end
end
Best regards
Title:
Post by: GrinSlaW on 17 May, 2005, 20:58:23
tnx m8 :-) it works
Title:
Post by: jiten on 17 May, 2005, 22:02:08
You're welcome...  :]
Title:
Post by: 6Marilyn6Manson6 on 17 May, 2005, 22:45:27
Welcome :P
Title:
Post by: TTB on 18 May, 2005, 17:09:22
nice to know some ppl are trying this script. I have tested it, but it is disabled @ my hub atm (need to do some other things first).
Title:
Post by: Leun on 17 August, 2005, 12:14:02
Hi TTB

I get this little bug;

Syntax \scripts\IP Ranger from Thor 2.0.lua:7: function arguments expected near `='

I'm a newbie here, and I can't get my bug fixed.
Mabie it's my fault......

Hope you can fix it....
Title:
Post by: Scanning on 17 August, 2005, 14:13:19
QuoteOriginally posted by Leun
Hi TTB

I get this little bug;

Syntax \scripts\IP Ranger from Thor 2.0.lua:7: function arguments expected near `='

I'm a newbie here, and I can't get my bug fixed.
Mabie it's my fault......

Hope you can fix it....

Copy the script from

--// IP-Ranger: Thor Add-on ? NightLitch 2004

Not from the top of the page :P
Title:
Post by: bluebear on 17 August, 2005, 16:46:21
TTB, i was wondering what purpose thease 2 lines has in the GetRange() function? (Other than not really being used :p)

local c = ""  

c = "1"
Title:
Post by: Leun on 17 August, 2005, 20:21:12
thnx Scanning

That was a stupid fault.....
But it's running now  :D

Thnx for your help
Title:
Post by: witch on 10 September, 2005, 21:15:51
hola guys nice script, but got this error:

[21:11] Syntax D:\PtokaX\![pz]0.3.3.21.nt.dbg\scripts\BanIpRange.lua:511: unfinished string near `"

   ???????????????????????????????????????????????????????????????????????????'
thx  :))
Title:
Post by: mateci on 10 September, 2005, 22:58:26
QuoteOriginally posted by witch

[21:11] Syntax D:\PtokaX\![pz]0.3.3.21.nt.dbg\scripts\BanIpRange.lua:511: unfinished string near `"

   ???????????????????????????????????????????????????????????????????????????'

i think it is because of c/p of script..


msg=msg.."\r\n   ___________________________________________________________________________
__________________________"
lines must be a line not two.
Title:
Post by: TTB on 12 September, 2005, 02:04:14
QuoteOriginally posted by bluebear
TTB, i was wondering what purpose thease 2 lines has in the GetRange() function? (Other than not really being used :p)

local c = ""  

c = "1"

Hi,

g00d question. I converted the script, I accually don't know why this is... NL made the script, I just converted it ;-)
Title:
Post by: witch on 12 September, 2005, 21:40:51
QuoteOriginally posted by mateci
QuoteOriginally posted by witch

[21:11] Syntax D:\PtokaX\![pz]0.3.3.21.nt.dbg\scripts\BanIpRange.lua:511: unfinished string near `"

   ???????????????????????????????????????????????????????????????????????????'

i think it is because of c/p of script..


msg=msg.."\r\n   ___________________________________________________________________________
__________________________"
lines must be a line not two.
yop u right mate, i removed the double lines and script started to work, till i added some ip ranges to DenyR.dat, than i got this error:

[21:35] Syntax ...]0.3.3.21.nt.dbg\scripts\IP Ranger from Thor 2.0.lua:44: bad argument #1 to `find' (string expected, got nil)
Title:
Post by: mateci on 13 September, 2005, 15:50:07
i will help u if u send DenyR table and when this error is coming(after a command or after a new user connected or after starting script)

thx
Title:
Post by: witch on 13 September, 2005, 16:17:03
QuoteOriginally posted by mateci
i will help u if u send DenyR table and when this error is coming(after a command or after a new user connected or after starting script)

thx
Thx a lot mateci for your replay.

here is DenyR.dat
DenyR = {

["80.xxx.xxx.xxx"] = "80.xxx.xxx.xxx",

}

this error comes when user conected:

[16:05] Syntax ...]0.3.3.21.nt.dbg\scripts\IP Ranger from Thor 2.0.lua:44: bad argument #1 to `find' (string expected, got nil)

thx in advince :)
Title:
Post by: mateci on 13 September, 2005, 18:15:41
U must add ipranges like this


DenyR = {

["160.xxx.xxx.xxx-192.xxx.xxx.xxx"] = {
[1] = "Network Name",
[2] = {
[1] = "[Network Name]",
},
},
}


Change "network name" with your identifier for The iprange( like A University)

or use simply the command


!addrange ip1-ip2 network allow(or deny if you want to add deny)


ip1-ip2                 --//like 160.xxx.xxx.xxx-192.xxx.xxx.xxx
network            --//identifier of range
allow or deny    --//to add where

example

!addrange 160.xxx.xxx.xxx-192.xxx.xxx.xxx Mateci allow


The other commands u can use


help
addrange
delrange
show
addisp
delisp


I hope it will be usefull
Title:
Post by: witch on 13 September, 2005, 21:00:19
yahooo now it's works fine !

but i locked my self and dunno how to unblock it.....lol, so i added DenyR.dat how u says, but i added my own ip range for a test. it blocked me to enter the hub, fine. but than i added defferent ip range insted mine, but damn i still can't log in on hub hehe :) than i added my ip range to AllowR.dat and now it's says that my ISP tag is wrong, but how it's posseble? cose ISP tag that says i'm have to use is seted up on AllowR.dat also. i thout that it's read from AllowR.dat what ISP tag is Allowed for my ip range....but it's not. or what i did wrong mate?


thx a lot mateci for your help and pations  :))
Title:
Post by: mateci on 13 September, 2005, 21:58:11
local ThorTagOK = GetISP(sUser,ISPTAG)

I think this is the problem. I can not find anything about ISPTAG table in script.. (Also dont find how can i fix.. )
Title:
Post by: witch on 14 September, 2005, 17:03:35
ok dude thx a lot for your help anyways, i gona look for another script or maybe u could recomend me some IP Range blocker?

thx  :P
Title:
Post by: mateci on 15 September, 2005, 00:06:52
I dont know any iprange blocker,sorry:(   Im newbie here(and also newbie for lua scripting), so dont see any script about that.
Title:
Post by: uffetjur on 09 October, 2005, 09:21:27
zitat:
-----------------------------------------------------------------------
yahooo now it's works fine !

but i locked my self and dunno how to unblock it.....lol, so i added DenyR.dat how u says, but i added my own ip range for a test. it blocked me to enter the hub, fine. but than i added defferent ip range insted mine, but damn i still can't log in on hub hehe  than i added my ip range to AllowR.dat and now it's says that my ISP tag is wrong, but how it's posseble? cose ISP tag that says i'm have to use is seted up on AllowR.dat also. i thout that it's read from AllowR.dat what ISP tag is Allowed for my ip range....but it's not. or what i did wrong mate?

-----------------------------------------------------------------------

as far as  I rememer Nightlitch used syntax

[ISP]nick for users, and [ISP] must be the one set in ipranger, and theres option to use more then 1 [ISP] for each range:


 !addisp    -   Add isp to range"
Title:
Post by: ohm on 18 October, 2005, 21:38:55
[15:07] Syntax ...nd Settings\login\Desktop\test1\scripts\ipranger.lua:108: attempt to call a nil value

Also how do i make it so this script doesnt have to have isp's in the nick
Title:
Post by: TTB on 19 October, 2005, 16:23:09
QuoteOriginally posted by ohm
[15:07] Syntax ...nd Settings\login\Desktop\test1\scripts\ipranger.lua:108: attempt to call a nil value

Also how do i make it so this script doesnt have to have isp's in the nick

Line 108 is a clear line.... weird! And no isp >>

ISP_Check = 1

shoud be

ISP_Check = 0

grtz
Title:
Post by: TTB on 19 October, 2005, 16:28:49
1st post updated... removed a little bug
Title:
Post by: 6Marilyn6Manson6 on 19 October, 2005, 22:23:32
-----------------------------------------------------------
--// IP-Ranger: Thor Add-on ? NightLitch 2004
--// Converted to LUA5 by TTB
--// Date: 15-05-2005
--// Update by TTB, 19-10-05
-----------------------------------------------------------

Ranger_Name = "-IP-Ranger-"
ISP_Check = 1
ByPassVIP = 1

--// Tables
AllowR = {}
DenyR = {}
RegTable = {}

--// Files
FILE = {
AllowF = "ranges/AllowR.dat",
DenyF = "ranges/DenyR.dat",
}

--// Main Function
function Main()
LoadIPFile(FILE.AllowF)
LoadIPFile(FILE.DenyF)
frmHub:RegBot(Ranger_Name)
end

function ToArrival(curUser,data)
local _,_,whoTo,mes = string.find(data,"$To:%s+(%S+)%s+From:%s+%S+%s+$(.*)")
if (whoTo == Ranger_Name and string.find(mes,"%b<>%s+(.*)")) then
data = string.sub(mes,1,string.len(mes)-1)
ParseRanger(curUser,data)
return 1
end
end

function NewUserConnected(curUser,data)
rIPCheck(curUser)
end

--// Compute IP
function ComputeIP(curIP)
local _,_,a,b,c,d = string.find(curIP, "(%d+).(%d+).(%d+).(%d+)")
return a*16777216 + b*65536 + c*256 + d
end

--// IP-Check Function
function rIPCheck(sUser)
local AllowOK, ARange = GetRange(sUser.sIP, AllowR)
local DenyOK, DRange = GetRange(sUser.sIP, DenyR)
if ByPassVIP==1 and sUser.iProfile == 2 then return 1 end
if DenyOK==1 then
sUser:SendData(Ranger_Name, "Your IP ( "..sUser.sIP.." ) is Denyed here...")
sUser:SendData(Ranger_Name, "*** Disconnected...")
sUser:Disconnect()
return 1
else
if AllowOK==1 then
local ISPTagOK = GetISP(sUser,AllowR[ARange][2])
if ISPTagOK==0 and ISP_Check==1 then
SendErrorTag(sUser,ARange)
elseif ISPTagOK == 2 and ISP_Check==1 then
SendErrorLevel(sUser,ARange)
end
else
sUser:SendData(Ranger_Name, "Your IP ( "..sUser.sIP.." ) is not Allowed here...")
sUser:SendData(Ranger_Name, "*** Disconnected...")
sUser:Disconnect()
return 1
end
end
end

--// Send Error Message
function SendErrorTag(sUser,ARange)
sUser:SendData(Ranger_Name, "Your ISP Tag is not Allowed here...")
sUser:SendData(Ranger_Name, "Allowed ISP Tag's for you:\r\n\t"..GetTags(AllowR[ARange][2],0).."\r\n")
sUser:SendData(Ranger_Name, "*** Disconnected...")
sUser:Disconnect()
end

--// Check Range
function GetRange(ip,table)
local _,_,a,b,c,d = string.find(ip, "(%d*).(%d*).(%d*).(%d*)")
if ( tonumber(a) and tonumber(b) and tonumber(c) and tonumber(d) ) then
local uip = ComputeIP(ip)
if uip then
local c = ""
for r,i in table do
local _,_,range1,range2 = string.find(r, "(.*)-(.*)")
range1 = ComputeIP(range1)
range2 = ComputeIP(range2)
if uip>=range1 and uip<=range2 then
c = "1"
return 1,r
end
end
end
end
end

--// Check ISP Tag
function GetISP(nick,table)
local _,_,isp,name = string.find(string.lower(nick.sName), "^(%[%S+%])(%S+)")
check = 0
if isp~=nil then
for key,tags in table do
if tonumber(key) then
tags = string.lower(tags)
if isp==tags then
check = 1
end
end
end
if check==1 then
return 1
elseif check==0 then
return 0
else
return 0
end
else
return 0
end
end

--// Get Tags
function GetTags(table,num)
local line = ""
local t = ""
for id, isp in table do
if not tonumber(isp) then
line = line..t..isp
if num==1 then
if t == "" then t = "," end
else
if t == "" then t = " " end
end
end
end
return line
end

--// Parse Ranger Commands
function ParseRanger(sUser,sData)
local _,_,cmd = string.find(sData,"%b<>%s+%!(%S+)")
if cmd then
if Ranger_Commands[cmd] and sUser.iProfile==0 then
return Ranger_Commands[cmd](sUser,sData)
else
return 0
end
end
end

--// Ranger Commands
Ranger_Commands = {
["addrange"] = function(sUser,sData) return DoAddRange(sUser,sData) end,
["delrange"] = function(sUser,sData) return DoDelRange(sUser,sData) end,
["show"] = function(sUser,sData) return DoShowRange(sUser,sData) end,
["addisp"] = function(sUser,sData) return DoAddISP(sUser,sData) end,
["delisp"] = function(sUser,sData) return DoDelISP(sUser,sData) end,
["help"] = function(sUser,sData) return DoIPHelp(sUser,sData) end,
}

--// AddRange Function
function DoAddRange(sUser,sData)
local _,_,range,network,value = string.find(sData,"%b<>%s+%S+%s+(%S+-%S+)%s+(%S+)%s+(%S+)")
if range==nil or network==nil or value==nil then
sUser:SendPM(Ranger_Name,"Syntax: !addrange ")
return 1
end
if string.lower(value)=="allow" then
if AllowR[range] then
sUser:SendPM(Ranger_Name,range.." is already in Allow File...")
return 1
end
AllowR[range] = {network, {"["..network.."]"}}
sUser:SendPM(Ranger_Name,"Range: ( "..range.." ) - Network: "..network.." is added to Allow File")
SaveIPFile(AllowR , "AllowR", FILE.AllowF)
return 1
elseif string.lower(value)=="deny" then
if DenyR[range] then
sUser:SendPM(Ranger_Name,range.." is already in Deny File...")
return 1
end
DenyR[range] = {network,{"["..network.."]"}}
sUser:SendPM(Ranger_Name,"Range: ( "..range.." ) - Network: "..network.." is added to Deny File")
SaveIPFile(DenyR , "DenyR", FILE.DenyF)
return 1
else
sUser:SendPM(Ranger_Name,"Wrong arg input! ( allow ) or ( deny ) not ( "..value.." )")
return 1
end
end

--// DelRange Function
function DoDelRange(sUser,sData)
local _,_,range,value = string.find(sData,"%b<>%s+%S+%s+(%S+-%S+)%s+(%S+)")
if range==nil or value==nil then
sUser:SendPM(Ranger_Name,"Syntax: !delrange ")
return 1
end
if string.lower(value)=="allow" then
if AllowR[range] then
AllowR[range] = nil
sUser:SendPM(Ranger_Name,"Range: ( "..range.." ) is deleted from Allow File.")
SaveIPFile(AllowR , "AllowR", FILE.AllowF)
return 1
else
sUser:SendPM(Ranger_Name,"Range: ( "..range.." ) is not found in Allow File.")
return 1
end
elseif string.lower(value)=="deny" then
if DenyR[range] then
DenyR[range] = nil
sUser:SendPM(Ranger_Name,"Range: ( "..range.." ) is deleted from Deny File.")
SaveIPFile(DenyR , "DenyR", FILE.DenyF)
return 1
else
sUser:SendPM(Ranger_Name,"Range: ( "..range.." ) is not found in Deny File.")
return 1
end
else
sUser:SendPM(Ranger_Name,"Wrong arg input! ( allow ) or ( deny ) not ( "..value.." )")
return 1
end
end

--// Show Ranges Function
function DoShowRange(sUser,sData)
local _,_,v = string.find(sData, "%b<>%s+%S+%s+(%S+)")
local msg,c = "\r\n", 0
if v==nil then
sUser:SendPM(Ranger_Name, "Syntax: !show ")
return 1
end
local t,n = "",""
if string.lower(v)=="allow" then
t = AllowR
n = "Allow Range List"
elseif string.lower(v)=="deny" then
t = DenyR
n = "Deny Range List"
else
sUser:SendPM(Ranger_Name, "Parameter error: not "..v.." !!")
return 1
end
msg=msg.."\r\n\t ? ? ? "..n.." ? ? ?"
msg=msg.."\r\n ???????????????????????????????????????????????????????????????????????????
??????????????????????????"
msg=msg.."\r\n\t Network's Range's Isp's"
msg=msg.."\r\n\t ???????? ??????? ???? "
for range,index in t do
table.sort(t)
c = c +1
msg=msg.."\r\n\t"..index[1]..""..string.rep("\t", 60/(20+string.len(index[1])))..""..range..""..string.rep("\t", 70/(8+string.len(range)))..""..GetTags(index[2],0)
end
msg=msg.."\r\n ___________________________________________________________________________
__________________________"
sUser:SendPM(Ranger_Name,msg)
return 1
end

--// Add ISP Function
function DoAddISP(sUser,sData)
local _,_,range,i1,i2,i3,i4,i5,i6,i7,i8 = string.find(sData, "%b<>%s+%S+%s+(%S+-%S+)%s*(%S*)%s*(%S*)%s*(%S*)%s*(%S*)%s*(%S*)%s*(%S*)%s*(%S*)%s*(%S*)")
if range==nil then
sUser:SendPM(Ranger_Name, "Syntax: !addisp ")
return 1
end
if i1=="" then i1 = nil end
if i2=="" then i2 = nil end
if i3=="" then i3 = nil end
if i4=="" then i4 = nil end
if i5=="" then i5 = nil end
if i6=="" then i6 = nil end
if i7=="" then i7 = nil end
if i8=="" then i8 = nil end
if AllowR[range] then
AllowR[range] = {AllowR[range][1], {GetTags(AllowR[range][2],1), i1,i2,i3,i4,i5,i6,i7,i8},}
sUser:SendPM(Ranger_Name, "\r\n\r\n?ISP: ( "..i1.." ) have been added to: \r\n\r\n?Range: "..range.." \r\n?Network: "..AllowR[range][1].." \r\n?ISP's: "..GetTags(AllowR[range][2],0).." ")
SaveIPFile(AllowR , "AllowR", FILE.AllowF)
return 1
else
sUser:SendPM(Ranger_Name, "?Range: ( "..range.." ) is not found in database !! ")
return 1
end
end

--// Del ISP Function
function DoDelISP(sUser,sData)
local _,_,range,isp = string.find(sData, "%b<>%s+%S+%s+(%S+-%S+)%s+(%S+)")
if range==nil or isp==nil then
sUser:SendPM(Ranger_Name, "Syntax: !delisp ")
return 1
end
if AllowR[range] then
local check = 0
for i = 1,table.getn(AllowR[range][2]) do
if isp==AllowR[range][2][i] then
AllowR[range][2][i] = nil
check = 1
end
end
if check==1 then
sUser:SendPM(Ranger_Name, "\r\n\r\n?ISP: ( "..isp.." ) have been removed from: \r\n\r\n?Range: "..range.." \r\n?Network: "..AllowR[range][1].." \r\n?ISP's: "..GetTags(AllowR[range][2],0).." ")
SaveIPFile(AllowR , "AllowR", FILE.AllowF)
return 1
else
sUser:SendPM(Ranger_Name, "?ISP: ( "..isp.." ) is not found in Range: ( "..range.." ) ")
return 1
end
else
sUser:SendPM(Ranger_Name, "?Range: ( "..range.." ) is not found in database !! ")
return 1
end
end

function DoIPHelp(sUser,sData)
local msg = "\r\n"
msg=msg.."\r\n\t ? ? ? IP-Ranger Help ? ? ?"
msg=msg.."\r\n ???????????????????????????????????????????????????????????????????????????
??????????????????????????"
msg=msg.."\r\n\t !addrange - Add range to specific type"
msg=msg.."\r\n\t !delrange - Del range to specific type"
msg=msg.."\r\n\t !addisp - Add isp to range"
msg=msg.."\r\n\t !delisp - Del isp to range"
msg=msg.."\r\n\t !show - Show specific list"
msg=msg.."\r\n ___________________________________________________________________________
__________________________"
sUser:SendPM(Ranger_Name,msg)
return 1
end

function Serialize(tTable, sTableName, hFile, sTab)
sTab = sTab or "";
hFile:write(sTab..sTableName.." = {\n" );
for key, value in tTable do
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
hFile:write(sTab.."}");
end

function LoadIPFile(file)
local handle = io.open(file,"r")
if (handle ~= nil) then
dofile(file)
handle:flush()
handle:close()
end
end


function SaveIPFile(table,tablename,filename)
local hFile = io.open (filename,"w");
Serialize(table, tablename, hFile);
hFile:close()
end

now it is ok :P. C ya
Title: Re: IP Ranger from Thor 2.0
Post by: Alexinno on 17 June, 2006, 22:00:03
sorry but for me it's not working

[23:55] Syntax C:\Program Files\hub\scripts\iprange.lua:252: unfinished string near `"

??????????????????????????????????????????????????????????????????????????? '


:( 

Title: Re: IP Ranger from Thor 2.0
Post by: jiten on 18 June, 2006, 09:46:53
Quote from: Alexinno on 17 June, 2006, 22:00:03
sorry but for me it's not working

Well, you just need to replace every occurrence of this type:

msg=msg.."\r\n ???????????????????????????????????????????????????????????????????????????
??????????????????????????"


with this:

msg = msg.."\r\n "..string.rep("?", 100)
Title: Re: IP Ranger from Thor 2.0
Post by: Alexinno on 18 June, 2006, 11:50:56
10q, now it works ;)