// ==UserScript== // @name Global Chat // @namespace - // @version 0.1 // @description You can chat with other players from all servers! When you write something in the chat sploop.io then it is shown in the global chat. // @author Nudo // @match *://sploop.io/* // @icon https://www.google.com/s2/favicons?sz=64&domain=sploop.io // @grant none // @downloadURL none // ==/UserScript== (function() { const SERVER = "globalchatserver.stopitplz.repl.co" const WSSERVER = `ws${location.protocol.slice(4, 5) || ""}://${SERVER}` let socket = null function sendMessage(data) { if (!socket) { return void 0 } if (socket.readyState !== 1) { return void 0 } socket.send(JSON.stringify([localStorage.nickname || "noname", data])) } function serverSetup() { socket = new WebSocket(WSSERVER) socket.binaryType = "arraybuffer" socket.onopen = () => { sendMessage("connected") } socket.onmessage = (message) => { const data = JSON.parse(message.data) onMessage(data) } } function onMessage(data) { Menu.addMessage(data[0], data[1], data[2]) } window.addEventListener("load", () => serverSetup()) const Menu = {} Menu.html = `
` Menu.addMessage = function(nickname, message, color) { if (!message.length) { return void 0 } const wrapper = document.querySelector(".chat-wrapper") message = antiSpam(message) wrapper.innerHTML += `
${nickname}: ${message}
` wrapper.scrollTo(0, wrapper.scrollHeight) } const canvas = document.getElementById("game-canvas") canvas.insertAdjacentHTML("beforebegin", Menu.html) window.addEventListener("keydown", (event) => { if (event.code === "Enter") { const chatValue = document.getElementById("chat").value sendMessage(chatValue) } }) function antiSpamLetters(message) { let letterCounter = {} for (let i = 0; i < message.length; i++) { if (!message[i - 1]) { continue } if (letterCounter[message[i]] == null) { letterCounter[message[i]] = 0 } if (message[i] === message[i - 1]) { letterCounter[message[i]] += 1 } } for (const letter in letterCounter) { if (letterCounter[letter] >= 5) { message = "spam" } } return message } function antiSpamSymbols(message) { let symbolCounter = {} const symbols = ["@", "!", "#", "$", "%", "&"] for (const symbol of symbols) { if (message.match(symbol)) { for (const letter of message) { if (symbolCounter[letter] == null) { symbolCounter[letter] = 0 } if (letter === symbol) { symbolCounter[letter] += 1 } } } } for (const symbol in symbolCounter) { if (symbolCounter[symbol] >= 5) { message = "spam" } } return message } function antiSpam(message) { message = antiSpamLetters(message) message = antiSpamSymbols(message) return message } })()