youtube chat control script&&Blacklist extension

One-click to block,One-click report,One-click delete,Block accounts in bulk

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         youtube chat control script&&Blacklist extension
// @namespace    mod:delete comments||report comment&&block user&&Get the blocked user channel URL
// @version      2.2.7
// @description  One-click to block,One-click report,One-click delete,Block accounts in bulk
// @author       null
// @match        *://studio.youtube.com/*
// @match        *://*.youtube.com/live_chat_replay*
// @match        *://*.youtube.com/live_chat*
// @grant        GM_registerMenuCommand
// @grant        GM_unregisterMenuCommand
// @grant        GM_addStyle
// ==/UserScript==
(function () {
    'use strict';
    let language = navigator.language
    window.location.host ==="studio.youtube.com"&&Add_URL_List ()
    if (window.location.pathname !== "/live_chat"&&window.location.pathname !== "/live_chat_replay") return;
    let height_box;
    height_box = "875px";
    if (window.location.pathname!=window.parent.location.pathname)window.parent.document.querySelector("YTD-LIVE-CHAT-FRAME#chat").style.minHeight= height_box;
    let 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 = [],Bot = [],Blocked = [],Key = [],Ng = [];
    let Achan=null,Ollie=null,This=null,BlorUn = null;
    let Ch_m = 0,Node_List_index=0,Delete_interval = 3400,BC= 0 ,Pageleng=0,Spam=0,Normal=0,Untreated=0,doc = Number(localStorage.getItem("doc"))||5,rami = -1,spam_ro = 0,spam_co = 0,err=0,Repeat = 0,YuBi = 0
    let prpr,Ame,Gura,color,Yagoo,Itemslist,color_ames,korone,BlockText
    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_,WTF_1,WTF_2,YMD,YMD_Type,Deleting,Delet_mes,AutoR,my,Kazama;
    let lng_jp = true,lng_en = true,Runing_N = false,IsUntreated=false,Isiput = false,Mio = false,stop=false,Runing_M=false,del_all = false,Selection=true,gift = true,FubuKing=false,checkname = localStorage.getItem("IScheckname")=="checked"?true:false
    let re_=/[\u200b-\u200f\uFEFF\u202a-\u202e]/g
    let re_jp = /[\u0800-\u4e00]|[\u4e00-\u9fa5]/g
    re_jp = /[\u0800-\u4e00]|[\u4e00-\u9fa5]/g
    let re_en = /\b[A-Z]+\w{2,}-*[A-Za-z]*\b/g
    let re_all = /(\b[A-Z]+\w{2,}\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"),Mn = document.querySelector("yt-icon-button#overflow")
    //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: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}")
    GM_addStyle("input[type='button']{border: none;text-align: center;text-decoration: none;font-size: 13px;cursor: pointer;height: 20px;}")
    GM_addStyle("input[type='text']{font-size: 12px;cursor: pointer;height: 16px;}")
    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{font-size: 12px;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{font-size: 12px;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
        }
    }
    //////////////////////////////////////////////////////////////////////////////////////////////
    let Y = document.createElement("div");
    Y.innerHTML =' <span id = "Y" style="height: 24px;width: 24px;background: #0ff0;">◺</span> '
    Y.title = language_("Other Settings & Bulk Actions","其他设置&批量操作","その他の設定&一括操作")
    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 = "#131313";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 T_T = document.createElement("span")
    const DellMes = document.createElement("input")
    const date = document.createElement("div");
    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"
    Kirara?DellMes.value = language_("Block","屏蔽","ブロック") :DellMes.value = IsMod?language_("Delete","删除","削除"):language_("Report","举报","報告")
    DellMes.title = language_("arrow key →","方向键 →","矢印キー →");
    GetNewMes.title = language_("arrow key ←","方向键 ←","矢印キー ←");
    T_T.innerText = " "
    shion_P2.appendChild(GetNewMes);shion_P2.appendChild(T_T);shion_P2.appendChild(DellMes);
    DellMes.disabled = true;GetNewMes.disabled = true
    shion_P2.style.display="none"
    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");
    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_0.style.textIndent="0px";
    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_1.style.display = "inline-block";gauging_1.id = "BBQ";
    gauging_10.innerText = language_("Hits:","连续次数:","連打回数:");
    gauging_11.innerText = BBQ;gauging_11.setAttribute('contenteditable', 'true');gauging_11.addEventListener('keydown', function (e) {if(e.keyCode == 13)gauging_11.blur()});
    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_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 T__T = document.createElement("span")
    T__T.innerText = " "
    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);Inputs.appendChild(T__T);
    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")
    Addrun.before(Y)
    let miko = document.createElement("span")
    miko.id = "miko";miko.innerText = 0
    let kanata = document.createElement("div")
    kanata.style.display="inline-block"
    let kanata_1 = document.createElement("div")
    kanata.style.cssText+="font-size:16px"
    const rami_1 = document.createElement("span")
    rami_1.innerText="0"
    const rami_m = document.createElement("span")
    rami_m.innerText="/"
    kanata_1.appendChild(miko);kanata_1.appendChild(rami_m);kanata_1.appendChild(rami_1);
    kanata.appendChild(kanata_1)
    Addrun.before(kanata)
    /////////////////////////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_("Also check username", "同时检查用户名字", "ユーザー名もチェック") + '</span>'
    + '</div>'
    + '<div class="ppts" style="width: 15%">'
    + '<input id="IScheckname" type="checkbox" ' + localStorage.getItem("IScheckname") + '>'
    + '</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%;">'
    + '<input id="Unblock" type="checkbox"  >'
    + '</div>'
    + '</div>'
    + '<div id = "mes_log" class = "mes_log_class">'
    + '</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_">' + language_("Channel URL", "频道URL", "チャネルURL") + '</option>'
    +'</select>'
    +'</div>'
    +'<div><input id="del_a"style="padding-right: 2px;padding-left: 2px;visibility:hidden" value = "'+language_("Block","屏蔽","ブロック")+'" title = "'+ language_("","","")+'" type="button">'
    +' '
    +'<input id="All_Block" style="padding-right: 2px;padding-left: 2px;" type="button" value = "'+language_("Single","单选","一択")+'" title = "'+ language_("","","")+'">'
    +' '
    +'<input id="Inverse" style="padding-right: 2px;padding-left: 2px;visibility:hidden" type="button" value = "'+language_("Inverse","逆","逆")+'" 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:20px" value = "1">'
    +'<input id="dow_" type="button" value=">"> '
    +'<input id="max_"type="button" value="Max:1">'
    +"&#12288"
    +'<input id="Untreated_"type="button" value=' + language_("Untreated","未处理","未処理") +'>'
    +'<input id ="isco" type="text" style="width:30px" value = "'+doc+'">/Page'
    +'<input id="OTL" type="button"  value="Backup" title ="'+ language_("Copy all blocked user information to clipboard","复制所有屏蔽的用户信息到剪切板","ブロックされたすべてのユーザー情報をクリップボードにコピーします")+'"> '
    +'</div>'
    +'</div>'
    +'<div id="Dump" style="display:none">'
    +'</div>'
    TOP_div.innerHTML = IsTaKo
    bo.appendChild(TOP_div)
    let OTL = document.getElementById("OTL")
    Mn.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/////////////////
    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&&!Node_List[i].Repeat){
                Index_=i
                break
            }
        }
        if (Index_!=null){
            Ollie = Node_List[Index_].node
            let Fragment = document.createDocumentFragment()
            let Item_Top = document.createElement("div")
            Item_Top.id = Index_;Item_Top.setAttribute("class","item_class");Item_Top.title = "Name: "+Node_List[Index_].name;Item_Top.style.fontWeight="bold";Item_Top.style.backgroundColor=BC%2==0?WTF_1:WTF_2;
            let Key = NGw()
            for (let i = 0,L = Node_List.length;i<L;i++){
                let Mm = 0
                if(Node_List[Index_].name_src == Node_List[i].name_src&&Node_List[i].Isspam==null){
                    let Item = document.createElement("div")
                    let Item_a = document.createElement("span")
                    let Item_b = document.createElement("span")
                    Item.id = Node_List[i].index;Item.style.display = "flex";Item.style.textIndent = "0px";
                    let Zz = 0,Cc =0,Xx = 0
                    for (let item of Key){
                        Cc = Node_List[i].Message.indexOf(item)
                        if (Cc>-1){
                            let Item_N = document.createElement("span")
                            let Item_M = document.createElement("span")
                            let mes=Node_List[i].Message.slice(Zz,Cc);
                            Xx = item.length
                            Zz = Cc+Xx
                            Item_N.innerText = mes
                            Item_b.append(Item_N)
                            Item_M.innerText = item;Item_M.style.color = "red"
                            Item_b.append(Item_M)
                            Mm++
                        }
                    }
                    Xx = Node_List[i].Message.length
                    let Item_E = document.createElement("span")
                    Item_E.innerText = Node_List[i].Message.slice(Zz,Xx)
                    Item_a.innerText = Node_List[i].Message
                    Item_b.append(Item_E)
                    Mm>1?Item.append(Item_b):Item.prepend(Item_a)
                    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{
            Ollie=null;Index_= 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_].act ="Block"
            Node_List.forEach((mes)=>{
                if (Node_List[Index_].name_src == mes.name_src){
                    mes.Isblock = true;mes.Isspam =true;mes.regexp!="nullll"&&Key.push(mes.regexp);
                }
            })
            first.style.color="red"
            Node_List[Index_].act =="Block"&&Blocked.push(Node_List[Index_].name_src)
            Queue(Ollie,Index_)
        }else{
            Node_List.forEach((mes)=>{
                if (Node_List[Index_].name_src == mes.name_src){
                    if (mes.Isspam===null) {
                        mes.Isspam =true;mes.regexp!="nullll"&&Key.push(mes.regexp);
                        if(IsMod){
                            mes.act = "Delete"
                            Queue(mes.node,mes.index)
                        }else{
                            mes.act = Anemati.includes(Node_List[Index_].name_src)?"Block":"Report"
                        }
                    }
                }
            })
            first.style.color="yellow"
            if(!IsMod){
                Node_List[Index_].act =="Block"&&Blocked.push(Node_List[Index_].name_src)
                Queue(Ollie,Index_)
            }
        }
        Node_List[Index_].act!="Block"&&Anemati.push(Node_List[Index_].name_src)
        Ollie=null;Index_=null;
        shion_p.innerText=count()
        Key=[...new Set(Key)]
        Untreated?Getmes():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;
        Ollie=null;Index_=null;
        shion_p.innerText=count()
        Untreated?Getmes():shion_P2.style.display="none"
    }
    function Towa(){
        let n = []
        Bot = Node_List.filter((item)=>{
            let Na = true
            if (item.Isspam){
                Na=n.includes(item.name_src)
                !Na&&n.push(item.name_src)
            }
            return !Na
        })
        let key = NGw()
        let ng = ''
        sort(false,"Key_Ii",key)
        key.forEach((item)=>{
            let div = ""
            if(item!=",")div = '<div style="border-radius:25px;cursor:pointer;height: 25px;">&nbsp&nbsp&nbsp'+item+'&nbsp&nbsp&nbsp</div>'
            ng += div
        })
        let data ='<div style="font-size: 14px;color: #aaaaaa;text-align:center;display:flex;line-height: 25px">'
        +'<div style="width:50%;height: 25px;display:flex;line-height: 25px">'
        +'<div style="width:30%;text-align:right">Spam:</div>'
        +'<div style="width:20%;text-align:left">'+Spam+'</div>'
        +'<div style="width:30%;text-align:right">Bot:</div>'
        +'<div style="width:20%;text-align:left">'+Bot.length+'</div>'
        +'</div>'
        +'<div style="width:50%;height: 25px;display:flex">'
        +'<div style="width:30%;text-align:right">Normal:</div>'
        +'<div style="width:20%;text-align:left">'+Normal+'</div>'
        +'<div style="width:30%;text-align:right">Pending:</div>'
        +'<div style="width:20%;text-align:left">'+Untreated+'</div>'
        +'</div>'
        +'</div>'
        +'<div style="font-size: 14px;color: #aaaaaa;text-align:center;display:flex;line-height: 25px">'
        +'<div style="width:50%;height: 25px;display:flex">'
        +'<div style="width:30%;text-align:right">Blocked:</div>'
        +'<div style="width:20%;text-align:left">'+spam_co+'</div>'
        +'<div style="width:30%;text-align:right">Report:</div>'
        +'<div style="width:20%;text-align:left">'+spam_ro+'</div>'
        +'</div>'
        +'<div style="width:50%;height: 25px;display:flex">'
        +'<div style="width:30%;text-align:right">Error:</div>'
        +'<div style="width:20%;text-align:left">'+err+'</div>'
        +'<div style="width:30%;text-align:right">Repeat:</div>'
        +'<div style="width:20%;text-align:left">'+Repeat+'</div>'
        +'</div>'
        +'</div>'
        +'<div style="background: #5f5f5f82;width:100%;font-size: 14px;color: #aaaaaa;text-align:center;line-height: 25px">NG Word</div>'
        +'<div id = "NG" style=" overflow-y: scroll;background: #ffffff0a;width:100%;display:flex;flex-flow: row wrap;font-size: 14px;color: #aaaaaa;line-height: 25px;min-height: 50px;max-height: 290px;word-wrap:break-word">'+ng
        +'</div>'
        +'<div style="text-align:center;"><textarea id="NG_Key" type="text" style="width:94%"></textarea></div>'
        date.innerHTML = data
        let NG= document.getElementById("NG");
        let NG_Key = document.getElementById("NG_Key");
        NG_Key.placeholder = language_("Click on the words to add them to the text box","点击单词添加到文本框","単語をクリックしてテキストボックスに追加します");
        NG_Key.style.fontSize = "13px"
        NG.onclick = null;NG.onmouseout = null;NG.onmouseover = null;
        NG.onclick = (e)=>{
            if (e.target.id!="NG"){
                let Key_v = e.target.innerText.trim()
                let NG_v = NG_Key.value
                NG_Key.value += NG_v?","+Key_v:Key_v
                e.target.style.display = "none"
            }
        }
        NG.onmouseout = (e)=>{
            if (e.target.id!="NG"){
                e.target.style.background = ""
            }
        }
        NG.onmouseover = (e)=>{
            if (e.target.id!="NG"){
                e.target.style.background = "#606060"
            }
        }

    }
    function NGw(){
        let key_ = Key.length?DellArray("",[...new Set(Key.toString().split(".*"))]):[]
        return key_
    }
    setInterval(()=>{
        if(!stop&&Untreated){
            let Top=New_Chat?.firstElementChild
            if (Top&&Node_List[Top.id*1].Isspam==null){
                Top.remove()
                BC--
            }else if(Top&&Node_List[Top.id*1].Isspam==false){
                Top.style.color="green";Top.fontWeight="normal";Top.style.opacity = 0.5;
            }else if(Top&&Node_List[Top.id*1].Isspam){
                Top.style.textDecoration="line-through";Top.style.fontWeight="normal";Top.style.opacity = 0.4;Top.style.color= Node_List[Top.id*1].Isblock?"red":"yellow";
            }
            Ollie=null;Index_= null;
            Getmes()
        }
    },60000)
    //===================================================onev===============================================================================
    let All_Block = document.getElementById("All_Block")
    let Inverse = document.getElementById("Inverse")
    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")
    let BlockLogs=document.querySelector("#Block_Logs")
    if (IsMod)Category.options[3].style.display = ""
    let golo,URL
    lng_jp = document.getElementById("lng_jp");lng_en= document.getElementById("lng_en");
    Itemslist.ondblclick = (e) =>{
        switch (e.target.id)
        {
            case "author-name":
                URL = e.target.parentNode.parentNode.parentNode.data.authorExternalChannelId
                URL&&window.open("https://www.youtube.com/channel/" + URL +"/about")
        }
    }
    Itemslist.onmouseover = (e) =>{
        switch (e.target.id)
        {
            case "author-name":
                e.target.style.cursor = "pointer"
        }
    }
    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)
        BlockLogs.scrollTop=BlockLogs.scrollHeight
    }
    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)
        BlockLogs.scrollTop=BlockLogs.scrollHeight
    }
    isco_.oninput = ()=>{
        if(!isco_.value)return
        doc = isco_.value<1||isNaN(isco_.value)?50: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)
        BlockLogs.scrollTop=BlockLogs.scrollHeight
    }
    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)
    }
    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)
        BlockLogs.scrollTop=BlockLogs.scrollHeight
    }
    Untreated_.onclick = function(){
        let LogNames =[]
        Node_Log_List = Node_List.filter((item)=>{
            return item.Isspam===null
        })
        Node_Log_List = Sorting(Node_List,Node_Log_List)
        Untreated_.value = Untreated+ "  " + language_("Untreated", "未处理", "未処理")
        All_Block.style.display = ""
        page_.value = 1
        IsUntreated = true
        Category.options[2].style.display = "";Category.selectedIndex=2;Category.disabled = true;
        Page= 0;pages=doc;PageN = 1
        Log_List(Node_Log_List,Page,pages,"name",false)
        BlockLogs.scrollTop=BlockLogs.scrollHeight
    }
    OTL.onclick = function(){
        let log=""
        Node_List.forEach((item)=>{
            if(item.Isblock&&item.URL){
                log += item.name+":["+item.Message+"]\n"+item.URL+"\n--------------------------------------------------------------------------------------------------------------\n"
            }
        })
        log&&navigator.clipboard.writeText(log)
    }
    Y.onclick = ()=>{
        if (event.shiftKey==true){
            Important_Frame.style.display=Important_Frame.style.display=="none"?"":"none"
            if(Important_Frame.style.display=="none"){
                Yagoo.disconnect()
            }else{
                Yagoo.disconnect()
                Itemslist = document.querySelector("#items.yt-live-chat-item-list-renderer");
                Yagoo.observe(Itemslist, {
                    childList: true,
                })
            }
        }else{
            Koyori(true)
            Set_();
            Towa()
        }
    }
    New_Chat.ondblclick = (e) =>{
        if (e.target.nodeName=="SPAN"&&e.target.parentNode.id*1 > -1)window.open(Node_List[e.target.parentNode.id*1].URL+"/about")
    }
    New_Chat.onmouseout = (e)=>{
        let node = e.target.parentNode.parentNode
        if (node.className=="item_class"&&(node.previousSibling||Untreated==0))node.style.opacity = 0.4
    }
    New_Chat.onmouseover = (e)=>{
        let node = e.target.parentNode.parentNode
        if (node.className=="item_class")node.style.opacity = 1
    }
    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{
                    Ollie&&!Node_List[Index_].Isblock?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{
                    Ollie?skip():Getmes()
                }
                break;
            case "ArrowUp":
                document.activeElement.id =="input"&&event.preventDefault()
                if (!Comment.length||Isiput)return
                Comment.length-1>rami&&rami++
                iv.innerHTML=Comment[rami];iv.dispatchEvent(new InputEvent("input"));
                break;
            case "ArrowDown":
                document.activeElement.id =="input"&&event.preventDefault()
                if (!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 {
            Ollie&&skip()
        }
    }
    shion_P2.onmouseenter = ()=>{
        iv&&iv.blur()
        New_Chat.scrollTop=0
        Kazama=setTimeout(()=>Koyori(true),400)
    }
    shion_P2.onmouseleave = ()=>{
        clearTimeout(Kazama);Kazama=null
        !FubuKing&&Koyori(false)
    }
    DellMes.onclick = function () {
        if (New_Chat.style.display == "none"){
            Keyword_Frame.style.display = "none"
            Gather_Set.style.display = "none"
            New_Chat.style.display = ""
        }else{
            Ollie&&Action()
        }
    }
    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
        !FubuKing&&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 2000","设置大于2000的数","2000より大きい数を設定");
            }
        }
    }
    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)>2000?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)
    }
    rami_1.onmouseover = ()=>{
        rami_1.title = Kirara?"Blcoked":"Reported"
    }
    //===================================================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!="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");
                if (/(data\:image\/gif)+.*/.test(Tname.src))return
                let Tname_=Yname.innerText;
                let Cdk = Messages_EL.innerText.trim();
                if(checkname)Cdk = (Tname_.length>Key_l&&Cdk.length<Key_l)?Tname_:Cdk
                if(!Iroha(Cdk,node.offsetHeight)){Ch_m += 1;return};
                if (node.querySelector("#card") || node.querySelector(".member")) return;
                let Tname_T = node.data.authorExternalChannelId
                if (Blocked.includes(Tname_T))return
                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;
                let url = "https://www.youtube.com/channel/"+Tname_T,params_ = node.data.contextMenuEndpoint.liveChatItemContextMenuEndpoint.params
                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,Repeat:false,URL:url,
                    params:params_
                });
                if(Ame){
                    let zoo = document.createElement("span");
                    zoo.id = "ZOO";zoo.innerHTML = Zoo();
                    Messages_EL.style.visibility = "hidden";Messages_EL.before(zoo);
                }
                if(Runing_M&&del_all){
                    Node_List[Node_List_index].act = "Delete";
                    Queue(node,Node_List_index);
                }else{
                    if (Key_On) {
                        if (IsSp){
                            Node_List[Node_List_index].act ="Block";Node_List[Node_List_index].Isspam = true;Node_List[Node_List_index].Isblock = true;
                            Node_List[Node_List_index].act =="Block"&&Blocked.push(Node_List[Node_List_index].name_src)
                            Spam++
                            Queue(node,Node_List_index)
                        }else{
                            Node_List[Node_List_index].dubious = true
                            Untreated++
                            Ollie==null&&Getmes()
                        }
                    }else if(Peko){
                        Node_List[Node_List_index].Isspam =true
                        let end = Node_List.some((item)=>{
                            return (item.name_src == Tname_T&&item.Isblock)
                        })
                        if (!Runing_M&&!Runing_N){
                            Node_List[Node_List_index].act =IsMod?"Delete":"Report"
                            if(Kirara&&!end){
                                Node_List[Node_List_index].act = "Block";Node_List[Node_List_index].Isblock = true
                            }
                        }else if((Runing_M||Runing_N)&&!end){
                            Node_List[Node_List_index].act ="Block";Node_List[Node_List_index].Isblock = true
                        }
                        Node_List[Node_List_index].act =="Block"&&Blocked.push(Node_List[Node_List_index].name_src)
                        Spam++
                        Queue(node,Node_List_index)
                    }else{
                        let a=Node_List.length-1,b=a-BBQ-1,Iscar=0
                        for(let i=a,c=b<0?0:b;i>=c;i--){
                            if(Node_List[i].name_src==Tname_T&&Node_List[i].interval<=1) Iscar++
                        }
                        if (Iscar>=BBQ){
                            Node_List.forEach((mes)=>{
                                if (Node_List[Node_List_index].name_src == mes.name_src&&!mes.Isblock){
                                    mes.Isspam =true
                                    Spam++
                                    if(Runing_M||Runing_N||Kirara){
                                        mes.Isblock = true
                                    }else{
                                        mes.act =IsMod?"Delete":"Report"
                                        Queue(mes.node,mes.index)
                                    }
                                }
                            })
                            if(Runing_M||Runing_N||Kirara){
                                Node_List[Node_List_index].act = "Block"
                                Node_List[Node_List_index].act == "Block"&&Blocked.push(Node_List[Node_List_index].name_src)
                                Queue(node,Node_List_index)
                            }
                            Node_List[Node_List_index].act!="Block"&&Anemati.push(Node_List[Node_List_index].name_src)
                        }else{
                            Untreated++
                            Ollie==null&&Getmes()
                        }
                    }
                }
                Ch_m=0;Node_List_index++
                shion_p.innerText= "Spam:"+Spam+"  |Normal:"+ Normal + "  |Untreated:"+ Untreated
                Untreated_.value =Untreated+ "  " + language_("Untreated", "未处理", "未処理")
            });
        });
    });
    Yagoo.observe(Itemslist, {
        childList: true,
    });
    let ISblock=document.getElementById("ISblock")
    let ISreplace=document.getElementById("ISreplace")
    let IScheckname = document.getElementById("IScheckname")
    let LogShow=document.querySelector("#Log_Show")
    let Dump = document.querySelector("#Dump")
    let Coco=document.getElementById("antetype_mes");
    let PRO_1 =document.getElementById("PRO_1")
    let AllLog=document.querySelector("#AllLog")
    let TOPdiv=document.getElementById("TOPdiv")
    let Del_all = document.getElementById("del_a")
    let Report_Menu_Fram,Dialogs_Confirm_Fram,Main_Menu_Fram,wi=MainWindow.clientWidth
    AllLog.before(date)
    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||Main_Menu_Fram.style.display=="none")return
            Main_Menu_Fram.style.display = "none"
            let Main_Menu_Click,BoxLength=Main_Menu_Box.length,MSG = Del_List.length
            switch (Node_List[Achan].act){
                case "Report":
                    Main_Menu_Click = BoxLength=2?Main_Menu_Box[0]:Main_Menu_Box[1]
                    Main_Menu_Click&&Main_Menu_Click.children[0].children[0].click();
                    break;
                case "Delete":
                    BoxLength==5?Main_Menu_Click = Main_Menu_Box[2]:null
                    Mes(language_("Comment deleted","已删除评论","コメントが削除されました "),Node_List[Achan].act)
                    clearTimeout(Deleting);Deleting = null;Achan = null;FubuKing = false;
                    Main_Menu_Click&&Main_Menu_Click.children[0].children[0].click();
                    miko.innerText = stop?"Pausing:"+MSG:MSG;
                    MSG?Queue():Mio=false;
                    break;
                case "Block":
                    IsMod?Main_Menu_Click = BoxLength ==4? Main_Menu_Box[3]: Main_Menu_Box[4]:Main_Menu_Click = Main_Menu_Box[1]
                    BlockText=Main_Menu_Click.querySelector("yt-formatted-string").childNodes[0].nodeValue
                    if (BlorUn == null)BlorUn = BlockText
                    if(BlorUn==BlockText&&IsMod){
                        Mes(language_("User has been blocked","用户已屏蔽","ユーザーがブロックされました"),Node_List[Achan].act)
                        miko.innerText = stop?"Pausing:"+MSG:MSG;
                        clearTimeout(Deleting);Deleting = null;Achan = null;FubuKing = false;spam_co++;
                        rami_1.innerText = spam_co;
                        Main_Menu_Click&&Main_Menu_Click.children[0].children[0].click()
                        MSG?Queue():Mio=false;
                    }else if(BlorUn==BlockText&&!IsMod){
                        Main_Menu_Click&&Main_Menu_Click.children[0].children[0].click()
                    }else{
                        Node_List.forEach((item)=>{
                            if(item.name_src == Node_List[Achan].name_src)item.Repeat = true
                        })
                        clearTimeout(Deleting);Deleting = null;Achan = null;FubuKing = false;
                        Repeat++
                        miko.innerText = stop?"Pausing:"+MSG:MSG;
                        Itemslist.click()
                        MSG?Queue():Mio=false;
                    }
                    break;
                case "Unblock":
                    IsMod?Main_Menu_Click = BoxLength ==4? Main_Menu_Box[3]: Main_Menu_Box[4]:Main_Menu_Click = Main_Menu_Box[1]
                    BlockText=Main_Menu_Click.querySelector("yt-formatted-string").childNodes[0].nodeValue
                    miko.innerText = stop?"Pausing:"+MSG:MSG;
                    if (BlorUn!=BlockText){
                        Mes(language_("Unblocked","已解除屏蔽","ユーザーのブロックが解除した"))
                        spam_co--
                        Blocked.splice(Blocked.lastIndexOf(Node_List[Achan].name_src),1)
                        Main_Menu_Click&&Main_Menu_Click.children[0].children[0].click()
                    }else{
                        Itemslist.click()
                        Repeat++
                        Node_List.forEach((item)=>{
                            if(item.name_src == Node_List[Achan].name_src)item.Repeat = true
                        })
                    }
                    clearTimeout(Deleting);Deleting = null;Achan = null;FubuKing = false;
                    rami_1.innerText = spam_co
                    YuBi = 0
                    MSG?Queue():Mio=false;
            }
        });
        let Dialogs = new MutationObserver((E) => {
            if (Dialogs_Confirm_Fram.style.display=="none")return
            Dialogs_Confirm_Fram.style.display="none"
            let MSG = Del_List.length
            if (Achan!=null){
                switch (Node_List[Achan].act){
                    case "Report":
                        Mes(language_("Comment has been reported","已举报评论","コメントが報告されました"),Node_List[Achan].act)
                        spam_ro++
                        break;
                    case "Block":
                        spam_co++
                        YuBi = 0
                        Mes(language_("User has been blocked","用户已屏蔽","ユーザーがブロックされました"),Node_List[Achan].act)
                }
            }
            clearTimeout(Deleting);Deleting = null;Achan = null;FubuKing = false;
            rami_1.innerText = Kirara?spam_co:spam_ro
            miko.innerText = stop?"Pausing:"+MSG:MSG;
            Dialogs_Confirm.children[0].children[0].click();
            MSG?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]==V){
                Array.splice(i, 1)
            }
        }
        Array = Array.filter((item)=>{
            let Na=Fubigi.includes(item.proto)
            !Na&&Fubigi.push(item)
            return !Na
        })
        return Array
    }
    function Sorting(a,b){
        let LogNames = []
        b = b.filter((item)=>{
            return !item.Repeat
        })
        let Xx = b.filter((item)=>{
            let Na = true
            Na=LogNames.includes(item.name_src)
            !Na&&LogNames.push(item.name_src)
            return !Na
        })
        return Xx
    }
    function GetKey(mes) {
        let re = /[\u4e00-\u9fa5]{2,8}|[\u30A0-\u30FF]{2,}/g
        let ree =mes.match(re)
        let leng = ree?ree.length:0
        let items=""
        if (leng>1){
            ree.forEach((item)=>{
                items += item+".*"
            })
            items = ".*"+ items
        }else{
            let re_en = /\b[A-Z]+\w{2,}-*[A-Za-z]*\b/g
            let ree = mes.match(re_en)
            let leng = ree?ree.length:0
            let i = Math.floor(Math.random()*leng)
            items = leng>1?ree[i]:"nullll"
        }
        return items
    }
    pro.style.width=wi+"px";pro.setAttribute('class', 'pro')
    TOPdiv.onclick=(e)=>{
        let GTA,LogNames = [],index,AutoR,item,Ischeckname;
        switch (e.target.id)
        {
            case "Set_off":
                TOPdiv.style.visibility="hidden";AllLog.style.visibility = "hidden";Del_all.style.visibility = "hidden";Inverse.style.visibility = "hidden";
                Category.disabled = false;Category.selectedIndex=0;Category.options[2].style.display = "none";
                IsUntreated=false
                Untreated_.value =Untreated+ "  " + language_("Untreated", "未处理", "未処理")
                BlockLogs.innerHTML=null
                LogShow.checked =false
                Selection = true
                !FubuKing&&Koyori(false)
                Towa()
                break;
            case "ISblock":
                AutoR=document.querySelector("#auto___")
                Isblock = ISblock.checked?"checked":" "
                Kirara=ISblock.checked
                localStorage.setItem("IsBlock",Isblock)
                rami_1.innerText = Kirara?spam_co:spam_ro
                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 "IScheckname":
                Ischeckname = IScheckname.checked?"checked":" "
                checkname = IScheckname.checked
                localStorage.setItem("IScheckname",Ischeckname)
                break;
            case "Log_Show":
                Del_all.style.visibility = "hidden";Inverse.style.visibility = "hidden"
                Selection = true
                Node_Log_List = Node_List.filter((item)=>{
                    return (item.Isspam&&!item.Isblock)
                })
                Node_Log_List = Sorting(Node_List,Node_Log_List)
                Gura =LogShow.checked
                All_Block.style.display = ""
                if(!Gura){
                    BlockLogs.innerHTML=null
                    IsUntreated=false
                    AllLog.style.visibility = "hidden"
                    Category.selectedIndex=0;Category.disabled = false;Category.options[2].style.display = "none";
                    Towa()
                    Koyori(true)
                    return
                }
                !FubuKing&&Koyori(false)
                date.innerHTML = ""
                BlockLogs.style.height = "414px"
                AllLog.style.visibility = "visible"
                PageMode = doc;pages=doc;Page=0;PageN = 1
                page_.value = PageN
                sort(false,"name",Node_Log_List)
                Log_List(Node_Log_List,Page,pages,"name")
                BlockLogs.scrollTop=BlockLogs.scrollHeight
                break;
            case "IS__Block":
                if (!Selection) return
                index=e.target._id_*1||e.target.parentNode.id*1
                item = e.target.parentNode.previousElementSibling.parentNode.parentNode
                GTA=Node_List[index]
                if(!GTA.Isblock){
                    for(let i=0,l = e.target._items_.length;i<l;i++){
                        let indexx = e.target._items_[i].index*1
                        Node_List[indexx].Isspam=true;Node_List[indexx].Isblock =true;
                        Node_List[indexx].regexp!="nullll"&&Key.push(Node_List[indexx].regexp)
                    }
                    GTA.act = "Block"
                }else{
                    for(let i=0,l = e.target._items_.length;i<l;i++){
                        let indexx = e.target._items_[i].index*1
                        Node_List[indexx].Isspam = null;Node_List[indexx].Isblock = false;
                    }
                    let del = Anemati.lastIndexOf(GTA.name_src)
                    Anemati.splice(del,1)
                    GTA.act = "Unblock"
                }
                item.style.opacity=GTA.Isblock?0.3:1
                e.target.disabled = GTA.Isblock?true:false
                shion_p.innerText=count()
                Untreated_.value = Untreated+ "  " + language_("Untreated", "未处理", "未処理")
                GTA.act =="Block"&&Blocked.push(GTA.name_src)
                Queue(GTA.node,index)
                break;
            case "All_Block":
                Selection = Selection?false:true;
                All_Block.value = Selection?language_("Single","单选","一択"):language_("Multiple","多选","多肢選択")
                Del_all.style.visibility =Selection?"hidden":"visible"
                Inverse.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],box = item.querySelector("#IS__Block"),index = box._id_*1
                    console.log(index)
                    if(box.checked){
                        for(let i=0,l = box._items_.length;i<l;i++){
                            let indexx = box._items_[i].index*1
                            Node_List[indexx].Isspam=true;Node_List[indexx].Isblock =true;
                            Node_List[indexx].regexp!="nullll"&&Key.push(Node_List[indexx].regexp)
                        }
                        Node_List[index].act = "Block"
                        Node_List[index].act =="Block"&&Blocked.push(Node_List[index].name_src)
                        Queue(Node_List[index].node,index)
                    }else{
                        for(let i=0,l = box._items_.length;i<l;i++){
                            let indexx = box._items_[i].index*1
                            Node_List[indexx].Isspam = false;Node_List[indexx].Isblock = false;
                        }
                    }
                }
                if (IsUntreated){
                    Node_Log_List = Node_List.filter((item)=>{
                        return item.Isspam===null
                    })
                    Node_Log_List = Sorting(Node_List,Node_Log_List)
                }else{
                    Node_Log_List = Node_List.filter((item)=>{
                        return item.Isspam&&!item.Isspam
                    })
                    Node_Log_List = Sorting(Node_List,Node_Log_List)
                }
                shion_p.innerText=count()
                Untreated_.value = Untreated+ "  " + language_("Untreated", "未处理", "未処理")
                All_Block.style.display = ""
                page_.value = 1
                Page= 0;pages=doc;PageN = 1
                Log_List(Node_Log_List,Page,pages,"name",false)
                BlockLogs.scrollTop=BlockLogs.scrollHeight
                break;
            case "Inverse":
                for(let i=0,l = BlockLogs.children.length;i<l;i++){
                    let item = BlockLogs.children[i],box = item.querySelector("#IS__Block")
                    box.checked = box.checked?false:true
                }
        }
    }
    TOPdiv.ondblclick = (e) =>{
        switch (e.target.id)
        {
            case "Log_Name":
                window.open("https://www.youtube.com/channel/"+e.target.parentNode.id+"/about")
        }
    }
    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)
    }
    Category.onblur = ()=>!FubuKing&&Koyori(false);
    Category.onfocus = ()=> Koyori(true);
    Category.onclick = ()=>{
        if (This ===Category.selectedIndex&&This!=null){
            Category.blur()
            This=null
        }else{
            This = Category.selectedIndex
        }
    }
    Category.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"){
            All_Block.style.display = "none";Del_all.style.visibility ="hidden";Inverse.style.visibility = "hidden";
            Node_Log_List = Node_List.filter((item)=>{
                return item.Isblock
            })
            Node_Log_List = Sorting(Node_List,Node_Log_List)
            sort(false,"Mes_length",Node_Log_List)
            Log_List(Node_Log_List,Page,pages,"name")
        }else{
            All_Block.style.display = ""
            Node_Log_List = Node_List.filter((item)=>{
                return item.Isspam&&!item.Isblock
            })
            Node_Log_List = Sorting(Node_List,Node_Log_List)
            sort(false,"Mes_length",Node_Log_List)
            Log_List(Node_Log_List,Page,pages,"name")
        }
        page_.value = 1
        BlockLogs.scrollTop=BlockLogs.scrollHeight
        Category.blur()
        setTimeout(()=>{This = null},100)
    }
    function Property(a,b,c){
        Object.defineProperty(a, b, {
            value: c,
        });
    }
    function Log_List(Log_ty,Page,pages,Name){
        BlockLogs.innerHTML=null
        let Fragment = document.createDocumentFragment(),BB=0
        YMD = Log_ty;
        Pageleng = Log_ty.length
        for(let i = Page;i<pages;i++){
            if(!Log_ty[i])break;
            let div = Coco.cloneNode(true),list = [];
            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
            list = Node_List.filter((item)=>{
                return item.name_src == Log_ty[i].name_src
            })
            list.forEach((mes)=>{
                let mes_log_div = document.createElement("div");
                mes_log_div.innerText = mes.Message;mes_log_div.id = mes.index
                div.querySelector("#mes_log").appendChild(mes_log_div)
            })
            let logn=div.querySelector("#Log_Name")
            logn.innerText = Log_ty[i].name;
            logn.title = language_("Double click to enter channel","双击进入频道","ダブルクリックしてチャンネルに入る")
            logn.style.cursor = "pointer";logn.style.userSelect = "none";
            let input =div.querySelector("#Unblock")
            input.title = language_("Unblock or block users","解除或屏蔽用户","ユーザーのブロックを解除またはブロックする")
            input.id="IS__Block"
            Property(input,"_items_",list)
            Property(input,"_id_",Log_ty[i].index)
            if(Log_ty[i].Isblock)input.setAttribute('checked', '');
            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
        Selection = true
        All_Block.value = language_("Single","单选","一択")
    }
    function count(){
        Untreated = 0;Spam = 0; Normal = 0
        for (let i =0,L=Node_List.length;i<L;i++ ){
            if(Node_List[i].Repeat)continue;
            if (Node_List[i].Isspam ==null){
                Untreated++
                continue
            }else{
                Node_List[i].Isspam?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();
                    break
                case "Ii":
                    x = a.index;y = b.index;
                    break
                case "Key_Ii":
                    x = a.length;y = b.length;
            }
            if (x < y) return Sort?-1:1
            if (x > y) return Sort?1:-1
            return 0;
        })
    }
    function Set_(){
        let wi=window.innerWidth,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.unshift({node:mes,index:index});
            sort(false,"Ii",Del_List)
            miko.innerText = stop?"Pausing:"+Del_List.length:Del_List.length;
            if(!Mio)Queue();
        }else{
            miko.innerText = stop?"Pausing:"+Del_List.length:Del_List.length;
            if(stop){
                shion_p.innerText=count();
                return;
            }
            Delet_mes = Del_List.shift();
            Achan = Delet_mes.index*1;
            shion_p.innerText = count();
            Mio=true;FubuKing = true;DellMes.disabled = true;GetNewMes.disabled = true;
            if(!document.body.contains(Node_List[Achan].node)){
                Dump.innerHTML = "";Dump.appendChild(Node_List[Achan].node);
            }
            setTimeout(()=>Delet_mes.node.querySelector("#button.yt-icon-button").click(),600)
            Deleting = setTimeout(()=>{
                FubuKing = false;DellMes.disabled = false;GetNewMes.disabled = false;Mio = false;
                let ML = Del_List.length;
                miko.innerText = stop?"Pausing:"+ML:ML;
                if (YuBi>2){
                    clearTimeout(Deleting);Deleting = null;Achan = null;YuBi = 0;
                    return
                }
                err++
                Node_List[Achan].act = Node_List[Achan].act == "Unblock"?"Unblock":"Block"
                if (Node_List[Achan].act =="Block"){
                    Node_List[Achan].Isblock=true
                    Node_List.forEach((mes)=>{
                        if (Node_List[Achan].name_src == mes.name_src){
                            mes.Isblock = true;mes.Isspam =true;mes.regexp!="nullll"&&Key.push(mes.regexp)
                        }
                    })
                }
                YuBi++
                Queue(Node_List[Achan].node,Node_List[Achan].index)
            },Delete_interval+600)
        }
    }
    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 Block","自动屏蔽","自動ブロック")
        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=Runing_M?"aqua":""
            gauging_120.style.visibility = Runing_M?"visible":"hidden"
            gauging_dell.checked = del_all;
            my.onclick = (e)=>{
                Runing_M=Runing_M?false:true
                my.querySelector("div#image").style.color=Runing_M?"aqua":""
                gauging_120.style.visibility = Runing_M?"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=Runing_N?"aqua":"";
            self.appendChild(AutoR)
            AutoR.onclick = ()=>{
                Runing_N=Runing_N?false:true
                AutoR.style.color=Runing_N?"aqua":""
            }
            AutoR.title = language_("Automatic Block","自动屏蔽","自動ブロック")
        }
        if(iv){
            if(iv)iv.title = language_("⁂Record only comments sent via the send button\narrow key↑:Show originally sent comment\narrow 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 = ()=> {!FubuKing&&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"||e.target.parentNode.id=="variants")){
                    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?Runing_M=Runing_M?false:true:Runing_N=Runing_N?false:true
        if(Runing_M||Runing_N){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
        if(stop){
            if(FubuKing){
                DellMes.disabled = true;GetNewMes.disabled = true
            }else{
                DellMes.disabled = false;GetNewMes.disabled = false
            }
            miko.innerText = "Pausing:"+Del_List.length
        }else{
            let ML = Del_List.length
            DellMes.disabled = true;GetNewMes.disabled = true;
            miko.innerText = stop?"Pausing:"+ML: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 URL_list=[],show,SetList,wait
        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 Queue_(){
            SetList.value = URL_list.length-1
            let ul = URL_list.shift()
            WriteBlock(ul)
            wait=setTimeout(()=>{
                let pvp=document.querySelectorAll("#text-input")[2]
                pvp.innerText= ""
                pvp.value= ""
                URL_list.length&&Queue_()
            },2000)
        }
        function WriteBlock(url){
            let pvp=document.querySelectorAll("#text-input")[2]
            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 (E[0].addedNodes[0]&&E[0].addedNodes[0].tagName == "TP-YT-PAPER-ITEM"){
                    Yagoo.click()
                    Yagoo.children[0].click()
                }
            });
            Menu_Set.disconnect()
            Menu_Set.observe(Yagoo,{childList: true,})
        }
    }
})();