Author Topic: Tackling errors in modified version of Release/Request script by Daywalker  (Read 2665 times)

0 Members and 1 Guest are viewing this topic.

Offline RPGamer

  • Junior Member
  • **
  • Posts: 15
  • Karma: +0/-0
There are some errors popping when I try to put a release (and possibly also for request). The genre table is working fine, there are no errors when new genres are added (now I haven't put any more genres). The error keeps showing up every minute and to tackle the problem I have to stop the script, manually delete the release and request tables and then restart it. Can someone rectify or point out the exact cause of error?

Pasting error messages being shown:
Quote
\Ptokax\scripts\ReleaseBot_Daywalker.lua:756: attempt to concatenate field 'Release' (a nil value)
stack traceback:
Ptokax\scripts\ReleaseBot_Daywalker.lua:756: in function 'SendRel'
Ptokax\scripts\ReleaseBot_Daywalker.lua:123: in function <...kh\Downloads\Ptokax\scripts\ReleaseBot_Daywalker.lua:120>

Pasting the code below:
Code: Lua
  1. --[[
  2.  
  3.         09-02-2008
  4.  
  5.         ReleaseBot 1.0 LUA 5.11 [API 2] made by Daywalker
  6.         Edited by RPGamer
  7.         Using some code snibbets from Sir American Idiot cause i like that style and it's easy going imo :)
  8.         Tnx to Plop to point me to the right table form :))
  9.         And as always CrazyGuy for listen to my mumbling about some code :P
  10.        
  11.         - RC2:
  12.         * Added the !findrel command (finds all the Releases including the word you searched for)
  13.         * Added the !prunerel and !prunereq commands to maually prune the tabled by day
  14.         * Fixed the TableCleaner cause it didn't work properly
  15.         * Fixed the start script error when hub is not running
  16.         * Fixed or Added (that's how you look against it^^) the hFile error when Folder isn't there yet...
  17.                         script will search for Folder first and will create it first now.
  18.         * Added version number for script
  19.        
  20. ]]
  21.  
  22.  
  23. RelCfg = {
  24. ------------------------------- Main Settings -----------------------------------
  25. -- Botname if "" then it will be pulled from the hub or use "Custom-Name"
  26. Bot = "",
  27. -- Hub Name if "" then it will be set to hubname
  28. Hub = "",
  29. -- Should bot have a key? true / false
  30. BotIsOp = true,
  31. -- Bot description
  32. BotDesc = "ReleaseBot",
  33. -- Bot Email address
  34. BotMail = "release@genre.mp3",
  35. -- Script version
  36. Version = "1.0RC2",
  37. -- folder for DB
  38. Folder = "ReleaseBot",
  39. -- File to save Release table
  40. RelFile = "Release.tbl",
  41. -- File to save Request table
  42. ReqFile = "Request.tbl",
  43. -- File to save Other stuff to table
  44. BuFile = "BackBone.tbl",
  45. -- Context Menu Title if "" then it will be set to hubname
  46. Menu = "Request/Release",
  47. -- Context Submenu Titles
  48. SubMenu1 = "Release",
  49. SubMenu2 = "Request",
  50. -- activate show today release on connect true or false
  51. sendrelease = true,
  52. -- send releases to main or pm  "Main/Pm"
  53. HowToSend = "Pm",
  54. -- Time to clean a table in days
  55. CleanTime = 90,
  56. -- Time to do the cleaning repeatly [ 24*(60*60000)  =  1 day]
  57. DoClean = 90*24*(60*60000),
  58. ------------------------------ Don't Try This At Home --------------------------
  59. }
  60.  
  61.  
  62.  
  63. OnStartup = function()
  64.         if RelCfg.Bot == "" then RelCfg.Bot = SetMan.GetString(21) end
  65.         if RelCfg.Menu == "" then RelCfg.Menu = SetMan.GetString(0) end
  66.         if RelCfg.Hub == "" then RelCfg.Hub = SetMan.GetString(0) end
  67.         clean = TmrMan.AddTimer(RelCfg.DoClean)
  68.         RelCfg.Tz = TimeZone()
  69.         RelCfg.Pfx = SetMan.GetString(29):sub(1,1)
  70.         RelCfg.Path = string.gsub(Core.GetPtokaXPath().."scripts/"..RelCfg.Folder.."/","/","\\")
  71.         RelCfg.RelFile = RelCfg.Path..RelCfg.RelFile
  72.         RelCfg.ReqFile = RelCfg.Path..RelCfg.ReqFile
  73.         RelCfg.BuFile = RelCfg.Path..RelCfg.BuFile
  74.         gc,no = nil,table.getn
  75.         if _VERSION ~= "Lua 5.1" then
  76.                 return OnError("Error! This script is incompatible with ".._VERSION), true
  77.         end
  78.         if loadfile(RelCfg.RelFile) then
  79.                 dofile(RelCfg.RelFile)
  80.                 Core.SendToOps("<"..RelCfg.Bot.."> *** Loading Release File....|")
  81.         else
  82.                 os.execute("mkdir "..RelCfg.Folder)
  83.                 Core.SendToOps("<"..RelCfg.Bot.."> *** Scanning script folder.."..RelCfg.Folder.." not found, Creating "..RelCfg.Folder.." now....|")
  84.                 RelCfg.Rel = {}
  85.                 Save_File(RelCfg.RelFile,RelCfg.Rel,"RelCfg.Rel")
  86.                 Core.SendToOps("<"..RelCfg.Bot.."> *** The folder "..RelCfg.Folder.." is created..inserting files now..|")
  87.                 Core.SendToOps("<"..RelCfg.Bot.."> *** "..RelCfg.RelFile.." file inserted..|")
  88.         end
  89.         if loadfile(RelCfg.ReqFile) then
  90.                 dofile(RelCfg.ReqFile)
  91.                 Core.SendToOps("<"..RelCfg.Bot.."> *** Loading Request File........|")
  92.         else
  93.                 RelCfg.Req = {}
  94.                 Save_File(RelCfg.ReqFile,RelCfg.Req,"RelCfg.Req")
  95.                 Core.SendToOps("<"..RelCfg.Bot.."> *** "..RelCfg.ReqFile.." file inserted..|")
  96.         end
  97.         if loadfile(RelCfg.BuFile) then
  98.                 dofile(RelCfg.BuFile)
  99.                 Core.SendToOps("<"..RelCfg.Bot.."> *** Loading Genre File...............|")
  100.         else
  101.                 RelCfg.Bu = {}
  102.                 Save_File(RelCfg.BuFile,RelCfg.Bu,"RelCfg.Bu")
  103.                 Core.SendToOps("<"..RelCfg.Bot.."> *** "..RelCfg.BuFile.." file inserted..|")
  104.         end
  105.         if RelCfg.Bot ~= SetMan.GetString(21) or
  106.                 RelCfg.Bot == SetMan.GetString(21) and SetMan.GetBool(17) == false then
  107.                 Core.RegBot(RelCfg.Bot, RelCfg.BotDesc, RelCfg.BotMail, RelCfg.BotIsOp)
  108.         end
  109.         OnError("*** ReleaseBot "..RelCfg.Version.." for ".._VERSION.." by Daywalker? has been started...")
  110. end
  111.  
  112. OnExit = function()
  113.         OnError("*** ReleaseBot "..RelCfg.Version.." for ".._VERSION.." by Daywalker? has been stopped...")
  114. end
  115.  
  116. OnError = function(msg)
  117.         Core.SendToOps("<"..RelCfg.Bot.."> "..msg.."|")
  118. end
  119.  
  120. function UserConnected(user, data)
  121.         SendRelCmds(user)
  122.         SendReqCmds(user)
  123.         SendRel(user)
  124. end
  125.  
  126. OpConnected = UserConnected
  127. RegConnected = UserConnected
  128.  
  129. ChatArrival = function(user, data)
  130.         local s,e,cmd = string.find( data, "%b<> %p(%w+)")
  131.         local s,e,to = string.find(data,"^$To: (%S+) From:")
  132.         if cmd and RelCmds[cmd] then
  133.                 local _,_,_,tab = RelCmds[cmd]()
  134.                 if tab[user.iProfile] and tab[user.iProfile] == 1 then
  135.                         if to and to == RelCfg.Bot then
  136.                                 Core.SendPmToNick(user.sNick,RelCfg.Bot,RelCmds[cmd](user,data).."|")
  137.                         else
  138.                                 local message = RelCmds[cmd](user,data)
  139.                                 Core.SendPmToNick(user.sNick,RelCfg.Bot,"<"..RelCfg.Bot.."> "..message.."|")
  140.                         end
  141.                         collectgarbage("collect")
  142.                         return true
  143.                 end
  144.         end
  145.         if cmd and ReqCmds[cmd] then
  146.                 local _,_,_,tab = ReqCmds[cmd]()
  147.                 if tab[user.iProfile] and tab[user.iProfile] == 1 then
  148.                         if to and to == RelCfg.Bot then
  149.                                 Core.SendPmToNick(user.sNick,RelCfg.Bot,ReqCmds[cmd](user,data).."|")
  150.                         else
  151.                                 local message = ReqCmds[cmd](user,data)
  152.                                 Core.SendPmToNick(user.sNick,RelCfg.Bot,"<"..RelCfg.Bot.."> "..message.."|")
  153.                         end
  154.                         collectgarbage("collect")
  155.                         return true
  156.                 end
  157.         end
  158. end
  159. ToArrival = ChatArrival
  160.  
  161. RelCmds = {
  162.         addgen = function(user,data)
  163.                 if user then
  164.                         local s,e,genre = string.find( data, "%b<> %p%w+%s(.*)|$")
  165.                         if not genre  then
  166.                                 return "Error!, Use: "..RelCfg.Pfx..
  167.                                 "addgen <genre>"
  168.                         else
  169.                                 for i,v in pairs(RelCfg.Bu) do
  170.                                         if v["Genre"] == genre then
  171.                                                 return "*** The genre: >> "..v["Genre"].." << is allready added to the ReleaseBot"
  172.                                         end
  173.                                 end
  174.                                 if not RelCfg.Bu then
  175.                                         RelCfg.Bu = {["Genre"] = genre}
  176.                                 else
  177.                                         spam = {["Genre"] = genre}
  178.                                         table.insert(RelCfg.Bu,spam)
  179.                                 end
  180.                                 Core.SendToAll("<"..RelCfg.Bot.."> Genre: "..genre.." is added by "..user.sNick.." to the ReleaseBot|")
  181.                                 Save_File(RelCfg.BuFile,RelCfg.Bu,"RelCfg.Bu")
  182.                                 return "Genre: "..genre.." is added to the ReleaseBot|"
  183.                         end
  184.                 else
  185.                         return "Add A Genre"," %[line:Genre]"," %[line:Genre]",
  186.                         -- profiles aan of uit
  187.                         {[-1] = 0,[0] = 1,[1] = 0,[2] = 0,[3] = 0,[4] = 0,[5] = 0,[6] = 0,}
  188.                 end
  189.         end,
  190.         delgen = function(user,data)
  191.                 if user then
  192.                         local s,e,ID = string.find( data, "%b<> %p%w+%s(%d+)|$")
  193.                         if not ID then
  194.                                 return "Error!, Use: "..RelCfg.Pfx..
  195.                                 "delgen <ID>"
  196.                         else
  197.                                 local x
  198.                                 for i,v in pairs(RelCfg.Bu) do
  199.                                         if string.lower(i) == string.lower(ID) then
  200.                                                 x = i
  201.                                                 break
  202.                                         end
  203.                                 end
  204.                                 if x then
  205.                                         RelCfg.Bu[x] = nil
  206.                                         Save_File(RelCfg.BuFile,RelCfg.Bu,"RelCfg.Bu")
  207.                                         return "ID: "..x.." is deleted from Genre list"
  208.                                 else
  209.                                         return "ID: "..ID.." is not in the Genre list"
  210.                                 end
  211.                         end
  212.                 else
  213.                         return "Delete A Genre"," %[line:ID]"," %[line:ID]",
  214.                         -- profiles aan of uit
  215.                         {[-1] = 0,[0] = 1,[1] = 0,[2] = 0,[3] = 0,[4] = 0,[5] = 0,[6] = 0,}
  216.                 end
  217.         end,
  218.         addrel = function(user,data)
  219.                 if user then
  220.                         local s,e,genre,release = string.find( data, "%b<> %p%w+%s(.*)%s(.*)|$")
  221.                         if not release  then
  222.                                 return "Error!, Use: "..RelCfg.Pfx..
  223.                                 "addrel <genre> <release>"
  224.                         else
  225.                                 for i,v in pairs(RelCfg.Rel) do
  226.                                         if v["Release"] == release then
  227.                                                 return "*** The release: >> "..v["Release"].." << is allready added to the ReleaseBot"                                                 
  228.                                         end
  229.                                 end
  230.                                 for i,v in pairs(RelCfg.Bu) do
  231.                                         if v["Genre"] == genre then
  232.                                                 ReleaseUpdate = {["Genre"] = genre,["Release"] = release,["Name"] = user.sNick,["Date"] = os.date(),["Time"] = os.time(),}
  233.                                                 table.insert(RelCfg.Rel,ReleaseUpdate)
  234.                                                 Core.SendToAll("<"..RelCfg.Bot.."> Release: "..release.." is added by "..user.sNick.." to the ReleaseBot under genre: "..v["Genre"].."|")
  235.                                                 Save_File(RelCfg.RelFile,RelCfg.Rel,"RelCfg.Rel")
  236.                                                 return "Release: "..release.." is added to releasebot|"
  237.                                         else
  238.                                                 msg = "*** The genre: >> "..genre.." << is not available yet.."
  239.                                         end
  240.                                 end
  241.                                 return msg
  242.                         end
  243.                 else
  244.                         return "Add A Release"," %[line:Genre] %[line:Release]"," %[line:Genre] %[line:Release]",
  245.                         -- profiles aan of uit
  246.                         {[-1] = 0,[0] = 1,[1] = 1,[2] = 1,[3] = 1,[4] = 0,[5] = 0,[6] = 0,}
  247.                 end
  248.         end,
  249.         delrel = function(user,data)
  250.                 if user then
  251.                         local s,e,ID = string.find( data, "%b<> %p%w+%s(%d+)|$")
  252.                         if not ID then
  253.                                 return "Error!, Use: "..RelCfg.Pfx..
  254.                                 "delrel <ID>"
  255.                         else
  256.                                 local x
  257.                                 for i,v in pairs(RelCfg.Rel) do
  258.                                         if string.lower(i) == string.lower(ID) then
  259.                                                 x = i
  260.                                                 break
  261.                                         end
  262.                                 end
  263.                                 if x then
  264.                                         RelCfg.Rel[x] = nil
  265.                                         Save_File(RelCfg.RelFile,RelCfg.Rel,"RelCfg.Rel")
  266.                                         return "ID: "..x.." is deleted from the ReleaseBot"
  267.                                 else
  268.                                         return "ID: "..ID.." is not in the ReleaseBot"
  269.                                 end
  270.                         end
  271.                 else
  272.                         return "Delete A Release"," %[line:ID]"," %[line:ID]",
  273.                         -- profiles aan of uit
  274.                         {[-1] = 0,[0] = 1,[1] = 1,[2] = 1,[3] = 0,[4] = 0,[5] = 0,[6] = 0,}
  275.                 end
  276.         end,
  277.         prunerel = function(user,data)
  278.                 if user then
  279.                         local s,e,prune = string.find( data, "%b<> %p%w+%s(%d+)|$")
  280.                         if not prune  then
  281.                                 return "Error!, Use: "..RelCfg.Pfx..
  282.                                 "prunerel <days>"
  283.                         else
  284.                                 local cur,chg = os.time()
  285.                                 local msg =     "\n\t"..string.rep("=",130)..
  286.                                                                 "\n\t\t\t\t\t- Listing Deleted Releases Older Then "..prune.." Days-"..
  287.                                                                 "\n\t"..string.rep("-",260).."\n"
  288.                                 for i,v in pairs(RelCfg.Rel) do
  289.                                         local td = os.difftime(os.time(),v["Time"])
  290.                                         local what = (td/86400)
  291.                                         local TtoGo = (tonumber(prune)-what)
  292.                                         if what > tonumber(prune) then
  293.                                                 --message
  294.                                                 msg = msg.."\tRelease: "..v["Release"].." is deleted from the releasebot\n"
  295.                                                 table.remove(RelCfg.Rel[i])
  296.                                                 RelCfg.Rel[i] = nil
  297.                                                 chg = true
  298.                                         end
  299.                                 end
  300.                                 if chg then
  301.                                         Save_File(RelCfg.RelFile,RelCfg.Rel,"RelCfg.Rel")
  302.                                         Core.SendToAll("<"..RelCfg.Bot.."> "..user.sNick.." Deleted All Releases Older then "..prune.." Days")
  303.                                         return msg.."\n\t"..string.rep("*",130).."\r\n\r\n"
  304.                                 end
  305.                                 return "There Are No Releases To Delete Yet!!\n"
  306.                         end
  307.                 else
  308.                         return "Clean release table"," %[line:Days to prune]"," %[line:Days to prune]",
  309.                         -- profiles aan of uit
  310.                         {[-1] = 0,[0] = 1,[1] = 1,[2] = 0,[3] = 0,[4] = 0,[5] = 0,[6] = 0,}
  311.                 end
  312.         end,
  313.         prunereq = function(user,data)
  314.                 if user then
  315.                         local s,e,prune = string.find( data, "%b<> %p%w+%s(%d+)|$")
  316.                         if not prune  then
  317.                                 return "Error!, Use: "..RelCfg.Pfx..
  318.                                 "prunereq <days>"
  319.                         else
  320.                                 local cur,chg = os.time()
  321.                                 local msg =     "\n\t"..string.rep("=",130)..
  322.                                                                 "\n\t\t\t\t\t- Listing Deleted Requests Older Then "..prune.." Days-"..
  323.                                                                 "\n\t"..string.rep("-",260).."\n"
  324.                                 for i,v in pairs(RelCfg.Req) do
  325.                                         local td = os.difftime(os.time(),v["Time"])
  326.                                         local what = (td/86400)
  327.                                         local TtoGo = (tonumber(prune)-what)
  328.                                         if what > tonumber(prune) then
  329.                                                 --message
  330.                                                 msg = msg.."\tRequest: "..v["Request"].." is deleted from the releasebot\n"
  331.                                                 table.remove(RelCfg.Req[i])
  332.                                                 RelCfg.Req[i] = nil
  333.                                                 chg = true
  334.                                         end
  335.                                 end
  336.                                 if chg then
  337.                                         Save_File(RelCfg.ReqFile,RelCfg.Req,"RelCfg.Req")
  338.                                         Core.SendToAll("<"..RelCfg.Bot.."> "..user.sNick.." Deleted All Requests Older then "..prune.." Days")
  339.                                         return msg.."\n\t"..string.rep("*",130).."\r\n\r\n"
  340.                                 end
  341.                                 return "*** There Are No Requests To Delete Yet!!\n"
  342.                         end
  343.                 else
  344.                         return "Clean request table"," %[line:Days to prune]"," %[line:Days to prune]",
  345.                         -- profiles aan of uit
  346.                         {[-1] = 0,[0] = 1,[1] = 1,[2] = 0,[3] = 0,[4] = 0,[5] = 0,[6] = 0,}
  347.                 end
  348.         end,
  349.         gen = function(user,data)
  350.                 if user then
  351.                         if next(RelCfg.Bu) then
  352.                                 local Count = 0
  353.                                 local reply =   "\n\t\t"..string.rep("=",30)..
  354.                                                                 "\n\t\t\t- Listing Genres -"..
  355.                                                                 "\n\t\t"..string.rep("-",60).."\n"..
  356.                                                                 "\n\t\tID.\t\tGenre\n\t\t"..string.rep("*",30).."\r\n"
  357.                                 for i,v in pairsByKeys(RelCfg.Bu) do
  358.                                                 reply = reply.."\t\tID: "..i..
  359.                                                 "\t\t"..v["Genre"].."\r\n"
  360.                                 end
  361.                                 return reply.."\n\t\t"..string.rep("*",30).."\r\n\r\n"
  362.                         else
  363.                                 return "There are no genres atm."
  364.                         end
  365.                 else
  366.                         return "Show Genres ","","",
  367.                         -- profiles aan of uit
  368.                         {[-1] = 0,[0] = 1,[1] = 1,[2] = 1,[3] = 1,[4] = 1,[5] = 1,[6] = 1,}
  369.                 end
  370.         end,
  371.         rls = function(user,data)
  372.                 if user then
  373.                         local s,e,genre = string.find( data, "%b<> %p%w+%s(.*)|$")
  374.                         if not genre or genre == "" then
  375.                                 if next(RelCfg.Rel) then
  376.                                         local reply =   "\n\t"..string.rep("=",100)..
  377.                                                                         "\n\t\t\t\t\t- Listing All Releases -"..
  378.                                                                         "\n\t"..string.rep("-",200).."\n"..
  379.                                                                         "\n\tID\t\tGenre\t\tRelease\r\n\t"..string.rep("*",100).."\r\n"
  380.                                         for i,v in pairsByKeys(RelCfg.Rel) do
  381.                                                 reply = reply.."\tID: "..i.."\t"..v["Genre"].."\t"..v["Release"].." // Added by "..v["Name"].." at "..v["Date"].."\r\n"
  382.                                         end
  383.                                         return reply.."\n\t"..string.rep("*",100).."\r\n\r\n"
  384.                                 else
  385.                                         return "There are no releases atm."
  386.                                 end
  387.                         else
  388.                                 local reply = "Listing Releases by Genre...\r\n\r\n\tID. "..
  389.                                 "\t\tGenre\t\tRelease\r\n\t"..string.rep("*",100).."\r\n"
  390.                                 for i,v in pairsByKeys(RelCfg.Rel) do
  391.                                         if v["Genre"] == genre then
  392.                                                 reply = reply.."\tID: "..i.."\t\t"..v["Genre"].."\t\t"..v["Release"].." // Added by "..v["Name"].." at "..v["Date"].."\r\n"
  393.                                         end
  394.                                 end
  395.                                 return reply.."\n\t"..string.rep("*",100).."\r\n\r\n"
  396.                         end
  397.                 else
  398.                         return "Show releases (genre) "," %[line:Genre]"," %[line:Genre]",
  399.                         -- profiles aan of uit
  400.                         {[-1] = 0,[0] = 1,[1] = 1,[2] = 1,[3] = 1,[4] = 1,[5] = 1,[6] = 1,}
  401.                 end
  402.         end,
  403.         today = function(user,data)
  404.                 if user then
  405.                         local s,e,genre = string.find( data, "%b<> %p%w+%s(.*)|$")
  406.                         local od,pos,datesplit = string.find(os.date(), "%d+%/(%d+)%/%d+%s%d+%:%d+%:%d+")
  407.                         if not genre or genre == "" then
  408.                                 if next(RelCfg.Rel) then
  409.                                         local reply =   "\n\t"..string.rep("=",100)..
  410.                                                                         "\n\t\t\t\t\t- Listing All Releases of today -"..
  411.                                                                         "\n\t"..string.rep("-",200).."\n"..
  412.                                                                         "\n\tID\t\tGenre\t\tRelease\r\n\t"..string.rep("*",100).."\r\n"
  413.                                         for i,v in pairsByKeys(RelCfg.Rel) do
  414.                                                 if v["Date"] then
  415.                                                         tb,pos,splittabledate = string.find(v["Date"], "%d+%/(%d+)%/%d+%s%d+%:%d+%:%d+")
  416.                                                         if splittabledate == datesplit then
  417.                                                                 reply = reply.."\tID: "..i.."\t\t"..v["Genre"].."\t\t"..v["Release"].." // Added by "..v["Name"].." at "..v["Date"].."\r\n"
  418.                                                         else
  419.                                                                 x=1
  420.                                                         end
  421.                                                 end
  422.                                         end
  423.                                         if x then
  424.                                                 --nice empty space to fool the bot^^
  425.                                         end
  426.                                         return reply.."\n\t"..string.rep("*",100).."\r\n\r\n"
  427.                                 else
  428.                                         return "There are no releases for today atm."
  429.                                 end
  430.                         else
  431.                                 local reply = "Listing Today's Releases by Genre...\r\n\r\n\tID. "..
  432.                                 "\tGenre\tRelease\r\n\t"..string.rep("*",100).."\r\n"
  433.                                 for i,v in pairsByKeys(RelCfg.Rel) do
  434.                                         if v["Genre"] == genre then
  435.                                                 if v["Date"] then
  436.                                                         tb,pos,splittabledate = string.find(v["Date"], "%d+%/(%d+)%/%d+%s%d+%:%d+%:%d+")
  437.                                                         if splittabledate == datesplit then
  438.                                                                 reply = reply.."\tID: "..i.."\t"..v["Genre"].."\t"..v["Release"].." // Added by "..v["Name"].." at "..v["Date"].."\r\n"
  439.                                                         else
  440.                                                                 x=1
  441.                                                         end
  442.                                                 end
  443.                                         end
  444.                                 end
  445.                                 if x then
  446.                                         --nice empty space to fool the bot^^
  447.                                 end
  448.                                 return reply.."\n\t"..string.rep("*",100).."\r\n\r\n"
  449.                         end
  450.                 else
  451.                         return "Show releases of today (genre) "," %[line:Genre]"," %[line:Genre]",
  452.                         -- profiles aan of uit
  453.                         {[-1] = 0,[0] = 1,[1] = 1,[2] = 1,[3] = 1,[4] = 1,[5] = 1,[6] = 1,}
  454.                 end
  455.         end,
  456.         findrel = function(user,data)
  457.                 if user then
  458.                         local s,e,rel = string.find( data, "%b<> %p%w+%s(.*)|$")
  459.                         if not rel then
  460.                                 return "Error!, Use: "..RelCfg.Pfx..
  461.                                 "findrel <releasename or a word init>"
  462.                         else
  463.                                 local msg = "\n\t\t"..string.rep("=",80)..
  464.                                                         "\n\t\t\t\t\t- Search Results for the word ["..rel.."] -"..
  465.                                                         "\n\t\t"..string.rep("-",160).."\r\n"
  466.                                 for i,v in pairsByKeys(RelCfg.Rel) do
  467.                                         --if string.lower(v["Release"]) == string.lower(rel) then
  468.                                         if string.find(string.lower(v["Release"]),rel) then
  469.                                                 msg = msg.."\r\n\r\n\t\tInfo on the Release: "..v["Release"].." :\n"..
  470.                                                 "\r\n\t\t"..string.rep("*",80)..
  471.                                                 "\r\n\t\t- Known ID\t\t: "..i..
  472.                                                 "\r\n\t\t- Full Releasename\t: "..v["Release"]..
  473.                                                 "\r\n\t\t- Genre\t\t: "..v["Genre"]..
  474.                                                 "\r\n\t\t- Added by\t: "..v["Name"]..
  475.                                                 "\r\n\t\t- Time of Add\t: "..v["Date"]..
  476.                                                 "\r\n\r\n\t\t"..string.rep("*",80).."\r\n"
  477.                                         else
  478.                                                 x=1
  479.                                         end
  480.                                 end
  481.                                 if x then
  482.                                         return msg.."\n\t\t"..string.rep("-",160).."\r\n\r\n"
  483.                                 else
  484.                                         return "The Release: <"..rel.."> is not found."
  485.                                 end
  486.                         end
  487.                 else
  488.                         return "Find A Release"," %[line:Release]"," %[line:Release]",
  489.                         -- profiles aan of uit
  490.                         {[-1] = 0,[0] = 1,[1] = 1,[2] = 1,[3] = 1,[4] = 1,[5] = 1,[6] = 1,}
  491.                 end
  492.                 DownloadFile()
  493.         end,
  494.         rlshelp = function(user,data)
  495.                 if user then
  496.                         local x
  497.                         local reply = "\n\t\t"..string.rep("=",40)..
  498.                                                   "\n\t\t\t- Release Command Help-"..
  499.                                                   "\n\t\t"..string.rep("-",80)..
  500.                                                   "\n\t\tCommand\t\tDescription\r\n"..
  501.                                                   "\t\t"..string.rep("*",40).."\r\n"
  502.                         for i,v in pairsByKeys(RelCmds) do
  503.                                 local desc,args,_,tab = RelCmds[i]()
  504.                                 if tab[user.iProfile] and tab[user.iProfile] == 1 then
  505.                                         x = 1
  506.                                         reply = reply.."\t\t!"..string.format("%-15s",i).."\t"..desc.."\r\n"
  507.                                 end
  508.                         end
  509.                         if x then
  510.                                 return reply.."\n\t\t"..string.rep("*",40).."\r\n\r\n"
  511.                         else
  512.                                 return "Sorry "..user.sNick.." These commands are disabled for your profile."
  513.                         end
  514.                 else
  515.                         return "Show Release Help","","",
  516.                         -- profiles aan of uit
  517.                         {[-1] = 1,[0] = 1,[1] = 1,[2] = 1,[3] = 1,[4] = 1,[5] = 1,[6] = 1,}
  518.                 end
  519.         end,
  520.         relabout = function(user,data)
  521.                 local reply = "\n\t\t"..string.rep("=",60)..
  522.                                           "\n\n\t\t\t\t\t-About this script-"..
  523.                                           "\n\t\t"..string.rep("-",120).."\n"
  524.                 if user then
  525.                         x=1
  526.                         local FileSize1 = CheckFile(RelCfg.BuFile)
  527.                         local FileSize2 = CheckFile(RelCfg.RelFile)
  528.                         local FileSize3 = CheckFile(RelCfg.ReqFile)
  529.                         if x then
  530.                                 reply = reply.."\t\t09-02-2008\n"..
  531.                                 "\n\t\tReleaseBot "..RelCfg.Version.." ".._VERSION.." [API 2] made by Daywalker?\n\t\tEdited by RPGamer"..
  532.                                 "\n\t\tUsing some code snibbets from Sir American Idiot cause i like that style and it's easy going imo :)\n"..
  533.                                 "\t\tTnx to Plop to point me to the right table form :))\n"..
  534.                                 "\t\tAnd as always CrazyGuy for listen to my mumbling about some code :P\n"..
  535.                                 "\n\t\tThis Script Release Candidate was Finished at 04/05/08 16:44:24 +1 UTC"..
  536.                                 "\n\t\tExact Date and Time for now is: "..os.date().." "..RelCfg.Tz..
  537.                                 "\n\t\tScript uses "..Mem().." atm."..
  538.                                 "\n\n\t\tCurrent File Sizes are for:"..
  539.                                 "\n\t\t"..string.rep("~",25)..
  540.                                 "\n\t\t- Genre file\t: "..FileSize1..
  541.                                 "\n\t\t- Release file\t: "..FileSize2..
  542.                                 "\n\t\t- Request file\t: "..FileSize3..
  543.                                 "\n\t\t"..string.rep("~",25).."\n"
  544.                         end
  545.                         return reply.."\n\t\t"..string.rep("*",60).."\r\n\r\n"
  546.                 else
  547.                         return "Show about this script","","",
  548.                         -- profiles aan of uit
  549.                         {[-1] = 1,[0] = 1,[1] = 1,[2] = 1,[3] = 1,[4] = 1,[5] = 1,[6] = 1,}
  550.                 end
  551.         end,
  552. }
  553.  
  554. ReqCmds = {
  555.         addreq = function(user,data)
  556.                 if user then
  557.                         local s,e,genre,request = string.find( data, "%b<> %p%w+%s(.*)%s(.*)|$")
  558.                         if not request  then
  559.                                 return "Error!, Use: "..RelCfg.Pfx..
  560.                                 "addreq <genre> <request>"
  561.                         else
  562.                                 for i,v in pairs(RelCfg.Req) do
  563.                                         if v["Request"] == request then
  564.                                                 return "*** The request: >> "..v["Request"].." << is allready added to the RequestBot"                                                 
  565.                                         end
  566.                                 end
  567.                                 for i,v in pairs(RelCfg.Bu) do
  568.                                         if v["Genre"] == genre then
  569.                                                 RequestUpdate = {["Genre"] = genre,["Request"] = request,["Name"] = user.sNick,["Date"] = os.date(),["Time"] = os.time(),}
  570.                                                 table.insert(RelCfg.Rel,RequestUpdate)
  571.                                                 Core.SendToAll("<"..RelCfg.Bot.."> Request: "..request.." is added by "..user.sNick.." to the RequestBot under genre: "..v["Genre"].."|")
  572.                                                 Save_File(RelCfg.ReqFile,RelCfg.Req,"RelCfg.Req")                                                      
  573.                                                 return "Done!!"
  574.                                         else
  575.                                                 msg = "*** The genre: >> "..genre.." << is not available yet.."
  576.                                         end
  577.                                 end
  578.                                 return msg
  579.                         end
  580.                 else
  581.                         return "Add A Request"," %[line:Genre] %[line:Request]"," %[line:Genre] %[line:Request]",
  582.                         -- profiles aan of uit
  583.                         {[-1] = 0,[0] = 1,[1] = 1,[2] = 1,[3] = 1,[4] = 0,[5] = 0,[6] = 0,}
  584.                 end
  585.         end,
  586.         delreq = function(user,data)
  587.                 if user then
  588.                         local s,e,ID = string.find( data, "%b<> %p%w+%s(%d+)|$")
  589.                         if not ID then
  590.                                 return "Error!, Use: "..RelCfg.Pfx..
  591.                                 "delrel <ID>"
  592.                         else
  593.                                 local x
  594.                                 for i,v in pairs(RelCfg.Req) do
  595.                                         if string.lower(i) == string.lower(ID) then
  596.                                                 x = i
  597.                                                 break
  598.                                         end
  599.                                 end
  600.                                 if x then
  601.                                         RelCfg.Req[x] = nil
  602.                                         Save_File(RelCfg.ReqFile,RelCfg.Req,"RelCfg.Req")
  603.                                         return "ID: "..x.." is deleted from the RequestBot"
  604.                                 else
  605.                                         return "ID: "..ID.." is not in the RequestBot"
  606.                                 end
  607.                         end
  608.                 else
  609.                         return "Delete A Request"," %[line:ID]"," %[line:ID]",
  610.                         -- profiles aan of uit
  611.                         {[-1] = 0,[0] = 1,[1] = 1,[2] = 1,[3] = 0,[4] = 0,[5] = 0,[6] = 0,}
  612.                 end
  613.         end,
  614.         req = function(user,data)
  615.                 if user then
  616.                         local s,e,genre = string.find( data, "%b<> %p%w+%s(.*)|$")
  617.                         if not genre or genre == "" then
  618.                                 if next(RelCfg.Req) then
  619.                                         local reply = "Listing All Requests ...\r\n\r\n\tID. "..
  620.                                         "\t\tGenre\t\tRequest\r\n\t"..string.rep("*",100).."\r\n"
  621.                                         for i,v in pairsByKeys(RelCfg.Req) do
  622.                                                 reply = reply.."\tID: "..i.."\t\t"..v["Genre"].."\t\t"..v["Request"].." // Added by "..v["Name"].." at "..v["Date"].."\r\n"
  623.                                         end
  624.                                         return reply.."\n\t"..string.rep("*",100).."\r\n\r\n"
  625.                                 else
  626.                                         return "There are no requests atm."
  627.                                 end
  628.                         else
  629.                                 local reply = "Listing Requests by Genre...\r\n\r\n\tID. "..
  630.                                 "\t\tGenre\t\tRequest\r\n\t"..string.rep("*",100).."\r\n"
  631.                                 for i,v in pairsByKeys(RelCfg.Req) do
  632.                                         if v["Genre"] == genre then
  633.                                                 reply = reply.."\tID: "..i.."\t\t"..v["Genre"].."\t\t"..v["Request"].." // Added by "..v["Name"].." at "..v["Date"].."\r\n"
  634.                                         end    
  635.                                 end
  636.                                 return reply.."\n\t"..string.rep("*",100).."\r\n\r\n"
  637.                         end
  638.                 else
  639.                         return "Show requests (genre) "," %[line:Genre]"," %[line:Genre]",
  640.                         -- profiles aan of uit
  641.                         {[-1] = 0,[0] = 1,[1] = 1,[2] = 1,[3] = 1,[4] = 1,[5] = 1,[6] = 1,}
  642.                 end
  643.         end,
  644.         reqhelp = function(user,data)
  645.                 if user then
  646.                         local x
  647.                         local reply = "\r\n\r\n\tRequest Command Help\r\n\r\n\tCommand\t\tDescription\r\n"..
  648.                         "\t"..string.rep("*",40).."\r\n"
  649.                         for i,v in pairsByKeys(ReqCmds) do
  650.                                 local desc,args,_,tab = ReqCmds[i]()
  651.                                 if tab[user.iProfile] and tab[user.iProfile] == 1 then
  652.                                         x = 1
  653.                                         reply = reply.."\t!"..string.format("%-15s",i).."\t"..desc.."\r\n"
  654.                                 end
  655.                         end
  656.                         if x then
  657.                                 return reply.."\n\t"..string.rep("*",40).."\r\n\r\n"
  658.                         else
  659.                                 return "Sorry "..user.sNick.." These commands are disabled for your profile."
  660.                         end
  661.                 else
  662.                         return "Show Request Help","","",
  663.                         -- profiles aan of uit
  664.                         {[-1] = 1,[0] = 1,[1] = 1,[2] = 1,[3] = 1,[4] = 1,[5] = 1,[6] = 1,}
  665.                 end
  666.         end,
  667.         reqabout = function(user,data)
  668.                 local reply = "\n\n\tAbout this script..\n"..
  669.                         "\t"..string.rep("*",40).."\r\n"
  670.                 if user then
  671.                         x=1
  672.                         local FileSize1 = CheckFile(RelCfg.BuFile)
  673.                         local FileSize2 = CheckFile(RelCfg.RelFile)
  674.                         local FileSize3 = CheckFile(RelCfg.ReqFile)
  675.                         if x then
  676.                                 reply = reply.."\t09-02-2008\n"..
  677.                                 "\n\tReleaseBot "..RelCfg.Version.." ".._VERSION.." [API 2] made by Daywalker?\n"..
  678.                                 "\n\tUsing some code snibbets from Sir American Idiot cause i like that style and it's easy going imo :)\n"..
  679.                                 "\tTnx to Plop to point me to the right table form :))\n"..
  680.                                 "\tAnd as always CrazyGuy for listen to my mumbling about some code :P\n"..
  681.                                 "\n\tThis Script Release Candidate was Finished at 04/05/08 16:44:24 +1 UTC"..
  682.                                 "\n\tExact Date and Time for now is: "..os.date().." "..RelCfg.Tz..
  683.                                 "\n\tScript uses "..Mem().." atm."..
  684.                                 "\n\n\tCurrent File Sizes are for:"..
  685.                                 "\n\t"..string.rep("~",20)..
  686.                                 "\n\tGenre file\t\t: "..FileSize1..
  687.                                 "\n\tRelease file\t: "..FileSize2..
  688.                                 "\n\tRequest file\t: "..FileSize3..
  689.                                 "\n\t"..string.rep("~",20).."\n"
  690.                         end
  691.                         return reply.."\n\t"..string.rep("*",40).."\r\n\r\n"
  692.                 else
  693.                         return "Show about this script","","",
  694.                         -- profiles aan of uit
  695.                         {[-1] = 1,[0] = 1,[1] = 1,[2] = 1,[3] = 1,[4] = 1,[5] = 1,[6] = 1,}
  696.                 end
  697.         end,
  698. }
  699.  
  700. SendRelCmds = function(user)
  701.         local x
  702.         for i,v in pairsByKeys(RelCmds) do
  703.                 local desc,arg1,arg2,tab = RelCmds[i]()
  704.                 if tab[user.iProfile] and tab[user.iProfile] == 1 then
  705.                         x = 1
  706.                         Core.SendToNick(user.sNick,"$UserCommand 1 1 "..RelCfg.Menu.."\\"..RelCfg.SubMenu1.."\\"..
  707.                         desc.."$<%[mynick]> +"..i..arg1.."&#38;#124;|")
  708.                         Core.SendToNick(user.sNick,"$UserCommand 1 2 "..RelCfg.Menu.."\\"..RelCfg.SubMenu1.."\\"..
  709.                         desc.."$$To: "..RelCfg.Bot.." From: %[mynick] $<%[mynick]> +"..i..arg2.."&#38;#124;|")
  710.                 end
  711.         end
  712.         if x then
  713.                 local Prof
  714.                 if user.iProfile ~= -1 then
  715.                         Prof = ProfMan.GetProfile(user.iProfile).sProfileName
  716.                 else
  717.                         Prof = "Unregistered User"
  718.                 end
  719.         end
  720.         collectgarbage("collect")
  721. end
  722.  
  723. SendReqCmds = function(user)
  724.         local x
  725.         for i,v in pairsByKeys(ReqCmds) do
  726.                 local desc,arg1,arg2,tab = ReqCmds[i]()
  727.                 if tab[user.iProfile] and tab[user.iProfile] == 1 then
  728.                         x = 1
  729.                         Core.SendToNick(user.sNick,"$UserCommand 1 1 "..RelCfg.Menu.."\\"..RelCfg.SubMenu2.."\\"..
  730.                         desc.."$<%[mynick]> +"..i..arg1.."&#38;#124;|")
  731.                         Core.SendToNick(user.sNick,"$UserCommand 1 2 "..RelCfg.Menu.."\\"..RelCfg.SubMenu2.."\\"..
  732.                         desc.."$$To: "..RelCfg.Bot.." From: %[mynick] $<%[mynick]> +"..i..arg2.."&#38;#124;|")
  733.                 end
  734.         end
  735.         if x then
  736.                 local Prof
  737.                 if user.iProfile ~= -1 then
  738.                         Prof = ProfMan.GetProfile(user.iProfile).sProfileName
  739.                 else
  740.                         Prof = "Unregistered User"
  741.                 end
  742.         end
  743.         collectgarbage("collect")
  744. end
  745.  
  746. SendRel = function(user)
  747.         if RelCfg.sendrelease then
  748.                 if user then
  749.                         local od,pos,datesplit = string.find(os.date(), "%d+%/(%d+)%/%d+%s%d+%:%d+%:%d+")
  750.                         local reply = "Listing All Today Releases ...\r\n\r\n\tID. "..
  751.                         "\tGenre\tRelease\r\n\t"..string.rep("*",100).."\r\n"
  752.                         for i,v in pairsByKeys(RelCfg.Rel) do
  753.                                 if v["Date"] then
  754.                                         tb,pos,splittabledate = string.find(v["Date"], "%d+%/(%d+)%/%d+%s%d+%:%d+%:%d+")
  755.                                         if splittabledate == datesplit then
  756.                                                 reply = reply.."\tID: "..i.."\t"..v["Genre"].."\t"..v["Release"].." // Added by "..v["Name"].." at "..v["Date"].."\r\n"
  757.                                         else
  758.                                                 x=1
  759.                                         end
  760.                                 end
  761.                         end
  762.                         if x then
  763.                                 --nice empty space to fool the bot^^
  764.                         end
  765.                         if RelCfg.HowToSend == "Main" then
  766.                                 Core.SendToNick(user.sNick,"<"..RelCfg.Bot.."> "..reply.."\n\t"..string.rep("*",100)..
  767.                                 "\n\n\tWelcome "..user.sNick.." to "..SetMan.GetString(0).."\n\n"..
  768.                                 "\tLet me introduce you to at least one of our services in this hub...\n"..
  769.                                 "\tthe 0 day releases... a hot item for some users and yes we have it!!\n"..
  770.                                 "\tTo download this releases you need to type !regme <password> in main\n"..
  771.                                 "\tto ask for a Registered acount, cause minimal profile to download is Registered profile\n"..
  772.                                 "\n\tType !rlshelp in main or use the RC Commands on the hub tab to get help with the releasebot\n"..
  773.                                 "\tEnjoy your stay in this hub and don't forget to type\n"..
  774.                                 "\t!regme <password> when you're not regged or ask\n"..
  775.                                 "\tRPGamer for a registered account... Enjoy:))\n\n"..
  776.                                 "\n\t"..string.rep("*",100).."\r\n\r\n")
  777.                         else
  778.                                 Core.SendPmToNick(user.sNick,RelCfg.Bot,reply.."\n\t"..string.rep("*",100)..
  779.                                 "\n\n\tWelcome "..user.sNick.." to "..SetMan.GetString(0).."\n\n"..
  780.                                 "\tLet me introduce you to at least one of our services in this hub...\n"..
  781.                                 "\tthe 0 day releases... a hot item for some users and yes we have it!!\n"..
  782.                                 "\tTo download this releases you need to type !regme <password> in main\n"..
  783.                                 "\tto ask for a Registered acount, cause minimal profile to download is Registered profile\n"..
  784.                                 "\n\tType !rlshelp in main or use the RC Commands on the hub tab to get help with the releasebot\n"..
  785.                                 "\tEnjoy your stay in this hub and don't forget to type\n"..
  786.                                 "\t!regme <password> when you're not regged or ask\n"..
  787.                                 "\tRPGamer for a registered account... Enjoy:))\n\n"..
  788.                                 "\n\t"..string.rep("*",100).."\r\n\r\n")
  789.                         end
  790.                 end
  791.         else
  792.                
  793.         end
  794. end
  795.  
  796. OnTimer = function(clean)
  797.         if clean then
  798.                 Core.SendToAll("<"..RelCfg.Bot.."> Release cleaner started at "..os.date())
  799.                 local cur,chg = os.time()
  800.                 local msg = "\n\t"..string.rep("=",130)..
  801.                                         "\n\t\t\t\t\t- Listing Deleted Releases Older Then "..RelCfg.CleanTime.." Days-"..
  802.                                         "\n\t"..string.rep("-",260).."\n"
  803.                 for i,v in pairs(RelCfg.Rel) do
  804.                         local td = os.difftime(os.time(),v["Time"])
  805.                         local what = (td/86400)
  806.                         local TtoGo = (RelCfg.CleanTime-what)
  807.                         if what > RelCfg.CleanTime then
  808.                                 --message
  809.                                 msg = msg.."\tRelease: "..v["Release"].." is deleted from the releasebot\n"
  810.                                 table.remove(RelCfg.Rel[i])
  811.                                 RelCfg.Rel[i] = nil
  812.                                 chg = true
  813.                         end
  814.                 end
  815.                 local reqmsg = "\n\t"..string.rep("=",130)..
  816.                                         "\n\t\t\t\t\t- Listing Deleted Requests Older Then "..RelCfg.CleanTime.." Days-"..
  817.                                         "\n\t"..string.rep("-",260).."\n"
  818.                 local cur2,chg2 = os.time()
  819.                 for i,v in pairs(RelCfg.Req) do
  820.                         local td = os.difftime(os.time(),v["Time"])
  821.                         local what = (td/86400)
  822.                         local TtoGo = (RelCfg.CleanTime-what)
  823.                         if what > RelCfg.CleanTime then
  824.                                 --message
  825.                                 reqmsg = reqmsg.."\tRequest: "..v["Request"].." is deleted from the releasebot\n"
  826.                                 table.remove(RelCfg.Req[i])
  827.                                 RelCfg.Req[i] = nil
  828.                                 chg2 = true
  829.                         end
  830.                 end
  831.                 if chg then
  832.                         Save_File(RelCfg.RelFile,RelCfg.Rel,"RelCfg.Rel")
  833.                         Core.SendToAll("<"..RelCfg.Bot.."> "..msg.."\n\t"..string.rep("*",130).."\r\n\r\n")
  834.                 else
  835.                         Core.SendToAll("<"..RelCfg.Bot.."> There are no Releases to delete yet, maybe next time..")
  836.                 end
  837.                 if chg2 then
  838.                         Save_File(RelCfg.ReqFile,RelCfg.Req,"RelCfg.Req")
  839.                         Core.SendToAll("<"..RelCfg.Bot.."> "..reqmsg.."\n\t"..string.rep("*",130).."\r\n\r\n")
  840.                 else
  841.                         Core.SendToAll("<"..RelCfg.Bot.."> There are no Requests to delete yet, maybe next time..")
  842.                 end
  843.         end
  844. end
  845.  
  846. CountPairs = function(Table)
  847.         local x = 0
  848.         if Table then
  849.                 for i,v in pairs(Table) do
  850.                         x = x + 1
  851.                 end
  852.         end
  853.         return x
  854. end
  855.  
  856. TimeZone = function()
  857.         local h,m = math.modf((os.time()-os.time(os.date"!*t"))/ 3600)
  858.         return string.format("%+d UTC",(h + (60 * m)))
  859. end
  860.  
  861. Mem = function()
  862.         collectgarbage("collect")
  863.         return string.format("%-.2f Kb.",collectgarbage("count"))
  864. end
  865.  
  866. CheckFile = function(File)
  867.         local f,e = io.open(File,"r")
  868.         if f then
  869.                 local current = f:seek()
  870.                 local size = f:seek("end")
  871.                 f:seek("set", current) f:close()
  872.                 if size then return FmtSz(size) end
  873.         else
  874.                 if e then OnError(e:sub(1,2)) return e:sub(1,2) end
  875.         end
  876. end
  877.  
  878. FmtSz = function(int)
  879.         local i,u,x= int or 0,{"","K","M","G","T","P"},1
  880.         while i > 1024 do i,x = i/1024,x+1 end return string.format("%.2f %sB.",i,u[x])
  881. end
  882.  
  883. Save_Serialize = function(tTable, sTableName, hFile, sTab)
  884.         sTab = sTab or "";
  885.         hFile:write(sTab..sTableName.." = {\n" )
  886.         for key, value in pairs(tTable) do
  887.                 local sKey = (type(key) == "string") and string.format("[%q]",key) or string.format("[%d]",key)
  888.                 if(type(value) == "table") then
  889.                         Save_Serialize(value, sKey, hFile, sTab.."\t")
  890.                 else
  891.                         local sValue = (type(value) == "string") and string.format("%q",value) or tostring(value)
  892.                         hFile:write( sTab.."\t"..sKey.." = "..sValue)
  893.                 end
  894.                 hFile:write( ",\n")
  895.         end
  896.         hFile:write( sTab.."}")
  897. end
  898.  
  899. Save_File = function(file,table, tablename )
  900.         local hFile = io.open (file , "wb")
  901.         Save_Serialize(table, tablename, hFile)
  902.         hFile:flush()
  903.         hFile:close()
  904.         collectgarbage("collect")
  905. end
  906.  
  907. pairsByKeys = function(t, f)
  908.         local a = {}
  909.         for n in pairs(t) do table.insert(a, n) end
  910.                 table.sort(a, f)
  911.                 local i = 0      -- iterator variable
  912.                 local iter = function ()   -- iterator function
  913.                 i = i + 1
  914.                 if a[i] == nil then
  915.                         return nil
  916.                 else
  917.                         return a[i], t[a[i]]
  918.                 end
  919.         end
  920.         return iter
  921. end
  922.  
« Last Edit: 25 January, 2016, 19:04:15 by PPK »

PtokaX forum


Offline the-master

  • Triple Ace
  • **
  • Posts: 218
  • Karma: +10/-15
Try this, found some minor issues in string handling.. your version couldn't read or write from/to file
Code: Lua
  1. --[[
  2.  
  3.         09-02-2008
  4.  
  5.         ReleaseBot 1.0 LUA 5.11 [API 2] made by Daywalker
  6.         Edited by RPGamer
  7.         Using some code snibbets from Sir American Idiot cause i like that style and it's easy going imo :)
  8.         Tnx to Plop to point me to the right table form :))
  9.         And as always CrazyGuy for listen to my mumbling about some code :P
  10.        
  11.         - RC2:
  12.         * Added the !findrel command (finds all the Releases including the word you searched for)
  13.         * Added the !prunerel and !prunereq commands to maually prune the tabled by day
  14.         * Fixed the TableCleaner cause it didn't work properly
  15.         * Fixed the start script error when hub is not running
  16.         * Fixed or Added (that's how you look against it^^) the hFile error when Folder isn't there yet...
  17.                         script will search for Folder first and will create it first now.
  18.         * Added version number for script
  19.        
  20. ]]
  21.  
  22.  
  23. RelCfg = {
  24. ------------------------------- Main Settings -----------------------------------
  25. -- Botname if "" then it will be pulled from the hub or use "Custom-Name"
  26. Bot = "",
  27. -- Hub Name if "" then it will be set to hubname
  28. Hub = "",
  29. -- Should bot have a key? true / false
  30. BotIsOp = true,
  31. -- Bot description
  32. BotDesc = "ReleaseBot",
  33. -- Bot Email address
  34. BotMail = "release@genre.mp3",
  35. -- Script version
  36. Version = "1.0RC2",
  37. -- folder for DB
  38. Folder = "ReleaseBot",
  39. -- File to save Release table
  40. RelFile = "Release.tbl",
  41. -- File to save Request table
  42. ReqFile = "Request.tbl",
  43. -- File to save Other stuff to table
  44. BuFile = "BackBone.tbl",
  45. -- Context Menu Title if "" then it will be set to hubname
  46. Menu = "Request/Release",
  47. -- Context Submenu Titles
  48. SubMenu1 = "Release",
  49. SubMenu2 = "Request",
  50. -- activate show today release on connect true or false
  51. sendrelease = true,
  52. -- send releases to main or pm  "Main/Pm"
  53. HowToSend = "Pm",
  54. -- Time to clean a table in days
  55. CleanTime = 90,
  56. -- Time to do the cleaning repeatly [ 24*(60*60000)  =  1 day]
  57. DoClean = 90*24*(60*60000),
  58. ------------------------------ Don't Try This At Home --------------------------
  59. }
  60.  
  61.  
  62.  
  63. OnStartup = function()
  64.         if RelCfg.Bot == "" then RelCfg.Bot = SetMan.GetString(21) end
  65.         if RelCfg.Menu == "" then RelCfg.Menu = SetMan.GetString(0) end
  66.         if RelCfg.Hub == "" then RelCfg.Hub = SetMan.GetString(0) end
  67.         clean = TmrMan.AddTimer(RelCfg.DoClean)
  68.         RelCfg.Tz = TimeZone()
  69.         RelCfg.Pfx = SetMan.GetString(29):sub(1,1)
  70.         RelCfg.Path = string.gsub(Core.GetPtokaXPath().."scripts/"..RelCfg.Folder.."/","/","\\")
  71.         RelCfg.RelFile = RelCfg.Path..RelCfg.RelFile
  72.         RelCfg.ReqFile = RelCfg.Path..RelCfg.ReqFile
  73.         RelCfg.BuFile = RelCfg.Path..RelCfg.BuFile
  74.         gc,no = nil,table.getn
  75.         if _VERSION ~= "Lua 5.1" then
  76.                 return OnError("Error! This script is incompatible with ".._VERSION), true
  77.         end
  78.         if loadfile(RelCfg.RelFile) then
  79.                 dofile(RelCfg.RelFile)
  80.                 Core.SendToOps("<"..RelCfg.Bot.."> *** Loading Release File....|")
  81.         else
  82.                 os.execute("mkdir "..RelCfg.Folder)
  83.                 Core.SendToOps("<"..RelCfg.Bot.."> *** Scanning script folder.."..RelCfg.Folder.." not found, Creating "..RelCfg.Folder.." now....|")
  84.                 RelCfg.Rel = {}
  85.                 Save_File(RelCfg.RelFile,RelCfg.Rel,"RelCfg.Rel")
  86.                 Core.SendToOps("<"..RelCfg.Bot.."> *** The folder "..RelCfg.Folder.." is created..inserting files now..|")
  87.                 Core.SendToOps("<"..RelCfg.Bot.."> *** "..RelCfg.RelFile.." file inserted..|")
  88.         end
  89.         if loadfile(RelCfg.ReqFile) then
  90.                 dofile(RelCfg.ReqFile)
  91.                 Core.SendToOps("<"..RelCfg.Bot.."> *** Loading Request File........|")
  92.         else
  93.                 RelCfg.Req = {}
  94.                 Save_File(RelCfg.ReqFile,RelCfg.Req,"RelCfg.Req")
  95.                 Core.SendToOps("<"..RelCfg.Bot.."> *** "..RelCfg.ReqFile.." file inserted..|")
  96.         end
  97.         if loadfile(RelCfg.BuFile) then
  98.                 dofile(RelCfg.BuFile)
  99.                 Core.SendToOps("<"..RelCfg.Bot.."> *** Loading Genre File...............|")
  100.         else
  101.                 RelCfg.Bu = {}
  102.                 Save_File(RelCfg.BuFile,RelCfg.Bu,"RelCfg.Bu")
  103.                 Core.SendToOps("<"..RelCfg.Bot.."> *** "..RelCfg.BuFile.." file inserted..|")
  104.         end
  105.         if RelCfg.Bot ~= SetMan.GetString(21) or
  106.                 RelCfg.Bot == SetMan.GetString(21) and SetMan.GetBool(17) == false then
  107.                 Core.RegBot(RelCfg.Bot, RelCfg.BotDesc, RelCfg.BotMail, RelCfg.BotIsOp)
  108.         end
  109.         OnError("*** ReleaseBot "..RelCfg.Version.." for ".._VERSION.." by Daywalker? has been started...")
  110. end
  111.  
  112. OnExit = function()
  113.         OnError("*** ReleaseBot "..RelCfg.Version.." for ".._VERSION.." by Daywalker? has been stopped...")
  114. end
  115.  
  116. OnError = function(msg)
  117.         Core.SendToOps("<"..RelCfg.Bot.."> "..msg.."|")
  118. end
  119.  
  120. function UserConnected(user, data)
  121.         SendRelCmds(user)
  122.         SendReqCmds(user)
  123.         SendRel(user)
  124. end
  125.  
  126. OpConnected = UserConnected
  127. RegConnected = UserConnected
  128.  
  129. ChatArrival = function(user, data)
  130.         local s,e,cmd = string.find(data,"%b<> %p(%w+)")
  131.         local s,e,to = string.find(data,"^$To: (%S+) From:")
  132.         if cmd and RelCmds[cmd] then
  133.                 local _,_,_,tab = RelCmds[cmd]()
  134.                 if tab[user.iProfile] and tab[user.iProfile] == 1 then
  135.                         if to and to == RelCfg.Bot then
  136.                                 Core.SendPmToNick(user.sNick,RelCfg.Bot,RelCmds[cmd](user,data).."|")
  137.                         else
  138.                                 local message = RelCmds[cmd](user,data)
  139.                                 Core.SendPmToNick(user.sNick,RelCfg.Bot,"<"..RelCfg.Bot.."> "..message.."|")
  140.                         end
  141.                         collectgarbage("collect")
  142.                         return true
  143.                 end
  144.         end
  145.         if cmd and ReqCmds[cmd] then
  146.                 local _,_,_,tab = ReqCmds[cmd]()
  147.                 if tab[user.iProfile] and tab[user.iProfile] == 1 then
  148.                         if to and to == RelCfg.Bot then
  149.                                 Core.SendPmToNick(user.sNick,RelCfg.Bot,ReqCmds[cmd](user,data).."|")
  150.                         else
  151.                                 local message = ReqCmds[cmd](user,data)
  152.                                 Core.SendPmToNick(user.sNick,RelCfg.Bot,"<"..RelCfg.Bot.."> "..message.."|")
  153.                         end
  154.                         collectgarbage("collect")
  155.                         return true
  156.                 end
  157.         end
  158. end
  159. ToArrival = ChatArrival
  160.  
  161. RelCmds = {
  162.         addgen = function(user,data)
  163.                 if user then
  164.                         local s,e,genre = string.find(data,"%b<> %p%w+%s(.*)|$")
  165.                         if not genre  then
  166.                                 return "Error!, Use: "..RelCfg.Pfx..
  167.                                 "addgen <genre>"
  168.                         else
  169.                                 for i,v in pairs(RelCfg.Bu) do
  170.                                         if v["Genre"] == genre then
  171.                                                 return "*** The genre: >> "..v["Genre"].." << is allready added to the ReleaseBot"
  172.                                         end
  173.                                 end
  174.                                 if not RelCfg.Bu then
  175.                                         RelCfg.Bu = {["Genre"] = genre}
  176.                                 else
  177.                                         spam = {["Genre"] = genre}
  178.                                         table.insert(RelCfg.Bu,spam)
  179.                                 end
  180.                                 Core.SendToAll("<"..RelCfg.Bot.."> Genre: "..genre.." is added by "..user.sNick.." to the ReleaseBot|")
  181.                                 Save_File(RelCfg.BuFile,RelCfg.Bu,"RelCfg.Bu")
  182.                                 return "Genre: "..genre.." is added to the ReleaseBot|"
  183.                         end
  184.                 else
  185.                         return "Add A Genre"," %[line:Genre]"," %[line:Genre]",
  186.                         -- profiles aan of uit
  187.                         {[-1] = 0,[0] = 1,[1] = 0,[2] = 0,[3] = 0,[4] = 0,[5] = 0,[6] = 0,}
  188.                 end
  189.         end,
  190.         delgen = function(user,data)
  191.                 if user then
  192.                         local s,e,ID = string.find(data,"%b<> %p%w+%s(%d+)|$")
  193.                         if not ID then
  194.                                 return "Error!, Use: "..RelCfg.Pfx..
  195.                                 "delgen <ID>"
  196.                         else
  197.                                 local x
  198.                                 for i,v in pairs(RelCfg.Bu) do
  199.                                         if string.lower(i) == string.lower(ID) then
  200.                                                 x = i
  201.                                                 break
  202.                                         end
  203.                                 end
  204.                                 if x then
  205.                                         RelCfg.Bu[x] = nil
  206.                                         Save_File(RelCfg.BuFile,RelCfg.Bu,"RelCfg.Bu")
  207.                                         return "ID: "..x.." is deleted from Genre list"
  208.                                 else
  209.                                         return "ID: "..ID.." is not in the Genre list"
  210.                                 end
  211.                         end
  212.                 else
  213.                         return "Delete A Genre"," %[line:ID]"," %[line:ID]",
  214.                         -- profiles aan of uit
  215.                         {[-1] = 0,[0] = 1,[1] = 0,[2] = 0,[3] = 0,[4] = 0,[5] = 0,[6] = 0,}
  216.                 end
  217.         end,
  218.         addrel = function(user,data)
  219.                 if user then
  220.                         local _,_,genre,release = data:find("%b<>%s+%S+%s+(%S+)%s+(.*)|$")
  221. --                      local s,e,genre,release = data.find("%b<> %p%w+%s(.*)%s(.*)|$")
  222.                         if not release  then
  223.                                 return "Error!, Use: "..RelCfg.Pfx..
  224.                                 "addrel <genre> <release>"
  225.                         else
  226.                                 for i,v in pairs(RelCfg.Rel) do
  227.                                         if v["Release"] == release then
  228.                                                 return "*** The release: >> "..v["Release"].." << is allready added to the ReleaseBot"                                                 
  229.                                         end
  230.                                 end
  231.                                 for i,v in pairs(RelCfg.Bu) do
  232.                                         if v["Genre"] == genre then
  233.                                                 ReleaseUpdate = {["Genre"] = genre,["Release"] = release,["Name"] = user.sNick,["Date"] = os.date(),["Time"] = os.time(),}
  234.                                                 table.insert(RelCfg.Rel,ReleaseUpdate)
  235.                                                 Core.SendToAll("<"..RelCfg.Bot.."> Release: "..release..", is added by "..user.sNick.." to the ReleaseBot under genre: "..v["Genre"].."|")
  236.                                                 Save_File(RelCfg.RelFile,RelCfg.Rel,"RelCfg.Rel")
  237.                                                 return "Release: "..release.." is added to releasebot|"
  238.                                         else
  239.                                                 msg = "*** The genre: >> "..genre.." << is not available yet.."
  240.                                         end
  241.                                 end
  242.                                 return msg
  243.                         end
  244.                 else
  245.                         return "Add A Release"," %[line:Genre] %[line:Release]"," %[line:Genre] %[line:Release]",
  246.                         -- profiles aan of uit
  247.                         {[-1] = 0,[0] = 1,[1] = 1,[2] = 1,[3] = 1,[4] = 0,[5] = 0,[6] = 0,}
  248.                 end
  249.         end,
  250.         delrel = function(user,data)
  251.                 if user then
  252.                         local s,e,ID = string.find(data,"%b<> %p%w+%s(%d+)|$")
  253.                         if not ID then
  254.                                 return "Error!, Use: "..RelCfg.Pfx..
  255.                                 "delrel <ID>"
  256.                         else
  257.                                 local x
  258.                                 for i,v in pairs(RelCfg.Rel) do
  259.                                         if string.lower(i) == string.lower(ID) then
  260.                                                 x = i
  261.                                                 break
  262.                                         end
  263.                                 end
  264.                                 if x then
  265.                                         RelCfg.Rel[x] = nil
  266.                                         Save_File(RelCfg.RelFile,RelCfg.Rel,"RelCfg.Rel")
  267.                                         return "ID: "..x.." is deleted from the ReleaseBot"
  268.                                 else
  269.                                         return "ID: "..ID.." is not in the ReleaseBot"
  270.                                 end
  271.                         end
  272.                 else
  273.                         return "Delete A Release"," %[line:ID]"," %[line:ID]",
  274.                         -- profiles aan of uit
  275.                         {[-1] = 0,[0] = 1,[1] = 1,[2] = 1,[3] = 0,[4] = 0,[5] = 0,[6] = 0,}
  276.                 end
  277.         end,
  278.         prunerel = function(user,data)
  279.                 if user then
  280.                         local s,e,prune = string.find(data,"%b<> %p%w+%s(%d+)|$")
  281.                         if not prune  then
  282.                                 return "Error!, Use: "..RelCfg.Pfx..
  283.                                 "prunerel <days>"
  284.                         else
  285.                                 local cur,chg = os.time()
  286.                                 local msg =     "\n\t"..string.rep("=",130)..
  287.                                                                 "\n\t\t\t\t\t- Listing Deleted Releases Older Then "..prune.." Days-"..
  288.                                                                 "\n\t"..string.rep("-",260).."\n"
  289.                                 for i,v in pairs(RelCfg.Rel) do
  290.                                         local td = os.difftime(os.time(),v["Time"])
  291.                                         local what = (td/86400)
  292.                                         local TtoGo = (tonumber(prune)-what)
  293.                                         if what > tonumber(prune) then
  294.                                                 --message
  295.                                                 msg = msg.."\tRelease: "..v["Release"].." is deleted from the releasebot\n"
  296.                                                 table.remove(RelCfg.Rel[i])
  297.                                                 RelCfg.Rel[i] = nil
  298.                                                 chg = true
  299.                                         end
  300.                                 end
  301.                                 if chg then
  302.                                         Save_File(RelCfg.RelFile,RelCfg.Rel,"RelCfg.Rel")
  303.                                         Core.SendToAll("<"..RelCfg.Bot.."> "..user.sNick.." Deleted All Releases Older then "..prune.." Days")
  304.                                         return msg.."\n\t"..string.rep("*",130).."\r\n\r\n"
  305.                                 end
  306.                                 return "There Are No Releases To Delete Yet!!\n"
  307.                         end
  308.                 else
  309.                         return "Clean release table"," %[line:Days to prune]"," %[line:Days to prune]",
  310.                         -- profiles aan of uit
  311.                         {[-1] = 0,[0] = 1,[1] = 1,[2] = 0,[3] = 0,[4] = 0,[5] = 0,[6] = 0,}
  312.                 end
  313.         end,
  314.         prunereq = function(user,data)
  315.                 if user then
  316.                         local s,e,prune = string.find(data,"%b<> %p%w+%s(%d+)|$")
  317.                         if not prune  then
  318.                                 return "Error!, Use: "..RelCfg.Pfx..
  319.                                 "prunereq <days>"
  320.                         else
  321.                                 local cur,chg = os.time()
  322.                                 local msg =     "\n\t"..string.rep("=",130)..
  323.                                                                 "\n\t\t\t\t\t- Listing Deleted Requests Older Then "..prune.." Days-"..
  324.                                                                 "\n\t"..string.rep("-",260).."\n"
  325.                                 for i,v in pairs(RelCfg.Req) do
  326.                                         local td = os.difftime(os.time(),v["Time"])
  327.                                         local what = (td/86400)
  328.                                         local TtoGo = (tonumber(prune)-what)
  329.                                         if what > tonumber(prune) then
  330.                                                 --message
  331.                                                 msg = msg.."\tRequest: "..v["Request"].." is deleted from the releasebot\n"
  332.                                                 table.remove(RelCfg.Req[i])
  333.                                                 RelCfg.Req[i] = nil
  334.                                                 chg = true
  335.                                         end
  336.                                 end
  337.                                 if chg then
  338.                                         Save_File(RelCfg.ReqFile,RelCfg.Req,"RelCfg.Req")
  339.                                         Core.SendToAll("<"..RelCfg.Bot.."> "..user.sNick.." Deleted All Requests Older then "..prune.." Days")
  340.                                         return msg.."\n\t"..string.rep("*",130).."\r\n\r\n"
  341.                                 end
  342.                                 return "*** There Are No Requests To Delete Yet!!\n"
  343.                         end
  344.                 else
  345.                         return "Clean request table"," %[line:Days to prune]"," %[line:Days to prune]",
  346.                         -- profiles aan of uit
  347.                         {[-1] = 0,[0] = 1,[1] = 1,[2] = 0,[3] = 0,[4] = 0,[5] = 0,[6] = 0,}
  348.                 end
  349.         end,
  350.         gen = function(user,data)
  351.                 if user then
  352.                         if next(RelCfg.Bu) then
  353.                                 local Count = 0
  354.                                 local reply =   "\n\t\t"..string.rep("=",30)..
  355.                                                                 "\n\t\t\t- Listing Genres -"..
  356.                                                                 "\n\t\t"..string.rep("-",60).."\n"..
  357.                                                                 "\n\t\tID.\t\tGenre\n\t\t"..string.rep("*",30).."\r\n"
  358.                                 for i,v in pairsByKeys(RelCfg.Bu) do
  359.                                                 reply = reply.."\t\tID: "..i..
  360.                                                 "\t\t"..v["Genre"].."\r\n"
  361.                                 end
  362.                                 return reply.."\n\t\t"..string.rep("*",30).."\r\n\r\n"
  363.                         else
  364.                                 return "There are no genres atm."
  365.                         end
  366.                 else
  367.                         return "Show Genres ","","",
  368.                         -- profiles aan of uit
  369.                         {[-1] = 0,[0] = 1,[1] = 1,[2] = 1,[3] = 1,[4] = 1,[5] = 1,[6] = 1,}
  370.                 end
  371.         end,
  372.         rls = function(user,data)
  373.                 if user then
  374.                         local s,e,genre = string.find(data,"%b<> %p%w+%s(.*)|$")
  375.                         if not genre or genre == "" then
  376.                                 if next(RelCfg.Rel) then
  377.                                         local reply =   "\n\t"..string.rep("=",100)..
  378.                                                                         "\n\t\t\t\t\t- Listing All Releases -"..
  379.                                                                         "\n\t"..string.rep("-",200).."\n"..
  380.                                                                         "\n\tID\t\tGenre\t\tRelease\r\n\t"..string.rep("*",100).."\r\n"
  381.                                         for i,v in pairsByKeys(RelCfg.Rel) do
  382.                                                 reply = reply.."\tID: "..i.."\t"..v["Genre"].."\t"..v["Release"]..", Added by "..v["Name"].." at "..v["Date"].."\r\n"
  383.                                         end
  384.                                         return reply.."\n\t"..string.rep("*",100).."\r\n\r\n"
  385.                                 else
  386.                                         return "There are no releases atm."
  387.                                 end
  388.                         else
  389.                                 local reply = "Listing Releases by Genre...\r\n\r\n\tID. "..
  390.                                 "\t\tGenre\t\tRelease\r\n\t"..string.rep("*",100).."\r\n"
  391.                                 for i,v in pairsByKeys(RelCfg.Rel) do
  392.                                         if v["Genre"] == genre then
  393.                                                 reply = reply.."\tID: "..i.."\t\t"..v["Genre"].."\t\t"..v["Release"]..", Added by "..v["Name"].." at "..v["Date"].."\r\n"
  394.                                         end
  395.                                 end
  396.                                 return reply.."\n\t"..string.rep("*",100).."\r\n\r\n"
  397.                         end
  398.                 else
  399.                         return "Show releases (genre) "," %[line:Genre]"," %[line:Genre]",
  400.                         -- profiles aan of uit
  401.                         {[-1] = 0,[0] = 1,[1] = 1,[2] = 1,[3] = 1,[4] = 1,[5] = 1,[6] = 1,}
  402.                 end
  403.         end,
  404.         today = function(user,data)
  405.                 if user then
  406.                         local s,e,genre = string.find(data,"%b<> %p%w+%s(.*)|$")
  407.                         local od,pos,datesplit = string.find(os.date(), "%d+%/(%d+)%/%d+%s%d+%:%d+%:%d+")
  408.                         if not genre or genre == "" then
  409.                                 if next(RelCfg.Rel) then
  410.                                         local reply =   "\n\t"..string.rep("=",100)..
  411.                                                                         "\n\t\t\t\t\t- Listing All Releases of today -"..
  412.                                                                         "\n\t"..string.rep("-",200).."\n"..
  413.                                                                         "\n\tID\t\tGenre\t\tRelease\r\n\t"..string.rep("*",100).."\r\n"
  414.                                         for i,v in pairsByKeys(RelCfg.Rel) do
  415.                                                 if v["Date"] then
  416.                                                         tb,pos,splittabledate = string.find(v["Date"], "%d+%/(%d+)%/%d+%s%d+%:%d+%:%d+")
  417.                                                         if splittabledate == datesplit then
  418.                                                                 reply = reply.."\tID: "..i.."\t\t"..v["Genre"].."\t\t"..v["Release"]..", Added by "..v["Name"].." at "..v["Date"].."\r\n"
  419.                                                         else
  420.                                                                 x=1
  421.                                                         end
  422.                                                 end
  423.                                         end
  424.                                         if x then
  425.                                                 --nice empty space to fool the bot^^
  426.                                         end
  427.                                         return reply.."\n\t"..string.rep("*",100).."\r\n\r\n"
  428.                                 else
  429.                                         return "There are no releases for today atm."
  430.                                 end
  431.                         else
  432.                                 local reply = "Listing Today's Releases by Genre...\r\n\r\n\tID. "..
  433.                                 "\tGenre\tRelease\r\n\t"..string.rep("*",100).."\r\n"
  434.                                 for i,v in pairsByKeys(RelCfg.Rel) do
  435.                                         if v["Genre"] == genre then
  436.                                                 if v["Date"] then
  437.                                                         tb,pos,splittabledate = string.find(v["Date"], "%d+%/(%d+)%/%d+%s%d+%:%d+%:%d+")
  438.                                                         if splittabledate == datesplit then
  439.                                                                 reply = reply.."\tID: "..i.."\t"..v["Genre"].."\t"..v["Release"]..", Added by "..v["Name"].." at "..v["Date"].."\r\n"
  440.                                                         else
  441.                                                                 x=1
  442.                                                         end
  443.                                                 end
  444.                                         end
  445.                                 end
  446.                                 if x then
  447.                                         --nice empty space to fool the bot^^
  448.                                 end
  449.                                 return reply.."\n\t"..string.rep("*",100).."\r\n\r\n"
  450.                         end
  451.                 else
  452.                         return "Show releases of today (genre) "," %[line:Genre]"," %[line:Genre]",
  453.                         -- profiles aan of uit
  454.                         {[-1] = 0,[0] = 1,[1] = 1,[2] = 1,[3] = 1,[4] = 1,[5] = 1,[6] = 1,}
  455.                 end
  456.         end,
  457.         findrel = function(user,data)
  458.                 if user then
  459.                         local s,e,rel = string.find(data,"%b<> %p%w+%s(.*)|$")
  460.                         if not rel then
  461.                                 return "Error!, Use: "..RelCfg.Pfx..
  462.                                 "findrel <releasename or a word init>"
  463.                         else
  464.                                 local msg = "\n\t\t"..string.rep("=",80)..
  465.                                                         "\n\t\t\t\t\t- Search Results for the word ["..rel.."] -"..
  466.                                                         "\n\t\t"..string.rep("-",160).."\r\n"
  467.                                 for i,v in pairsByKeys(RelCfg.Rel) do
  468.                                         --if string.lower(v["Release"]) == string.lower(rel) then
  469.                                         if string.find(string.lower(v["Release"]),rel) then
  470.                                                 msg = msg.."\r\n\r\n\t\tInfo on the Release: "..v["Release"].." :\n"..
  471.                                                 "\r\n\t\t"..string.rep("*",80)..
  472.                                                 "\r\n\t\t- Known ID\t\t: "..i..
  473.                                                 "\r\n\t\t- Full Releasename\t: "..v["Release"]..
  474.                                                 "\r\n\t\t- Genre\t\t: "..v["Genre"]..
  475.                                                 "\r\n\t\t- Added by\t: "..v["Name"]..
  476.                                                 "\r\n\t\t- Time of Add\t: "..v["Date"]..
  477.                                                 "\r\n\r\n\t\t"..string.rep("*",80).."\r\n"
  478.                                         else
  479.                                                 x=1
  480.                                         end
  481.                                 end
  482.                                 if x then
  483.                                         return msg.."\n\t\t"..string.rep("-",160).."\r\n\r\n"
  484.                                 else
  485.                                         return "The Release: <"..rel.."> is not found."
  486.                                 end
  487.                         end
  488.                 else
  489.                         return "Find A Release"," %[line:Release]"," %[line:Release]",
  490.                         -- profiles aan of uit
  491.                         {[-1] = 0,[0] = 1,[1] = 1,[2] = 1,[3] = 1,[4] = 1,[5] = 1,[6] = 1,}
  492.                 end
  493.                 DownloadFile()
  494.         end,
  495.         rlshelp = function(user,data)
  496.                 if user then
  497.                         local x
  498.                         local reply = "\n\t\t"..string.rep("=",40)..
  499.                                                   "\n\t\t\t- Release Command Help-"..
  500.                                                   "\n\t\t"..string.rep("-",80)..
  501.                                                   "\n\t\tCommand\t\tDescription\r\n"..
  502.                                                   "\t\t"..string.rep("*",40).."\r\n"
  503.                         for i,v in pairsByKeys(RelCmds) do
  504.                                 local desc,args,_,tab = RelCmds[i]()
  505.                                 if tab[user.iProfile] and tab[user.iProfile] == 1 then
  506.                                         x = 1
  507.                                         reply = reply.."\t\t!"..string.format("%-15s",i).."\t"..desc.."\r\n"
  508.                                 end
  509.                         end
  510.                         if x then
  511.                                 return reply.."\n\t\t"..string.rep("*",40).."\r\n\r\n"
  512.                         else
  513.                                 return "Sorry "..user.sNick.." These commands are disabled for your profile."
  514.                         end
  515.                 else
  516.                         return "Show Release Help","","",
  517.                         -- profiles aan of uit
  518.                         {[-1] = 1,[0] = 1,[1] = 1,[2] = 1,[3] = 1,[4] = 1,[5] = 1,[6] = 1,}
  519.                 end
  520.         end,
  521.         relabout = function(user,data)
  522.                 local reply = "\n\t\t"..string.rep("=",60)..
  523.                                           "\n\n\t\t\t\t\t-About this script-"..
  524.                                           "\n\t\t"..string.rep("-",120).."\n"
  525.                 if user then
  526.                         x=1
  527.                         local FileSize1 = CheckFile(RelCfg.BuFile)
  528.                         local FileSize2 = CheckFile(RelCfg.RelFile)
  529.                         local FileSize3 = CheckFile(RelCfg.ReqFile)
  530.                         if x then
  531.                                 reply = reply.."\t\t09-02-2008\n"..
  532.                                 "\n\t\tReleaseBot "..RelCfg.Version.." ".._VERSION.." [API 2] made by Daywalker?\n\t\tEdited by RPGamer"..
  533.                                 "\n\t\tUsing some code snibbets from Sir American Idiot cause i like that style and it's easy going imo :)\n"..
  534.                                 "\t\tTnx to Plop to point me to the right table form :))\n"..
  535.                                 "\t\tAnd as always CrazyGuy for listen to my mumbling about some code :P\n"..
  536.                                 "\n\t\tThis Script Release Candidate was Finished at 04/05/08 16:44:24 +1 UTC"..
  537.                                 "\n\t\tExact Date and Time for now is: "..os.date().." "..RelCfg.Tz..
  538.                                 "\n\t\tScript uses "..Mem().." atm."..
  539.                                 "\n\n\t\tCurrent File Sizes are for:"..
  540.                                 "\n\t\t"..string.rep("~",25)..
  541.                                 "\n\t\t- Genre file\t: "..FileSize1..
  542.                                 "\n\t\t- Release file\t: "..FileSize2..
  543.                                 "\n\t\t- Request file\t: "..FileSize3..
  544.                                 "\n\t\t"..string.rep("~",25).."\n"
  545.                         end
  546.                         return reply.."\n\t\t"..string.rep("*",60).."\r\n\r\n"
  547.                 else
  548.                         return "Show about this script","","",
  549.                         -- profiles aan of uit
  550.                         {[-1] = 1,[0] = 1,[1] = 1,[2] = 1,[3] = 1,[4] = 1,[5] = 1,[6] = 1,}
  551.                 end
  552.         end,
  553. }
  554.  
  555. ReqCmds = {
  556.         addreq = function(user,data)
  557.                 if user then
  558.                         local s,e,genre,request = data.find("%b<> %p%w+%s(.*)%s(.*)|$")
  559.                         if not request  then
  560.                                 return "Error!, Use: "..RelCfg.Pfx..
  561.                                 "addreq <genre> <request>"
  562.                         else
  563.                                 for i,v in pairs(RelCfg.Req) do
  564.                                         if v["Request"] == request then
  565.                                                 return "*** The request: >> "..v["Request"].." << is allready added to the RequestBot"                                                 
  566.                                         end
  567.                                 end
  568.                                 for i,v in pairs(RelCfg.Bu) do
  569.                                         if v["Genre"] == genre then
  570.                                                 RequestUpdate = {["Genre"] = genre,["Request"] = request,["Name"] = user.sNick,["Date"] = os.date(),["Time"] = os.time(),}
  571.                                                 table.insert(RelCfg.Rel,RequestUpdate)
  572.                                                 Core.SendToAll("<"..RelCfg.Bot.."> Request: "..request.." is added by "..user.sNick.." to the RequestBot under genre: "..v["Genre"].."|")
  573.                                                 Save_File(RelCfg.ReqFile,RelCfg.Req,"RelCfg.Req")                                                      
  574.                                                 return "Done!!"
  575.                                         else
  576.                                                 msg = "*** The genre: >> "..genre.." << is not available yet.."
  577.                                         end
  578.                                 end
  579.                                 return msg
  580.                         end
  581.                 else
  582.                         return "Add A Request"," %[line:Genre] %[line:Request]"," %[line:Genre] %[line:Request]",
  583.                         -- profiles aan of uit
  584.                         {[-1] = 0,[0] = 1,[1] = 1,[2] = 1,[3] = 1,[4] = 0,[5] = 0,[6] = 0,}
  585.                 end
  586.         end,
  587.         delreq = function(user,data)
  588.                 if user then
  589.                         local s,e,ID = string.find(data,"%b<> %p%w+%s(%d+)|$")
  590.                         if not ID then
  591.                                 return "Error!, Use: "..RelCfg.Pfx..
  592.                                 "delrel <ID>"
  593.                         else
  594.                                 local x
  595.                                 for i,v in pairs(RelCfg.Req) do
  596.                                         if string.lower(i) == string.lower(ID) then
  597.                                                 x = i
  598.                                                 break
  599.                                         end
  600.                                 end
  601.                                 if x then
  602.                                         RelCfg.Req[x] = nil
  603.                                         Save_File(RelCfg.ReqFile,RelCfg.Req,"RelCfg.Req")
  604.                                         return "ID: "..x.." is deleted from the RequestBot"
  605.                                 else
  606.                                         return "ID: "..ID.." is not in the RequestBot"
  607.                                 end
  608.                         end
  609.                 else
  610.                         return "Delete A Request"," %[line:ID]"," %[line:ID]",
  611.                         -- profiles aan of uit
  612.                         {[-1] = 0,[0] = 1,[1] = 1,[2] = 1,[3] = 0,[4] = 0,[5] = 0,[6] = 0,}
  613.                 end
  614.         end,
  615.         req = function(user,data)
  616.                 if user then
  617.                         local s,e,genre = string.find(data,"%b<> %p%w+%s(.*)|$")
  618.                         if not genre or genre == "" then
  619.                                 if next(RelCfg.Req) then
  620.                                         local reply = "Listing All Requests ...\r\n\r\n\tID. "..
  621.                                         "\t\tGenre\t\tRequest\r\n\t"..string.rep("*",100).."\r\n"
  622.                                         for i,v in pairsByKeys(RelCfg.Req) do
  623.                                                 reply = reply.."\tID: "..i.."\t\t"..v["Genre"].."\t\t"..v["Request"]..", Added by "..v["Name"].." at "..v["Date"].."\r\n"
  624.                                         end
  625.                                         return reply.."\n\t"..string.rep("*",100).."\r\n\r\n"
  626.                                 else
  627.                                         return "There are no requests atm."
  628.                                 end
  629.                         else
  630.                                 local reply = "Listing Requests by Genre...\r\n\r\n\tID. "..
  631.                                 "\t\tGenre\t\tRequest\r\n\t"..string.rep("*",100).."\r\n"
  632.                                 for i,v in pairsByKeys(RelCfg.Req) do
  633.                                         if v["Genre"] == genre then
  634.                                                 reply = reply.."\tID: "..i.."\t\t"..v["Genre"].."\t\t"..v["Request"]..", Added by "..v["Name"].." at "..v["Date"].."\r\n"
  635.                                         end    
  636.                                 end
  637.                                 return reply.."\n\t"..string.rep("*",100).."\r\n\r\n"
  638.                         end
  639.                 else
  640.                         return "Show requests (genre) "," %[line:Genre]"," %[line:Genre]",
  641.                         -- profiles aan of uit
  642.                         {[-1] = 0,[0] = 1,[1] = 1,[2] = 1,[3] = 1,[4] = 1,[5] = 1,[6] = 1,}
  643.                 end
  644.         end,
  645.         reqhelp = function(user,data)
  646.                 if user then
  647.                         local x
  648.                         local reply = "\r\n\r\n\tRequest Command Help\r\n\r\n\tCommand\t\tDescription\r\n"..
  649.                         "\t"..string.rep("*",40).."\r\n"
  650.                         for i,v in pairsByKeys(ReqCmds) do
  651.                                 local desc,args,_,tab = ReqCmds[i]()
  652.                                 if tab[user.iProfile] and tab[user.iProfile] == 1 then
  653.                                         x = 1
  654.                                         reply = reply.."\t!"..string.format("%-15s",i).."\t"..desc.."\r\n"
  655.                                 end
  656.                         end
  657.                         if x then
  658.                                 return reply.."\n\t"..string.rep("*",40).."\r\n\r\n"
  659.       &