Files
skribbl-autosave/prod.user.js

102 lines
3.2 KiB
JavaScript

// ==UserScript==
// @name Skribbl.io Auto Drawing Downloader
// @namespace http://tampermonkey.net/
// @version 1.1
// @description type shit
// @author ZStrike
// @match *://skribbl.io/*
// @license GPL
// @grant none
// @source https://git.zstrike.dev/zstrike/skribbl-autosave
// @run-at document-start
// ==/UserScript==
(function() {
'use strict';
const OriginalWebSocket = window.WebSocket;
const players = new Map();
let currentDrawerId = null;
function downloadImage(blob,name) {
var b = document.createElement("a");
b.id = "autodl-trigger";
b.style.display = "none";
var pebis = URL.createObjectURL(blob);
b.href = pebis;
b.download = name;
document.body.appendChild(b);
document.querySelector("#autodl-trigger").click();
document.querySelector("#autodl-trigger").remove();
}
window.WebSocket = function(...args) {
const ws = new OriginalWebSocket(...args);
ws.addEventListener('message', function(event) {
if (typeof event.data !== 'string') return;
if (!event.data.startsWith('42')) return;
try {
const payload = JSON.parse(event.data.slice(2));
if (payload[0] === 'data') {
const packet = payload[1];
if (packet.id === 10) {
players.clear();
const users = packet.data.users;
if (Array.isArray(users)) {
users.forEach(user => {
players.set(user.id, user.name);
});
}
// fix mid-game joining
const currentState = packet.data.state;
if (currentState && currentState.id === 4) {
currentDrawerId = currentState.data.id;
}
}
if (packet.id === 1) {
players.set(packet.data.id, packet.data.name);
}
if (packet.id === 11) { // game state updates
const gameState = packet.data;
if (gameState && gameState.id === 4) { // new turn
currentDrawerId = gameState.data.id;
}
if (gameState && gameState.id === 5) { // end turn
const turnData = gameState.data;
const drawerName = players.get(currentDrawerId) || 'Unknown Player';
console.log('[Hook] Turn ended!');
console.log(`Drawer: ${drawerName} (ID: ${currentDrawerId})`);
console.log('Word:', turnData.word);
document.querySelector("canvas").toBlob((a) => {
downloadImage(a,`${turnData.word} by ${drawerName}`)
});
}
}
}
} catch (e) {
console.error(e)
}
});
return ws;
};
})();