CyTube Max Viewers

Keep track of max viewers

  1. // ==UserScript==
  2. // @name CyTube Max Viewers
  3. // @namespace lig
  4. // @license GNU GPLv3
  5. // @match https://cytu.be/r/*
  6. // @grant GM.info
  7. // @version 1.0
  8. // @author MFG
  9. // @description Keep track of max viewers
  10. // @run-at document-idle
  11. // ==/UserScript==
  12.  
  13. let viewerMax = 0;
  14.  
  15. let cytube = location.pathname.match(/([^\/]+)$/)[0];
  16. (() => {
  17. let localMax = localStorage.getItem(cytube+'_VIEWER_MAX');
  18. if(localMax) viewerMax = localMax;
  19. })();
  20.  
  21. function getViewers() {
  22. let r = target.innerText.match(/^(\d+)/);
  23. if(r && r[1]) r = parseInt(r[1])
  24. else r = 0
  25. return r;
  26. }
  27.  
  28. let target = document.querySelector('#usercount');
  29. target.insertAdjacentHTML('afterend', `<span id="viewerMax" title="Max Viewers">(N/A)</span><span id="reset" class="pointer label label-default">Reset</span>`);
  30.  
  31. let viewerMaxOut = document.querySelector('#viewerMax');
  32. function updateViewerMax() {
  33. let viewers = getViewers();
  34. if(viewers > viewerMax || viewerMax == 0) {
  35. viewerMax = viewers;
  36. localStorage.setItem(cytube+'_VIEWER_MAX', ''+viewerMax)
  37. }
  38. viewerMaxOut.innerHTML = `(${viewerMax})&nbsp;`;
  39. }
  40.  
  41. function mutate(mutations) {
  42. mutations.forEach(function(mutation) {
  43. updateViewerMax();
  44. });
  45. }
  46.  
  47. let reset = document.querySelector('#reset');
  48. reset.addEventListener('click', e => {
  49. viewerMax = 0;
  50. updateViewerMax();
  51. });
  52.  
  53. let observer = new MutationObserver(mutate);
  54. let config = { characterData: false, attributes: false, childList: true, subtree: false };
  55.  
  56. observer.observe(target, config);
  57. updateViewerMax();