is it possible to change the blocker script to the following tasks...
all user are blocked to download from the user "TEST"
only when an op grand another spezified user to download... for example "TEST2" by command !grand
So ONLY the user "TEST2" can download something from "TEST" and all other not!
thx for help
are u looking for something client side for your own share? or stand alone ptokax lua script?
-BH
lua script
Hi,
Here you go...
--## Upload Blocker
--## Requested by charlie
--## Made by nErBoS
--## Commands (only for OPs):
--## !addblock -- Will block uploads from the user (only OPs can download from him)
--## !delblock -- Will remove the block from the user uploads
--## !allow -- Will allow the user "nick" to make downloads from the user "who"
--## !restrict -- Will remove the allow from the user "nick" to make downloads from the user "who"
--## !blocked -- Will show all user that are blocked and who is allowed to make downloads from him
sBot = "U-Blocker"
arrUser = {}
fUser = "user.dat"
--## Configuration ##--
uLaterPtokax = 0 -- Choose 0 if you are using a Ptokax version 0.3.3.0 or higher
-- Choose 1 if you are using a Ptokax version lower then 0.3.3.0
--## END ##--
function Main()
frmHub:RegBot(sBot)
frmHub:EnableFullData(1)
LoadFromFile(fUser)
end
function OnExit()
SaveToFile(fUser , arrUser , "arrUser")
end
function DataArrival(user, data)
if (strsub(data,1,1) == "<" or strsub(data,1,5+strlen(sBot)) == "$To: "..sBot) then
data = strsub(data,1,strlen(data)-1)
s,e,cmd = strfind(data, "%b<>%s+(%S+)")
if (cmd == "!addblock" and user.bOperator) then
local s,e,nick = strfind(data, "%b<>%s+%S+%s+(%S+)")
if (nick == nil) then
user:SendPM(sBot, "Syntax Error, !addblock , you must write a nick.")
elseif (type(arrUser[strlower(nick)]) == "table") then
user:SendPM(sBot, "The user "..nick.." is already blocked.")
else
arrUser[strlower(nick)] ={}
if (uLaterPtokax == 1) then
OnExit()
end
user:SendPM(sBot, "The user has been added a block. Now only OPs can download from him.")
user:SendPM(sBot, "If you want a user to download from him just use !allow.")
end
return 1
elseif (cmd == "!delblock" and user.bOperator) then
local s,e,nick = strfind(data, "%b<>%s+%S+%s+(%S+)")
if (nick == nil) then
user:SendPM(sBot, "Syntax Error, !delblock , you must write a nick.")
elseif (arrUser[strlower(nick)] == nil) then
user:SendPM(sBot, "The user "..nick.." is not blocked.")
else
arrUser[strlower(nick)] = nil
if (uLaterPtokax == 1) then
OnExit()
end
user:SendPM(sBot, "The user has been removed the block. Now anyone can download from him.")
end
return 1
elseif (cmd == "!allow" and user.bOperator) then
local s,e,who,nick = strfind(data, "%b<>%s+%S+%s+(%S+)%s+(%S+)")
if (nick == nil or who == nil) then
user:SendPM(sBot, "Syntax Error, !allow , you must both nicks.")
elseif (arrUser[strlower(who)] == nil) then
user:SendPM(sBot, "The user "..who.." is not blocked.")
elseif (arrUser[strlower(who)][strlower(nick)] ~= nil) then
user:SendPM(sBot, "The user "..nick.." is already allow to download from "..who)
else
arrUser[strlower(who)][strlower(nick)] = user.sName
if (uLaterPtokax == 1) then
OnExit()
end
user:SendPM(sBot, "The user "..nick.." has been allowed to download from "..who)
end
return 1
elseif (cmd == "!restrict" and user.bOperator) then
local s,e,who,nick = strfind(data, "%b<>%s+%S+%s+(%S+)%s+(%S+)")
if (nick == nil or who == nil) then
user:SendPM(sBot, "Syntax Error, !restrict , you must both nicks.")
elseif (arrUser[strlower(who)] == nil) then
user:SendPM(sBot, "The user "..who.." is not blocked.")
elseif (arrUser[strlower(who)][strlower(nick)] == nil) then
user:SendPM(sBot, "The user "..nick.." is not allow to download from "..who)
else
arrUser[strlower(who)][strlower(nick)] = nil
if (uLaterPtokax == 1) then
OnExit()
end
user:SendPM(sBot, "The user "..nick.." is no more allowed to download from "..who)
end
return 1
elseif (cmd == "!blocked" and user.bOperator) then
local sTmp,usr,aux,usr2 = "The Users the have uploads blocked:"
for usr, aux in arrUser do
sTmp = sTmp.."\r\n\r\n--## Users that can download from "..usr..":\r\n\r\n"
for usr2, aux in arrUser[usr] do
sTmp = sTmp.."\t"..usr2.." Allowed by: "..aux.."\r\n"
end
end
user:SendPM(sBot, sTmp)
end
end
if (strsub(data,1,12) == "$ConnectToMe" and not user.bOperator) then
local s,e,from,toip = strfind(data, "$ConnectToMe%s+(%S+)%s+(%d+%.%d+%.%d+%.%d+):")
if (type(arrUser[strlower(from)]) == "table") then
if (CheckForPermission(arrUser[strlower(from)],toip) == 0) then
user:SendPM(sBot, "You can't download from "..from..". If you have any doubt talk with a OP.")
return 1
end
end
end
if (strsub(data,1,15) == "$RevConnectToMe" and not user.bOperator) then
local s,e,to,from = strfind(data, "$RevConnectToMe%s+(%S+)%s+(%S+)")
if (type(arrUser[strlower(from)]) == "table") then
if (arrUser[strlower(from)][strlower(to)] == nil) then
user:SendPM(sBot, "You can't download from "..from..". If you have any doubt talk with a OP.")
return 1
end
end
end
end
function CheckForPermission(table,ip)
local usr,aux
for usr, aux in table do
if (GetItemByName(usr) ~= nil and GetItemByName(usr).sIP == ip) then
return 1
end
end
return 0
end
function Serialize(tTable, sTableName, sTab)
assert(tTable, "tTable equals nil");
assert(sTableName, "sTableName equals nil");
assert(type(tTable) == "table", "tTable must be a table!");
assert(type(sTableName) == "string", "sTableName must be a string!");
sTab = sTab or "";
sTmp = ""
sTmp = sTmp..sTab..sTableName.." = {\n"
for key, value in tTable do
local sKey = (type(key) == "string") and format("[%q]",key) or format("[%d]",key);
if(type(value) == "table") then
sTmp = sTmp..Serialize(value, sKey, sTab.."\t");
else
local sValue = (type(value) == "string") and format("%q",value) or tostring(value);
sTmp = sTmp..sTab.."\t"..sKey.." = "..sValue
end
sTmp = sTmp..",\n"
end
sTmp = sTmp..sTab.."}"
return sTmp
end
function SaveToFile(file , table , tablename)
writeto(file)
write(Serialize(table, tablename))
writeto()
end
function LoadFromFile(file)
if (readfrom(file) ~= nil) then
readfrom(file)
dostring(read("*all"))
readfrom()
end
end
Best regards, nErBoS
nErBoS thx...
great work
nice nErBoS.. i made one.. but it isn't that fancy :p
bleh:
!grant
add user to dl.. once they connect it removes them from
the list. so they can get filelist and dl shit till they lose
connection. then they need to be re-granted.(this was
on purpose)
-----------------------------------------------
FileServer = "?TeStNiCk" --//the nick w/ the files
------------------------------------------------
function Main()
frmHub:EnableFullData(1)
end
allowTable={}
function DataArrival(user, data)
if (strsub(data, 1, 1) == "<" ) then
if user.iProfile >=1 then return end
data=strsub(data,1,strlen(data)-1)
_,_,cmd=strfind(data, "%b<>%s+(%S+)")
_,_,nick=strfind(data, "%b<>%s+%S+%s+(%S+)")
if (cmd == "!grant") then
if nick == nil then
user:SendData("***Error: nick required. Syntax: !grant ***|")
else
allowTable[nick] = 1
user:SendData("***"..nick.." added. 1 connection to "..FileServer.." allowed.***|")
end
end
elseif (strsub(data, 1, 15) == "$RevConnectToMe") then
local _,_,who = strfind(data, "$RevConnectToMe%s+%S+%s+(%S+)|")
if (who == FileServer) then
if allowTable[user.sName] then
allowTable[user.sName] = nil
else
user:SendData("***Error: You must get permission to be able to download from "..FileServer..".***|")
return 1
end
end
elseif (strsub(data, 1, 12) == "$ConnectToMe") then
local _,_,who = strfind(data, "$ConnectToMe%s+(%S+)%s+.*|")
if (who == FileServer) then
if allowTable[user.sName] then
allowTable[user.sName] = nil
else
user:SendData("***Error: You must get permission to be able to download from "..FileServer..".***|")
return 1
end
end
end
end
great learning experience to make it at any rate. ;)
-BH
Hi,
Simple but good :D keep it going.
Best regards, nErBoS