Cytube white list

Makes chat whitelisted

// ==UserScript==
// @name        Cytube white list
// @namespace   Violentmonkey Scripts
// @match       https://cytu.be/r/*
// @grant       none
// @require     https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js
// @version     1.0.1
// @author      -
// @description Makes chat whitelisted
// ==/UserScript==

window.allowset = new Set(JSON.parse(localStorage.whitelist||'[]'));

function addcontrol(elem) {
 console.log('elem',elem);
 if(elem.controladded) return;
 elem.controladded=true;
 var name=elem.innerText;
 console.log('name',name);
 var state=allowset.has(name)||false;
 var control=document.createElement('span');
 control.innerText=state?'-':'+';
 control.title=state?'Black list':'White list';
 var style = control.style;
 style.paddingLeft='2px';
 style.paddingTop='0';
 style.paddingRight='2px';
 style.paddingBottom='0';
 style.marginLeft='2px';
 style.backgroundColor='#735757';
 style.borderRadius='2px';
 elem.appendChild(control);
 control.addEventListener('mouseup',e=>e.preventDefault());
 console.log('first state',state);
 control.addEventListener('click',e=>{
  e.preventDefault();
  e.stopPropagation();
  console.log('state',state);
  state=!state;
  console.log('new state',state);
  control.innerText=state?'-':'+';
  if(state) {
   window.allowset.add(name);
   $('.chat-msg-'+name).each((i,e)=>e.style.display='block');
   control.title='Black list';
  }
  else {
   window.allowset.delete(name);
   $('.chat-msg-'+name).each((i,e)=>e.style.display='none');
   control.title='White list';
  }
  var outlist=[];
  window.allowset.forEach(e=>outlist.push(e));
  localStorage.whitelist=JSON.stringify(outlist);
  return false;
 },true);
}

console.log('violent monkey works');
var userlistinterval=setInterval(()=>{
  var userlist=$('#userlist');
  if(userlist) {
   console.log('userlist',userlist,userlist.children());  
   clearInterval(userlistinterval);
   userlist.children().each((i,e)=>addcontrol(e));
   var observer = new MutationObserver((list,observer)=>{
    list.forEach(observation=>{
     observation.addedNodes.forEach(n=>addcontrol(n));
     console.log('observation',observation);
    });
   });
   observer.observe(userlist[0],{childList:true});
  }
},100);

var messagebufferinterval=setInterval(()=>{
 var messagebuffer=$('#messagebuffer');
 if(messagebuffer) {
  console.log('messagebuffer',messagebuffer);
  clearInterval(messagebufferinterval);
  var observer = new MutationObserver((list,observer)=>{
   list.forEach(observation=>{
    observation.addedNodes.forEach(n=>{
     var className = n.className;
     if(className.startsWith('chat-msg-')) {
      var user = className.replace('chat-msg-','');
      if(!allowset.has(user)) n.style.display='none';
     }
    });
   });
  });
  observer.observe(messagebuffer[0],{childList:true});
 }
},100);