치지직 팔로우 목록 자동 새로고침 + 자동 펼치기

팔로우 목록을 원하는 시간마다 반복 새로고침 + 팔로우 목록을 자동으로 전부 펼칩니다.

// ==UserScript==
// @name         치지직 팔로우 목록 자동 새로고침 + 자동 펼치기
// @namespace    http://tampermonkey.net/
// @version      25073001
// @description  팔로우 목록을 원하는 시간마다 반복 새로고침 + 팔로우 목록을 자동으로 전부 펼칩니다.
// @match        *://chzzk.naver.com/*
// @grant        none
// @author       Lusyeon | 루션
// @icon         https://chzzk.naver.com/favicon.ico
// @license      MIT
// ==/UserScript==

(function () {
    'use strict';

    const refreshInterval = 60000; // 1분마다 새로고침 (Refresh every 1 minute)
    const hideOffline = 0;         // 1이면 오프라인 숨김 (1 = Hide offline streamers)
    const Count = 0;               // 0이면 카운트 표시, 1이면 표시 안 함 (0 = Show count, 1 = Hide count)

    function clickRefreshButton() {
        const svg = document.querySelector('svg.navigator_icon_refresh__spksG');
        const refreshBtn = svg?.closest('button');
        if (refreshBtn) refreshBtn.click();
    }

    function clickAllMoreButtons(callback) {
        const moreBtn = document.querySelector('button[aria-label="더보기"][aria-expanded="false"]');
        if (moreBtn) {
            moreBtn.click();
            setTimeout(() => clickAllMoreButtons(callback), 700);
        } else {
            if (hideOffline === 1) hideOfflineItems();
            if (typeof callback === 'function') callback();
        }
    }

    function hideOfflineItems() {
        const items = document.querySelectorAll('#root aside ul > li');
        items.forEach(item => {
            const span = item.querySelector('span.blind');
            if (span?.textContent?.trim() === '오프라인') {
                item.style.display = 'none';
            }
        });
    }

    function updateFollowCount() {
        if (Count === 1) return;

        const sectionTitle = [...document.querySelectorAll('strong.navigation_bar_title__1UBnx')]
            .find(el => el.textContent.includes('팔로잉 채널'));
        if (!sectionTitle) return;

        const section = sectionTitle.closest('nav');
        if (!section) return;

        const listItems = section.querySelectorAll('ul > li');

        const liveItems = [...listItems].filter(li => {
            const span = li.querySelector('span.blind');
            return span?.textContent?.trim() === 'LIVE';
        });

        const live = liveItems.length;
        const total = listItems.length;
        const totalDisplay = total >= 505 ? '505+' : total;

        let countSpan = sectionTitle.querySelector('span.follow-count');
        if (!countSpan) {
            countSpan = document.createElement('span');
            countSpan.className = 'follow-count';
            countSpan.style.marginLeft = '20px';
            countSpan.style.fontSize = '0.9em';
            countSpan.style.color = '#888';
            sectionTitle.appendChild(countSpan);
        }

        if (hideOffline === 1) {
            countSpan.textContent = `${live}`;
        } else {
            countSpan.textContent = `${live} / ${totalDisplay}`;

            if (total >= 505) {
                setTimeout(() => {
                    countSpan.textContent = `${live}`;
                }, 5000);
            }
        }
    }

    function runInitial() {
        clickAllMoreButtons(updateFollowCount);
    }

    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', runInitial);
    } else {
        setTimeout(runInitial, 1500);
    }

    setInterval(() => {
        clickRefreshButton();
        setTimeout(() => clickAllMoreButtons(updateFollowCount), 2000);
    }, refreshInterval);
})();
长期地址
遇到问题?请前往 GitHub 提 Issues。