kone
소미소프트

소미소프트

코네 서브/게시글/댓글/유저 필터, 차단 스크립트 v1.3

09/14/2025, 20:16:32
유틸
4577 views · 8 likes


서론

코네 도배 게시글 보이는걸 방지하기 위해 에드블록으로 시작했다가

에드블록의 한계를 느꼈는데  다른 유저분이 스크립트를 써주시더라구요 .

제가 스크립트는 좀 초보라 이걸 어떻게 하면 되나 알아보니, 아주 쉽더군요.

기존에 있던 지식과 새로운 정보로 스크립트를 다시 쓰고 기능을 늘렸습니다.


초보라도 쉽게 하는게 가능하니, 필터링 하고 싶은게 있으시면 한번 해보시는걸 권합니다.

이 스크립트는, 애드온 하나와 간단한 RegExp만 알면 사용이 가능합니다.

자바스크립트를 알지 않아도 이 스크립트 사용이 가능하지만, 알아두면 인터넷 활동도 더 편리해지니 이것도 시간이 되실때 더욱 트라이 해보는걸 권장합니다.


우선 'Tampermonkey' 라는 브라우저 애드온 확장 기능을 설치합시다.

Tampermonkey 는 브라우저 스크립트 관리 애드온이며, 특정 사이트 링크에 접속시 스크립트가 가동됩니다.

여러 스크립트를 동시에 켜둘수 있으니, 여러 사이트에서 활성화가 가능합니다.

(Tampermonkey 사용법은 쉽게 검색해 알아낼수 있으니 여기에 적어드리진 않겠습니다)

(다른 방법이나 다른 애드온도 있지만, 이게 많이 사용되는 방법이니 이걸 권합니다)

Tampermonkey와 스크립트는 끄지 않는 이상 브라우저와 같이 자동으로 시작되니, 브라우저 시작시 일일이 켜줄 필요가 없습니다.



사용법

스크립트를 Tampermonkey에 넣고, 아래에 동일한 주석 줄들의 하단에 원하는 필터들을 넣고 저장.

  • 제목 필터 패턴 (RegExp)

  • 탭/서브 이름 필터 패턴 (RegExp)

  • 작성자 이름 필터 패턴 (RegExp)

필터 추가&저장 후, 코네 게시판 열어서 새로고침 해 확인.

필터링을 유연하게 가능케 하고자, 필터 매치는 RegExp 를 사용하는걸로 합니다.
예시가 될 RegExp를 적어놨으니 대체로 따로 알아볼 필요는 없겠지만, 필요하다면 AI한테 물어보면 만들어주니, 쉽게 사용 가능합니다.


코네 게시글 테이블 특정상, 서브 게시판 첫 열이 탭이기에,  으로 필터가 되며,

s/all 게시판을 사용 할 시, 첫 열이 서브라, 서브 로 필터가 됩니다.


필터가 된 게시글/댓글은 브라우저 콘솔 페이지에 가면 확인이 가능합니다.



버전

v1.2

  • 제목, 작성자, 서브/탭 필터 리스트 중에 일치하는 항목 게시판의 게시글을 표시 차단

v1.3

  • 기능 추가. 작성자 필터 리스트에 일치하는 댓글 표시 차단



// ==UserScript==
// @name Kone 게시글 필터링
// @namespace http://kone.gg/
// @version 1.3
// @description 제목, 탭(s/All 일 경우 서브) 이름, 유저명을 RegExp를 써서 필터링합니다.
// @author 공승아
// @match https://kone.gg/*
// @grant none
// ==/UserScript==

// 스크립 기초
// /스크립에서_이_줄_안읽음/, // 스크립 앞에 '//' 넣으면 줄을 스크립에서 안 읽음

/*
스크립에서_이_줄들_안읽음
스크립에서안읽음이거
여러줄 안 읽게 하기
*/

/* RegExp 패턴 예시:
/^테스트1$/,               // '테스트1'란 정확한 제목
/테스트2/,                  // '테스트2'를 포함한 제목
/^테스트3/,                // '테스트3'로 시작하는 제목
/테스트4$/,               // '테스트4'로 끝나는 제목
/테스트5|테스트6/,   // '테스트5' 아니면 '테스트6'가 포함된 제목
/^테스트\d+$/,         // 테스트#숫자 예시: 테스트12345
/테.*트/,                    // '테' 와 '트', 그리고 가운데 아무 문자가 들어간게 포함된 제목
/테.*트.*다/,             // '테' 와 '트', 그리고 가운데 아무 문자가 들어간게 포함된, 또한 '트' 와 '다' 가운데 아무 문자가 들어간 제목
/tEsT/i,                    // 대문자 소문자 무분별
*/

(function () {
'use strict';

// 제목 필터 패턴 (RegExp)
const titlePatterns = [
// '청아' 단어가 포함된 게시글을 배제합니다
/청아/,
];

// 탭/서브 이름 필터 패턴 (RegExp)
// s/All 일 경우 테이블에 표시되는 이름-- 서브 핸들ID
const blockedTabPatterns = [
// 'fetishclub' 서브를 배제합니다
/^fetishclub$/,
];

// 작성자 이름 필터 패턴 (RegExp)
// 테이블에 표시되는 이름-- 유저 핸들ID가 아니라 닉네임.
const blockedUserPatterns = [
// '스팸봇' 유저를 배제합니다
/^스팸봇$/,
];

const matchesAny = (text, patterns) =>
patterns.some(pattern => pattern.test(text));

function filterSpamPosts() {
const postAnchors = document.querySelectorAll('a[title]');
postAnchors.forEach(anchor => {
if (anchor.dataset.filtered) return;

const outerDiv = anchor.closest('div');
if (!outerDiv) return;

const tabNameEl = outerDiv.querySelector('.col-span-2 > div');
const tabName = tabNameEl?.innerText.trim() || '';

const title = anchor.getAttribute('title') || '';

const userNameEl = outerDiv.querySelector('#writer_link');
const userName = userNameEl?.innerText.trim() || '';

const shouldHide =
matchesAny(tabName, blockedTabPatterns) ||
matchesAny(title, titlePatterns) ||
matchesAny(userName, blockedUserPatterns);

if (shouldHide) {
console.log('[게시글 필터링됨]', { tabName, title, userName });
anchor.style.display = 'none';
anchor.dataset.filtered = 'true';
}
});
}

function filterSpamComments() {
const comments = document.querySelectorAll('div.group\\/comment');

comments.forEach(commentEl => {
if (commentEl.dataset.filtered) return;

// 유저 이름
const userNameEl = commentEl.querySelector('a.flex span.text-xs');
const userName = userNameEl?.innerText.trim() || '';

// 댓글 내용
const commentTextEl = commentEl.querySelector(
'div.text-sm.whitespace-pre-wrap.overflow-hidden.wrap-anywhere'
);
const userComment = commentTextEl?.innerText.trim() || '';

if (matchesAny(userName, blockedUserPatterns)) {
console.log('[댓글 필터링됨]', { userName, userComment });

commentEl.style.display = 'none';
commentEl.dataset.filtered = 'true';
}
});
}

function observeURLChanges(callback) {
const originalPushState = history.pushState;
const originalReplaceState = history.replaceState;
const fireCallback = () => setTimeout(callback, 100);

history.pushState = function (...args) {
originalPushState.apply(this, args);
fireCallback();
};
history.replaceState = function (...args) {
originalReplaceState.apply(this, args);
fireCallback();
};

window.addEventListener('popstate', fireCallback);
}

function init() {
filterSpamPosts();
filterSpamComments();

const observer = new MutationObserver(() => {
filterSpamPosts();
filterSpamComments();
});
observer.observe(document.body, { childList: true, subtree: true });

observeURLChanges(() => {
console.log('[URL 변경 감지] 게시글 필터링 재실행');
filterSpamPosts();
filterSpamComments();
});

let runCount = 0;
const intervalId = setInterval(() => {
if (runCount++ >= 3) return clearInterval(intervalId);
filterSpamPosts();
}, 1000);
}

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

})();




필자의 다른 스크립트들


8
14 comments
09/14/25
코네가 공부도 시켜주는 좋은 사이트구만
09/14/25
코네 사이트의 해당 기능이 구현될까지 우리는 공부!
아하 완벽하게 이해했어
09/15/25 Edited 09/15/25
서브 자체를 차단하는 기능도 좀 나왔으면 좆목 유도하는 병신 서브들은 좀 안 보고 싶은데
09/15/25
아.. 됩니다 그거. s/all 로 보면 게시글 탭 줄의 항목이 서브로 보여져서. 글 수정할게요.
09/15/25
특정 유저차단 진짜 필요했는데 고맙다
09/16/25
굳. 잘써요
고트
01/26
모든게시물 all에서 볼때 dicklover 서브 차단하고싶은데 // 탭/서브 이름 필터 패턴 (RegExp) // s/All 일 경우 테이블에 표시되는 이름-- 서브 핸들ID const blockedTabPatterns = [ // 'fetishclub' 서브를 배제합니다 /^fetishclub$/, ^dicklover$ , 'dicklover' , /dicklover/ , dicklover , ]; 이렇게 해도 적용이안되는데 내가 뭘 잘못한건가? 남자고추 보기싫다고
01/26 Edited 01/26
서론에 AI한테 물어보라고 적었었긴 한데, 사용법으로 써놨어야 했겠네요. 이동시킴. AI한테 물어보면 바로 알려줍니다. 예시에 이미 적었듯이, 필터할 단어를 '/' 로 감싸야합니다. 또한 ',' 전에 쓸모없는 스페이스 넣는 습관은 좋지 않습니다. '/테스트2/' 로 이미 포함된 으로 적용을 했는데 다른 줄로 마구 적을 이유도 없습니다. 예: /필터할단어regex/,
오바와치)주노의 첫경험
창작
simplelife
05/07 13774 18
【7종 극강 핥기】✅귀핧기에 열중하는 엘프 공주 ~ 끈적 · 통 통 · 귀 안쪽 깊숙히 · 귀 페라 · 위스퍼 · 고속 · 양쪽 귀 동시 · 마지막은 노콘 섹스♪~
소리
maruran
05/07 17080 151
[기번/임시] REC 0.5.2.1
번역
kts
05/07 35755 126
[번역] [셀프구속/치비] [Icoicoikoi] 금기의 사슬에 구속된 이 몸이 심연에서 홀로 종언을 고하는 이야기 ~셀프구속자위를 해 봤다가 점점 쾌락의 늪에 빠져버렸다~ (트릭컬)
동인
yjgtiihty
05/07 19011 111
[기계번역/자동번역] NTR Mobile [v0.23.0]
번역
karuparu13
05/07 49019 77
[RJ01582349][AI 자막만]슨도메와 루인드를 5번씩 견디면 뇌가 저릿해지는 사정을 시켜주는 멘즈 에스테
소리
creatine
05/07 10260 51
[Monchan Rev3] 보지 대주시겠습니까?
동인
ㅇㅇ
05/07 34426 144
구매보급) 나쁜 여기사가 귀여운 남자아이를 레〇프 해버리는 이야기
동인
GOOD
05/07 18577 86
AI, 셀레스포니아) 커피숍에서 일하는 아마네
야짤
miso5
05/07 13654 127
[구매보급][번역요청]AI) No Tomorrow Rebellion
미번
마카라이트
05/07 9344 26
[후원업뎃/미번/이종간/촉수/수간?]La Vitalis : Immortal Loss 0.47 노모
미번
루파조아
05/07 11516 37
RJ353573) 아이스 하트와 잭오 v1.10 [기계번역]
복구
everywhere
05/07 22646 68
님포 5월 정보
정보
우욿
05/07 19763 21
ai,스압)어라 저거 우리반 반장아냐?
야짤
gpsel157
05/07 12353 59
[Orico] 가정 속 매춘 1~3
동인
1uF
05/07 28254 87
[알림] 비월선행록 이미지번역 빼먹은 거 두 장 있길래 추가함
번역
argoklarke
05/07 23546 81
소악마 스마트폰작업중
작업현황
toung
05/07 4523 17
[AI번역][Torotarou] Shoujo Fondue - Sweet Girls Sex Diary | 少女性愛日記 (decensored)
동인
mybest
05/07 12539 53
[ VAM ][ 퍼리 ] 프레디 나이트 클럽 - FEXA
영상
s99a99
05/07 25519 55
NTR) 타락한 성흔 7월로 발매 연기
정보
drogba
05/07 9038 34
天平キツネ V38 데니아
영상
참새
05/07 22075 140
[요청복구] RJ080939 섬격의 기어 (손번역)
복구
이상성애
05/07 19159 62
자동소미 해적판X2 1.0.4업데이트 알림
유틸
스눕제이크
05/07 6568 18
[AI번역][Makosho] Mujintou de, SEX ni Kyoumi Shinshin na Dosukebe InCha Joshi-tachi to Harem Life (decensored)
동인
mybest
05/07 27692 98
[버전업 알림] 음최도시 휴프노즘 1.04 번역 적용완
번역
saika
05/07 31682 126
[★추천] 무료 망가 번역기★
유틸
mybest
05/07 27873 127
RJ01549336 알미오시온의 의술사 퀘스트, 목적? 일부 - 미검수, 비전문가, 오역 다수
번역
wkwlqhwltprtm
05/07 36448 105
[버전업] [구매보급] RJ01588884 이노센트 도터 v1.1.0
미번
gkqisq
05/07 10120 41
구매 보급/번역요청)RJ336598 로스트 메모리 사가 1.3.5 ,【夢幻の迷宮】2번 그리고 덤
미번
ldg398224
05/07 13209 45
[take_shinshi] 속아넘어가기 쉬운 내 아내는…
동인
agnet666
05/07 27019 53