您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
各コメントのプラスとマイナスが押された数を自動的に集計し、マイナスの数が基準以上のときにコメントを非表示にします。
// ==UserScript== // @name ガールズちゃんねるのマイナス数の多いコメントを非表示 // @namespace https://greasyfork.org/users/1516432 // @version 1.0.0 // @description 各コメントのプラスとマイナスが押された数を自動的に集計し、マイナスの数が基準以上のときにコメントを非表示にします。 // @author P9DizP // @license MIT // @match https://girlschannel.net/topics/* // @match https://girlschannel.net/comment/* // @grant none // @run-at document-end // ==/UserScript== (function () { 'use strict'; /* 「+」や「-」を除去して整数に変換 */ function parseNumber(str) { const cleaned = str.replace(/[+\-]/g, '').trim(); const num = parseInt(cleaned, 10); return isNaN(num) ? 0 : num; } /* li 要素の id から「comment」以降の数字だけを取得 */ function getCommentNumber(elem) { const id = elem.id || ''; const match = id.match(/comment(\d+)/i); return match ? match[1] : '(unknown)'; } /* コメントごとにプラスとマイナスを集計し、条件に応じて非表示にする */ function processComments() { const commentItems = document.querySelectorAll('li.comment-item'); commentItems.forEach(item => { const plusElem = item.querySelector('div.icon-rate-wrap.icon-rate-wrap-plus div.counter p'); const minusElem = item.querySelector('div.icon-rate-wrap.icon-rate-wrap-minus div.counter p'); if (!plusElem || !minusElem) return; // 必要要素が無い場合はスキップ const plusCount = parseNumber(plusElem.textContent); const minusCount = parseNumber(minusElem.textContent); const totalVotes = plusCount + minusCount; /* コメントNo.1(トピ主)は常に表示 */ if (item.id === 'comment1') { // 明示的に表示状態にしておく(他のロジックで hide されても上書き) item.style.display = ''; return; // 以降の判定は行わない } /* プラスもマイナスも 0 のコメントは常に表示 */ if (totalVotes === 0) { item.style.display = ''; return; } /* プラスとマイナスの合計が 3 以下 かつ プラスが 0 → 非表示 */ if (totalVotes <= 3 && plusCount === 0) { item.style.display = 'none'; const num = getCommentNumber(item); console.log(`コメントNo.${num} を非表示にしました (プラスとマイナスの合計3以下、プラス0)`); return; } /* プラスとマイナスの合計が 4 以上 10 以下 かつ マイナスが合計の 40% 以上 → 非表示 */ if (totalVotes >= 4 && totalVotes <= 10) { const minusThreshold = Math.floor(totalVotes * 0.40); // 40% 超過判定 if (minusCount > minusThreshold) { item.style.display = 'none'; const num = getCommentNumber(item); console.log(`コメントNo.${num} を非表示にしました (プラスとマイナスの合計4以上10以下、マイナス40%以上)`); return; } } /* プラスとマイナスの合計が 11 以上 かつ マイナスが合計の 20% 以上 → 非表示*/ if (totalVotes >= 11) { const minusThreshold = Math.floor(totalVotes * 0.20); // 20% 超過判定 if (minusCount > minusThreshold) { item.style.display = 'none'; const num = getCommentNumber(item); console.log(`コメントNo.${num} を非表示にしました (プラスとマイナスの合計11以上、マイナス20%以上)`); return; } } // それ以外は表示のまま(何もしない) }); } // 初回実行 processComments(); })();