您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Kick.com Unique Chatter Counter - Detect whos viewbotting
当前为
// ==UserScript== // @name Kick.com Unique Chatter Counter // @version 0.4 // @description Kick.com Unique Chatter Counter - Detect whos viewbotting // @author Rishi Sunak // @match https://kick.com/* // @grant none // @namespace https://greasyfork.org/users/1235079 // ==/UserScript== (function() { 'use strict'; let uniqueUserIds = {}; let currentStreamSrc = null; function countUniqueUserIds() { const userIdElements = document.querySelectorAll('[data-chat-entry-user-id]'); userIdElements.forEach(element => { const userId = element.getAttribute('data-chat-entry-user-id'); uniqueUserIds[userId] = true; }); const uniqueUserCount = Object.keys(uniqueUserIds).length; console.log(`Unique User IDs: ${uniqueUserCount}`); const chatHeaderElement = document.querySelector('.flex.flex-row.items-center.text-center .text-base.font-bold'); if (chatHeaderElement) { chatHeaderElement.textContent = `Unique Chatters: ${uniqueUserCount}`; } } function checkStreamChange() { const videoElement = document.querySelector('video.vjs-tech'); if (videoElement) { const newStreamSrc = videoElement.getAttribute('src'); if (newStreamSrc !== currentStreamSrc) { uniqueUserIds = {}; currentStreamSrc = newStreamSrc; } } } countUniqueUserIds(); checkStreamChange(); const observer = new MutationObserver(() => { countUniqueUserIds(); checkStreamChange(); }); const targetNode = document.body; const config = { childList: true, subtree: true }; observer.observe(targetNode, config); })();