Auto collect community points

Twitchのコミュニティポイントを自動で取得します。Automatically get Twitch community points.

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

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

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Auto collect community points
// @namespace    https://twitter.com/rin_jugatla
// @version      0.0.1
// @description  Twitchのコミュニティポイントを自動で取得します。Automatically get Twitch community points.
// @author       rin_jugatla
// @match        https://www.twitch.tv/*
// @grant        none
// ==/UserScript==

let is_success_watch_dog = false;
let try_count = 0;
const try_limit = 10;
const try_delay_ms = 5000;
const click_random_delay_ms = 5000;
const print_log = true;

function watchPointCollectButton() {
    const watch_selector = 'div[data-test-selector="community-points-summary"] > div:nth-child(2) > div';
    const watch_element = document.querySelector(watch_selector);
    if (watch_element == null) { return; }

    function virtualClick() {
        const point_collect_button_selector = 'div[data-test-selector="community-points-summary"] > div:nth-child(2) > div > div > div> button';
        const button = document.querySelector(point_collect_button_selector);

        if (button == null) { return; }
        setTimeout(() => {
            if (print_log) { console.log(); }
            button.click();
        }, Math.random() * click_random_delay_ms);
    }

    // ノードの監視
    const mutation = new MutationObserver(virtualClick);
    mutation.observe(watch_element, { childList: true, subtree: true });
    is_success_watch_dog = true;
}

window.addEventListener('load', () => {
    const timer = setInterval(() => {
        try_count++;
        watchPointCollectButton();

        const is_giveup_watch_dog = try_count > try_limit - 1;
        if (is_giveup_watch_dog || is_success_watch_dog) { clearInterval(timer); }
    }, try_delay_ms);
});