// ==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].toLowerCase() === message[i - 1].toLowerCase()) {
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
}
})()