// ==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. (This script does not allow you to communicate with everyone, but allows you to communicate with all users of this script)
// @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
}
})()