Kick.com Unique Chatter Counter

Kick.com Unique Chatter Counter - Detect whos viewbotting

  1. // ==UserScript==
  2. // @name Kick.com Unique Chatter Counter
  3. // @version 0.4
  4. // @description Kick.com Unique Chatter Counter - Detect whos viewbotting
  5. // @author Rishi Sunak
  6. // @match https://kick.com/*
  7. // @grant none
  8. // @namespace https://greasyfork.org/users/1235079
  9. // ==/UserScript==
  10.  
  11. (function() {
  12. 'use strict';
  13.  
  14. let uniqueUserIds = {};
  15. let currentStreamSrc = null;
  16.  
  17. function countUniqueUserIds() {
  18. const userIdElements = document.querySelectorAll('[data-chat-entry-user-id]');
  19.  
  20. userIdElements.forEach(element => {
  21. const userId = element.getAttribute('data-chat-entry-user-id');
  22. uniqueUserIds[userId] = true;
  23. });
  24.  
  25. const uniqueUserCount = Object.keys(uniqueUserIds).length;
  26. console.log(`Unique User IDs: ${uniqueUserCount}`);
  27.  
  28. const chatHeaderElement = document.querySelector('.flex.flex-row.items-center.text-center .text-base.font-bold');
  29. if (chatHeaderElement) {
  30. chatHeaderElement.textContent = `Unique Chatters: ${uniqueUserCount}`;
  31. }
  32. }
  33.  
  34. function checkStreamChange() {
  35. const videoElement = document.querySelector('video.vjs-tech');
  36. if (videoElement) {
  37. const newStreamSrc = videoElement.getAttribute('src');
  38. if (newStreamSrc !== currentStreamSrc) {
  39. uniqueUserIds = {};
  40. currentStreamSrc = newStreamSrc;
  41. }
  42. }
  43. }
  44.  
  45. countUniqueUserIds();
  46. checkStreamChange();
  47.  
  48. const observer = new MutationObserver(() => {
  49. countUniqueUserIds();
  50. checkStreamChange();
  51. });
  52.  
  53. const targetNode = document.body;
  54. const config = { childList: true, subtree: true };
  55.  
  56. observer.observe(targetNode, config);
  57.  
  58. })();