PtokaX forum

Archive => Archived 4.0 boards => Request for Lua 4 scripts => Topic started by: charlie on 23 August, 2004, 21:04:24

Title: script need...
Post by: charlie on 23 August, 2004, 21:04:24
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
Title:
Post by: BottledHate on 23 August, 2004, 22:14:44
are u looking for something client side for your own share? or stand alone ptokax lua script?

-BH
Title:
Post by: charlie on 23 August, 2004, 22:28:57
lua script
Title:
Post by: nErBoS on 23 August, 2004, 22:37:17
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
Title:
Post by: charlie on 23 August, 2004, 23:21:15
nErBoS thx...

great work
Title:
Post by: BottledHate on 24 August, 2004, 00:24:42
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
Title:
Post by: nErBoS on 24 August, 2004, 00:39:39
Hi,

Simple but good :D keep it going.

Best regards, nErBoS