Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local function update()
- local h = http.get "https://pastebin.com/raw/L0ZKLBRG"
- local f = fs.open(shell.getRunningProgram(), "w")
- f.write(h.readAll())
- f.close()
- h.close()
- end
- if ... == "update" then update() end
- local m = peripheral.find "modem"
- local s = peripheral.find "speaker"
- local chan = 3636
- print "Welcome to the Lightweight Messaging System (developed by GTech Potatronics)"
- m.open(chan)
- local username = settings.get "lms.username"
- if username == nil then
- write "Username: "
- username = read()
- end
- local w, h = term.getSize()
- local send_window = window.create(term.current(), 1, h, w, 1)
- local message_window = window.create(term.current(), 1, 1, w, h - 1)
- local function notification_sound()
- if s then
- for i = 4, 12, 4 do
- s.playNote("flute", 3, i)
- sleep(0.2)
- end
- end
- end
- local function exec_in_window(w, f)
- local x, y = term.getCursorPos()
- local last = term.redirect(w)
- f()
- term.redirect(last)
- w.redraw()
- term.setCursorPos(x, y)
- end
- local function print_message(txt)
- exec_in_window(message_window, function()
- print(txt)
- end)
- end
- local function trim(s)
- return s:match( "^%s*(.-)%s*$" )
- end
- local banned_text = {
- "yeet",
- "ecs dee",
- "dab",
- }
- if debug and debug.getmetatable then
- _G.getmetatable = debug.getmetatable
- end
- local function to_case_insensitive(text)
- return text:gsub("[a-zA-Z]", function(char) return ("[%s%s]"):format(char:lower(), char:upper()) end)
- end
- local function filter(text)
- local out = text
- for _, b in pairs(banned_text) do
- out = out:gsub(to_case_insensitive(b), "")
- end
- return out
- end
- local function strip_extraneous_spacing(text)
- return text:gsub("%s+", " ")
- end
- local function collapse_e_sequences(text)
- return text:gsub("ee+", "ee")
- end
- local function preproc(text)
- return trim(filter(strip_extraneous_spacing(collapse_e_sequences(text:sub(1, 128)))))
- end
- local function add_message(msg, usr)
- local msg, usr = preproc(msg), preproc(usr)
- if msg == "" or usr == "" then return end
- print_message(usr .. ": " .. msg)
- end
- local function send()
- term.redirect(send_window)
- term.setBackgroundColor(colors.white)
- term.setTextColor(colors.black)
- term.clear()
- local hist = {}
- while true do
- local msg = read(nil, hist)
- if msg == "!!exit" then return
- elseif msg == "!!update" then update() print_message "Updated. Please restart the program."
- else
- table.insert(hist, msg)
- if preproc(msg) == "" then
- print_message "Your message is considered spam."
- else
- add_message(msg, username)
- m.transmit(chan, chan, { message = msg, username = username })
- end
- end
- end
- end
- local function recv()
- while true do
- local _, _, channel, _, message = os.pullEvent "modem_message"
- if channel == chan and type(message) == "table" and message.message and message.username then
- notification_sound()
- add_message(message.message, message.username)
- end
- end
- end
- m.transmit(chan, chan, { username = username, message = "Connected." })
- parallel.waitForAny(send, recv)
Add Comment
Please, Sign In to add comment