NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Torn Chats Enhanced // @namespace https://github.com/AmeLooksSus // @match *://*torn.com/* // @grant none // @version 1.0 // @author AmeLooksSus // @description Enjoy colorful user names for better chat readability. // @license MIT // ==/UserScript== function extractUserXID(link) { if (link && link.includes('/profiles.php?XID=')) { const xidMatch = link.match(/XID=([A-Za-z0-9]+)/); if (xidMatch && xidMatch[1]) { return xidMatch[1]; } } return null; } function getRandomHexColor(isDarkMode) { const minBrightness = isDarkMode ? 70 : 30; const maxBrightness = isDarkMode ? 100 : 50; const letters = '0123456789ABCDEF'; let color = '#'; while (true) { for (let i = 0; i < 6; i++) { color += letters[Math.floor(Math.random() * 16)]; } const hex = color.substring(1); const r = parseInt(hex.substr(0, 2), 16); const g = parseInt(hex.substr(2, 2), 16); const b = parseInt(hex.substr(4, 2), 16); const brightness = (r * 299 + g * 587 + b * 114) / 1000; if (brightness >= minBrightness && brightness <= maxBrightness) { break; } else { color = '#'; } } return color; } function styleLinksInsideChatContainers(isDarkMode, myXID) { const containers = document.querySelectorAll('body'); containers.forEach(container => { const links = container.querySelectorAll('._overview_1pskg_893 a, ._message_1pskg_509 a'); links.forEach(link => { const href = link.getAttribute('href'); const xid = extractUserXID(href); if (href && href.includes('http')) { link.style.color = '#66c2ff'; // Blue link.style.textDecoration = 'underline'; } else if (xid) { if (xid === myXID) { link.style.color = '#80ff80'; // User Color } else { const currentTime = new Date().getTime(); let userColor = userColorMap[xid]; if (!userColor || (currentTime - userColor.timestamp) >= 600000) { do { userColor = getRandomHexColor(isDarkMode); } while (Object.values(userColorMap).some(existingColor => existingColor.color === userColor)); userColorMap[xid] = { color: userColor, timestamp: currentTime }; } link.style.color = userColorMap[xid].color; } } else { link.style.color = '#0099FF'; // Blue link.style.textDecoration = 'underline'; } }); }); } function addMessageDividers() { const messageContainers = document.querySelectorAll('._message_1pskg_509'); messageContainers.forEach(container => { container.style.borderTop = '1px solid #666'; container.style.paddingTop = '5px'; }); } function checkForNewMessages(isDarkMode, myXID) { styleLinksInsideChatContainers(isDarkMode, myXID); addMessageDividers(); } // Main logic const darkModeCheckbox = document.getElementById('dark-mode-state'); const isDarkModeEnabled = localStorage.getItem('darkModeState') === 'enabled'; if (darkModeCheckbox) { darkModeCheckbox.addEventListener('change', function () { if (darkModeCheckbox.checked) { localStorage.setItem('darkModeState', 'enabled'); location.reload(); } else { localStorage.setItem('darkModeState', 'disabled'); location.reload(); } }); if (isDarkModeEnabled) { darkModeCheckbox.checked = true; } } const myXID = extractUserXID(window.location.href); const userColorMap = {}; checkForNewMessages(isDarkModeEnabled, myXID); setInterval(() => checkForNewMessages(isDarkModeEnabled, myXID), 500);