youtube chat control script&&Blacklist extension

dellll

当前为 2022-08-27 提交的版本,查看 最新版本

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         youtube chat control script&&Blacklist extension
// @namespace    mod:delete comments ,Get the blocked user channel URL||report comment&&block user&&Add multiple blacklist accounts at once
// @version      2.2.0
// @description  dellll
// @author       null
// @match        *://*.youtube.com/*
// @grant        GM_registerMenuCommand
// @grant        GM_unregisterMenuCommand
// @grant        GM_addStyle
// ==/UserScript==
(function () {
    'use strict';
    window.location.host ==="studio.youtube.com"&&Add_URL_List ()
    if (window.location.pathname !== "/live_chat"&&window.location.pathname !== "/live_chat_replay") return;
    if (window.location.pathname!=window.parent.location.pathname)window.parent.document.querySelector("YTD-LIVE-CHAT-FRAME#chat").style.minHeight= "850px";
    let language = navigator.language,IsTranslation=false,sc
    const SET = GM_registerMenuCommand(language_("Detailed Settings&Log","详细设置&Log","詳細設定&Log"), () => {
        Set_()
    });
    let IsMod = false,IsOwner = false
    let Isspecial = document.querySelector("div#top")?.querySelector("#author-name")
    Isspecial&&Isspecial.className=="moderator style-scope yt-live-chat-author-chip"?IsMod=true:IsMod=false
    Isspecial&&Isspecial.className=="owner style-scope yt-live-chat-author-chip"?IsOwner=true:IsOwner=false
    IsOwner&&alert(language_("you are Owner!","你是主播!","あなたはオーナーです!"))
    if(IsOwner)return;
    let Anemati=[],Node_List=[],Node_Log_List = [],Del_List = [],Keylist = [],NoSpamAccount = [],Tex = [],Comment = []
    let Achan=null,Mod_dell=null
    let Ch_m = 0,Node_List_index=0,Delete_interval = 6000,BC= 0 ,Pageleng=0,Spam=0,Normal=0,Untreated=0,doc = Number(localStorage.getItem("doc"))||5,rami = -1,spam_l = 0,spam_co = 0
    let prpr,Ame,Gura,color,Yagoo,Itemslist,color_ames,korone
    let Key_l = Number(localStorage.getItem("Key_l"))||16,BBQ = Number(localStorage.getItem("BBQ"))||3,jp_l =Number(localStorage.getItem("jp_l"))||11,en_l = Number(localStorage.getItem("en_l"))||3,Kirara = localStorage.getItem("IsBlock")=="checked"?true:false
    let Isblock=localStorage.getItem("IsBlock"),Isreplace=localStorage.getItem("Isreplace")
    let PageMode = doc ,pages=doc,Page=0,PageN = 1
    let Main_Menu_Box, Dialogs_Confirm ,Report_Menu_report,Report_Menu_Item,index_dell,WTF_1,WTF_2,YMD,YMD_Type,Deleting,Delet_mes,AutoR,ao,my,getmes,kazama
    let lng_jp = true,lng_en = true,Auto = false,IsUntreated=false,Isiput = false,LoadMes=true,Mio = false,stop=false,Mod_Runing=false,del_all = false,Selection=true,gift = true
    let re_=/[\u200b-\u200f\uFEFF\u202a-\u202e]/g
    let re_jp = /[\u0800-\u4e00]|[\u4e00-\u9fa5]/g
    let re_en = /\b[A-Z]+\w{4,}\b/g
    let re_all = /(\b[A-Z]+\w{4,}\b)|[\u0800-\u4e00]{1}|[\u4e00-\u9fa5]{1}|^(<img.*src.*alt.*>)/g
    let New_Chat_Frame = document.querySelector("#contents.yt-live-chat-renderer"),iv=document.querySelector("DIV#input")
    //css
    GM_addStyle(".mes_log_class{font-size:12px;line-height: 25px;text-indent:25px;color: #aaaaaa;}")
    GM_addStyle(".item_class{text-indent:15px;display:inline-block;width:100%}")
    GM_addStyle(".P_key{cursor:pointer;text-indent:25px;width:100%;height:100%;display:inline-block;font-size:12px}")
    GM_addStyle("#key_mes{height:100%;overflow :scroll;overflow-x:auto}")
    GM_addStyle(".Title_top{width:100%;height:100%;text-align:center;display:inline-block;cursor:pointer}")
    GM_addStyle("#keyword_frame{overflow-y:auto;width:100%;height:150px;overflow-x:hidden}")
    GM_addStyle("#new_div_chat{height:150px;overflow:scroll}")
    GM_addStyle("#settingitem{user-select:none}")
    GM_addStyle("#ChatMes,#Log,#dad:hover{cursor:pointer}")
    GM_addStyle(".pro{color:#f00;font-size: 13px;text-align: center;line-height:16px}")
    GM_addStyle(".ppts{font-size: 14px;line-height: 25px;text-indent:25px;color: #aaaaaa;}")
    GM_addStyle("#Set_off{font-size: 14px;line-height: 21px;text-align:center}")
    GM_addStyle(".shion_P{display:inline-block;text-indent: 0px;}")
    GM_addStyle("#Y{user-select:none;cursor:pointer}")
    function css_white(){
        color = "rgba(0, 0, 0, 0.23)"
        GM_addStyle(".set_list{width:50%;height:25px;display:inline-block;background-color:rgba(75, 75, 75, 0.2);text-align:center;user-select:none;line-height:25px;cursor:pointer}")
        GM_addStyle(".set_item_list{height :25px;background-color:rgba(0, 0, 0, 0.23);text-indent: 10px;line-height:25px;cursor:pointer;font-size:13px;user-select: none")
        GM_addStyle(".MainWindow_css{height:250px;overflow:hidden;border-bottom:1px;border-style:solid;border-bottom-color:#0241ff;display:inline-flex;flex-direction:column;overflow:hidden}")
        GM_addStyle("textarea{resize: none;width:100%;height:144px;overflow-x:hidden;border-left:0px;border-top:0px;border-right:0px;border-bottom:0px;color:#000000;background-color:#f9f9f9}")//
    }
    function css_black(){
        color = "#4b4b4b"
        GM_addStyle(".set_list{width:50%;height:25px;display:inline-block;background-color:#363333;text-align:center;user-select:none;line-height:25px;cursor:pointer}")
        GM_addStyle(".set_item_list{height :25px;background-color:#4b4b4b;text-indent: 10px;;line-height:25px;cursor:pointer;font-size:13px;user-select: none")
        GM_addStyle(".MainWindow_css{height:250px;overflow:hidden;border-bottom:1px;border-style:solid;border-bottom-color:#ff00006e;display:inline-flex;flex-direction:column;overflow:hidden}")
        GM_addStyle("textarea{resize: none;width:100%;height:144px;overflow-x:hidden;border-left:0px;border-top:0px;border-right:0px;border-bottom:0px;color:#FFFFFF;background-color:#181818}")//
    }
    /////////////////////////////////////////////////language/////////////////////////////////////
    function language_(en,zh,jp) {
        switch (language) {
            case "en-US":
                return en
            case "zh-CN":
                return zh
            case "ja":
                return jp
            default:
                return en
        }
    }
    //////////////////////////////////////////////////////////////////////////////////////////////
    launch()
    function launch() {
        let Y = document.createElement("div");
        Y.innerHTML =' <span id = "Y" style="height: 24px;width: 24px;background: #0ff0;">◺</span> '
        Y.title = language_("Turn on detailed settings and log(","打开详细设置和log","詳細設定とログを開く")
        Y.onclick = ()=>{
            Set_()
            Koyori(true)
        }
        if (New_Chat_Frame){
            switch (window.getComputedStyle(New_Chat_Frame, null)?.getPropertyValue('border-color'))
            {
                case "rgb(255, 255, 255)":
                    css_black()
                    color_ames="#ffffff"
                    WTF_1 = "#303030"
                    WTF_2 = "#202020"
                    break;
                case "rgb(3, 3, 3)":
                    css_white()
                    color_ames="#000000"
                    WTF_1 = "#d6d6d6"
                    WTF_2 = "#eeeeee"
                    break;
            }
        }
        Itemslist = document.querySelector("#items.yt-live-chat-item-list-renderer");
        if (!Itemslist) return;
        const Important_Frame = document.createElement("div");
        Important_Frame.id = "MainWindow";
        Important_Frame.setAttribute("class","MainWindow_css");
        const shion = document.createElement("div");
        const shion_P1 = document.createElement("div");
        const shion_P2 = document.createElement("div");
        const Setting = document.createElement("div");
        const Settinglist = document.createElement("div");
        const SettingItem = document.createElement("div")
        const O_Item = document.createElement("div");
        const shion_p = document.createElement("span");
        const GetNewMes = document.createElement("input")
        const DellMes = document.createElement("input")
        O_Item.style.flexGrow="1";
        O_Item.style.height = "130px";
        Setting.id = "setting";
        shion.id="state"
        shion.setAttribute("class","set_item_list")
        shion_p.id="tex"
        shion_P1.setAttribute("class","shion_P")
        shion_P1.style.width = "60%";
        shion_P2.setAttribute("class","shion_P")
        Settinglist.id = "settinglist";
        SettingItem.id = "settingitem";
        GetNewMes.type = "button"
        GetNewMes.value = language_("Skip","跳过","スキップ")
        DellMes.type = "button"
        DellMes.id = "operate"
        Kirara?DellMes.value = language_("Block","屏蔽","ブロック") :DellMes.value = IsMod?language_("Delete","删除","削除"):language_("Report","举报","報告")
        DellMes.title = language_("arrow key →","方向键 →","矢印キー →");
        GetNewMes.title = language_("arrow key ←","方向键 ←","矢印キー ←");
        shion_P2.appendChild(GetNewMes);
        shion_P2.appendChild(DellMes);
        shion_P2.style.display="none"
        //DellMes.disabled = true
       // GetNewMes.disabled = true
        for (let i=0;i<2;i++){
            const set_List = document.createElement("div");
            const set_Item_List = document.createElement("div");
            const Title = document.createElement("span");
            Title.setAttribute("class","Title_top");
            set_List.setAttribute("class","set_list");
            set_Item_List.setAttribute("class","set_item_list");
            set_Item_List.style.display = "none";
            switch (i)
            {
                case 0:
                    set_List.id = "Input_Key_List";
                    set_Item_List.id = "Input_Key_Item";
                    set_Item_List.style.display = "";
                    Title.innerHTML = language_("Keys","关键词","キーワード")
                    Title.id = "T1";
                    break;
                case 1:
                    set_List.id = "gauging";
                    set_Item_List.id = "gauging_Item";
                    Title.innerHTML = language_("Comment","评论","コメント");
                    Title.id = "T2";
                    break;
            }
            Settinglist.appendChild(set_List);
            set_List.appendChild(Title);
            SettingItem.appendChild(set_Item_List);
        }
        shion_P1.appendChild(shion_p);
        shion.appendChild(shion_P1);
        shion.appendChild(shion_P2);
        Setting.appendChild(Settinglist);
        Setting.appendChild(SettingItem);
        Important_Frame.appendChild(Setting);
        Important_Frame.appendChild(shion);
        const nextmes = document.createElement("div");
        nextmes.id = "next"
        nextmes.innerText = "▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼"
        nextmes.style.height = "25px"
        nextmes.style.cursor="pointer"
        nextmes.style.userSelect="none"
        nextmes.style.background="rgba(80, 80, 81, 0.39)"
        nextmes.title = language_("Open settings after 1 second","1秒后打开设置","1秒後に設定を開く");
        nextmes.before(Important_Frame);
        Important_Frame.appendChild(nextmes)
        New_Chat_Frame.before(Important_Frame);
        const MainWindow = document.getElementById("MainWindow");
        ao =IsMod?Kirara?language_("Block","屏蔽","ブロック"):language_("Delete","删除","削除"):Kirara?language_("Block","屏蔽","ブロック"):language_("Report","举报","報告");
        const Inputs = document.getElementById("Input_Key_Item");
        const gauging_Item = document.getElementById("gauging_Item");
        Inputs.style.display="none"
        gauging_Item.style.display=""
        const TItle_1= document.getElementById("Input_Key_List");
        const TItle_2= document.getElementById("gauging");
        const gauging_0 = document.createElement("div");
        const gauging_1 = document.createElement("div");
        const gauging_2 = document.createElement("div");
        const gauging_00 = document.createElement("span");
        const gauging_01 = document.createElement("span");
        const gauging_10 = document.createElement("span");
        const gauging_11 = document.createElement("span");
        const gauging_20 = document.createElement("span");
        const gauging_21 = document.createElement("span");
        gauging_0 .style.display = "inline-block";
        gauging_0.id = "Key_l"
        gauging_00.innerText = language_("Filter word count:","过滤的评论字数:","コメントの長さ:");
        gauging_01.innerText = Key_l
        gauging_01.setAttribute('contenteditable', 'true')
        gauging_01.addEventListener('keydown', function (e) {if(e.keyCode == 13)gauging_01.blur()})
        gauging_0.style.textIndent="0px";
        gauging_1.style.display = "inline-block";
        gauging_1.id = "BBQ"
        gauging_10.innerText = language_("Hits:","连续次数:","連打回数:");
        gauging_11.innerText = BBQ
        gauging_11.setAttribute('contenteditable', 'true')
        gauging_2.id = "Interval"
        gauging_2.style.display = "inline-block";
        gauging_20.innerText = language_("Max Waiting Time(ms):","最大等待时间(ms):","最大待ち時間(ms):");
        gauging_21.innerText = Delete_interval
        gauging_21.setAttribute('contenteditable', 'true')
        gauging_11.addEventListener('keydown', function (e) {if(e.keyCode == 13)gauging_11.blur()})
        gauging_0.appendChild(gauging_00);
        gauging_0.appendChild(gauging_01);
        gauging_1.appendChild(gauging_10);
        gauging_1.appendChild(gauging_11);
        gauging_2.appendChild(gauging_20);
        gauging_2.appendChild(gauging_21);
        gauging_Item.appendChild(gauging_0);
        gauging_Item.appendChild(gauging_1);
        gauging_Item.appendChild(gauging_2);
        MainWindow.appendChild(O_Item);
        const New_Chat = document.createElement("div");
        const Gather_Set = document.createElement("div");
        const Keyword_Frame = document.createElement("div");
        const Keyword_Frame_Textarea = document.createElement("textarea");
        Keyword_Frame_Textarea.id = "keys"
        New_Chat.id = "new_div_chat";
        Keyword_Frame.style.display = "none";
        Gather_Set.id = "Gather_Set"
        Gather_Set.style.display = "none";
        Gather_Set.style.backgroundColor = color
        Gather_Set.style.opacity=0.8
        Gather_Set.style.height = "100%"
        Keyword_Frame.id = "keyword_frame";
        Keyword_Frame_Textarea.placeholder = language_("Paste keywords here and click Add","复制关键词到这后点添加","ここにキーワードを貼り付けて、[Add]をクリックします");
        Keyword_Frame_Textarea.style.overflowY="scroll"
        Keyword_Frame_Textarea.style.overflowX="scroll"
        Keyword_Frame_Textarea.style.whiteSpace="pre"
        Keyword_Frame.appendChild(Keyword_Frame_Textarea);
        O_Item.appendChild(Keyword_Frame);
        O_Item.appendChild(New_Chat);
        O_Item.appendChild(Gather_Set);
        const Add_Input_Key = document.createElement("input")
        Add_Input_Key.id = "add_i_key";
        Add_Input_Key.type = "text";
        Add_Input_Key.placeholder = language_("Enter keyword","输入单条关键词","キーワードを入力してください");
        Add_Input_Key.maxlength = "500"
        Inputs.appendChild(Add_Input_Key)
        const Add_Button = document.createElement("input")
        Add_Button.type = "button"
        Add_Button.value = "Add"
        Add_Button.id = "add_b_key"
        Inputs.appendChild(Add_Button)
        const Del_Button = document.createElement("input")
        Del_Button.type = "button"
        Del_Button.value = "Delete"
        Del_Button.id = "delete_key"
        Inputs.appendChild(Del_Button)
        const Addrun = document.getElementById("overflow")
        const Re = document.createElement("input")
        Re.type = "button"
        Re.id = "on_off"
        Re.value = language_("Hide","Hide","Hide");
        Addrun.before(Re)
        let counter = document.createElement("span")
        counter.id = "miko"
        counter.innerText = 0
        let kanata = document.createElement("div")
        kanata.style.display="inline-block"
        let kanata_1 = document.createElement("div")
        kanata.style.cssText+="font-size:16px"
        Re.before(kanata)
        const rami_1 = document.createElement("span")
        rami_1.innerText="☠"
        kanata_1.appendChild(counter)
        kanata_1.appendChild(rami_1)
        kanata.appendChild(kanata_1)
        /////////////////////////Detailed settings /////////////////////////////////
        let bo =document.querySelector("yt-live-chat-app")
        let TOP_div = document.createElement("div")
        TOP_div.id = "TOPdiv"
        TOP_div.style.position="absolute"
        TOP_div.style.background="rgba(33, 33, 33,0.92)"
        TOP_div.style.visibility="hidden"
        let IsTaKo = '<div style="height: 50px;">'
        + '<div style="color: rgb(255, 255, 255);text-align:right;padding-top: 5px;padding-right: 10px;">'
        + '<span id="Set_off" style="display: inline-block;cursor:pointer;width: 21px;height: 21px">×</span>'
        + '</div>'
        + '</div>'
        + '<div style="overflow-y: scroll;overflow-x: hidden;">'
        + '<div style="height: 30px;width: 100%;display: inline-flex">'
        + '<div class="ppts" style="width: 85%;">'
        + '<span>' + language_("Block Users", "屏蔽用户", "ユーザーをブロックする") + '</span>'
        + '</div>'
        + '<div class="ppts" style="width: 15%">'
        + '<input id="ISblock" type="checkbox" ' + Isblock + '>'
        + '</div>'
        + '</div>'
        + '<div style="height: 30px;width: 100%;display: inline-flex">'
        + '<div class="ppts" style="width: 85%;"><span>' + language_("Replace chat comments", "替换聊天评论", "チャットコメントを置き換える") + '</span>'
        + '</div>'
        + '<div class="ppts" style="width: 15%">'
        + '<input id="ISreplace" type="checkbox" ' + Isreplace + '>'
        + '</div>'
        + '</div>'
        + '<div style="height: 30px;width: 100%;display: inline-flex">'
        + '<div class="ppts" style="width: 85%;">'
        + '<span>' + language_("Show Log", "输出log", "ログを表示") + '</span>'
        + '</div>'
        + '<div class="ppts" style="width: 15%">'
        + '<input id="Log_Show" type="checkbox">'
        + '</div>'
        + '</div>'
        + '</div>'
        + '<div style="width: 100%;height: 10px;background-color:#f9f9f947">'
        + '</div>'
        + '<div id="antetype_mes" style="display: none;border-bottom: 1px solid #666;border-top-width: 1px; border-left-width: 1px;border-left-style: solid;border-top-style: solid;">'
        + '<div style="display: inline-flex; width: 100%">'
        + '<div id="Log_Name" class="ppts" style="width: 85%;color:#ffffff">   =_________________________________='
        + '</div>'
        + '<div id="antetype" class="ppts" style="width: 15%;display: none" >'
        + '<input id="Unblock" type="checkbox"  >'
        + '</div>'
        + '</div>'
        + '<div id = "mes_log" class = "mes_log_class" style="display: none">'
        + '</div>'
        + '</div>'
        + '<div id = "AllLog" style=" border-bottom-width: 0px; width: 100%;height: 25px;background-color:#f9f9f930;">'
        + '<div style="display:inline-flex; width: 96%" class="ppts"><div style="width:50%">' + language_("Sort", "排序:", "ソート")
        +'<select id="Category_sort">'
        +'<option value="name">' + language_("Name", "名字", "名前")+ '</option>'
        +'<option value="Blocked">' + language_("Blocked", "已屏蔽", "ブロック済み") + '</option>'
        +'<option value="nene" style="display:none">' + language_("Untreated", "未处理", "未処理") + '</option>'
        +'<option value="URL_" style="display:none">' + language_("Channel URL", "频道URL", "チャネルURL") + '</option>'
        +'</select>'
        +'</div>'
        +'<div><input id="del_a"style="visibility:hidden" value = "'+language_("Block","屏蔽","ブロック")+'" title = "'+ language_("","","")+'" type="button"><input id="All_Block" type="button" value = "'+language_("Single Selection","单选","一択")+'" title = "'+ language_("","","")+'"></div>'
        +'</div>'
        +'<div id="Block_Logs" style="overflow-y: scroll;overflow-x:hidden;">'
        +'</div>'
        +'<div id = "Options" class="ppts">'
        +'<input id="up_" type="button"  value="<" >'
        +'<input id ="page_" type="text" style=" width:35px" value = "1">'
        +'<input id="dow_" type="button"  value=">" > '
        +'<input id="max_"type="button" value="Max:1">'
        +'<input id="Untreated_"type="button" value=' + language_("Untreated", "未处理", "未処理") +' >'
        +'<input id ="isco" type="text" style="width:20px" value = "'+doc+'">/Page'
        +'</div>'
        +'</div>'
        +'<div id="Dump" style="display:none">'
        +'</div>'
        TOP_div.innerHTML = IsTaKo
        bo.appendChild(TOP_div)
        document.querySelector("yt-icon-button#overflow").after(Y)
        let pro = document.createElement("div")
        pro.id = "Pro"
        pro.style.position="relative"
        pro.style.display = "none"
        MainWindow.appendChild(pro)
        pro.innerHTML = '<div id="PRO_1" class="pro" style="height: 16px;background:rgba(75,75,75,0.7)"></div>'
        let Zeta = '<div style="text-align:center">language settings:(0 or 200)don\'t get this language</div><div style="height: 10px;"></div>'
        +'<div style="text-align:center;display:flex;line-height: 25px;background:rgba(128,128,128,0.8)">'
        +'<div style="width:50%;height: 25px;display:flex">'
        +'<div style="min-width: 80px;text-align:right">'+language_("Japanese", "日语", "日本語")+'</div>'
        +'<div style="min-width: 70px;text-align:right;">'+language_("Word Count>", "字数>", "文字数>")+'</div>'
        +'<div><input id="lng_jp" type="text" style="width: 20px;height: 11px;" value="'+jp_l+'"></div>'
        +'</div>'
        + '<div style="width:50%;height: 25px;display:flex;background:rgba(128,128,128,0.8)">'
        + '<div style="min-width: 80px;text-align:right">'+language_("English", "英语", "英語")+'</div>'
        +'<div style="min-width: 70px;text-align:right;">'+language_("Word Count>", "单词数>", "単語数>")+'</div>'
        +'<div><input id="lng_en" type="text" style="width: 20px;height: 11px;"value="'+en_l+'">'
        +'</div>'
        +'</div>'
        +'</div>'
        Gather_Set.innerHTML = Zeta
        shion_p.innerText=count()
        /////////////////////function/////////////////
        getmes = function Getmes(){
            shion_p.innerText = count();
            if(BC>299){
                for(let i = 299;i>=99;i--){
                    New_Chat.children[i].remove()
                    BC--
                }
            }
            for(let i=Node_List.length-1;i>=0;i--){
                if (Node_List[i].Isspam===null){
                    index_dell=i
                    break
                }
            }
            if (index_dell!=null){
                Mod_dell = Node_List[index_dell].node
                let Fragment = document.createDocumentFragment()
                let Item_Top = document.createElement("div")
                Item_Top.id = index_dell
                Item_Top.setAttribute("class","item_class");
                Item_Top.title = "Name:{"+Node_List[index_dell].name+"}"
                Item_Top.style.fontWeight="bold"
                Item_Top.style.backgroundColor=BC%2==0?WTF_1:WTF_2
                for (let i = 0,L = Node_List.length;i<L;i++){
                    if(Node_List[index_dell].name_src == Node_List[i].name_src&&Node_List[i].Isspam==null){
                        let Item = document.createElement("div")
                        Item.innerText = Node_List[i].Message
                        Item.id = Node_List[i].index
                        if (Node_List[i].dubious)Item.style.color = "red"
                        if (Node_List[i].interval<1)Item.style.background="rgba(255, 218, 74, 0.2) "
                        Item_Top.prepend(Item)
                        Fragment.prepend(Item_Top)
                    }
                }
                New_Chat.prepend(Fragment)
                BC++
                shion_P2.style.display=""
            }else{
                Mod_dell=null
                index_dell= null
                Mes(language_("No New Comment!","没有新的评论!","新しいコメントなし!"))
                  shion_P2.style.display="none"
            }
        }
        function Action(){
            let first = New_Chat.firstElementChild
            first.style.textDecoration="line-through"
            first.style.fontWeight="normal"
            first.style.opacity = 0.4
            if(Kirara){
                Node_List[index_dell].act ="Block"
                Node_List.forEach((mes)=>{
                    if (Node_List[index_dell].name_src == mes.name_src){
                        mes.Isblock = true
                        mes.Isspam =true
                    }
                })
                first.style.color="red"
                Queue(Mod_dell,index_dell)
            }else{
                Node_List.forEach((mes)=>{
                    if (Node_List[index_dell].name_src == mes.name_src){
                        if (mes.Isspam===null) {
                            mes.Isspam =true
                            if(IsMod){
                                mes.act = "Delete"
                                Queue(mes.node,mes.index)
                            }else{
                                mes.act = Anemati.includes(Node_List[index_dell].name_src)?"Block":"Report"
                            }
                        }
                    }
                })
                first.style.color="yellow"
                if(!IsMod)Queue(Mod_dell,index_dell)
            }
            Anemati.push(Node_List[index_dell].name_src)
            Mod_dell=null
            index_dell=null
            shion_p.innerText=count()
            if(Untreated){
                getmes()
            }else{
                shion_P2.style.display="none"
            }
        }
        function skip(){
            Mes(language_("Comment skipped","已跳过评论","スキップしました"),"skip")
            let Top =New_Chat.firstElementChild
            for (let i = 0,l =Top.children.length;i<l;i++){
                Node_List[Top.children[i].id*1].Isspam = false;
            }
            Top.style.color="green"
            Top.fontWeight="normal"
            Top.style.opacity = 0.5
            Mod_dell=null
            index_dell=null
            shion_p.innerText=count()
            if(Untreated){
                getmes()
            }else{
                shion_P2.style.display="none"
            }
        }
        //===================================================onev===============================================================================
        let All_Block = document.getElementById("All_Block")
        let up_ = document.getElementById("up_");
        let max_ =document.getElementById("max_");
        let page_= document.getElementById("page_");
        let dow_ = document.getElementById("dow_");
        let isco_ = document.getElementById("isco");
        let Untreated_ = document.getElementById("Untreated_");
        let Category = document.querySelector("#Category_sort")
        if (IsMod)Category.options[3].style.display = ""
        let golo
        lng_jp = document.getElementById("lng_jp");
        lng_en= document.getElementById("lng_en");
        lng_jp.oninput = ()=>{
            clearTimeout(golo)
            golo =setTimeout(()=>{
                let isn = lng_jp.value.match(/[0-9]+/g)
                isn =isn?isn[0]*1:0
                !(isn)?jp_l = 200:jp_l = isn>10?isn:11
                lng_jp.value = jp_l
                Key_l = jp_l>en_l?jp_l:en_l
                gauging_01.innerText = Key_l
                localStorage.setItem("Key_l",Key_l)
                localStorage.setItem("jp_l",jp_l)
                lng_jp.blur()
            },1500)
        }
        lng_en.oninput = ()=>{
            clearTimeout(golo)
            golo =setTimeout(()=>{
                let isn = lng_en.value.match(/[0-9]+/g)
                isn =isn?isn[0]*1:0
                !(isn)?en_l = 200:en_l = isn>3?isn:3
                lng_en.value= en_l
                Key_l = jp_l>en_l?jp_l:en_l
                gauging_01.innerText = Key_l
                localStorage.setItem("Key_l",Key_l)
                localStorage.setItem("en_l",en_l)
                lng_en.blur()
            },1500)
        }
        dow_.onclick = function(){
            if(PageN<Math.ceil(Pageleng/PageMode)) PageN++
            if(pages<Pageleng){
                Page=Number(Page)+Number(PageMode);
                pages=Number(pages)+Number(PageMode)
            }
            page_.value = PageN
            Log_List(YMD,Page,pages)
            show_l()
        }
        up_.onclick = function(){
            if(Page-PageMode>=0){
                Page=Page-PageMode;
                pages=pages-PageMode;
                if(PageN>1) PageN--
            }
            page_.value = PageN
            Log_List(YMD,Page,pages)
            show_l()
        }
        isco_.oninput = ()=>{
            if(!isco_.value)return
            doc = isco_.value<1?5:Number(isco_.value)
            isco_.value = doc
            localStorage.setItem("doc",doc)
            PageMode = doc;pages = doc;Page=0;PageN = 1
            page_.value=PageN
            Log_List(YMD,Page,pages)
            show_l()
        }
        page_.oninput = ()=>{
            pages=doc
            if (page_.value<=Math.ceil(Pageleng/PageMode)){
                if(page_.value<1)page_.value=1
                pages = pages * page_.value
            }else{
                page_.value = Math.ceil(Pageleng/PageMode)
                pages = pages * page_.value
            }
            Page=pages-PageMode
            Log_List(YMD,Page,pages)
            show_l()
        }
        max_.onclick = function(){
            PageMode = doc;pages=doc;Page=0;PageN = 1
            let max =Math.ceil(Pageleng/PageMode)
            PageN = max
            pages = pages * max
            Page=pages-PageMode
            page_.value = PageN
            Log_List(YMD,Page,pages)
            show_l()
        }
        Untreated_.onclick = function(){
            let LogMes =[];
            Node_Log_List = Node_List.filter((item)=>{
                let Na = true
                if(item.Isspam===null){
                    Na=LogMes.includes(item.name_src)
                    !Na&&LogMes.push(item.name_src)
                }
                return !Na
            })
            if(!Node_Log_List.length)return;
            All_Block.style.display = ""
            page_.value = 1
            IsUntreated = true
            Category.options[2].style.display = ""
            Category.selectedIndex=2
            Category.disabled = true
            Untreated_.value = Untreated+ "  " + language_("Untreated", "未处理", "未処理")//
            Page= 0;pages=doc;PageN = 1
            Log_List(Node_Log_List,Page,pages,"name",false)
            show_l()
        }
        document.addEventListener('keyup', logKey);
        function logKey(e) {
            let Isinput = document.activeElement.id == "input"
            switch (e.code)
            {
                case "ArrowRight":
                    if (Isinput)return
                    if (New_Chat.style.display == "none"){
                        Keyword_Frame.style.display = "none"
                        Gather_Set.style.display = "none"
                        New_Chat.style.display = ""
                    }else{
                        Mod_dell?Action():getmes()
                    }
                    break;
                case "ArrowLeft":
                    if (Isinput)return
                    if (New_Chat.style.display == "none"){
                        Keyword_Frame.style.display = "none"
                        Gather_Set.style.display = "none"
                        New_Chat.style.display = ""
                    }else{
                        Mod_dell?skip():getmes()
                    }
                    break;
                case "ArrowUp":
                    if (!Isinput||!Comment.length||Isiput)return
                    Comment.length-1>rami&&rami++
                    iv.innerHTML=Comment[rami]
                    iv.dispatchEvent(new InputEvent("input"));
                    break;
                case "ArrowDown":
                    if (!Isinput||!Comment.length||Isiput)return
                    rami = rami<0?Comment.length:rami
                    rami>0&&rami--
                    iv.innerHTML=Comment[rami]
                    iv.dispatchEvent(new InputEvent("input"));
                    break;
                case "Enter":
                    rami = -1
                    break;
                case "NumpadEnter":
                    rami = -1
            }
        }
        Add_Button.onclick = function addkey() {
            let KeyItemList_="",LogNames=[]
            if (Add_Input_Key.value != ""){
                let cdk = Add_Input_Key.value.trim()
                Keylist.push(cdk)
            }else if (Keyword_Frame_Textarea.value!=""){
                Keylist=Keyword_Frame_Textarea.value.trim().split('\n')
                DellArray("",Keylist)
            }
            Add_Input_Key.value = ""
            Node_List.filter((item)=>{
                let Na = true
                if (item.Isspam){
                    Na=LogNames.includes(item.Message)
                    !Na&&Keylist.push(item.Message)
                    !Na&&LogNames.push(item.Message)
                }
                return !Na
            })
            Keylist=[...new Set(Keylist)]
            for (let i=0,l=Keylist.length;i<l;i++){
                KeyItemList_+=(i+1== l)?Keylist[i]:Keylist[i]+"\n";
            }
            Del_Button.value = Keylist.length+"Delete"
            Keyword_Frame_Textarea.value = KeyItemList_
        }
        Del_Button.onclick = function () {
            Keylist = []
            Del_Button.value = "Delete"
            Add_Input_Key.value = ""
            Keyword_Frame_Textarea.value = ""
        }
        GetNewMes.onclick = function () {
            if (New_Chat.style.display == "none"){
                Keyword_Frame.style.display = "none"
                Gather_Set.style.display = "none"
                New_Chat.style.display = ""
            }else {
                Mod_dell&&skip()
            }
        }
        GetNewMes.onmouseenter = ()=>{
            iv&&iv.blur()
            Koyori(true)
        }
        GetNewMes.onmouseleave = ()=>{
            Koyori(false)
        }
        DellMes.onclick = function () {
            clearTimeout(kazama);kazama=null;
            if (New_Chat.style.display == "none"){
                Keyword_Frame.style.display = "none"
                Gather_Set.style.display = "none"
                New_Chat.style.display = ""
            }else{
                Mod_dell&&Action()
            }
        }
        DellMes.onmouseleave = ()=>{
            Koyori(false)
        }
        DellMes.onmouseenter = ()=>{
            iv&&iv.blur()
            Koyori(true)
        }
        Re.onclick = function () {
            switch (Re.value)
            {
                case "Hide":
                    MainWindow.style.display = "none"
                    Re.value = "View"
                    break;
                case "View":
                    MainWindow.style.display = ""
                    Re.value = "Hide"
            }
        }
        Settinglist.onclick = function (e){
            let LogNames = []
            switch (e.target.id)
            {
                case "T1":
                    if(Inputs.style.display="none" )Inputs.style.display="";
                    if (Inputs.style.display==""){
                        TItle_1.style.backgroundColor=color
                        TItle_2.removeAttribute("style")
                        gauging_Item.style.display = "none"
                        New_Chat.style.display = "none"
                        Keyword_Frame.style.display = ""
                        Gather_Set.style.display = "none";
                        let KeyItemList_ = ""
                        Node_List.filter((item)=>{
                            let Na = true
                            if (item.Isspam){
                                Na=LogNames.includes(item.Message)
                                !Na&&Keylist.push(item.Message)
                                !Na&&LogNames.push(item.Message)
                            }
                            return !Na
                        })
                        Keylist=[...new Set(Keylist)]
                        for (let i=0,l=Keylist.length;i<l;i++){
                            KeyItemList_+=(i+1== l)?Keylist[i]:Keylist[i]+"\n";
                        }
                        Del_Button.value = Keylist.length+"Delete"
                        Keyword_Frame_Textarea.value = KeyItemList_
                    }
                    break;
                case "T2":
                    if(gauging_Item.style.display="none")gauging_Item.style.display="";
                    if (gauging_Item.style.display==""){
                        TItle_1.removeAttribute("style")
                        TItle_2.style.backgroundColor=color
                        Inputs.style.display = "none"
                        New_Chat.style.display = ""
                        Keyword_Frame.style.display = "none"
                        Gather_Set.style.display = "none";
                    }
                    break;
            }
        }
        SettingItem.onclick =function(e){
            if(e.target.nodeName=="SPAN"){
                switch (e.target.parentNode.id)
                {
                    case "Key_l":
                        gauging_01.focus();
                        gauging_01.innerText= "";
                        break;
                    case "BBQ":
                        gauging_11.focus();
                        gauging_11.innerText= "";
                        break;
                    case "Interval":
                        gauging_21.focus();
                        gauging_21.innerText= "";

                }
            }
        }
        Gather_Set.onmouseleave = ()=>{
            if(Keyword_Frame.style.display != "none") return
            Koyori(false)
            New_Chat.style.display = ""
            Keyword_Frame.style.display = "none"
            Gather_Set.style.display = "none"
        }
        SettingItem.onmouseover = function(e){
            if(e.target.nodeName=="SPAN"){
                switch (e.target.parentNode.id)
                {
                    case "Key_l":
                        e.target.title = language_("Set a number greater than 10","设置大于10的数","10より大きい数を設定");
                        break;
                    case "BBQ":
                        e.target.title = language_("Set a number greater than 1 and less than 10","设置大于1小于10的数字","1より大きく10より小さい数値を設定して");
                        break;
                    case "Interval":
                        e.target.title = language_("Set a number greater than 3000","设置大于3000的数","3000より大きい数を設定");
                }
            }
        }
        Important_Frame.onmouseenter =(e)=>{
            LoadMes = false
        }
        Important_Frame.onmouseleave = (e)=>{
            LoadMes = true
        }
        gauging_01.onblur = ()=>{
            let x=gauging_01.innerText
            let xx=parseInt(x)
            typeof xx=='number'&&x!=""&&!isNaN(xx)&&Math.abs(xx)>10?Key_l=Math.abs(xx):Key_l= Key_l
            gauging_01.innerText=Key_l
            localStorage.setItem("Key_l",Key_l)
        }
        gauging_11.onblur = ()=>{
            let x=gauging_11.innerText
            let xx=parseInt(x)
            typeof xx=='number'&&x!=""&&!isNaN(xx)&&Math.abs(xx)>2?BBQ=Math.abs(xx):BBQ= BBQ
            gauging_11.innerText=BBQ
            localStorage.setItem("BBQ",BBQ)
        }
        gauging_21.onblur = ()=>{
            let x=gauging_21.innerText
            let xx=parseInt(x)
            typeof xx=='number'&&x!=""&&!isNaN(xx)&&Math.abs(xx)>3000?Delete_interval=Math.abs(xx):Delete_interval= Delete_interval
            gauging_21.innerText=Delete_interval
        }

        nextmes.onmouseout = ()=>{
            clearTimeout(korone)
        }
        nextmes.onmouseover = ()=>{
            clearTimeout(korone);korone=null
            korone=setTimeout(()=>{
                Koyori(true)
                iv&&iv.blur()
                if(Keyword_Frame.style.display != "none") return
                New_Chat.style.display = New_Chat.style.display == "none"?"":"none"
                Keyword_Frame.style.display = "none"
                Gather_Set.style.display = Gather_Set.style.display == "none"?"":"none"
            },1000)
        }
        //===================================================filter================================================================================
        function Iroha(mes,Height){
            let reen =mes.match(re_en)
            let enl = reen?reen.length:0
            let rejp =mes.match(re_jp)
            let jpl = rejp?rejp.length:0
            let reall=mes.match(re_all)
            let all_l =reall?reall.length:0
            let save = (all_l > Key_l)||(enl>en_l)||(jpl>jp_l)
            return save
        }
        Yagoo = new MutationObserver((Guestbook) => {
            Guestbook.forEach(function (MessageList) {
                MessageList.addedNodes.forEach(function (node) {
                    //if (node.nodeName=="YTD-SPONSORSHIPS-LIVE-CHAT-GIFT-PURCHASE-ANNOUNCEMENT-RENDERER"&&gift)call("Gift Thank you")
                    if (node.nodeName!="YT-LIVE-CHAT-TEXT-MESSAGE-RENDERER")return;
                    const Messages_EL = node.querySelector("#message");
                    const Yname = node.querySelector("#author-name");
                    const may = node.querySelector("#chip-badges").children.length;
                    if (!Yname||!Messages_EL||may) return;
                    const Tname = node.querySelector("#author-photo").querySelector("#img");
                    let Tname_=Yname.innerText;
                    const Cdk = Messages_EL.innerText.trim();
                    if(!Iroha(Cdk,node.offsetHeight)){Ch_m += 1;return};
                    if (node.querySelector("#card") || node.querySelector(".member")) return;
                    let Tname_T = Tname.src+"["+encodeURIComponent(Tname_)+"]";
                    let Key_On = false,Peko = false,Ischeck = false,IsSp = false;
                    let get_time =new Date().getSeconds()
                    Peko = Anemati.includes(Tname_T);
                    if (!Peko){
                        Keylist.length&&Keylist.some((item)=>{
                            if (item==Cdk){
                                Key_On = true
                                IsSp = true
                            }
                            return Key_On;
                        })
                        !Key_On&&Node_List.some((item)=>{
                            if (item.Message==Cdk){
                                Key_On = true
                                if(item.Isspam===false){
                                    Ischeck = true
                                }else if(item.Isspam===true){
                                    IsSp = true
                                }
                            }
                            return Key_On;
                        })
                    }
                    if(Ischeck)return;
                    Node_List.push({node:node,name:Tname_,name_src:Tname_T,index:Node_List_index,Isblock:false,Isspam:null,regexp:GetKey(Cdk),Message:Cdk,Time:get_time,interval:Ch_m,act:null,dubious:false});
                    if(Ame){
                        let zoo = document.createElement("span");
                        zoo.id = "ZOO"
                        zoo.innerHTML = Zoo();
                        Messages_EL.style.visibility = "hidden";
                        Messages_EL.before(zoo)
                    }
                    if(Mod_Runing&&del_all){
                        Node_List[Node_List_index].act = "Delete"
                        Queue(node,Node_List_index)
                    }else{
                        if (Key_On) {
                            if (IsSp&&(Mod_Runing||Auto)){
                                Node_List[Node_List_index].act ="Block"
                                Queue(node,Node_List_index)
                            }else{
                                Node_List[Node_List_index].dubious = true
                                Mod_dell==null&&getmes()
                            }
                        }else if(Peko){
                            Node_List[Node_List_index].Isspam =true
                            if (!Mod_Runing&&!Auto){
                                Node_List[Node_List_index].act =IsMod?"Delete":"Report"
                                if(Kirara){
                                    let end = Node_List.some((item)=>{
                                    return (item.name_src == Tname_T&&item.act == "Block")
                                    })
                                    if(!end){
                                    Node_List[Node_List_index].act = "Block"
                                    Node_List[Node_List_index].Isblock = true
                                     }
                                }
                                Queue(node,Node_List_index)
                            }else if((Mod_Runing||Auto)){
                                let end = Node_List.some((item)=>{
                                    return (item.name_src == Tname_T&&item.act == "Block")
                                })
                                if(!end){
                                    Node_List[Node_List_index].act ="Block"
                                    Node_List[Node_List_index].Isblock = true
                                    Queue(node,Node_List_index)
                                }
                            }
                        }else{
                            let a=Node_List.length-1,b=Node_List.length-1-BBQ,Iscar=0
                            for(let i=a,c=b<0?0:b;i>=c;i--){
                                if(Node_List[i].name_src==Tname_T) Iscar++
                            }
                            if (Iscar>=BBQ&&Ch_m<=BBQ) {
                                Anemati.push(Tname_T)
                                Node_List.forEach((mes)=>{
                                    if (Node_List[Node_List_index].name_src == mes.name_src&&!mes.Isblock){
                                        mes.Isspam =true
                                        if(Mod_Runing||Auto||Kirara){
                                            mes.Isblock = true
                                        }else{
                                        mes.act =IsMod?"Delete":"Report"
                                        Queue(mes.node,mes.index)
                                        }
                                    }
                                })
                                if(Mod_Runing||Auto||Kirara){
                                    Node_List[Node_List_index].act ="Block"
                                    Queue(node,Node_List_index)
                                }
                            }else{
                                Mod_dell==null&&getmes()
                            }
                        }
                    }
                    Ch_m=0;Node_List_index++
                    shion_p.innerText=count()
                    Untreated_.value =Untreated+ "  " + language_("Untreated", "未处理", "未処理")
                });
            });

        });
        Yagoo.observe(Itemslist, {
            childList: true,
        });
        setInterval(()=>{
            if (!LoadMes) return
            if (Mod_dell&&index_dell<Node_List.length){
                New_Chat.firstElementChild.remove()
                Mod_dell=null
                index_dell= null
                BC--
                getmes()
            }
        },60000)
    }
    //end//
    let ISblock=document.getElementById("ISblock")
    let ISreplace=document.getElementById("ISreplace")
    let BlockLogs=document.querySelector("#Block_Logs")
    let LogShow=document.querySelector("#Log_Show")
    let Dump = document.querySelector("#Dump")
    let Category = document.querySelector("#Category_sort")
    let Coco=document.getElementById("antetype_mes");
    let miko = document.getElementById("miko");
    const pro=document.getElementById("Pro")
    const PRO_1 =document.getElementById("PRO_1")
    const MainWindow = document.getElementById("MainWindow");
    const AllLog=document.querySelector("#AllLog")
    const max_=document.getElementById("max_")
    const Untreated_=document.getElementById("Untreated_")
    const shion_p=document.getElementById("tex")
    let TOPdiv=document.getElementById("TOPdiv")
    let DellMes=document.getElementById("operate")
    let All_Block = document.getElementById("All_Block")
    let Del_all = document.getElementById("del_a")
    let New_Chat =document.getElementById("new_div_chat")
    let Report_Menu_Fram,Dialogs_Confirm_Fram,Main_Menu_Fram,MenuOperationing=false,wi=MainWindow.clientWidth
    AllLog.style.visibility = "hidden"
    Kirara=ISblock.checked
    Ame = ISreplace.checked
    Isauto()
    Menu_Set()
    function Menu_Set() {
        let F=document.querySelector("div#input-panel")
        let FF = new MutationObserver((node) =>Isauto())
        FF.observe(F, {
            childList: true,
        })
        let Menu_black = new MutationObserver((node) => {
            for (let item of node){
                for (let op of item.addedNodes){
                    if (op.nodeName=="TP-YT-IRON-OVERLAY-BACKDROP")op.style.display="none"
                }
            }
        });
        Menu_black.observe(document.querySelector("body"), {childList: true,});
        let Mumei =document.querySelector("yt-live-chat-app")
        let Menu_Set = new MutationObserver((node) => {
            for (let item of node){
                for (let op of item.addedNodes){
                    switch (op?.children[0]?.nodeName)
                    {
                        case "YT-REPORT-FORM-MODAL-RENDERER":
                            Report_Menu.disconnect()
                            Report_Menu.observe(op,{attributeFilter:[ "style"],})
                            Report_Menu_report=op.querySelector("#submit-button")
                            Report_Menu_Item=op.querySelector(".radio.style-scope.yt-options-renderer")
                            Report_Menu_Fram = op
                            break;
                        case "YT-CONFIRM-DIALOG-RENDERER":
                            Dialogs.disconnect()
                            Dialogs.observe(op,{attributeFilter:[ "style"],});
                            Dialogs_Confirm=op.querySelector("#confirm-button")
                            Dialogs_Confirm_Fram = op
                            break;
                        case "DIV":
                            if(op?.children[0].children[0].nodeName!="YTD-MENU-POPUP-RENDERER") return
                            Main_Menu.disconnect()
                            Main_Menu.observe(op,{attributeFilter:[ "style"],});
                            Main_Menu_Box = op.querySelector("#items").children
                            Main_Menu_Fram = op
                    }
                }
            }
            if(Report_Menu_Fram&&Dialogs_Confirm_Fram&&Main_Menu_Fram)Menu_Set.disconnect()
        });
        Menu_Set.observe(Mumei, {
            childList: true,
        });
        let Main_Menu = new MutationObserver((E) => {
            if(Achan===null||IsOwner)return
            if (Main_Menu_Fram.style.display=="none")return
            Main_Menu_Fram.style.display = "none"
            if (IsMod)Node_List[Achan].URL=document.querySelector("ytd-menu-navigation-item-renderer").children[0].href
            let Main_Menu_Click,BoxLength=Main_Menu_Box.length
            switch (Node_List[Achan].act){
                case "Report":
                    Main_Menu_Click= BoxLength=2?Main_Menu_Box[0]:Main_Menu_Box[1]
                    break;
                case "Delete":
                    BoxLength==5?Main_Menu_Click = Main_Menu_Box[2]:null
                    Mes(language_("Comment deleted","已删除评论","コメントが削除されました "),Node_List[Achan].act)
                    break;
                case "Block":
                    IsMod?Main_Menu_Click = BoxLength ==4? Main_Menu_Box[3]: Main_Menu_Box[4]:Main_Menu_Click = Main_Menu_Box[1]
                    IsMod&&Mes(language_("User has been blocked","用户已屏蔽","ユーザーがブロックされました"),Node_List[Achan].act)
                    Mes(language_("User has been blocked","用户已屏蔽","ユーザーがブロックされました"),Node_List[Achan].act)
                    break;
                case "Unblock":
                    IsMod?Main_Menu_Click = BoxLength ==4? Main_Menu_Box[3]: Main_Menu_Box[4]:Main_Menu_Click = Main_Menu_Box[1]
                    Mes(language_("Unblocked","已解除屏蔽","ユーザーのブロックが解除した"))
            }
            let MSG = Del_List.length
            Main_Menu_Click&&Main_Menu_Click.children[0].children[0].click()
            if(IsMod&&MSG){
                clearTimeout(Deleting);Deleting=null;Achan=null
                Queue();
            }else if(IsMod){
                Mio=false
                Achan=null
            }
        });
        let Dialogs = new MutationObserver((E) => {
            if (Dialogs_Confirm_Fram.style.display=="none")return
            Dialogs_Confirm_Fram.style.display="none"
            if(Achan!=null){
                switch (Node_List[Achan].act){
                    case "Report":
                        Mes(language_("Comment has been reported","已举报评论","コメントが報告されました"),Node_List[Achan].act)
                        break;
                    case "Block":
                        Mes(language_("User has been blocked","用户已屏蔽","ユーザーがブロックされました"),Node_List[Achan].act)
                }
            }
            clearTimeout(Deleting);Deleting=null;Achan=null
            Dialogs_Confirm.children[0].children[0].click();
            Del_List.length?Queue():Mio=false;
        });
        let Report_Menu = new MutationObserver((E) => {
            if (Report_Menu_Fram.style.display=="none")return
            Report_Menu_Fram.style.display="none"
            Report_Menu_Item.click()
            Report_Menu_Item.setAttribute('class', 'radio style-scope yt-options-renderer iron-selected')
            Report_Menu_Item.setAttribute('aria-checked', 'true')
            Report_Menu_Item.setAttribute('aria-selected', 'true')
            Report_Menu_Item.setAttribute('checked', '')
            Report_Menu_Item.setAttribute('active', '')
            Report_Menu_Item.setAttribute('focused', '')
            Report_Menu_report.click();
        });
    }
    function DellArray(V,Array){
        let Fubigi = [];
        for (let i= Array.length-1;i>=0;i--){
            if(Array[i].proto==V){
                Array.splice(i, 1)
            }
        }
        Array = Array.filter((item)=>{
            let Na=Fubigi.includes(item.proto)
            !Na&&Fubigi.push(item)
            return !Na
        })
        return Array
    }
    function GetKey(en) {
        en = en.match(re_all)
        let items=""
        en.forEach((item)=>{
            let tes = re_.test(item)
            if (tes)return;
            items += item+".*"
        })
        return ".*"+ items
    }
    pro.style.width=wi+"px";
    pro.setAttribute('class', 'pro')
    TOPdiv.onclick=(e)=>{
        let GTA,LogNames = [],ssd,index,AutoR
        switch (e.target.id)
        {
            case "Set_off":
                TOPdiv.style.visibility="hidden";
                AllLog.style.visibility = "hidden"
                Category.disabled = false
                Category.selectedIndex=0
                Category.options[2].style.display = "none"
                IsUntreated=false
                Del_all.style.visibility = "hidden"
                document.getElementById("Untreated_").value =Untreated+ "  " + language_("Untreated", "未处理", "未処理")
                BlockLogs.innerHTML=null
                LogShow.checked =false
                Selection = true
                Koyori(false)
                break;
            case "ISblock":
                AutoR=document.querySelector("#auto___")
                Isblock = ISblock.checked?"checked":" "
                Kirara=ISblock.checked
                localStorage.setItem("IsBlock",Isblock)
                Kirara?DellMes.value = language_("Block","屏蔽","ブロック") :DellMes.value = IsMod?language_("Delete","删除","削除"):language_("Report","举报","報告")
                break;
            case "ISreplace":
                Isreplace = ISreplace.checked?"checked":" "
                Ame=ISreplace.checked
                localStorage.setItem("Isreplace",Isreplace)
                break;
            case "Log_Show":
                Del_all.style.visibility = "hidden"
                Selection = true
                Node_Log_List= Node_List.filter((item)=>{
                    let Na = true
                    if (item.Isspam&&!item.Isblock){
                        Na=LogNames.includes(item.name_src)
                        !Na&&LogNames.push(item.name_src)
                    }
                    return !Na
                })
                Node_Log_List = Node_Log_List.filter((item)=>{
                    let block = Node_List.find((node)=>{
                        if (node.name_src == item.name_src){
                            return node.Isblock
                        }
                    })
                    return !block
                })
                Gura =LogShow.checked
                All_Block.style.display = ""
                Untreated_.value = Untreated+ "  " + language_("Untreated", "未处理", "未処理")
                if(!Gura){
                    BlockLogs.innerHTML=null
                    IsUntreated=false
                    AllLog.style.visibility = "hidden"
                    Category.selectedIndex=0
                    Category.disabled = false
                    Category.options[2].style.display = "none"
                    Koyori(true)
                    return
                }
                Koyori(false)
                BlockLogs.style.height = "414px"
                AllLog.style.visibility = "visible"
                PageMode = doc;pages=doc;Page=0;PageN = 1
                document.getElementById("page_").value = PageN
                sort(false,"name",Node_Log_List)
                Log_List(Node_Log_List,Page,pages,"name")
                show_l()
                BlockLogs.scrollTop=BlockLogs.scrollHeight
                break;
            case "IS__Block":
                if (!Selection) return
                index=Number(e.target.parentNode.id)
                GTA=Node_List[index]
                ssd = e.target.parentNode.previousElementSibling
                if(!GTA.Isblock){
                    Node_List.forEach((mes)=>{
                        if (GTA.name_src === mes.name_src){
                            mes.Isspam=true
                            mes.Isblock =true
                        }
                    })
                    GTA.act = "Block"
                }else{
                    Node_List.forEach((mes)=>{
                        if (GTA.name_src === mes.name_src){
                            if(mes.Isblock)mes.Isblock = false
                        }
                    })
                    GTA.act = "Unblock"
                }
                ssd.parentNode.parentNode.style.opacity=GTA.Isblock?0.3:1
                e.target.disabled = GTA.Isblock?true:false
                Queue(GTA.node,index)
                shion_p.innerText=count()
                Untreated_.value = Untreated+ "  " + language_("Untreated", "未处理", "未処理")
                break;
            case "All_Block":
                Selection = Selection?false:true;
                All_Block.value = Selection?language_("Single Selection","单选","一択"):language_("Multiple Selection","多选","多肢選択")
                Del_all.style.visibility =Selection?"hidden":"visible"
                for(let i=0,l = BlockLogs.children.length;i<l;i++){
                    let box = BlockLogs.children[i].querySelector("#IS__Block")
                    box.checked = Selection?false:true
                }
                break;
            case "del_a":
                for(let i=0,l = BlockLogs.children.length;i<l;i++){
                    let item = BlockLogs.children[i]
                    let box = item.querySelector("#IS__Block")
                    let index = box.parentNode.id*1
                    if(box.checked&&!Node_List[index].Isblock){
                        item.style.opacity = 0.3
                        box.disabled = true
                        Node_List[index].Isblock = true
                        Node_List[index].Isspam=true
                        Node_List[index].act = "Block"
                        Queue(Node_List[index].node,index)
                    }
                }
        }
    }
    function Mes(mes,dodo){
        switch (dodo){
            case "Report":
                PRO_1.style.background = "rgba(222, 253, 7, 0.5)"
                break;
            case "Delete":
                PRO_1.style.background = "rgba(222, 253, 7, 0.5)"
                break;
            case "Block":
                PRO_1.style.background = "rgba(255, 0, 0, 0.5)"
                break;
            case "Unblock":
                PRO_1.style.background = "rgba(0, 255, 52, 0.5)"
                break;
            case "skip":
                PRO_1.style.background = "rgba(0, 255, 52, 0.5)"
                break;
            default:
                PRO_1.style.color = "#93d2ff"
                PRO_1.style.background = "rgba(75,75,75,0.7)"
        }
        pro.style.display = ""
        PRO_1.innerHTML = mes
        clearTimeout(prpr)
        prpr=setTimeout(()=>{
            pro.style.display = "none"
            prpr=null
        },500)
    }
    document.querySelector("#Category_sort").onchange=()=>{
        BlockLogs.style.height = "414px"
        BlockLogs.innerHTML=null
        PageMode = doc;pages=doc;Page=0;PageN = 1
        let Selector = document.querySelector("#Category_sort").value
        if(Selector == "URL_"){
            All_Block.style.display = "none"
            let URL_Textarea = document.createElement("textarea"),yooooo=[]
            URL_Textarea.setAttribute("readOnly", true);
            for (let i=0,l=Node_List.length;i<l;i++){
                if(Node_List[i].URL&&(Node_List[i].Isblock))yooooo.push(Node_List[i].URL);
            }
            yooooo=[...new Set(yooooo)]
            URL_Textarea.placeholder = language_("Get only the channel URL of blocked user","只获取已屏蔽的用户的频道网址","ブロックされたユーザーのチャネルURLのみを取得する");
            URL_Textarea.value = yooooo.join("\n")
            BlockLogs.appendChild(URL_Textarea)
        }else if(Selector == "Blocked"){
            let Na = true,LogNames= []
            All_Block.style.display = "none"
            Del_all.style.visibility ="hidden"
            Node_Log_List=Node_List.filter((item)=>{
                Na = true
                if (item.Isblock){
                    Na=LogNames.includes(item.name_src)
                    !Na&&LogNames.push(item.name_src)
                }
                return !Na
            })
            Log_List(Node_Log_List,Page,pages,"name")
            show_l()
        }else{
            let LogNames= []
            All_Block.style.display = ""
            Node_Log_List = Node_List.filter((item)=>{
                let Na = true
                if (item.Isspam&&!item.Isblock){
                    Na=LogNames.includes(item.name_src)
                    !Na&&LogNames.push(item.name_src)
                }
                return !Na
            })
            Node_Log_List = Node_Log_List.filter((item)=>{
                let block = Node_List.find((node)=>{
                    if (node.name_src == item.name_src){
                        return node.Isblock
                    }
                })
                return !block
            })
            sort(false,Selector,Node_Log_List)
            Log_List(Node_Log_List,Page,pages,"name")
            show_l()
        }
        document.querySelector("#page_").value = 1
        BlockLogs.scrollTop=BlockLogs.scrollHeight
    }
    function Log_List(Log_ty,Page,pages,Name,Is_a_d){
        BlockLogs.innerHTML=null
        let Fragment = document.createDocumentFragment(),BB=0
        if(Name)YMD_Type = Name;
        YMD = Log_ty;
        Pageleng = Log_ty.length
        for(let i = Page;i<pages;i++){
            if(!Log_ty[i])break;
            let div = Coco.cloneNode(true);
            div.querySelector("#antetype").parentNode.id = Log_ty[i].name_src
            div.querySelector("#antetype").id= Log_ty[i].index
            div.style.backgroundColor=BB%2==0?WTF_1:WTF_2
            let logn=div.querySelector("#Log_Name")
            logn.innerText = Log_ty[i].name;
            let input =div.querySelector("#Unblock")
            input.title = language_("Unblock or block users","解除或屏蔽用户","ユーザーのブロックを解除またはブロックする")
            input.id="IS__Block"
            if(Log_ty[i].Isblock&&!IsUntreated){
                div.querySelector("#IS__Block").setAttribute('checked', '');
            } else if(Log_ty[i].Isblock&&IsUntreated){
                div.querySelector("#IS__Block").setAttribute('checked', '');
                input.disabled = true
                div.style.opacity=0.3
            }
            div.style.display = "";
            BB++
            Fragment.appendChild(div)
        }
        shion_p.innerText=count()
        Untreated_.value =Untreated+ "  " + language_("Untreated", "未处理", "未処理")
        BlockLogs.appendChild(Fragment)
        max_.value = "Max:"+ Math.ceil(Pageleng/PageMode)
        BlockLogs.scrollTop=BlockLogs.scrollHeight
    }
    function show_l(){
        Selection = true
        All_Block.value = language_("Single Selection","单选","一択")
        Del_all.style.visibility ="hidden"
        for(let i = 0 ,I=BlockLogs.children.length;i<I;i++){
            let it = YMD_Type=="mes" ? BlockLogs.children[i].querySelector("#Log_Message").innerText:BlockLogs.children[i]?.querySelector("#Log_Name")?.parentNode?.id
            let name = YMD_Type=="mes" ? "Mes":"Name"
            if(IsUntreated)name = "Untreated"
            let add=BlockLogs.children[i].querySelector("#mes_log")
            ShowGO(it,add,name)
            add.previousElementSibling.children[1].style.display=""
            add.style.display=""
        }
    }
    function ShowGO(it,add,name){
        let LogN =[]
        if(name=="Name"){
            Node_List.forEach((mes)=>{
                if(mes.Isspam&&mes.name_src===it){
                    let Na=LogN.includes(mes.Message)
                    !Na&&LogN.push(mes.Message)
                    if(Na)return;
                    let mes_log_div = document.createElement("div");
                    mes_log_div.innerText = mes.Message
                    mes_log_div.id = mes.index
                    if(mes.interval<2)add.parentNode.style.background="rgba(255, 218, 74, 0.2) "
                    add.appendChild(mes_log_div)
                }
            })
        }else if(name=="Mes"){
            Node_List.forEach((mes)=>{
                if(!mes.Isblock&&it === mes.Message){
                    let Na=LogN.includes(mes.name_src)
                    !Na&&LogN.push(mes.name_src)
                    if(Na)return;
                    let mes_log_div = document.createElement("div");
                    mes_log_div.innerText = mes.name
                    mes_log_div.id = mes.index
                    if(mes.interval<2)add.parentNode.style.background="rgba(255, 218, 74, 0.2) "
                    add.appendChild(mes_log_div)
                }
            })
        }else if(name = "Untreated"){
            Node_List.forEach((mes)=>{
                if ( it == mes.name_src&&!mes.Isspam&&!mes.Isblock){
                    let mes_log_div = document.createElement("div");
                    mes_log_div.innerText = mes.Message
                    mes_log_div.id = mes.index
                    if(mes.interval<2)add.parentNode.style.background="rgba(255, 218, 74, 0.2) "
                    add.appendChild(mes_log_div)
                    add.previousElementSibling.children[1].style.display=""
                    add.style.display=""
                }
            })
        }
    }
    function count(){
        Untreated = 0;Spam = 0; Normal = 0
        for (let i =0,L=Node_List.length;i<L;i++ ){
            if (Node_List[i].Isspam ==null)continue
            Node_List[i].Isspam?Spam++:Normal++
        }
        Untreated = Node_List.length - Spam - Normal
        return "Spam:"+Spam+"  |Normal:"+ Normal + "  |Untreated:"+ Untreated
    }
    function sort(Sort,type,arr){
        arr.sort((a,b)=>{
            let x, y
            switch (type)
            {
                case "name":
                    x = a.name.length
                    y = b.name.length
                    break
                case "Mes_length":
                    x = a.Message.length
                    y = b.Message.length
                    break
                case "name_abc":
                    x = a.name.toLowerCase()
                    y = b.name.toLowerCase()
            }
            if (x < y) return Sort?-1:1
            if (x > y) return Sort?1:-1
            return 0;
        })
    }
    function Set_(){
        let wi=window.innerWidth
        let hi=window.innerHeight-169;
        TOPdiv.style.width=wi+"px";
        TOPdiv.style.height=hi+"px";
        TOPdiv.style.visibility = "visible"
    }
    function Zoo(){
        let zoo=["にゃん","モグ","ワン","パチ","ピカ","ガオ"]
        let i=Math.floor(Math.random()*6)
        let b=zoo[i]+zoo[i]
        for(let n=0;n<=Math.floor(Math.random()*2);n++){
            b+=zoo[i]
        }
        return b
    }
    function Queue(mes,index){
        if(mes){
            Del_List.push({node:mes,index:index})
            spam_co++
            miko.innerText = stop?"Pausing:"+Del_List.length:Del_List.length
            !Mio&&Queue()
        }else{
            if(stop){
                shion_p.innerText=count();
                return;
            }
            Delet_mes = Del_List.pop();
            shion_p.innerText=count();
            miko.innerText = stop?"Pausing:"+Del_List.length:Del_List.length;
            Mio=true;
            Achan = Delet_mes.index;
            if(!document.body.contains(Node_List[Achan].node)){
                Dump.innerHTML = "";
                Dump.appendChild(Node_List[Achan].node);
            }
            if(window.getComputedStyle(Delet_mes.node.querySelector("#deleted-state"), null).getPropertyValue('display')==="none"||Node_List[Achan].act=="Unblock"||Node_List[Achan].act=="Block")Delet_mes.node.querySelector("#button.yt-icon-button").click();
            Deleting = setTimeout(()=>{
                Achan=null;
                Del_List.length?Queue():Mio=false;
            },Delete_interval)
        }
    }
    function Isauto(){
        let self= document.querySelector("div#top")?.querySelector("yt-live-chat-author-chip")
        if(!self)return
        my = self?.querySelector("#chat-badges")
        my.title = language_("automatic execution","自动执行","自動実行")
        iv=document.querySelector("DIV#input")
        if(IsMod&&my){
            const gauging_120 = document.createElement("div");
            gauging_120.style.display = "inline-block";
            gauging_120.id = "D_D"
            gauging_120.style.visibility = "hidden";
            gauging_120.innerText = language_("Delete Directly","直接删除","直接削除");
            const gauging_dell = document.createElement("input");
            gauging_dell.setAttribute("type","checkbox");
            gauging_dell.id = "ALL_Del"
            gauging_120.appendChild(gauging_dell);
            self.appendChild(gauging_120)
            my.style.cursor = "pointer"
            my.querySelector("div#image").style.color=Mod_Runing?"aqua":""
            gauging_120.style.visibility = Mod_Runing?"visible":"hidden"
            gauging_dell.checked = del_all;
            my.onclick = (e)=>{
                Mod_Runing=Mod_Runing?false:true
                my.querySelector("div#image").style.color=Mod_Runing?"aqua":""
                gauging_120.style.visibility = Mod_Runing?"visible":"hidden"
                del_all = false; gauging_dell.checked = del_all;
            }
            gauging_dell.onclick = (e)=>{
                del_all = gauging_dell.checked;
            }
        }else{
            AutoR = document.createElement("div");
            AutoR.style.cursor = "pointer"
            AutoR.id = "auto___"
            AutoR.innerText = "☑"
            AutoR.style.fontSize = "16px"
            AutoR.style.userSelect="none"
            AutoR.style.color=Auto?"aqua":""
            self.appendChild(AutoR)
            AutoR.onclick = ()=>{
                Auto=Auto?false:true
                AutoR.style.color=Auto?"aqua":""
            }
            AutoR.title = language_("automatic execution","自动执行","自動実行")
        }
        if(iv){
            if(iv)iv.title = language_("⁂Record only comments sent via the send button\narrow key↑:Show originally sent comment \n arrow key↓:Show last sent comment","⁂仅记录通过发送按钮发送的评论\n方向键↑:显示最初发送的评论\n方向键↓:显示最后发送的评论","⁂送信ボタンから送信されたコメントのみをログに記録する\n矢印キー↑:送信された最初のコメントを表示\n矢印キー↓:送信された最後のコメントを表示")
            iv.addEventListener('compositionstart', (event) => {
                Isiput = true
            });
            iv.addEventListener('compositionend', (event) => {
                Isiput = false
            });
            iv.onfocus = ()=> Koyori(true)
            iv.onblur = ()=> Koyori(false)
            iv.oninput=()=>{
                if (Isiput)return
                let tex=iv.cloneNode(true)
                let isnull = !(tex.innerHTML=="<br>"||tex.innerHTML=='<br class="style-scope yt-live-chat-text-input-field-renderer">')
                if (rami>-1){
                    if(isnull){
                        Comment[rami] = tex.innerHTML
                    }else{
                        Comment.splice(rami,1)
                        rami=-1
                    }
                }else{
                    isnull&&Tex.pop()
                    isnull&&Tex.unshift(tex)
                }
            }
            New_Chat_Frame.onclick = (e)=>{
                if(e.target.nodeName=="IMG"&&e.target.parentNode.id=="emoji"){
                    let tex=iv.cloneNode(true)
                    if (rami>-1){
                        Comment[rami] = tex.innerHTML
                    }else{
                        Tex.pop()
                        Tex.unshift(tex)
                    }
                }else if (e.target.nodeName =="YT-ICON"&&e.target.parentNode.id=="button"){
                    if (rami>-1){
                        rami = -1
                        return
                    }
                    Tex[0]&&Comment.push(Tex[0].innerHTML)
                    Tex = []
                    Comment=[...new Set(Comment)]
                    rami = -1
                }
            }
        }
        if(!(document.body.contains(Itemslist))){
            Yagoo.disconnect()
            Itemslist = document.querySelector("#items.yt-live-chat-item-list-renderer");
            Yagoo.observe(Itemslist, {
                childList: true,
            })
        }
    }
    const nullll = GM_registerMenuCommand("┏━━━━━━━━━━━━━━━━━━━━┓", () => {
    });
    const rere = GM_registerMenuCommand(language_("Enable/disable automatic operation under playback video","开启/关闭录播的自动操作","動画再生時の自動操作の有効化/無効化"), () => {
        IsMod?Mod_Runing=Mod_Runing?false:true:Auto=Auto?false:true
        if(Mod_Runing||Auto){alert("On")}else{alert("Off")}
    });
    const nullll11 = GM_registerMenuCommand("┗━━━━━━━━━━━━━━━━━━━━┛", () => {
    });
    function call(none){
        let iv=document.querySelector("DIV#input")
        if (!iv) return
        iv.parentNode.setAttribute('focused', '')
        let ie= new InputEvent("input")
        iv.innerHTML= none
        iv.dispatchEvent(ie);
        document.querySelector("yt-button-renderer.yt-live-chat-message-input-renderer").click()
        iv.innerHTML = null
    }
    function Koyori(is){
        stop = is
        let Top=New_Chat?.firstElementChild
        if(is){
            clearTimeout(Deleting);Deleting=null;
            if (Top&&Untreated){
                Top.remove()
                BC--
            }else if(Top&&Node_List[Top.id*1].Isspam==null){
                Top.remove()
                BC--
            }
            Mod_dell=null
            index_dell= null
            getmes()
            miko.innerText = "Pausing:"+Del_List.length
        }else{
            let ML = Del_List.length
            miko.innerText = ML
            ML?Queue():Mio=false;
        }
    }
    (function Translation(){
        sc=window.parent.document.getElementById("sc-translator-shadow")||document.getElementById("sc-translator-shadow")
        if (sc){
            let EliteMiko=sc.shadowRoot.childNodes[4].querySelector(".st-result")
            let scc = new MutationObserver((node) => {
                node.forEach((me)=>{
                    me.addedNodes.forEach((you)=>{
                        if (you?.children?.length==1&&you?.children[0].nodeName=="SPAN"){
                            let selection = window.getSelection ? window.getSelection() : window.document.getSelection();
                            let messs=selection.focusNode
                            messs.data=you.innerText
                        }
                    })
                })
            });
            scc.disconnect();
            scc.observe(EliteMiko,{
                childList: true
            });
        }
    })()
    function Add_URL_List (){
        let language = navigator.language,URL_list=[],clicked = false,show,SetList
        let yagoo=document.querySelector("#html-body"),map,map2,destination
        let Menu_Set = new MutationObserver((E) => {
            if(E[0]?.addedNodes[0]?.nodeName =="YTCP-CHANNEL-SETTINGS-DIALOG"){
                let allblock=E[0]?.addedNodes[0]
                map = allblock.children[0].children[0].children[0].children[1]
                show=allblock.querySelector("h1#dialog-title")
                Menu_Set.disconnect()
                Menu_Map.observe(map,{childList: true})
            }
        });
        yagoo&&Menu_Set.observe(yagoo,{childList: true})
        let Menu_Map = new MutationObserver((E) => {
            if (E[0]?.addedNodes[0].nodeName =="YTCP-NAVIGATION"){
                map2 = E[0]?.addedNodes[0]
                Menu_Map.disconnect()
                Menu_Map2.observe(map2,{childList: true,subtree:true})
            }
        });
        let Menu_Map2 = new MutationObserver((item) => {
            item.forEach((node)=>{
                node.addedNodes.forEach((no)=>{
                    if (no.nodeName =="YTCP-COMMUNITY-SETTINGS"){
                        destination=no
                        fun()
                        Menu_Map2.disconnect()
                    }
                })
            })
        });
        function language_(en,zh,jp) {
            switch (language) {
                case "en-US":
                    return en
                case "zh-CN":
                    return zh
                case "ja":
                    return jp
                default:
                    return en
            }
        }
        function Queue_(){
            if(!URL_list.length)return
            SetList.value = URL_list.length-1
            clicked = false
            let ul = URL_list.shift()
            WriteBlock(ul)
        }
        function WriteBlock(url){
            let pvp=document.querySelectorAll("#text-input")[2]
            pvp.innerText= ""
            pvp.value= ""
            let ie= new InputEvent("input")
            pvp.innerText= url
            pvp.value= url
            pvp.dispatchEvent(ie);
            pvp.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.focus()
            let event = document.createEvent('Event')
            event = new KeyboardEvent('keyup',{keyCode: 13})
            pvp.focus()
            pvp.dispatchEvent(event)
        }
        const on = GM_registerMenuCommand(language_("Blacklist extension script","黑名单扩展脚本","ブラックリスト拡張スクリプト"), () => {
            destination&&fun()
        });
        function fun(){
            document.querySelectorAll("ytcp-channel-picker-form-container")[0].disabled=true
            document.querySelectorAll("ytcp-channel-picker-form-container")[0].style.display="none"
            document.querySelectorAll("ytcp-channel-picker-form-container")[1].disabled=true
            document.querySelectorAll("ytcp-channel-picker-form-container")[1].style.display="none"
            document.querySelectorAll("ytcp-channel-picker-form-container")[2].querySelector("#chip-bar-container-hint").innerHTML +=
                '<input id="SetList" type="button" value="Add" style="border: 0px;">'
            document.querySelectorAll("ytcp-channel-picker-form-container")[2].querySelector("#chip-bar-container-hint").parentNode.innerHTML +=
                '<div style="height: 150px;width: 600px;"><textarea id="URL_List" placeholder="'+
                language_("Channel URL ","频道网址","チャネルURL")
                +'" style="width: 600px;height: 150px;background: #000000fa;margin: 0px;border: 0px;color: #f5f5dcb5;"></textarea></div>'
            document.querySelector("#SetList").onclick=()=>{
                URL_list = document.querySelector("#URL_List").value.split('\n')
                Queue_()
            }
            SetList = document.querySelector("#SetList")
            let Yagoo=document.querySelectorAll("tp-yt-paper-listbox#channel-results-container")[2]
            let Menu_Set = new MutationObserver((E) => {
                if (clicked == false) {
                    clicked = true
                    Yagoo.children[0].click()
                    let pvp=document.querySelectorAll("#text-input")[2]
                    pvp.innerText= ""
                    pvp.value= ""
                    setTimeout(()=>{
                        URL_list.length&&Queue_()
                    },200)
                }
            });
            Menu_Set.disconnect()
            Menu_Set.observe(Yagoo,{childList: true,})
        }
    }
})();