SHOW:
|
|
- or go back to the newest paste.
| 1 | - | local tMess = {}
|
| 1 | + | -- pastebin get zvV7Le0F ourchat |
| 2 | - | chatbox = peripheral.find("chatbox")
|
| 2 | + | -- std pb zvV7Le0F ourchat |
| 3 | - | if not chatbox then |
| 3 | + | |
| 4 | - | error("MoarPeripherals Chatbox is needed.")
|
| 4 | + | getChatURL = "http://minechat.x10host.com/index.php?true=true" |
| 5 | postChatURL = "http://minechat.x10host.com/index.php?words=" | |
| 6 | - | function b() |
| 6 | + | |
| 7 | - | while true do |
| 7 | + | tMess = {}
|
| 8 | - | ev, side, playername, mess = os.pullEvent("chat_message")
|
| 8 | + | tDisplay = {}
|
| 9 | - | thing = playername..": "..mess |
| 9 | + | tArg = {...}
|
| 10 | - | local a = http.post("http://minechat.x10host.com/index.php?words="..textutils.urlEncode(thing))
|
| 10 | + | scr_x, scr_y = term.getSize() |
| 11 | if tArg[1] then | |
| 12 | playername = table.concat(tArg, " ") | |
| 13 | else | |
| 14 | term.clear() | |
| 15 | - | while true do |
| 15 | + | term.setCursorPos(2,scr_y-2) |
| 16 | - | local b = http.post("http://minechat.x10host.com/index.php?true=true")
|
| 16 | + | print("Enter your name:")
|
| 17 | - | b = b.readAll() |
| 17 | + | repeat |
| 18 | - | if b ~= tMess[#tMess] then |
| 18 | + | term.setCursorPos(2,scr_y-1) |
| 19 | - | tMess[#tMess+1] = b |
| 19 | + | term.clearLine() |
| 20 | - | chatbox.say(b) |
| 20 | + | write(">>")
|
| 21 | playername = read() | |
| 22 | until playername ~= "" | |
| 23 | -- print(fs.getName(shell.getRunningProgram()) .. " <username>") | |
| 24 | -- return false | |
| 25 | - | parallel.waitForAll(a, b) |
| 25 | + | |
| 26 | ||
| 27 | function send(data) | |
| 28 | local a = http.post(postChatURL..textutils.urlEncode(data)) | |
| 29 | return a | |
| 30 | end | |
| 31 | ||
| 32 | commands = {
| |
| 33 | ["me"] = function() | |
| 34 | if string.len(arg1) > 0 then | |
| 35 | send( "* "..playername.." "..arg1 ) | |
| 36 | else | |
| 37 | putInDisplay("/me <whatever>")
| |
| 38 | end | |
| 39 | end, | |
| 40 | ["nick"] = function() | |
| 41 | if string.len(arg1) > 0 then | |
| 42 | local sOldName = playername | |
| 43 | playername = arg1 | |
| 44 | send( "* "..sOldName.." is now known as "..playername ) | |
| 45 | else | |
| 46 | putInDisplay("/nick <newname>")
| |
| 47 | end | |
| 48 | end, | |
| 49 | ["help"] = function() | |
| 50 | putInDisplay("Available commands:")
| |
| 51 | local sCommands = "*" | |
| 52 | for sCommand, fnCommand in pairs( commands ) do | |
| 53 | sCommands = sCommands .. " /" .. sCommand | |
| 54 | end | |
| 55 | putInDisplay( sCommands.." /logout" ) | |
| 56 | end, | |
| 57 | ["insult"] = function() | |
| 58 | insults = {
| |
| 59 | "USERNAME can go eat a bag of shiza.", | |
| 60 | "USERNAME is fat and ugly and really, really stupid.", | |
| 61 | "USERNAME is a fat sack o' crap.", | |
| 62 | "If USERNAME was admin...eh, I don't want to think of such things...", | |
| 63 | "No one is more pathetic than USERNAME.", | |
| 64 | "USERNAME is known to suck more than Kirby.", | |
| 65 | "USERNAME was the inspiration of Bubsy 3D.", | |
| 66 | "USERNAME's IQ is his age...times two!", | |
| 67 | "USERNAME's programming skills rival that of the Software Toolworks.", | |
| 68 | "Down with USERNAME, the killer of kings!", | |
| 69 | "USERNAME can go suck it!", | |
| 70 | "Stop being so adversarial, USERNAME!", | |
| 71 | "USERNAME cannot beat Air Man!", | |
| 72 | "USERNAME likes Daikatana and Bubsy.", | |
| 73 | "USERNAME is like King Midas, except with coagulated blood rather than gold.", | |
| 74 | "USERNAME's mother was a hampster, and his father smells of elderberry!", | |
| 75 | "Ni!", | |
| 76 | "USERNAME is a dishonorable Ferrengi p'tach!", | |
| 77 | "Pepperoni is too spicy for USERNAME.", | |
| 78 | } | |
| 79 | send(string.gsub(insults[math.random(1,#insults)],"USERNAME",arg1)) | |
| 80 | end, | |
| 81 | ["kill"] = function() | |
| 82 | if #arg1 < 1 then | |
| 83 | send(playername.." was killed.") | |
| 84 | else | |
| 85 | send(arg1.." was killed.") | |
| 86 | end | |
| 87 | end, | |
| 88 | ["id"] = function() | |
| 89 | send(playername.."'s computer ID is "..os.getComputerID()..".") | |
| 90 | end, | |
| 91 | ["clear"] = function() | |
| 92 | send(string.rep(" ",(51*19))..playername.." cleared the screen.")
| |
| 93 | end, | |
| 94 | ["exit"] = function() | |
| 95 | send(playername.." has left the chat") | |
| 96 | return true | |
| 97 | end, | |
| 98 | ["logout"] = function() | |
| 99 | send(playername.." has left the chat") | |
| 100 | return true | |
| 101 | end, | |
| 102 | } | |
| 103 | ||
| 104 | local function scrollClear(speed) | |
| 105 | scr_x, scr_y = term.getSize() | |
| 106 | for a = 1, scr_y/speed do | |
| 107 | term.scroll(speed*speed) | |
| 108 | sleep(0) | |
| 109 | end | |
| 110 | end | |
| 111 | ||
| 112 | function putInDisplay(text) | |
| 113 | tDisplay[#tDisplay+1] = tostring(text) | |
| 114 | redraw = true | |
| 115 | return tostring(text) | |
| 116 | end | |
| 117 | ||
| 118 | function seperateMethods(input) | |
| 119 | output={}
| |
| 120 | for key,value in pairs(input) do | |
| 121 | table.insert(output, {key,value})
| |
| 122 | end | |
| 123 | return output | |
| 124 | end | |
| 125 | ||
| 126 | local function b() | |
| 127 | send(playername.." joined the chat!") | |
| 128 | while true do | |
| 129 | term.setCursorPos(1,scr_y) | |
| 130 | term.clearLine() | |
| 131 | write(":")
| |
| 132 | mess = io.read() | |
| 133 | term.setCursorPos(1,scr_y-1) | |
| 134 | term.clearLine() | |
| 135 | local sCommand = string.match( mess, "^/([a-z]+)" ) | |
| 136 | if sCommand then | |
| 137 | local fnCommand = commands[sCommand] | |
| 138 | if fnCommand then | |
| 139 | if string.find(mess," ") then | |
| 140 | arg1 = string.sub(mess,string.find(mess," ")+1) | |
| 141 | a = fnCommand(arg1) | |
| 142 | else | |
| 143 | arg1 = "" | |
| 144 | a = fnCommand() | |
| 145 | end | |
| 146 | if a == true then | |
| 147 | return true | |
| 148 | end | |
| 149 | else | |
| 150 | print("Bad command!")
| |
| 151 | end | |
| 152 | else | |
| 153 | send( "<"..playername.."> "..mess ) | |
| 154 | end | |
| 155 | end | |
| 156 | end | |
| 157 | ||
| 158 | local function clearLines(top, bottom) | |
| 159 | for a = top, bottom do | |
| 160 | term.setCursorPos(1,a) | |
| 161 | term.clearLine() | |
| 162 | end | |
| 163 | end | |
| 164 | ||
| 165 | function chatPrint(log) | |
| 166 | if not type(log) == "table" then log = {log} end
| |
| 167 | local prevX, prevY = term.getCursorPos() | |
| 168 | clearLines(1,scr_y-1) | |
| 169 | indent = 0 --in case any line is greater than the length of the screen | |
| 170 | indentIn = 0 --in the same case, mid writing | |
| 171 | for a = 1, #log do | |
| 172 | indent = indent + math.floor(#log[a]/scr_x) | |
| 173 | end | |
| 174 | for a = 1, #log do | |
| 175 | for b = 0, math.floor(#log[a]/scr_x) do | |
| 176 | if b > 0 then indentIn = indentIn + 1 end | |
| 177 | term.setCursorPos(1,((((scr_y-1)+a-#log))-indent)+indentIn) | |
| 178 | write(string.sub(log[a],(b*scr_x),((b*scr_x)+scr_x)-1)) | |
| 179 | end | |
| 180 | end | |
| 181 | term.setCursorPos(prevX,scr_y) | |
| 182 | end | |
| 183 | ||
| 184 | function a() | |
| 185 | while true do | |
| 186 | for a = 1, 5 do | |
| 187 | get = http.post(getChatURL) | |
| 188 | if get then break else | |
| 189 | print("Cannot connect to server...retrying...")
| |
| 190 | sleep(1) | |
| 191 | end | |
| 192 | end | |
| 193 | if not get then error("Failed to reach server. Try again later.") end
| |
| 194 | get = get.readAll() | |
| 195 | if (tMess[#tMess] ~= get) and (redraw ~= true) then putInDisplay(get) end | |
| 196 | if get ~= tMess[#tMess] or redraw == true then | |
| 197 | if redraw == true then tMess[#tMess+1] = get end | |
| 198 | chatPrint(tDisplay) | |
| 199 | redraw = false | |
| 200 | end | |
| 201 | end | |
| 202 | end | |
| 203 | term.clear() | |
| 204 | parallel.waitForAny(a, b) | |
| 205 | scrollClear(2) | |
| 206 | term.setCursorPos(1,1) | |
| 207 | print("Thank you for using OurChat!") |