iirose AI blcoker

An assistant that helps you block annoying AI messages.

// ==UserScript==
// @name         iirose AI blcoker
// @namespace    http://tampermonkey.net/
// @version      0.5.4
// @description  An assistant that helps you block annoying AI messages.
// @author       Keane
// @match        https://iirose.com/messages.html
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    var targetNode = document.getElementsByClassName("fullBox msgholderBox")[0];
    var muteMusicNode = document.getElementById("shareMediaAvatar");
    var currentSongURL = "";
    const configAI = {childList: true, subtree: true };
    const configMute = {attributes: true};
    var count = 0;
    var status = true;
    var notificationNode = document.getElementById("hidePanel");
    var AINames = ["艾泽","艾瑞","艾莉","艾薇","艾洛","艾瑟","艾花","艾A","艾B","上杉夏乡","上杉夏香","logos"];

    function Init (){
        var Unodes = document.getElementsByClassName("PubChatUserInfo");
        if(Unodes.length==0){
            window.setTimeout(Init, 50);
            console.log("loading");
        }
        else{
            var i = 0;
            var Unode,userNameStr,msgNodes,AIMsg;
            //console.log(Unodes.length);
            for (i; i<Unodes.length;i++){

                Unode = Unodes[i];
                userNameStr = Unode.firstElementChild.getAttribute("data-name");
                //console.log(userNameStr);
                if (AINames.includes(userNameStr)){
                    count += 1;
                    msgNodes = document.getElementsByClassName("msg");
                    AIMsg = msgNodes[i];
                    AIMsg.style.display = "none";
                }
            }
            //console.log(count + " AI msgs are blocked");
            updateCount();
            return;
        }

    }

    function updateCount(){
        document.getElementById("AIBlockText").innerHTML = "正在屏蔽 : "+ count;
    }
    // Callback function to execute when mutations are observed
    const AIcallback = function(mutationsList, observer) {
        // Use traditional 'for loops' for IE 11
        for(let mutation of mutationsList) {
            if (mutation.type === 'childList') {
                //console.log('A child node has been added or removed.');
                //var nodes = document.getElementsByClassName("PubChatUserInfo");
                //  var node = nodes[nodes.length-1];
                //  var userName = node.firstElementChild.getAttribute("data-name");
                //  console.log(userName);
                /*if (AINames.includes(userName)){
                    count += 1;
                    var msgNodes = document.getElementsByClassName("msg");
                    var lastMsg = msgNodes[nodes.length-1];
                    lastMsg.style.display = "none";
                    console.log("An AI msg is blocked");
                    updateCount();
                }
                */
                count = 0;
                Init();
                updateCount();
            }

        }
    };
    //for future use
    const NotifyCallback = function (mutation, observer){
        if (mutation.type === 'childList') {
            //console.log('A child node has been added or removed.');
            var node = document.getElementById("");


        }
    }
    const MuteCallback = function (mutationsList, observer){
        for(let mutation of mutationsList) {
            if (mutation.type === 'attributes'){
                console.log("song changed "+ muteMusicNode.getAttribute("data-orisrc"));
                if (currentSongURL!= muteMusicNode.getAttribute("data-orisrc")){
                    functionBtnDo(90);
                    _alert("恢复播放");
                    currentSongURL= muteMusicNode.getAttribute("data-orisrc");
                    document.getElementById("mdi-music-note").className = "functionBtnIcon mdi-music-note";
                    Muteobserver.disconnect();
                }



            }
        }
    }

    function appendMuteButton(){
        var newNodeSpan0 = document.createElement("span");
        var newNodeSpan1 = document.createElement("span");
        var newNodeDiv = document.createElement("div");
        var style = document.createElement('style');

        style.type = 'text/css';
        style.innerHTML = '.mdi-music-note::before { content: "\\F1120" } .mdi-music-note-off::before { content: "\\F0581" }';

        newNodeSpan0.className = "functionBtnIcon mdi-music-note";
        newNodeSpan0.id = "mdi-music-note";
        newNodeSpan1.className = "functionBtnFont";
        newNodeSpan1.id = "MuteText";
        newNodeSpan1.innerHTML = "静音当前歌曲";
        newNodeDiv.className = "functionButton";
        newNodeDiv.id = "MuteBtn";
        newNodeDiv.append(newNodeSpan0);
        newNodeDiv.append(newNodeSpan1);
        addCostomBtnMenu();
        document.getElementsByTagName('head')[0].appendChild(style);
        document.getElementById("customBox").append(newNodeDiv);
        document.getElementById("MuteBtn").onclick = toggleMute;
    }
    function toggleMute(){
        if (!Probe.emptyMediaPlayer){
            functionBtnDo(90);
            _alert("当前歌曲已静音,下一首歌自动恢复播放");
            currentSongURL= muteMusicNode.getAttribute("data-orisrc");
            Muteobserver.observe(muteMusicNode, configMute);
            document.getElementById("mdi-music-note").className = "functionBtnIcon mdi-music-note-off";
            document.getElementById("MuteText").innerHTML = "当前歌曲已静音";
        }
        else{
            functionBtnDo(90);
            _alert("当前歌曲已恢复播放");
            Muteobserver.disconnect();
            document.getElementById("mdi-music-note").className = "functionBtnIcon mdi-music-note";
            document.getElementById("MuteText").innerHTML = "静音当前歌曲";
        }
        return;
    }

    function displayMsg(){
        var i = 0;
        var Unode,userNameStr,msgNodes,AIMsg;
        var Unodes = document.getElementsByClassName("msg");
        for (i; i<Unodes.length;i++){
            Unode = Unodes[i];
            Unode.style.display = "block";
        }
        console.log(count + " AI msgs are shown");
        //updateCount();
        return;
    }
    //expired
    function createButton (){
        var toggleButtonDiv = document.createElement('div');
        //toggleButtonDiv.class = "hvr-radial-out";
        toggleButtonDiv.id = "toggleButtonContainer";
        toggleButtonDiv.style.cssText = "position:relative;top:2%;left:20%;width:50px;height:50px;z-index:90001";

        var toggleButtonBG = document.createElement('span');
        toggleButtonBG.id = "toggleButtonBG";
        toggleButtonBG.style.cssText = "position:absolute;width:50px;height:50px;background-color: #FFF;border-radius: 50%;z-index: 0;";


        var toggleButtonPic1 = document.createElement("img");
        toggleButtonPic1.id = "toggleButtonPic";
        toggleButtonPic1.src = "http://r.iirose.com/i/20/5/9/23/0526-ET.png";
        toggleButtonPic1.style.cssText = "position:relative;width:45px;height:45px;top:2.5px;left:2.5px;z-index: 1;";
        var toggleButtonPic2 = document.createElement("img");
        toggleButtonPic2.id = "toggleButtonPic2";
        toggleButtonPic2.src = "http://r.iirose.com/i/20/5/10/11/1614-W7.png";
        toggleButtonPic2.style.cssText = "position:absolute;width:40px;height:40px;top:5px;left:5px; display:block;z-index: 2;";
        var toggleButton = document.createElement("div");
        toggleButton.id = "toggleButton";
        toggleButton.style.cssText = "position:absolute;width:40px;height:40px;top:5px;left:5px; display:block;z-index: 3;";
        //toggleButton.addEventListener("click", toggle);

        var toggleButtonBadge = document.createElement('span');
        toggleButtonBadge.id = "toggleButtonBadge";
        toggleButtonBadge.innerHTML = count.toString();
        toggleButtonBadge.style.cssText= "position: absolute;top: -12px; right: -12px;padding: 3px 10px;border-radius: 50%; background: red; color: white;display:block;"

        toggleButtonDiv.appendChild(toggleButtonBG);
        toggleButtonDiv.appendChild(toggleButtonPic1);
        toggleButtonDiv.appendChild(toggleButtonPic2);
        toggleButtonDiv.appendChild(toggleButtonBadge);
        toggleButtonDiv.appendChild(toggleButton);

        document.getElementById("mainContainer").append(toggleButtonDiv);

        document.getElementById("toggleButton").onclick=toggleAI;
        var divNode = document.getElementById('toggleButtonContainer');
        //     divNode.onmouseenter = hoverTimer;
        //     divNode.onmouseleave = hoverTimerStopper;
    }
    /*
    function hoverTimer (){
        console.log("mouseover");
        setTimeoutConst = setTimeout(function(){
            document.getElementById('toggleButtonContainer').style.display = "none";
            return;
        }, delay);
    }
    function hoverTimerStopper(){
        console.log("mouseleave");
        clearTimeout(setTimeoutConst );
    }
    var delay=2000, setTimeoutConst;
*/
    //add a btn menu called 自定义 to hold all the buttons
    function addCostomBtnMenu(){
        var headerDiv;
        if (!document.getElementById("customHeader")) {
            var heziDiv = document.getElementsByClassName("functionButton functionButtonGroup")[7];
            headerDiv = document.getElementsByClassName("functionButton functionButtonGroup")[7].cloneNode(true);
            headerDiv.children[0].className = "functionBtnIcon mdi-lightbulb-on";
            headerDiv.children[1].innerHTML = "自定义";
            headerDiv.id = "customHeader";
            heziDiv.parentNode.insertBefore(headerDiv, heziDiv);
        }
        headerDiv = document.getElementById("customHeader");
        var btnHolderDiv;
        if (!document.getElementById("customBox")) {
            btnHolderDiv = document.createElement("div");
            btnHolderDiv.id = "customBox";
            btnHolderDiv.className = "functionItemBox";
            headerDiv.parentNode.insertBefore(btnHolderDiv, headerDiv.nextSibling);
        }
        return;
    }

    function appendAIButton(){
        var newNodeSpan0 = document.createElement("span");
        var newNodeSpan1 = document.createElement("span");
        var newNodeDiv = document.createElement("div");
        var style = document.createElement('style');

        style.type = 'text/css';
        style.innerHTML = '.mdi-do-not-disturb::before { content: "\\F0698" } .mdi-do-not-disturb-off::before {content:"\\F0699"}';
        newNodeSpan0.className = "functionBtnIcon mdi-do-not-disturb";
        newNodeSpan0.id = "mdi-do-not-disturb";
        newNodeSpan1.className = "functionBtnFont";
        newNodeSpan1.id = "AIBlockText";
        newNodeSpan1.innerHTML = "正在屏蔽 : "+ count;
        newNodeDiv.className = "functionButton";
        newNodeDiv.id = "AIBlockBtn";
        newNodeDiv.append(newNodeSpan0);
        newNodeDiv.append(newNodeSpan1);
        addCostomBtnMenu();
        document.getElementsByTagName('head')[0].appendChild(style);
        document.getElementById("customBox").append(newNodeDiv);
        document.getElementById("AIBlockBtn").onclick = toggleAI;

    }
    function toggleAI(){
        //console.log(document.getElementById("toggleButtonPic2").style.display);
        if (status){
            document.getElementById("AIBlockText").innerHTML = "已停止屏蔽";
            document.getElementById("mdi-do-not-disturb").className = "functionBtnIcon mdi-do-not-disturb-off";
            AIobserver.disconnect();
            displayMsg();
            status=false;
            console.log("No Blocking AI Msg Now.");
        }
        else {
            document.getElementById("AIBlockText").innerHTML = "正在屏蔽";
            document.getElementById("mdi-do-not-disturb").className = "functionBtnIcon mdi-do-not-disturb";
            status=true;

            count=0;
            Init();
            AIobserver.observe(targetNode, configAI);
            console.log("Re-Blocking AI Msg Now.");

        }

    }
    // Create an observer instance linked to the callback function
    const AIobserver = new MutationObserver(AIcallback);
    const Muteobserver = new MutationObserver(MuteCallback);

    const NotifyObserver = new MutationObserver(NotifyCallback);

    // Start observing the target node for configured mutations


    //NotifyObserver.observe();

    Init();
    AIobserver.observe(targetNode, configAI);

    appendAIButton();
    appendMuteButton();
    // createButton();




})();