NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name DM colorization
// @namespace https://dreamychat.com/*
// @version 0.3
// @description Brings large quantities of color to this site.
// @author You
// @match https://dreamychat.com/*
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @require http://code.jquery.com/jquery-latest.js
// @run-at document-start
// @license MIT
// ==/UserScript==
var seed = 1;
function random() {
var x = Math.sin(seed++) * 10000;
return x - Math.floor(x);
}
function isCssLoaded(url) {
for (let i = 0; i < document.styleSheets.length; i++) {
const styleSheet = document.styleSheets[i];
if (styleSheet.href === url) {
return true;
}
}
return false;
}
function HSVtoRGB(h, s, v) {
var r1, g1, b1, i, f, p, q, t;
if (arguments.length === 1) {
s = h.s; v = h.v; h = h.h;
}
i = Math.floor(h * 6);
f = h * 6 - i;
p = v * (1 - s);
q = v * (1 - f * s);
t = v * (1 - (1 - f) * s);
switch (i % 6) {
case 0: r1 = v; g1 = t; b1 = p; break;
case 1: r1 = q; g1 = v; b1 = p; break;
case 2: r1 = p; g1 = v; b1 = t; break;
case 3: r1 = p; g1 = q; b1 = v; break;
case 4: r1 = t; g1 = p; b1 = v; break;
case 5: r1 = v; g1 = p; b1 = q; break;
}
return [
Math.round(r1 * 255),
Math.round(g1 * 255),
Math.round(b1 * 255)
];
}
function getName(t,dark) {
seed = t.charCodeAt(0)*t.charCodeAt(1);
var h = random();
var s = random()*0.5 + 0.5;//random()*255;
var v = 0.6;//random()*255;
if (dark) {
v=1;
}
var ar = HSVtoRGB(h,s,v);
var r = ar[0];
var g = ar[1];
var b = ar[2];
if (t == "RaeRae") {
r = 189;
g = 102;
b = 231;
}
if (t == "cold_c4ssidy") {
r = 255; g = 130; b = 201;
}
if (r > 255) {r=255;}
if (g > 255) {g=255;}
if (b > 255) {b=255;}
return [r,g,b];
}
let zzz = true;
function ChangeClr(element) {
var dark = isCssLoaded("https://dreamychat.com/css/chat-dark.css?1651288155");
var rules = new Array();
if (zzz) {
zzz=false;
for (let i = 0; i < document.styleSheets.length; i++) {
//console.log("Here babe");
if (document.styleSheets[i].cssRules) {
rules = document.styleSheets[i].cssRules;
}
else if (document.styleSheets[i].rules) {
rules = document.styleSheets[i].rules;
}
for(let j = 0; j < rules.length; j++) {
if (String(rules[j].selectorText) == ".chat-invite.chat-self::after, .chat-invite.chat-to::after, .chat-whisper::after") {
//document.styleSheets[0].deleteRule(rules[j]);
rules[j].style = ".chat-invite.chat-self::after, .chat-invite.chat-to::after, .chat-whisper::after {border-width: 0 .25rem;}";
document.styleSheets[i].cssRules[j] = rules[j];
}
if (String(rules[j].selectorText) == ".mention.mention-found") {
//document.styleSheets[0].deleteRule(rules[j]);
rules[j].style = ".mention.mention-found {}";
document.styleSheets[i].cssRules[j] = rules[j];
}
}
}
}
if(element.classList.contains("chat-whisper")) { //Handles other people's whispers TO you
if (!element.classList.contains("chat-self")) {
try {
element.classList.remove("chat-mention");
} catch {
}
var s = element.getElementsByClassName("name")[0];
var aTags = s.getElementsByTagName("span");
var t = aTags[0].textContent;
//console.log(t);
var cls = getName(t,dark);
var r = cls[0];
var g = cls[1];
var b = cls[2];
var color = "rgba("+r+","+g+","+b+",.35)";
//console.log(color);
element.style = "background: "+color+";border: solid "+color+";border-width: 0 0.25rem;";
//stuff[i].style.display='none';
//stuff[i].offsetHeight; // no need to store this anywhere, the reference is enough
//stuff[i].style.display='';
}
}
//var stuff2 = element.getElementsByClassName("chat-message chat-whisper chat-self");
if(element.classList.contains("chat-message") && element.classList.contains("chat-whisper")&&element.classList.contains("chat-self")) {
try {
element.classList.remove("chat-mention");
} catch {
}
var s2 = element.getElementsByClassName("name")[0];
var aTags2 = s2.getElementsByTagName("span");
var t2 = aTags2[0].textContent;
var cls2 = getName(t2,dark);
var r2 = cls2[0];
var g2 = cls2[1];
var b2 = cls2[2];
var color2 = "rgba("+r2+","+g2+","+b2+",1)";
aTags2[0].style = "color: "+color2+";";
element.style = "border: solid "+color2+";border-width: 0 0.25rem;";
}
var stuff3 = document.getElementsByClassName("mention-found");
for (let i = 0; i < stuff3.length; i++) {
aTags2 = stuff3[i];//s2.getElementsByTagName("span");
t2 = aTags2.textContent;
cls2 = getName(t2,dark);
r = cls2[0];
g = cls2[1];
b = cls2[2];
color = "rgba("+r+","+g+","+b+",1)";
color2 = "rgba("+r+","+g+","+b+",0.16)";
stuff3[i].style = "background-color: "+color2+";color: "+color+";";
}
};
//var i = setInterval(ChangeClr,1000);
let targetNode = null;
function AddObserver() {
if (targetNode != null) {
return;
}
targetNode = document.querySelector('.messages');
// create a new instance of MutationObserver
let observer = new MutationObserver(function(mutationsList, observer) {
// loop through the mutations that have occurred
for(let mutation of mutationsList) {
// if a new node has been added to the DOM
if(mutation.type === 'childList' && mutation.addedNodes.length > 0) {
// loop through the added nodes
mutation.addedNodes.forEach(function(node) {
// if the added node is an li element, print "hello" to the console
if(node.nodeName === 'LI') {
//console.log('hello');
ChangeClr(node);
}
});
}
}
});
const config = { childList: true };
observer.observe(targetNode, config);
}
function ColorNames(elements,dark) {
for (let i = 0; i < elements.length; i++) {
let aTags2 = elements[i].getElementsByClassName("name")[0];//s2.getElementsByTagName("span");
let t2 = aTags2.textContent;
let cls2 = getName(t2,dark);
let r = cls2[0];
let g = cls2[1];
let b = cls2[2];
let color = "rgba("+r+","+g+","+b+",1)";
let color2 = "rgba("+r+","+g+","+b+",0.16)";
aTags2.style = "background-color: "+color2+";color: "+color+";";
}
}
let available = null;
let afk = null;
let mm = null;
function ActiveUserColors() {
var dark = isCssLoaded("https://dreamychat.com/css/chat-dark.css?1651288155");
if (available == null) {
available = document.getElementById("users-available");
afk = document.getElementById("users-afk");
mm = document.getElementById("users-matchmaker");
}
if (available == null) {
console.log("Null");
return;
}
var stuff3 = available.getElementsByClassName("check-symbols");
ColorNames(stuff3,dark);
stuff3 = mm.getElementsByClassName("check-symbols");
ColorNames(stuff3,dark);
stuff3 = afk.getElementsByClassName("check-symbols");
for (let i = 0; i < stuff3.length; i++) {
let aTags2 = stuff3[i].getElementsByClassName("name")[0];//s2.getElementsByTagName("span");
aTags2.style = "";
}
}
var i = setInterval(AddObserver,250);
var j = setInterval(ActiveUserColors,500);
// configure the observer to watch for changes to the target node's child list
console.log("Dreamychat colored DMs loaded!");