Kick.com Combined Chatter and Message Counter

Kick.com Combined Chatter and Message Counter - Detect who's viewbotting

目前為 2024-01-08 提交的版本,檢視 最新版本

// ==UserScript==
// @name     Kick.com Combined Chatter and Message Counter
// @version  3.0
// @description Kick.com Combined Chatter and Message Counter - Detect who's viewbotting
// @author   Graph1ks
// @match    https://kick.com/*
// @grant    none
// @namespace https://gf.qytechs.cn/users/1235079
// ==/UserScript==

(function () {
  'use strict';

  let uniqueUserIds = {};
  let uniqueMessageIds = {};
  let totalMessages = 0;
  let messagesPerMinute = 0;
  let totalChatters = 0;
  let chattersPerMinute = 0;
  let scriptStartTime = Date.now();
  let currentStreamSrc = null;
  let pageURL = window.location.href; // Store the current page URL

  // Create a fixed-position div for displaying the UI
  const uiContainer = document.createElement('div');
  uiContainer.style.position = 'fixed';
  uiContainer.style.top = '0px'; // Adjusted top position
  uiContainer.style.right = '80px'; // 80 pixels away from the right border
  uiContainer.style.padding = '3px';
  uiContainer.style.background = '#24272C'; // Adjusted background color
  uiContainer.style.color = '#fff'; // White text color
  uiContainer.style.cursor = 'pointer'; // Add cursor style for clickability
  uiContainer.style.zIndex = '9999'; // Set a high z-index value
  document.body.appendChild(uiContainer);

  function countUniqueUserIdsAndMessages() {
    const userIdElements = document.querySelectorAll('[data-chat-entry-user-id]');
    const messageElements = document.querySelectorAll('[data-chat-entry]');

    const currentTime = Date.now();
    const elapsedSeconds = (currentTime - scriptStartTime) / 1000;

    userIdElements.forEach(element => {
      const userId = element.getAttribute('data-chat-entry-user-id');
      uniqueUserIds[userId] = true;
    });

    messageElements.forEach(element => {
      const messageId = element.getAttribute('data-chat-entry');
      uniqueMessageIds[messageId] = true;
    });

    totalMessages = Object.keys(uniqueMessageIds).length;
    totalChatters = Object.keys(uniqueUserIds).length;

    if (elapsedSeconds >= 60) {
      messagesPerMinute = Math.round((totalMessages / elapsedSeconds) * 60);
      chattersPerMinute = Math.round((totalChatters / elapsedSeconds) * 60);
    }

    updateUI();
  }

  function checkStreamChange() {
    const videoElement = document.querySelector('video.vjs-tech');
    if (videoElement) {
      const newStreamSrc = videoElement.getAttribute('src');
      const newPageURL = window.location.href; // Get the current page URL

      if (newStreamSrc !== currentStreamSrc || newPageURL !== pageURL) {
        // Reset the script
        uniqueUserIds = {};
        uniqueMessageIds = {};
        totalMessages = 0;
        scriptStartTime = Date.now();
        currentStreamSrc = newStreamSrc;
        pageURL = newPageURL; // Update the stored page URL
      }
    }
  }

  function updateUI() {
    if (isChatAvailable()) {
      uiContainer.style.display = 'block'; // Display the container
      uiContainer.innerHTML = `
        <div style="font-size: 10px;">
          Unique Chatters: ${totalChatters} | per min: ${chattersPerMinute}<br>
          Messages: ${totalMessages} | per min: ${messagesPerMinute}<br>
          Time elapsed: ${formatTimeElapsed(scriptStartTime)}
        </div>
      `;
    } else {
      uiContainer.style.display = 'none'; // Hide the container when there's no chat
    }
  }

  function isChatAvailable() {
    return document.querySelector('[data-chat-entry]') !== null;
  }

function extractStreamerNameFromURL() {
  const urlParts = window.location.href.split('/');
  const streamerName = urlParts[urlParts.length - 1];
  // Capitalize the first letter
  return streamerName.charAt(0).toUpperCase() + streamerName.slice(1);
}

  // Define and extract the streamer name
  const streamerName = extractStreamerNameFromURL();

  function capitalizeFirstLetter(string) {
    return string.charAt(0).toUpperCase() + string.slice(1);
  }

  function formatTimeElapsed(startTime) {
    const elapsedMilliseconds = Date.now() - startTime;
    const seconds = Math.floor(elapsedMilliseconds / 1000);
    const hours = Math.floor(seconds / 3600);
    const minutes = Math.floor((seconds % 3600) / 60);
    const remainingSeconds = seconds % 60;

    return `${hours}h ${minutes}m ${remainingSeconds}s`;
  }

  uiContainer.addEventListener('click', copyToClipboard);

  function copyToClipboard() {
    const textToCopy = `Streamer: ${streamerName}\nUnique Chatters: ${totalChatters} | per min: ${chattersPerMinute}\nMessages: ${totalMessages} | per min: ${messagesPerMinute}\nTime elapsed: ${formatTimeElapsed(scriptStartTime)}`;
    navigator.clipboard.writeText(textToCopy).then(() => {
      uiContainer.innerHTML += '<div style="font-size: 12px; color: #0f0; margin-top: 5px;">Copied to clipboard!</div>';
      setTimeout(() => {
        uiContainer.innerHTML = uiContainer.innerHTML.replace(/<div style="font-size: 12px; color: #0f0; margin-top: 5px;">Copied to clipboard!<\/div>/, '');
      }, 1000);
    });
  }

  countUniqueUserIdsAndMessages();
  checkStreamChange();

  setInterval(() => {
    countUniqueUserIdsAndMessages();
    checkStreamChange();
  }, 2000);
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址