팔로우 목록을 원하는 시간마다 반복 새로고침 + 팔로우 목록을 자동으로 전부 펼칩니다.
// ==UserScript==
// @name 치지직 팔로우 목록 자동 새로고침 + 자동 펼치기
// @namespace http://tampermonkey.net/
// @version 25091101
// @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; // 30초마다 새로고침 (Refresh every 30 seconds)
const hideOffline = 0; // 1이면 오프라인 숨김 (1 = Hide offline streamers)
const Count = 0; // 0이면 카운트 표시, 1이면 표시 안 함 (0 = Show count, 1 = Hide count)
let isFirstRun = true;
function clickRefreshButton() {
const refreshBtn = document.querySelector('button.navigator_button__HhFim');
if (refreshBtn) {
refreshBtn.dispatchEvent(new MouseEvent('click', {
bubbles: true,
cancelable: true,
view: window
}));
}
}
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 (isFirstRun) {
countSpan.textContent = `${live} / ${totalDisplay}`;
if (total >= 505) {
setTimeout(() => {
countSpan.textContent = `${live}`;
}, 5000);
}
isFirstRun = false;
} else {
countSpan.textContent = `${live}`;
}
}
function runInitial() {
clickAllMoreButtons(updateFollowCount);
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', runInitial);
} else {
setTimeout(runInitial, 1500);
}
setInterval(() => {
clickRefreshButton();
setTimeout(() => clickAllMoreButtons(updateFollowCount), 2000);
}, refreshInterval);
})();