Live Chat Mod | CALIBER

Sticky Moderator chat with Additional highlight commands (For Dark Theme)

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey, το Greasemonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Userscripts για να εγκαταστήσετε αυτόν τον κώδικα.

You will need to install an extension such as Tampermonkey to install this script.

Θα χρειαστεί να εγκαταστήσετε μια επέκταση διαχείρισης κώδικα χρήστη για να εγκαταστήσετε αυτόν τον κώδικα.

(Έχω ήδη έναν διαχειριστή κώδικα χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Έχω ήδη έναν διαχειριστή στυλ χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

// ==UserScript==
// @name         Live Chat Mod | CALIBER
// @description  Sticky Moderator chat with Additional highlight commands (For Dark Theme)
// @namespace    http://tampermonkey.net/
// @version      1.0
// @author       CALIBER
// @match        https://www.youtube.com/live_chat*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    /*
    // ================
    // my config
    // ================
    // font size
    var chatFontSize = 15;
    // if true, add char frame to message
    var isEnableCharFrame = false;
    // if true, author name is hide
    var isHideAuthorName = false;
    // if true, author name is display to right side in chat window
    var isAuthorNameRightSide = true;
    var authorNameMaxWidth = 100;
    // if true, user thumbnail is hide
    var isHideThumbnail = false;
    // if true, member badge is hide
    var isHideBadge = false;
    // if true, input panel is hide (you can't post chat / super chat)
    var isHideFooter = false;
    // if true, header is hide
    var isHideHeader = true;
    // if true, show/hidden toggle button is hide
    var isHideToggleButton = false;
    // if true, common emotes is hide
    var isHideCommonEmotes = true;
    // if false, moderator chat is not fixed to bottom
    var isFixModarator = true;
    // number of seconds moderator chat is display
    var moderatorChatTimeout = 20;
*/

    // ================
    // config
    // ================
    // font size
    var chatFontSize = 13;
    // if true, add char frame to message
    var isEnableCharFrame = false;
    // if true, author name is hide
    var isHideAuthorName = false;
    // if true, author name is display to right side in chat window
    var isAuthorNameRightSide = true;
  
    var authorNameMaxWidth = 100;
    // if true, user thumbnail is hide
    var isHideThumbnail = false;
    // if true, member badge is hide
    var isHideBadge = false;
    // if true, input panel is hide (you can't post chat / super chat)
    var isHideFooter = false;
    // if true, header is hide
    var isHideHeader = false;
    // if true, show/hidden toggle button is hide
    var isHideToggleButton = false;
    // if true, common emotes is hide
    var isHideCommonEmotes = true;
    // if false, moderator chat is not fixed to bottom
    var isFixModarator = true;
    // number of seconds moderator chat is display
    var moderatorChatTimeout = 20;
    // ================

    setTimeout(function () {
        var stylesheet = "";

        // bold, font-size
        stylesheet += "#message.yt-live-chat-text-message-renderer { font-weight: bold; font-size: " + chatFontSize +"px; }";
        if (isEnableCharFrame) {
            stylesheet += "#message.yt-live-chat-text-message-renderer { color: #ffffff; letter-spacing : 4px; text-shadow : 2px 2px 1px #003366, -2px 2px 1px #003366, 2px -2px 1px #003366, -2px -2px 1px #003366, 2px 0px 1px #003366, 0px  2px 1px #003366, -2px  0px 1px #003366, 0px -2px 1px #003366; }";
            stylesheet += "yt-live-chat-renderer { background: #0000; } #item-scroller { overflow-y: hidden !important; }";
        }

        // simple #input-panel styles
        stylesheet += "yt-live-chat-message-input-renderer { padding: 4px 16px; }";
        // stylesheet += "#input-panel #container { position: relative; }";
        // stylesheet += "#input-panel #container > #buttons { position: absolute; top: 0; right: 0; transform: scale(0.8); margin: 0; }";

        if (isHideAuthorName) {
            stylesheet += "#author-name.yt-live-chat-author-chip { display: none; }";
        } else if (isAuthorNameRightSide) {
            stylesheet += "#content #author-name.yt-live-chat-author-chip { position: absolute; right: 10px; top: 0px; opacity: 0.7; transform: scale(0.8); font-size: 16px; }";
        } else {
            stylesheet += "#author-name.yt-live-chat-author-chip { max-width: " + authorNameMaxWidth + "px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }";
        }
        if (isHideThumbnail) {
            stylesheet += "#author-photo { display: none !important; }";
        }
        if (isHideBadge) {
            stylesheet += "#chat-badges { display: none !important; }";
        }
        if (isHideFooter) {
            stylesheet += "#panel-pages { display: none !important; }";
        }
        if (isHideHeader) {
            stylesheet += "yt-live-chat-header-renderer { display: none !important; }";
        }
        if (isHideToggleButton) {
            stylesheet += "#show-hide-button.ytd-live-chat-frame { display: none !important; }";
        }
        if (isHideCommonEmotes) {
            stylesheet += "yt-emoji-picker-renderer #category-buttons { display: none !important; }";
            var emoteCategories = ["UCkszU2WH9gy1mb0dV-11UJg/CIW60IPp_dYCFcuqTgodEu4IlQ", "😀", "🐵", "🍇", "🌍", "🎃", "👓", "🏧"];
            for (var i = 0; i < emoteCategories.length; i++) {
                stylesheet += "[aria-activedescendant='" + emoteCategories[i] + "'] { display: none; }";
            }
        }

        // moderator chats is fixed to bottom in chat window
        stylesheet += "#moderator-chat-container { position: absolute; bottom: 0; background: #222; left: 0; right: 0; z-index: 10000; padding-top: 10px; border-top: 1px solid #9f9f9f; }";

        // reload button
        stylesheet += "#chat-reload-button { display: inline-block; position: absolute; right: 0; bottom: 0; color: #fff; background: #1E90FF; opacity: 0; padding: 3px; transition: opacity .2s linear; cursor: pointer; z-index: 10001; }";
        stylesheet += "yt-live-chat-app:hover #chat-reload-button { opacity: 1; }";
				
      	// CALIBER Custom Styles
      	stylesheet += ".yt-live-chat-author-badge-renderer yt-icon svg {color:#14ea02!important;} #message{display: inline-block!important; max-width: 80%;} #content{display:flex; align-items: center;}#author-name.member.yt-live-chat-author-chip {color: #ffa9f2;  opacity: 1.0 !important;}";
      	stylesheet += "yt-live-chat-author-chip .moderator {color:#14ea02!important;}";
      	stylesheet += ".yt-live-chat-moderation-message-renderer yt-formatted-string .yt-formatted-string{color: #ca0000;}";
        stylesheet += "#items.yt-live-chat-item-list-renderer > .yt-live-chat-item-list-renderer:not(:first-child){border-bottom: 1px solid #80808021;} #deleted-state{color: red!important; padding-left: 5px;}";
      
        // apply style
        var $style = document.createElement("style");
        $style.innerText = stylesheet;
        document.body.appendChild($style);

        // fix moderator chat
        var $container = document.createElement("div");
        $container.id = "moderator-chat-container";
        document.querySelector("yt-live-chat-item-list-renderer #contents").appendChild($container);

        // reload button
        var $reload = document.createElement("a");
        $reload.id = "chat-reload-button";
        $reload.innerText = "Reload";
        $reload.onclick = reloadButtonOnClick;
        document.querySelector("yt-live-chat-app > #contents").appendChild($reload);

        setInterval(observeModerator, 2000);
    }, 5000);

    function reloadButtonOnClick() {
        location.href = location.href;
    }

    function appendModeratorChat($chat) {
        document.querySelector("#moderator-chat-container").appendChild($chat);
        setTimeout(function () {
            $chat.remove();
        }, moderatorChatTimeout * 1000);
    }
		


    function observeModerator() {
        var $chats;
        if (isFixModarator) {
            $chats = document.querySelectorAll("yt-live-chat-text-message-renderer[author-type='moderator'], yt-live-chat-text-message-renderer[author-type='owner']");
        } else {
            $chats = document.querySelectorAll("yt-live-chat-text-message-renderer[author-type='owner']");
        }
        for (var i = 0; i < $chats.length; i++) {
            appendModeratorChat($chats[i]);
        }
      	

    }
})();


window.addEventListener ('load', function () {
    setInterval (setTitle, 5000);
}, false);

function setTitle () {
   var author1 = document.querySelectorAll("#author-name");
          for (var i = 0; i < author1.length; i++){
            singler = author1[i];
            
            
            // Hide the message while clicking the photo
              mainNodeSel = singler.parentNode.parentNode.parentNode;
			 				if(mainNodeSel.querySelector("#author-photo")){
								mainNodeSel.querySelector("#author-photo").onclick = closethelist;
							}
            
            	
             if(singler.innerText == "CALIBER"){
               var developer = true;
              pnosingle = singler.parentNode;
               pnosingle.style.alignItems = "center";
               pnosingle.parentNode.style.alignItems = "center";
               singler.setAttribute('style', 'color:black !important; background: yellow; padding:4px; opacity: 1.0;');
             }
          
            // Verified User Correction
             if(singler.querySelector("yt-live-chat-author-badge-renderer[type='verified']")){
                singler.setAttribute('style', 'background: #74ff74; color: black!important; padding: 5px; padding-left: 5px; margin-top: 2px; padding-left: 10px;')
							  if(singler.innerText == "Nightbot" || singler.innerText == "Streamlabs"){
                  singler.parentNode.parentNode.parentNode.style.display = "none";
           			 }
              }
            
          // Highlight Keywords
				if( mainNodeSel.querySelector("#message")){
          messageNode = mainNodeSel.querySelector("#message");
          messagetxt = messageNode.textContent;
          
          // Hide !points Call
          if (messagetxt.search("!points") != -1){
            messageNode.parentNode.parentNode.style.display = "none";
          }
          
          // Moderator only Highlights
           if( (mainNodeSel.hasAttribute("author-type") && (mainNodeSel.getAttribute("author-type") == 'moderator')) || developer)  {
          if(messagetxt.search("!ht") != -1){
            console.log("Triggerd!");
            messagetxt = messagetxt.replace(/\!ht/g, " ");
            console.log(messagetxt);
            messageNode.textContent = messagetxt;
            messageNode.style.backgroundColor = "Yellow";
            messageNode.style.color = "black";
            messageNode.style.padding = "0px 5px";
            
          }
           if(messagetxt.search("!hr") != -1){
            console.log("Triggerd!");
            messagetxt = messagetxt.replace(/\!hr/g, " ");
            console.log(messagetxt);
            messageNode.textContent = messagetxt;
            messageNode.style.backgroundColor = "red";
            messageNode.style.color = "white";
            messageNode.style.padding = "0px 5px";
            
          }
           if(messagetxt.search("!hfull") != -1){
            console.log("Triggerd!");
            messagetxt = messagetxt.replace(/\!hfull/g, " ");
            console.log(messagetxt);
            messageNode.textContent = messagetxt;
            mainNodeSel.style.backgroundColor = "red";
            mainNodeSel.style.color = "white";
            //mainNodeSel.style.padding = "0px 5px";
            }
          }
          
        }
            
          }
}


function closethelist(event) {
			  event.target.parentNode.parentNode.style.display = "none";
			}