Prevent your arrows from being shared with spectators
// ==UserScript==
// @name ChessCom Variants: Private arrows
// @namespace http://tampermonkey.net/
// @version 1.0
// @description Prevent your arrows from being shared with spectators
// @author CzEclipsia discord@cz_eclipsia
// @match *://*.chess.com/variants*
// @icon https://www.chess.com/favicon.ico
// @grant none
// @run-at document-start
// @license MIT
// ==/UserScript==
(function () {
'use strict';
const TARGET = "wss://variants.gcp-prod.chess.com";
const windowWebSocket = window.WebSocket;
window.WebSocket.prototype.sendMessage = function(json) {
const data = JSON.stringify(json);
const event = new MessageEvent('message', {data});
this.dispatchEvent(event);
};
window.WebSocket = function (url, protocols) {
const ws = protocols
? new windowWebSocket(url, protocols)
: new windowWebSocket(url);
if (typeof url === "string" && url.startsWith(TARGET)) {
const wsSend = ws.send;
ws.send = function(data) {
try {
const json = JSON.parse(data);
if (json.action == "game" && json.data.action == "draw-arrow") {
return ws.sendMessage({
mutation: "new_arrow",
data: json.data
});
}
} catch {}
wsSend.call(ws, data);
};
}
return ws;
};
window.WebSocket.prototype = windowWebSocket.prototype;
})();