// ==UserScript==
// @name trovonicknamecolorizer
// @namespace http://tampermonkey.net/
// @version 0.2.5.9
// @description colorize nicknames in Trovo chat
// @author yyko
// @match https://trovo.live/*
// @icon https://www.google.com/s2/favicons?domain=trovo.live
// @run-at document-end
// @grant none
// ==/UserScript==
!function(){"use strict";const e=20,t=2e3,n=new Map([["red","#FF0000"],["blue","#0000FF"],["green","#008000"],["firebrick","#B22222"],["coral","#FF7F50"],["yellowgreen","#9ACD32"],["orangered","#FF4500"],["seagreen","#2E8B57"],["goldenrod","#DAA520"],["chocolate","#D2691E"],["cadetblue","#5F9EA0"],["dodgerblue","#1E90FF"],["hotpink","#FF69B4"],["blueviolet","#8A2BE2"],["springgreen","#00FF7F"]]),a='<svg aria-hidden="true" class="svg-icon btn-icon size24" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="24" height="24"><path d="M12 1.5C6.202 1.5 1.5 6.202 1.5 12S6.202 22.5 12 22.5a1.748 1.748 0 0 0 1.295-2.923 1.733 1.733 0 0 1-.437-1.16c0-.969.781-1.75 1.75-1.75h2.059a5.835 5.835 0 0 0 5.833-5.834C22.5 5.677 17.798 1.5 12 1.5zM5.583 12c-.968 0-1.75-.782-1.75-1.75s.782-1.75 1.75-1.75c.969 0 1.75.782 1.75 1.75S6.552 12 5.583 12zm3.5-4.667c-.968 0-1.75-.781-1.75-1.75 0-.968.782-1.75 1.75-1.75.969 0 1.75.782 1.75 1.75 0 .969-.781 1.75-1.75 1.75zm5.834 0c-.969 0-1.75-.781-1.75-1.75 0-.968.781-1.75 1.75-1.75.968 0 1.75.782 1.75 1.75 0 .969-.782 1.75-1.75 1.75zm3.5 4.667c-.969 0-1.75-.782-1.75-1.75s.781-1.75 1.75-1.75c.968 0 1.75.782 1.75 1.75S19.385 12 18.417 12z" style="stroke-width:.0546871"/></svg>';function o(e="users"){let t=localStorage.getItem(e);return t?(n=t,new Map(Object.entries(JSON.parse(n)))):null;var n}function s(e,t="users"){var n;localStorage.setItem(t,(n=e,JSON.stringify(Object.fromEntries(n))))}let l=o();l?localStorage.getItem("tncts_localUsers")&&localStorage.removeItem("tncts_localUsers"):l=new Map;let c,r,i=o("colorizerSettings");function f(e){let t=function(){let e=function(){if(!c){let e=n.keys();c=[];for(let t of e)c.push(t)}return c}();return e[Math.round(Math.random()*e.length)]}();return g(e,t,!0),t}function u(e){let t;return t=l.has(e)?l.get(e):f(e)}function g(e,t,a=!1){if(!i.get("baseLock")||a){let a=m(t);if(a){let o;1==a?o=n.get(t.toLocaleLowerCase()):2==a&&(o=t),l.set(e,o),s(l)}}}function m(e){return n.has(e)?1:!!e.match(/^#[0-9a-f]{3}$|^#[0-9a-f]{4}$|^#[0-9a-f]{6}$|^#[0-9a-f]{8}$/)&&2}function d(){let e=document.getElementsByClassName("input-feature-box")[0];if(e)return e.getElementsByClassName("cat-button normal icon")[0]}function h(){i.get("interfaceState")?r.classList.remove("active"):r.classList.add("active"),function(){i.get("baseLock");i.set("baseLock",!i.get("baseLock"))}(),i.set("interfaceState",!i.get("interfaceState")),s(i,"colorizerSettings")}i||(i=new Map([["baseLock",!1],["interfaceState",!0]]));let b=!0;function v(e,t){b&&(b=!1,function(){let e=d();e&&((r=e.cloneNode(!1)).setAttribute("data-enclave","colorizer"),r.innerHTML=a,r.color="white",i.get("interfaceState")&&r.classList.add("active"),d().after(r),r.addEventListener("click",h))}());for(let t of e)for(let e of t.addedNodes){let t,n=e.getElementsByClassName("nickname-box")[0];if(n){t=n.getElementsByClassName("nick-name")[0].title;let a=e.getElementsByClassName("content")[0];if(a){let e=a.innerText.match(/^!color (.*)/);if(e){let n=e[1].split(" ");if(m(n[n.length-1]))if(n.length>1)for(let e=0;e<n.length-1;e++)"@"==n[e][0]&&(n[e]=n[e].slice(1)),g(n[e],n[n.length-1]);else g(t,e[1]);else console.warn("color is not available")}}n.style.color=u(t)}}}let w,F,S=!1;const p={childList:!0};let E,L=e;function k(){(w=document.getElementsByClassName("chat-list")[0])?((F=new MutationObserver(v)).observe(w,p),console.warn("started"),S=!0):L>0?(console.warn("attempts left to start: ",L),L--,E=setTimeout(k,t)):console.warn("cant find chat element")}function y(){console.warn("restarted"),L=e,S&&(F.disconnect(),r&&(r.remove(),b=!0),S=!1,k())}!function(){k();let e=document.getElementsByClassName("base-container")[0];e?new MutationObserver(y).observe(e,p):console.warn("cant find base-container")}()}();