Advertisement
Guest User

JAP Destroyer v9001

a guest
Jan 27th, 2020
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Removes non-English chat messages and superchat in YouTue live chat
  2. // Modified and improved version of https://pastebin.com/XpiKsr8T (it didn't support superchats and removed number-only messages)
  3. javascript:(() => {
  4.     let ALLOWED_MESSAGES = [""]; /*In lower case*/
  5.     let FILTER_THRESHOLD = 85; /*How much % of the message should have english letters to not be filtered*/
  6.     let func = () => {
  7.         let chat_list = window.top.document.getElementById("chatframe")
  8.             .contentDocument.querySelector("#items.style-scope.yt-live-chat-item-list-renderer");
  9.         let observer = new MutationObserver((mutationsList, observer) => {
  10.             let chat_items = chat_list.children;
  11.             for(let i = 0; i < chat_items.length; i++) {
  12.                 if(chat_items[i].dataset.japFiltered)
  13.                     continue;
  14.                
  15.                 let msgNode = chat_items[i].querySelector("#content #message");
  16.                 if(!msgNode)
  17.                     continue;
  18.  
  19.                 let msg = "";
  20.                 for(let i = 0; i < msgNode.childNodes.length; i++) {
  21.                     let node = msgNode.childNodes[i];
  22.                     if(node.nodeType === Node.TEXT_NODE) {
  23.                         msg += node.nodeValue.trim();
  24.                     }
  25.                 }
  26.                 if(!msg || ALLOWED_MESSAGES.includes(msg.toLowerCase()))
  27.                     continue;
  28.  
  29.                 let original = msg;
  30.                 msg = msg.replace(/[\^\(\)\[\]w\s.!?,\ufe0e]/g, "");
  31.                 if(msg.length === 0)
  32.                     continue;
  33.  
  34.                 let full_len = msg.length;
  35.                 let en_only_array = msg.match(/[a-z\d]+/gi);
  36.                 let en_len = en_only_array ? en_only_array.reduce((a, b) => a + b.length, 0) : 0;
  37.                 let percentage = en_len / full_len * 100;
  38.                 if(percentage < FILTER_THRESHOLD) {
  39.                     let author = chat_items[i].querySelector("#author-name").innerText;
  40.                     console.log(`Filtered\t${author}: ${original}`);
  41.                     chat_items[i].style.display = "none";
  42.                     chat_items[i].dataset.japFiltered = "y";
  43.                 }
  44.             }
  45.         });
  46.  
  47.         observer.observe(chat_list, { attributes: false, childList: true, subtree: false });
  48.     };
  49.  
  50.     if(window.top.document.readyState === "complete") {
  51.         let chat_frame = window.top.document.getElementById("chatframe");
  52.         let chat_doc = chat_frame.contentDocument;
  53.         let chat_list = chat_doc.querySelector("#items.style-scope.yt-live-chat-item-list-renderer");
  54.         if(chat_doc && chat_doc.readyState === "complete" && chat_list) {
  55.             console.log("All loaded already");
  56.             func();
  57.         } else {
  58.             console.log("Waiting for chat to load");
  59.             chat_frame.contentWindow.addEventListener("load", func);
  60.         }
  61.     } else {
  62.         console.log("Waiting for top to load");
  63.         window.top.addEventListener("load", func);
  64.     }
  65. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement