FilesChecker.lua - please help translating to lua 5
 

FilesChecker.lua - please help translating to lua 5

Started by FrancoS, 30 June, 2005, 09:44:36

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

FrancoS

I was using succesfully this script

I translated it, but I get an error at the red line you see below

error is:
[09:41] Syntax [string "-- vim:ts=4:sw=4:noet..."]:148: unexpected symbol near `%'

I'm not strong enough in lua to fix it.
Please also check my job, thank you.

Robert

-- script begin

-- vim:ts=4:sw=4:noet
-- FileChecker.lua, rewrite of a 'SearchKick' bot for PtokaX by ptaczek and
-- Leon (called The Illegalist)
-- version 1.0 for DCH++
-- by Sedulus 20030910, requested by BSOD2600
-- 20030919: 1.0
--
-- Translated back to PtokaX (OpiumVolage 9 Sept. 2003)
-- Added timer for automating search
--
-- (using more mem (3 tables, instead of one) but less cpu)
--
-- searches for all terms in the SearchFor table,
-- sends a message to the user that he/she shares the file, with the response
-- message.
-- set disconnectUser to 1 if you want the user disconnected as well (not
-- recommended, as bots always seem to find a way to misinterpret data ;) )
--
-- spaces in the SearchFor table will be converted to dollar's, but they will
-- (purposely) only match if there's a space in the result later.
-- so "a b" won't match "b a" or "aXXXb"

--// useful stuff
botName = "FileChecker"
disconnectUser = 1 -- disconnect the user, nil = don't
-- opchatName = "-TropiCo-" -- set opchat nick here if you want messages to opchat instead of mainchat, else nil
opchatName = nil -- set opchat nick here if you want messages to opchat instead of mainchat, else nil
mb = 1024 * 1024
gb = 1024 * mb
-- Timer value, will send search for 1 of the file on all users at each timer
timerValue = 10*1000 -- Every 10 seconds (higher value will reduce load)
useTimer = 1 -- set to 1 to enable timer functions
counter = 1
--// do not modify this table, lookup the meanings in the $Search section in the protocol documentation
SearchTypes = {
   ANY = 1,
   AUDIO = 2,
   COMPRESSED = 3,
   DOCUMENT = 4,
   EXECUTABLE = 5,
   IMAGE = 6,
   VIDEO = 7,
   FOLDER = 8, -- do not use FOLDER's! the $SR's are formatted differently
}

st = SearchTypes
--// MODIFY THIS TABLE <-------
--      { searchType, words[, minimumSize[, regexMatch]] }
SearchFor = {
   ["Please don't share (pre)teen/incest/sick porn"] = {
      { st.IMAGE, "preteen" },
      { st.VIDEO, "preteen" },
      { st.IMAGE, "incest" },
      { st.VIDEO, "incest" },
      { st.IMAGE, "underage" },
      { st.VIDEO, "underage" },
      { st.IMAGE, "teenage sex" },
      { st.VIDEO, "teenage sex" },
   },
   ["Please don't share ANY installed application nor any UNZIPPED installer!"] = {
      { st.ANY, "explorer.scf" },
      { st.ANY, "explore.ex_" },
      { st.ANY, "cd_clint.dll" },
      { st.EXECUTABLE, "express msimn.exe", 0, "express\\msimn%.exe$" },
      { st.EXECUTABLE, "IEXPLORE.EXE" },
      { st.ANY, "bfdist.vlu" },
      { st.ANY, "War3Inst.log" },
      { st.ANY, "ut2003.log" },
      { st.EXECUTABLE, "NFSHP2.exe" },
      { st.ANY, "avp2.rez" },
      { st.ANY, "ntuser.dat" },
      { st.EXECUTABLE, "winword.exe" },
      { st.ANY, "sav", 0, "%.sav$" },
      { st.ANY, "dll", 0, "%.dll$" },
      { st.ANY, "ex_", 0, "%.ex_$" },
      { st.EXECUTABLE, "setup.exe", 0, "\\setup%.exe$" },
   },
   ["Do not share INCOMPLETE downloads!"] = {
      { st.ANY, "antifrag", 0, "antifrag$" },
      { st.ANY, "incomplete" },
      { st.ANY, ".unfinished" },
      { st.ANY, "download dat", 0, "download[0-9]+%.dat$" },
   },
   ["No, we don't allow uncompressed DVD's in here. Please remove all your VOB files"] = {
      { st.ANY, "VTS_01_0.VOB" },
   },
   ["This hub is for MP3 files only. Be sure to share ONLY mp3 files."] = {
      { st.ANY, ".avi" },
      { st.ANY, ".mpg" },
      { st.ANY, ".mov" },
      { st.ANY, ".iso" },
      { st.ANY, ".bin" },
   },
   ["Please do not share large WAV files"] = {
      { st.AUDIO, ".wav", 30*mb, "wav$" },
   },
   ["If you're sharing copies of your files to increase your share size, we are on to you"] = {
      { st.ANY, "copy of", 30*mb, "\\Copy of" },
      { st.ANY, "kopie van", 30*mb, "\\Kopie van" },
      { st.ANY, "copia", 30*mb, "\\Kopie van" },
   },
--   ["Please do not share files greater than 400MB"] = {
--      { st.ANY, ".", 400*mb },
--   },
}

--// convert the tables
SearchTable = {}
ResultTable = {}

function Main()
   frmHub:EnableSearchData(1)
   botLen = string.len( botName )
   local i = 0 -- add the serial botnames in here as well.. so the user doesn't think he is flooded by one person
   for k,v in SearchFor do
      for _,search in v do
         -- add $Search
         local s = "$Search Hub:"..botName..i.." "
         if search[3] then
            s = s.."T?F?"..search[3]
         else
            s = s.."F?F?0"
         end
         s = s.."?"..search[1].."?"..string.gsub( search[2], " ", "$" ).."|"
         table.insert( SearchTable, s )
         -- add $SR match
         local idx = string.lower( search[2] )
         ResultTable[idx] = { msg = k }
         if search[4] then ResultTable[idx].regex = string.lower( search[4] ) end
         -- next..
         i = i + 1
      end
   end
   st, SearchTypes, SearchFor = nil, nil, nil

   -- set options
   if opchatName then
      messageFunc = SendToOps
   else
      messageFunc = SendPmToOps
      opchatName = botName
   end
   if useTimer then SetTimer(timerValue) StartTimer() end
end

-- on new user
function NewUserConnected( client )
   table.foreachi(SearchTable, function(_, v) %client:SendData( v ) end)
end

-- on $SR
function DataArrival( client, line )
   local match = nil
   if string.sub( line, 1, 4 ) == "$SR " then
      -- test if it was a result to us only
      local ret,c,to = string.find( line, "\005([^\005|]*)|$" )
      if ret and string.sub( to, 1, botLen ) == botName then
         local ret,c,file,size = string.find( line, "^%$SR [^ ]+ ([^\005]*)\005([0-9]+) " )
         if ret then
            file = string.lower( file )
            for k,v in ResultTable do
               if ( v.regex and string.find( file, v.regex ) ) or ( not v.regex and string.find( file, k, 1, 1 ) ) then
                  match = 1
--                  warn( client, file.." ("..dchpp.formatBytes( size ).." ("..size.."))", v.msg )
                  warn( client, file.." ("..size..")", v.msg )
               end
            end
         end
      end
   end
   -- disconnect user
   if match and disconnectUser and not client.bOperator then
      client:SendData( "<"..botName.."> You are being kicked" )
      client:Disconnect()
      return 1
   end
end

function warn( client, file, response )
   -- send message to user
   client:SendData( "<"..botName.."> You are sharing the following file: "..file..": "..response )
   if client.bOperator then return end
   message = client.sName.." shares: "..file
   -- send message to all Operators
   -- messageFunc( opchatName, message )
end

function OnTimer()
   if SearchTable.n < 1 then return end
   SendToAll(SearchTable[counter])
   counter = counter + 1
   if counter > SearchTable.n then counter =1 end
end

-- script end


jiten

If I'm not wrong, this script has already been converted to Lua 5. Search for "filechecker.lua" and you should find it.

Cheers

FrancoS

#2
Now it works fine

Quotethis is for coders:[/i]

I see the old issue is always there, not fixed yet ---> if the user is passive... it is not disconnected...

I've added one .avi file and

using dc++ search-spy and setting up myself as passive... I see the searches coming from the script... but I'm not being disconnected, while as active I'm disconnected..

Do you know why?



-- script begin

-- vim:ts=4:sw=4:noet
-- FileChecker.lua, rewrite of a 'SearchKick' bot for PtokaX by ptaczek and
-- Leon (called The Illegalist)
-- version 1.0 for DCH++
-- by Sedulus 20030910, requested by BSOD2600
-- 20030919: 1.0
--
-- Translated back to PtokaX (OpiumVolage 9 Sept. 2003)
-- Added timer for automating search
--
-- (using more mem (3 tables, instead of one) but less cpu)
--
-- searches for all terms in the SearchFor table,
-- sends a message to the user that he/she shares the file, with the response
-- message.
-- set disconnectUser to 1 if you want the user disconnected as well (not
-- recommended, as bots always seem to find a way to misinterpret data ;) )
--
-- spaces in the SearchFor table will be converted to dollar's, but they will
-- (purposely) only match if there's a space in the result later.
-- so "a b" won't match "b a" or "aXXXb"

--// useful stuff
botName = "FileChecker"
disconnectUser = 1 -- disconnect the user, nil = don't
-- opchatName = "-TropiCo-" -- set opchat nick here if you want messages to opchat instead of mainchat, else nil
opchatName = nil -- set opchat nick here if you want messages to opchat instead of mainchat, else nil
mb = 1024 * 1024
gb = 1024 * mb
-- Timer value, will send search for 1 of the file on all users at each timer
timerValue = 10*1000 -- Every 10 seconds (higher value will reduce load)
useTimer = 1 -- set to 1 to enable timer functions
counter = 1
--// do not modify this table, lookup the meanings in the $Search section in the protocol documentation
SearchTypes = {
   ANY = 1,
   AUDIO = 2,
   COMPRESSED = 3,
   DOCUMENT = 4,
   EXECUTABLE = 5,
   IMAGE = 6,
   VIDEO = 7,
   FOLDER = 8, -- do not use FOLDER's! the $SR's are formatted differently
}

st = SearchTypes
--// MODIFY THIS TABLE <-------
--      { searchType, words[, minimumSize[, regexMatch]] }
SearchFor = {
   ["Please don't share (pre)teen/incest/sick porn"] = {
      { st.IMAGE, "preteen" },
      { st.VIDEO, "preteen" },
      { st.IMAGE, "incest" },
      { st.VIDEO, "incest" },
      { st.IMAGE, "underage" },
      { st.VIDEO, "underage" },
      { st.IMAGE, "teenage sex" },
      { st.VIDEO, "teenage sex" },
   },
   ["Please don't share ANY installed application nor any UNZIPPED installer!"] = {
      { st.ANY, "explorer.scf" },
      { st.ANY, "explore.ex_" },
      { st.ANY, "cd_clint.dll" },
      { st.EXECUTABLE, "express msimn.exe", 0, "express\\msimn%.exe$" },
      { st.EXECUTABLE, "IEXPLORE.EXE" },
      { st.ANY, "bfdist.vlu" },
      { st.ANY, "War3Inst.log" },
      { st.ANY, "ut2003.log" },
      { st.EXECUTABLE, "NFSHP2.exe" },
      { st.ANY, "avp2.rez" },
      { st.ANY, "ntuser.dat" },
      { st.EXECUTABLE, "winword.exe" },
      { st.ANY, "sav", 0, "%.sav$" },
      { st.ANY, "dll", 0, "%.dll$" },
      { st.ANY, "ex_", 0, "%.ex_$" },
      { st.EXECUTABLE, "setup.exe", 0, "\\setup%.exe$" },
   },
   ["Do not share INCOMPLETE downloads!"] = {
      { st.ANY, "antifrag", 0, "antifrag$" },
      { st.ANY, "incomplete" },
      { st.ANY, ".unfinished" },
      { st.ANY, "download dat", 0, "download[0-9]+%.dat$" },
   },
   ["No, we don't allow uncompressed DVD's in here. Please remove all your VOB files"] = {
      { st.ANY, ".VOB" },
   },
   ["This hub is for MP3 files only. Be sure to share ONLY mp3 files."] = {
      { st.ANY, ".avi" },
      { st.ANY, ".mpg" },
      { st.ANY, ".mov" },
      { st.ANY, ".iso" },
      { st.ANY, ".bin" },
   },
   ["Please do not share large WAV files"] = {
      { st.AUDIO, ".wav", 30*mb, "wav$" },
   },
   ["If you're sharing copies of your files to increase your share size, we are on to you"] = {
      { st.ANY, "copy of", 30*mb, "\\Copy of" },
      { st.ANY, "kopie van", 30*mb, "\\Kopie van" },
      { st.ANY, "copia", 30*mb, "\\Kopie van" },
   },
--   ["Please do not share files greater than 400MB"] = {
--      { st.ANY, ".", 400*mb },
--   },
}

--// convert the tables
SearchTable = {}
ResultTable = {}

function Main()

   --frmHub:EnableSearchData(1)

   --frmHub:RegBot(botName)

   botLen = string.len( botName )

   local i = 0 -- add the serial botnames in here as well.. so the user doesn't think he is flooded by one person

   for k,v in SearchFor do

      for _,search in v do

         -- add $Search

         local s = "$Search Hub:"..botName..i.." "

         if search[3] then

            s = s.."T?F?"..search[3]

         else

            s = s.."F?F?0"

         end

         s = s.."?"..search[1].."?"..string.gsub( search[2], " ", "$" ).."|"

         table.insert( SearchTable, s )

         -- add $SR match

         local idx = string.lower( search[2] )

         ResultTable[idx] = { msg = k }

         if search[4] then ResultTable[idx].regex = string.lower( search[4] ) end

         -- next..

         i = i + 1

      end

   end

   st, SearchTypes, SearchFor = nil, nil, nil


   -- set options

   if opchatName then

      messageFunc = SendPmToOps

   else

      messageFunc = SendPmToOps

      opchatName = botName

   end

   if useTimer then SetTimer(timerValue) StartTimer() end

end

-- on new user
function NewUserConnected( client )
   table.foreachi(SearchTable, function(_, v) client:SendData( v ) end)
end

-- on $SR
function SRArrival( client, line )
   local match = nil
   if string.sub( line, 1, 4 ) == "$SR " then
      -- test if it was a result to us only
      local ret,c,to = string.find( line, "\005([^\005|]*)|$" )
      if ret and string.sub( to, 1, botLen ) == botName then
         local ret,c,file,size = string.find( line, "^%$SR [^ ]+ ([^\005]*)\005([0-9]+) " )
         if ret then
            file = string.lower( file )
            for k,v in ResultTable do
               if ( v.regex and string.find( file, v.regex ) ) or ( not v.regex and string.find( file, k, 1, 1 ) ) then
                  match = 1
--                  warn( client, file.." ("..dchpp.formatBytes( size ).." ("..size.."))", v.msg )
                  warn( client, file.." ("..size..")", v.msg )
               end
            end
         end
      end
   end
   -- disconnect user
   if match and disconnectUser and not client.bOperator then
      client:SendData( "<"..botName.."> You are being kicked" )
      client:Disconnect()
      return 1
   end
end

function warn( client, file, response )
   -- send message to user
   client:SendData( "<"..botName.."> You are sharing the following file: "..file..": "..response )
   if client.bOperator then return end
   message = client.sName.." shares: "..file
   -- send message to all Operators
   -- messageFunc( opchatName, message )
end

function OnTimer()

   if table.getn(SearchTable) < 1 then return end

   SendToAll(SearchTable[counter])

   counter = counter + 1

   if counter > table.getn(SearchTable) then counter =1 end

end

-- script end

SMF spam blocked by CleanTalk