Arras.io Chat

Use Right Shift button to enable/disable chat

目前為 2023-01-12 提交的版本,檢視 最新版本

// ==UserScript==
// @name        Arras.io Chat
// @match	    *://arras.io/*
// @match       *://arras.netlify.app/*
// @match       *://arrax.io/*
// @match       *://arras.cx/*
// @author      Inellok
// @description Use Right Shift button to enable/disable chat
// @namespace   Inellok Labs.
// @version     1.7
// @run-at      document-end
// @license     MIT
// ==/UserScript==


function getServerFromLoc()
{
    let rlockhash = "";
    let started = false;
    for (let i = 0; i < location.hash.length; i++) {
        if (location.hash[i] === '#') {
            started = true;
            continue
        }
        if (started) {
            rlockhash += location.hash[i];
        }
    }
    return rlockhash;
}


function getName()
{
    let rname = "unnamed";
	let item = window.localStorage.getItem("arras.io");

	if (item != null) {
		rname = JSON.parse(window.localStorage.getItem("arras.io")).name;
	}
    return rname;
}


function sendEverything() {
    let xhr = new XMLHttpRequest();
    xhr.open("POST", "https://arrasio-chat.glitch.me/");

    //We need this to send http requests from arras.io page to the server with other URL
    xhr.setRequestHeader("Accept", "plain/text");
    xhr.setRequestHeader("Content-Type", "plain/text");
    //------

    //when we got server's response
    xhr.onreadystatechange = function() {
        let srv = getServerFromLoc();
        if (xhr.readyState === 4) {
            chat_container.innerText = "";
            let msgs = JSON.parse(xhr.responseText);
            for (let i = 0; i < msgs.length; ++i) {
                if (srv === msgs[i].srv) {
                    let msg = msgs[i].nick + ": " + msgs[i].message;
                    chat_container.innerText += (msg + '\n');
                }
            }
        }
    };

    xhr.send(JSON.stringify({
        srv: getServerFromLoc(),
        nick: getName(),
        message: msg_container.value
    }));
}

//We need this to draw chat over arras drawing canvas
let canvas = document.getElementById("canvas");
canvas.style.zIndex = 1;
canvas.style.position = "absolute";


let lockhash = "";


let info_container = document.createElement("div");
info_container.innerText = "Arras.io Chat (by Inellok)";
info_container.style.marginLeft = "40%";
info_container.style.color = "white";
info_container.style.opacity = "1";


let chat_container = document.createElement("div");
chat_container.style.marginLeft = "2%";
chat_container.style.color = "red";
chat_container.style.opacity = "1";
chat_container.style.height = "88%";
chat_container.fontSize = "100%";

let msg_container = document.createElement("input");

msg_container.placeholder = "message";
msg_container.style.marginLeft = "2%";
msg_container.style.color = "black";
msg_container.style.opacity = "1";
msg_container.style.height = "5%";
msg_container.style.width = "70%";
msg_container.style.fontSize = "110%";


let send_container = document.createElement("button");

send_container.innerText = "SEND / UPDATE";
send_container.style.marginLeft = "2%";
send_container.style.color = "black";
send_container.style.opacity = "1";
send_container.style.height = "5%";
send_container.style.width = "25%";
send_container.style.fontSize = "60%";

send_container.onclick = function() {
    sendEverything();

    return false;
	}

let mainContainer = document.createElement("div");
mainContainer.style = `
    width:50%;
    height:85%;
    background:#000000;
    opacity: 90%;
    margin: auto;
    font-size: 150%;
    visibility:hidden;
    z-index:2;
    position:absolute;
    margin-left: 20%`;

msg_container.addEventListener("keydown", (e) => {
    //We need this to not move our character while writing message
    e.stopPropagation();
    if (e.code === "Enter" && document.activeElement === msg_container) {
        sendEverything();
        msg_container.value = "";
    }

    if (e.code === "ShiftRight") {
        if (mainContainer.style.visibility === "hidden") {
            mainContainer.style.visibility = "visible";
        } else {
            mainContainer.style.visibility = "hidden";
        }
		}
});

window.addEventListener("keydown", (e) => {
    //show/hide our chat when press right shift
    if (e.code === "ShiftRight") {
        if (mainContainer.style.visibility === "hidden") {
            mainContainer.style.visibility = "visible";
        } else {
            mainContainer.style.visibility = "hidden";
        }
    }


});

mainContainer.appendChild(info_container);
mainContainer.appendChild(chat_container);
mainContainer.appendChild(msg_container);
mainContainer.appendChild(send_container);
document.body.appendChild(mainContainer);

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址