Greasy Fork

Greasy Fork is available in English.

iirose AI blcoker

An assistant that helps you block annoying AI messages.

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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();




})();