Never Let Chat Pause

Automatically clicks elements on Kick.com to keep the chat or other elements active, with a pause feature using the Delete key.

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         Never Let Chat Pause
// @namespace    https://greasyfork.org/en/users/1200587-trilla-g
// @version      5.2
// @description  Automatically clicks elements on Kick.com to keep the chat or other elements active, with a pause feature using the Delete key.
// @author       Trilla_G
// @match        *://*.kick.com/*
// @grant        none
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';

    // Define the selector for the target element
    const targetSelector = '.betterhover\\:hover\\:bg-surface-highest';

    // State to track whether the script is paused
    let scriptPaused = false;

    // Function to click the target element
    function clickTarget() {
        if (scriptPaused) return;

        const target = document.querySelector(targetSelector);
        if (target) {
            target.click();
            console.log('Clicked target:', target);
        }
    }

    // Set up an observer to watch for the target entering the viewport
    const observer = new IntersectionObserver(entries => {
        entries.forEach(entry => {
            if (!scriptPaused && entry.isIntersecting) {
                entry.target.click();
                console.log('Clicked via IntersectionObserver:', entry.target);
            }
        });
    });

    // Function to monitor and observe the target
    function observeTarget() {
        if (scriptPaused) return;

        const target = document.querySelector(targetSelector);
        if (target) {
            // Click immediately when detected
            clickTarget();

            // Observe for future interactions
            observer.observe(target);
        }
    }

    // Set up a MutationObserver to detect changes in the page and find the target
    const mutationObserver = new MutationObserver(() => {
        if (!scriptPaused) observeTarget();
    });
    mutationObserver.observe(document.body, { childList: true, subtree: true });

    // Automatic clicking every 15 seconds as a fallback
    const autoClickInterval = setInterval(() => {
        if (!scriptPaused) {
            clickTarget();
        }
    }, 15000);

    // Pause the script for 15 seconds when the Delete key is pressed
    document.addEventListener('keydown', (event) => {
        if (event.key === 'Delete' && !scriptPaused) {
            console.log('Script paused for 15 seconds.');
            scriptPaused = true;

            // Disconnect observers and pause automatic actions
            observer.disconnect();
            mutationObserver.disconnect();

            // Resume script after 15 seconds
            setTimeout(() => {
                console.log('Script resumed.');
                scriptPaused = false;

                // Reconnect observers
                observeTarget();
                mutationObserver.observe(document.body, { childList: true, subtree: true });
            }, 15000);
        }
    });

    // Initial observation
    observeTarget();
})();