Advertisement
cul8ter

dial_control.lua

Oct 14th, 2024 (edited)
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.32 KB | None | 0 0
  1. local mod=peripheral.find("modem")
  2. local sg=peripheral.find("stargate")
  3. local _,addr=pcall(function() return dofile("addrs.lua") end)
  4. addr=addr or {}
  5. local _,password=pcall(function() return dofile("password.lua") end)
  6. password=password or {}
  7. local _,whitelist=pcall(function() return dofile("whitelist.lua") end)
  8. whitelist=whitelist or false
  9. local prevprevstate=""
  10. local knownaddrs={}
  11. dialout=false
  12. mod.open(555)
  13. while true do
  14.     local event=table.pack(os.pullEvent())
  15.     if event[1]=="modem_message" then
  16.         local _,_,port,reply,packet=table.unpack(event)
  17.         local msg=packet[1] or packet
  18.         if port==555 then
  19.             if msg=="disconnect" then
  20.                 worked,ret=sg.disconnect()
  21.             elseif msg=="get_addr" then
  22.                 ret=sg.localAddress()
  23.             elseif msg=="toggle" then
  24.                 if sg.irisState()=="Open" then
  25.                     worked,ret=sg.closeIris()
  26.                 else
  27.                     worked,ret=sg.openIris()
  28.                 end
  29.             elseif msg=="open" then
  30.                 worked,ret=sg.openIris()
  31.             elseif msg=="close" then
  32.                 sg.closeIris()
  33.             elseif msg=="exit" then
  34.                 break
  35.             elseif msg=="reboot" then
  36.                 mod.transmit(reply,555,"rebooting")
  37.                 shell.run("reboot")
  38.             elseif msg=="update" then
  39.                 mod.transmit(reply,555,"updating")
  40.                 shell.run("rm dial_control.lua")
  41.                 shell.run("pastebin get Gigj4uj7 dial_control.lua")
  42.                 shell.run("reboot")
  43.             elseif packet[1]=="auth" then
  44.                 sg.sendMessage(packet[2])
  45.             else
  46.                 worked,ret=sg.dial(addr[msg] or msg)
  47.             end
  48.             if ret or worked~=nil then mod.transmit(reply,555,tostring(ret or worked)) end
  49.         end
  50.     elseif event[1]=="sgDialOut" then
  51.         sg.closeIris()
  52.         dialout=true
  53.     elseif event[1]=="sgStargateStateChange" then
  54.         local _,_,state,prevstate=table.unpack(event)
  55.         if (state=="Connected" and prevprevstate=="Dialling" and dialout) or state=="idle" then
  56.             sg.openIris()
  57.             dialout=false
  58.         end
  59.         prevprevstate=prevstate
  60.     elseif event[1]=="sgDialIn" then
  61.         if not knownaddrs[event[3]] then
  62.             io.open("addrlog.txt","a"):write(event[3].."\n"):close()
  63.             knownaddrs[event[3]]=true
  64.         end
  65.         if whitelist then
  66.             if whitelist[event[3]] then
  67.                 sg.openIris()
  68.             else
  69.                 if whitelist.strict then
  70.                     sg.disconnect()
  71.                 else
  72.                     sg.closeIris()
  73.                 end
  74.             end
  75.         end
  76.     elseif event[1]=="sgMessageReceived" then
  77.         if password[event[3]] or password[sg.remoteAddress()] then
  78.             sg.openIris()
  79.         end
  80.     end
  81. end
  82. mod.close(555)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement