您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Enhance your Drawaria.online with rooms joiner automation.
// ==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); }; })();