Drawaria AutoRooms + ChatExporter

Enhance your Drawaria.online with rooms joiner automation.

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Drawaria AutoRooms + ChatExporter
// @namespace    http://tampermonkey.net/
// @version      2.0
// @description  Enhance your Drawaria.online with rooms joiner automation.
// @author       YouTubeDrawaria
// @match        https://drawaria.online/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=drawaria.online
// @grant        none
// @license MIT
// ==/UserScript==

(function() {
    'use strict';

    // Crear la interfaz de usuario
    const createUI = () => {
        const interfaceDiv = document.createElement('div');
        interfaceDiv.id = 'drawaria-tools';
        interfaceDiv.style.position = 'fixed';
        interfaceDiv.style.top = '500.977px';
        interfaceDiv.style.left = '30px';
        interfaceDiv.style.right = '1300px';
        interfaceDiv.style.backgroundColor = 'rgba(0, 0, 0, 0.9)';
        interfaceDiv.style.padding = '15px';
        interfaceDiv.style.borderRadius = '10px';
        interfaceDiv.style.color = '#fff';
        interfaceDiv.style.zIndex = '9999'; // Asegura que esté por encima de otros elementos
        interfaceDiv.style.boxShadow = '0 4px 8px rgba(0, 0, 0, 0.2)';
        interfaceDiv.style.width = '250px';
        interfaceDiv.style.cursor = 'move';

        const title = document.createElement('h3');
        title.textContent = 'AutoRoom Tools';
        title.style.margin = '0';
        title.style.paddingBottom = '10px';
        title.style.borderBottom = '1px solid #555';
        interfaceDiv.appendChild(title);

        // Menú de automatización
        const automationMenu = document.createElement('select');
        automationMenu.id = 'automation-menu';
        automationMenu.style.width = '100%';
        automationMenu.style.padding = '8px';
        automationMenu.style.marginTop = '10px';
        automationMenu.style.borderRadius = '5px';
        automationMenu.style.border = '1px solid #555';
        automationMenu.style.backgroundColor = '#333';
        automationMenu.style.color = '#fff';
        automationMenu.innerHTML = `
            <option value="auto-join">Auto Join Room</option>
            <option value="auto-invite">Auto Invite Players</option>
            <option value="quickplay">Quick Play</option>
            <option value="joinplayground">Join Playground</option>
            <option value="playgroundroom_next">Next Playground Room</option>
            <option value="showroomlist">Show Room List</option>
            <option value="createroom">Create Room</option>
            <option value="auto-exit-room">Auto Exit Room</option>
            <option value="export-chat">Export Chat Messages</option>
        `;
        interfaceDiv.appendChild(automationMenu);

        // Botón para ejecutar la automatización
        const automateButton = document.createElement('button');
        automateButton.textContent = 'Automate';
        automateButton.style.marginTop = '15px';
        automateButton.style.width = '100%';
        automateButton.style.padding = '10px';
        automateButton.style.border = 'none';
        automateButton.style.borderRadius = '5px';
        automateButton.style.backgroundColor = '#ffc107';
        automateButton.style.color = '#212529';
        automateButton.style.fontWeight = 'bold';
        automateButton.style.cursor = 'pointer';
        automateButton.addEventListener('click', () => {
            const selectedAutomation = automationMenu.value;
            executeAutomation(selectedAutomation);
        });
        interfaceDiv.appendChild(automateButton);

        // Hacer el menú arrastrable
        let isDragging = false;
        let offsetX, offsetY;

        interfaceDiv.addEventListener('mousedown', (e) => {
            isDragging = true;
            offsetX = e.clientX - interfaceDiv.getBoundingClientRect().left;
            offsetY = e.clientY - interfaceDiv.getBoundingClientRect().top;
            interfaceDiv.style.cursor = 'grabbing';
        });

        document.addEventListener('mousemove', (e) => {
            if (isDragging) {
                interfaceDiv.style.left = `${e.clientX - offsetX}px`;
                interfaceDiv.style.top = `${e.clientY - offsetY}px`;
            }
        });

        document.addEventListener('mouseup', () => {
            isDragging = false;
            interfaceDiv.style.cursor = 'move';
        });

        // Agregar la interfaz al cuerpo del documento
        document.body.appendChild(interfaceDiv);
    };

    // Ejecutar automatización
    const executeAutomation = (automation) => {
        switch (automation) {
            case 'auto-join':
                console.log('Auto Join Room selected');
                autoJoinRoom();
                break;
            case 'auto-invite':
                console.log('Auto Invite Players selected');
                autoInvitePlayers();
                break;
            case 'quickplay':
                console.log('Quick Play clicked');
                document.getElementById('quickplay').click();
                break;
            case 'joinplayground':
                console.log('Join Playground clicked');
                document.getElementById('joinplayground').click();
                break;
            case 'playgroundroom_next':
                console.log('Next Playground Room clicked');
                document.getElementById('playgroundroom_next').click();
                break;
            case 'showroomlist':
                console.log('Show Room List clicked');
                document.getElementById('showroomlist').click();
                break;
            case 'createroom':
                console.log('Create Room clicked');
                document.getElementById('createroom').click();
                break;
            case 'auto-exit-room':
                console.log('Auto Exit Room selected');
                autoExitRoom();
                break;
            case 'export-chat':
                console.log('Export Chat Messages selected');
                exportChatMessages();
                break;
            default:
                console.log('Unknown automation selected');
        }
    };

    // Función para unirse automáticamente a una sala
    const autoJoinRoom = () => {
        const joinButton = document.querySelector('#quickplay');
        if (joinButton) {
            joinButton.click();
            console.log('Automatically joined a room');
        } else {
            console.error('Join button not found');
        }
    };

    // Función para invitar automáticamente a otros jugadores
    const autoInvitePlayers = () => {
        const inviteButton = document.querySelector('#invurl');
        if (inviteButton) {
            inviteButton.click();
            const inviteLink = inviteButton.value;
            const chatInput = document.querySelector('#chatbox_textinput');
            const sendButton = document.querySelector('#chatbox_sendbutton');

            if (chatInput && sendButton) {
                const alertMessage = `Invitation Link: ${inviteLink}`;
                chatInput.value = alertMessage;
                sendButton.click();
                console.log('Automatically invited players');

                // Enviar invitación a todos los jugadores
                const roomListBody = document.querySelector('#roomlist > div.roomlist-body');
                if (roomListBody) {
                    const roomItems = roomListBody.querySelectorAll('div.roomlist-item');
                    roomItems.forEach(roomItem => {
                        const playerCount = roomItem.querySelector('.roomlist-playercount').textContent;
                        if (playerCount > 0) {
                            const playerId = roomItem.getAttribute('data-roomid');
                            sendInvitation(playerId, inviteLink);
                        }
                    });
                }
            } else {
                console.error('Chat input or send button not found');
            }
        } else {
            console.error('Invite button not found');
        }
    };

    // Función para enviar una invitación a un jugador
    const sendInvitation = (playerId, inviteLink) => {
        const socket = sockets.find(socket => socket.room.id === playerId);
        if (socket) {
            socket.send(JSON.stringify([42, 'snapchatmessage', playerId, inviteLink]));
        }
    };

    // Función para salir automáticamente de una sala
    const autoExitRoom = () => {
        const homeButton = document.querySelector('#homebutton');
        if (homeButton) {
            homeButton.click();
            console.log('Automatically exited room');
        } else {
            console.error('Home button not found');
        }
    };

    // Función para exportar mensajes
    const exportChatMessages = () => {
        const chatbox = document.getElementById('chatbox_messages');
        const messages = chatbox.querySelectorAll('div.chatmessage');
        let exportedMessages = [];

        messages.forEach(message => {
            if (message.classList.contains('systemchatmessage')) {
                exportedMessages.push(`[System] ${message.textContent}`);
            } else if (message.classList.contains('playerchatmessage-highlightable')) {
                const playerName = message.querySelector('.playerchatmessage-name')?.textContent || 'Unknown';
                const playerMessage = message.querySelector('.playerchatmessage-text')?.textContent || '';
                exportedMessages.push(`${playerName}: ${playerMessage}`);
            }
        });

        // Crear un blob con los mensajes y descargarlo
        const blob = new Blob([exportedMessages.join('\n')], { type: 'text/plain' });
        const url = URL.createObjectURL(blob);
        const a = document.createElement('a');
        a.href = url;
        a.download = 'chat_messages.txt';
        a.click();
        URL.revokeObjectURL(url);
    };

    // Inicializar la interfaz de usuario
    createUI();

    // WebSocket setup
    const sockets = [];
    const originalSend = WebSocket.prototype.send;
    WebSocket.prototype.send = function (...args) {
        let socket = this;
        if (sockets.indexOf(socket) === -1) {
            sockets.push(socket);
        }
        socket.addEventListener("close", function () {
            const pos = sockets.indexOf(socket);
            if (~pos) sockets.splice(pos, 1);
        });
        return originalSend.call(socket, ...args);
    };
})();