사용자가 키워드를 차단할 수 있도록 허용

:information_source: 요약 이 테마 컴포넌트는 사용자가 키워드를 차단할 수 있도록 합니다. 작동하려면 관리자 설정에서 세 개의 사용자 정의 필드를 생성해야 합니다.
:eyeglasses: 미리보기 사용자 필드 생성이 필요하므로 theme-creator에서 미리 보기를 할 수 없으며, 아래에 스크린샷을 포함했습니다.
:hammer_and_wrench: 저장소 Github - a-very-old-sock/discourse-keyword-block
:question: 설치 가이드 테마 또는 테마 컴포넌트 설치 방법
:open_book: 디스코urse 테마를 처음 사용하시나요? 디스코urse 테마 사용 입문가 가이드

이 테마 컴포넌트 설치

이 테마 컴포넌트는 사용자가 설정 > 프로필에서 지정하는 키워드를 차단할 수 있도록 합니다. 작동하려면 관리자 설정에서 세 개의 사용자 정의 필드를 생성해야 합니다.

토픽 제목 또는 토픽 발췌문에 포함된 키워드 차단:

키워드를 포함하는 토픽 또는 답변 게시글, 그리고 해당 키워드를 포함하는 추천 토픽 차단:

이 테마 컴포넌트는 개별 사용자가 보고 싶지 않은 키워드를 지정할 수 있으며, 해당 키워드가 포함된 토픽과 답변 게시글을 숨기고 대신 이를 표시하도록 하는 링크를 제공합니다. '주시 단어(Watched words)'는 사이트 전체의 모든 사용자에게 적용되는 관리자 설정인 반면, 이 컴포넌트는 개별 사용자가 보고 싶지 않은 키워드를 직접 지정할 수 있게 합니다.

예시 시나리오: 반려동물 포럼에는 특정 동물 종류가 태그되지 않은 반려동물 털 관리에 대한 일반 스레드가 있을 수 있습니다. 사용자 A는 자신의 개에 대해, 사용자 B는 자신의 고양이에 대해 답변을 남겼지만, 사용자 A는 고양이 관련 내용을 전혀 보고 싶지 않은 경우입니다. 이 테마 컴포넌트는 사용자 A가 '고양이’를 차단 목록에 추가할 수 있게 하며, 그러면 토픽이나 답변(원문: rely, 오타로 보임)에 '고양이’가 나타나는 모든 곳에서 이를 '고양이 포함으로 차단됨’으로 대체하고, 클릭하면 그래도 표시되도록 합니다.

사용자는 설정 > 프로필의 사용자 정의 필드에 쉼표로 구분된 차단 키워드 목록을 지정해야 하며, 차단할 키워드가 대소문자를 구분하는지 또는 전체 단어 일치여부를 지정할 수 있습니다. (대소문자 구분과 전체 단어 일치는 개별 키워드가 아닌 전체 차단 목록에 적용됩니다).

이 테마 컴포넌트가 작동하려면 관리자 > 사용자화 > 사용자 필드에서 세 개의 사용자 정의 필드를 생성해야 합니다. 기본적으로 테마 컴포넌트 설정은 아래에 나열된 순서대로 이 사용자 필드가 1, 2, 3번이라고 가정합니다. 다른 사용자 정의 필드가 정의되어 있는 경우, 테마 컴포넌트 설정에 올바른 사용자 필드 번호를 입력해야 합니다. (사용자 필드 번호는 1부터 시작하므로, 정의된 다른 사용자 필드의 개수를 세어 확인하세요). 자세한 내용은 메타의 사용자 정의 필드 생성 및 구성 가이드를 참조하세요.

1 - 사용자의 차단 용어 목록

필드 유형: 텍스트 필드

필드 이름: (여기에는 어떤 이름이든 작동합니다) 차단 용어

필드 설명: (여기에는 어떤 설명이든 작동합니다) 게시글이나 토픽에 나타나는 단어 또는 문구를 차단합니다. 쉼표로 구분. 사용자 이름을 차단하려면 전체 단어 일치가 선택된 경우 @를 포함하세요.

:white_check_mark: 가입 후 편집 가능

:cross_mark: 가입 시 필수

:cross_mark: 공개 프로필에 표시

:cross_mark: 사용자 카드에 표시

:cross_mark: 검색 가능

2 - 대소문자 구분

필드 유형: 확인(체크박스)

필드 이름: (여기에는 어떤 이름이든 작동합니다) 차단 용어 - 대소문자 구분

필드 설명: (여기에는 어떤 설명이든 작동합니다) “차단 용어” 목록의 단어는 대소문자를 구분합니다.

:white_check_mark: 가입 후 편집 가능

:cross_mark: 가입 시 필수

:cross_mark: 공개 프로필에 표시

:cross_mark: 사용자 카드에 표시

:cross_mark: 검색 가능

3 - 전체 단어 또는 부분 단어 검색

필드 유형: 확인(체크박스)

필드 이름: (여기에는 어떤 이름이든 작동합니다) 차단 용어 - 전체 단어

필드 설명: (여기에는 어떤 설명이든 작동합니다) 차단 용어는 부분 단어가 아닌 전체 단어로 나타날 때만 차단됩니다.

:white_check_mark: 가입 후 편집 가능

:cross_mark: 가입 시 필수

:cross_mark: 공개 프로필에 표시

:cross_mark: 사용자 카드에 표시

:cross_mark: 검색 가능

아래의 css는 테마 컴포넌트에 포함되어 있으며, 가입 양식에 사용자 정의 필드가 표시되지 않도록 방지합니다. 가입 양식에 표시되기를 원하는 다른 사용자 정의 필드가 있는 경우, 자체 사용자 정의 css로 이를 오버라이드해야 합니다.

.login-form .user-fields {
    display: none;
}

이것은 기본 테마에서만 테스트했습니다. 카테고리가 카테고리/최신 및 카테고리/상위 표시로 설정된 경우 게시글과 토픽이 차단되지만, 카테고리/추천이나 상자형 카테고리 뷰에서는 차단되지 않습니다. 제 사이트에는 필요하지 않아 이를 변경할 가능성이 낮지만, 풀 리퀘스트는 환영합니다.

현재 이는 브라우저에서 보이는 제목이나 발췌문에 키워드가 포함된 게시글만 차단합니다. 검색 결과나 토픽 목록을 볼 때 게시글 전체 내용을 확인하는 방법을 아직 파악하지 못했지만, 어떻게 하면 되는지에 대한 아이디어는 환영합니다.

이것이 전체 페이지 검색 뷰에서도 작동하도록 의도하고 있지만, 2023년 2월 24일 기준 그것을 작동시키는 데 어려움을 겪고 있습니다. 검색에서 차단이 작동하도록 할 수 있다면 이를 수정하겠습니다.

이것은 토픽 발췌문(Topic Excerpts) 테마 컴포넌트와 호환되며, **토픽 목록 미리보기(Topic List Previews)**와는 호환되지 않습니다. 다른 테마 컴포넌트와의 광범위한 테스트는 수행하지 않았습니다.

3개의 좋아요

사용자 정의 필드를 생성하고 컴포넌트를 활성화한 후 다음과 같은 문제가 발생합니다:

이것이 무엇을 경고하려는 건지 아이디어가 있을까요? 아마도 이것 때문일까요?

User Keyword Blocker theme/component is throwing errors: TypeError: null is not an object (evaluating 'e.match')

백트레이스
메시지

User Keyword Blocker theme/component is throwing errors:
TypeError: null is not an object (evaluating 'e.match')

백트레이스

viewingCategoryId@https://foorumi.katiska.eu/theme-javascripts/2d7e05cf5f7eb3e5f8699871f25f32a21d9221c2.js?__ws=foorumi.katiska.eu:209:77
@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:1347:71
@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:3677:13
get@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:1347:56
Ee@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:1324:40
map@[native code]
@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:5042:163
@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:1347:71
@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:3677:13
get@https://cdnfoorumi.katiska.eu/assets/vendor-f2e959203bc406b4698a4388ad51464d9ee2c5ff7b4011f332b7d88c6ce5dab8.br.js:1347:56

환경

HTTP HOSTS: foorumi.katiska.eu

그럼… 도대체 제가 뭘 잘못한 걸까요?

1개의 좋아요

음, 잘 모르겠네요. 새로 생성한 사용자 필드나 존재하지 않는 사용자 필드로도 이 문제를 재현하지 못했습니다.

기본 테마를 사용 중인 것 같은데, 다른 테마 컴포넌트가 활성화되어 있나요? 정규식 매칭과 관련이 있어 보이지만, 아무것도 찾지 못하더라도 오류가 발생해서는 안 됩니다.

물론 다른 컴포넌트도 가지고 있어요 :wink: 하지만 분명 이 컴포넌트와 다른 컴포넌트 또는 플러그인 간의 충돌일 수 있겠네요.

나중에 좀 더 깊이 파보겠습니다.

아, 그리고 그 지점에서 문제가 이제 발생했네요 :wink:

이 문제는 topic list preview와 충돌이 납니다. 제 환경에서는 말이죠.

그러니 @merefield 님과 둘 중 누가 무엇을 수정할지 서로 논쟁을 벌여보시죠 :wink:

1개의 좋아요

죄송하지만 서드파티 테마 컴포넌트와의 충돌을 지원하는 것은 정말로 너무 바빠서 어렵습니다. 다만 PR은 환영합니다. 당분간 그 중 하나를 선택해야 합니다. :slight_smile:

2개의 좋아요

이것이 사용자 음소거 기능을 확장하는 데 사용될 수 있을지 궁금합니다.

예를 들어, 음소거된 사용자를 차단 목록에 추가하여 해당 사용자의 답글을 숨기는 방식은 어떨까요?

이론적으로는 가능하다고 생각하지만, 현재로서는 쉬운 방법을 찾지 못하고 있습니다. 지금은 decorateCooked를 사용 중인데, 답장 정보가 포함된 부모 요소에 쉽게 접근할 수 있는 것 같지 않습니다. 더 다뤄보면서 작동하게 만들 수 있을지 확인해 보겠지만, 확실한 약속은 드릴 수 없습니다.

이 기능은 차단 목록에 포함된 사용자 이름이 게시글에 언급될 경우 해당 언급을 차단합니다. 전체 단어 매칭이 켜져 있다면, 차단 목록의 사용자 이름에는 @멘션이 포함되어야 하며, 전체 단어 매칭이 꺼져 있다면 @ 없이 사용자 이름만 포함하면 됩니다.

1개의 좋아요

나도 호환되게 만들 수 없을 것 같은데, OP에 호환되지 않는다고 명시해 두었습니다. 그래도 PR은 환영합니다.

죄송합니다. 이 문제를 검토하고 있습니다. 제가 블록/사용자 무음 처리를 확장한다고 했을 때의 의미는 사용자 이름을 차단된 단어 목록에 추가하는 것이었습니다. 제 추측에 따르면, 사용자 이름이 다음과 같이 포함된 경우:

[quote=“asc, post:9, topic:256228”]

예를 들어, 사용자 이름 "asc"를 추가하면 위의 조건에 해당하는 모든 게시물의 답글이 숨김으로 표시될 것입니다.

확인 차원에서 질문드립니다. 차단된 단어는 표시되지 않나요? 게시물을 숨김 해제하기 위한 링크만 표시되나요? 아니면 감시 중인 단어가 차단된 단어가 표시되지 않도록 오버라이드될 수 있나요?

그렇다면 이는 일부 사용자가 원하는 보다 완전한 차단 기능에 더 가까워질 것입니다.