-- SlotsBot for PtokaX DC Hub 0.3.2.6 Test Drive 4 -- On command +slots, sends a search and checks the results for free slots & total number of slots -- Sends the results in PM from Hub bot -- Adaptation by OpiumVolage (01 July 2003) based on -- retrobot™ v0.99ß -- slots module -- by tezlo -- 2003 -- Twiddled a bit to have results sent in PM - by bolamix 1 July 2003 -- unused sTarget left for future syntax parsing. botName = "your_hub_bot" -- library function getid(table, name) return foreachi(table, function(id, item) if item.sName == %name then return id end end) end function putitem(table, item) if not item then return end local id = getid(table, item.sName) if id then table[id] = item else tinsert(table, item) id = table.n end return id end -- events function OnTimer() local i = 1 while tabSlots[i] do local table = tabSlots[i] if clock() >= table.iClock + tmrSlots then if table.tItems.n == 0 then SendPmToNick(table.sName, botName, "No users with free slots found|") end SendPmToNick(table.sName, botName, "Done|") tremove(tabSlots, i) if tabSlots.n == 0 then frmHub:EnableSearchData(0) end else i = i + 1 end end end function slotsOnHub(user, args) local s, e, free, all = strfind(args, " (%d+)/(%d+)"..strchar(5)) foreachi(tabSlots, function(id, item) if not getid(item.tItems, %user.sName) then putitem(item.tItems, { sName = %user.sName, sValue = %free.."/"..%all }) -- if item.sTarget and (%user.sName == item.sTarget) then -- SendToNick(item.sName, " user "..%user.sName.." "..%free.."/"..%all.."|") -- item.iClock = item.iClock - tmrSlots -- elseif not item.sTarget and if (tonumber(%free) >= item.iNR) then SendPmToNick(item.sName, botName, " user "..%user.sName.." "..%free.."/"..%all.."|") end end end) end function doSlots(user, nr, nick) user:SendPM(botName, "Checking..|") frmHub:EnableSearchData(1) SendToAll("$Search Hub:"..Command.." T?F?0?1?.|") putitem(tabSlots, { sName = user.sName, iClock = clock(), iNR = nr, tItems = {n=0} }) -- putitem(tabSlots, { sName = user.sName, sTarget = nick, iClock = clock(), iNR = nr, tItems = {n=0} }) end -- init tmrSlots = 5 -- Number of seconds waiting for replys tabSlots = {n=0} Command = "+slots" function DataArrival(user, data) if strfind(data, "%b<>%s+("..Command..").*|") then s, e, nr = strfind(data, "%b<>%s+"..Command.."%s+([0-9]+)") if s then nr = tonumber(nr) else nr = 1 end doSlots(user, nr) return 1 end if strfind(data, "^%$SR") then slotsOnHub(user, data) end end function Main() SetTimer(tmrSlots*1000) StartTimer() end