무시한 사용자의 토픽 숨기기

:information_source: 요약 이 컴포넌트는 무시한 사용자의 주제를 숨길 수 있도록 합니다
:hammer_and_wrench: 저장소 GitHub - Lhcfl/discourse-hide-ignored-user-topics · GitHub
:question: 설치 가이드 테마 또는 테마 컴포넌트 설치 방법
:open_book: 디스코urs 테마를 처음 사용하시나요? 디스코urs 테마 사용 입문가 가이드

이 테마 컴포넌트를 설치합니다

이 게시글에서 영감을 받아보세요:

이 컴포넌트는 무시한 사용자의 주제를 숨길 수 있도록 합니다.

이것은 이름 그대로의 기능을 수행하며, 주요 원리가 매우 단순하기 때문에 아래에 주요 코드를 첨부합니다:

import { apiInitializer } from "discourse/lib/api";
export default apiInitializer("1.8.0", (api) => {
  const user = api.getCurrentUser();
  if (user == null) return;
  api.registerValueTransformer(
    "topic-list-item-class",
    ({ value, context }) => {
      if (user.ignored_users.includes(context.topic.creator.username)) {
        value.push("hidden");
      }
      return value;
    }
  );
});
12개의 좋아요

@Lhc_fl,

결론적으로 이 테마 구성 요소의 기능을 확장하여 추가적인 숨김 옵션을 토글로 포함할 수 있다면 좋겠습니다.

기본 무시(Ignore)는 해당 사용자의 게시글을 숨깁니다.

이 구성 요소에 무시한 사용자의 답글을 숨기는 옵션을 추가할 수 있을까요? 지나치게 예민한 일부 사용자들은 무시한 사용자에게 다른 사람들이 답글을 달고 있는 것을 여전히 볼 수 있다고 불만을 제기하고 있습니다.

1개의 좋아요

어려운 일은 아니지만, 정말 필요한 일인지 모르겠네요…

무시한 사용자가 글을 올렸습니다. 그 사용자는 그 글을 보고 싶어 하지 않습니다. 그런데 누군가 그 사용자의 글에 답글을 달았습니다. 그 사람도 보고 싶어 하지 않습니다. 또 다른 누군가가 그 답글에 답글을 달았고, 그 답글의 답글에도 또 답글이 달렸습니다… 그러면 이 글들은 보여줘야 할까요?

  • 토론이 무너집니다. 누군가를 음소거하면 그 사람의 글은 “절대” 보이지 않습니다. 하지만 당신이 좋아하는 다른 사용자가 음소거한 사용자의 글을 인용하거나, 그 사용자의 @이름을 언급하거나, 그 사용자의 글에 답글을 다는 경우 어떻게 해야 할까요? 그러면 인용된 부분만 숨길까요? @이름만 숨길까요? 그 사용자의 글에 대한 모든 답글도 숨길까요? 이렇게 하면 대화에 큰 구멍이 생기고, 수많은 까다로운 기술적 도전 과제가 발생합니다. 개인적인 음소거, 차단, 무시 설정이 충분히 쌓이면 모든 대화가 부분적으로만 보이는 진술들의 이상한 조각보가 됩니다.
3개의 좋아요

@Lhc_fl
이 기능은 필요합니다…
A가 B를 무시하는 경우, B의 모든 주제/게시글이 대상이 되어야 하며, 그것이 이상적입니다.

  1. B의 주제는 완전히 무시됩니다. 좋습니다/완료됨

  2. 다른 사람의 주제에서 B가 답변을 남긴 경우,
    2.1 B의 게시글은 숨겨집니다. 완료됨
    2.2 B의 아바타가 게시글 목록 페이지(참여자 목록)에서 제거되어야 합니다. 이 부분은 구현이 어렵지 않을 것 같은데?
    2.3 B의 게시글이 인용된 경우, 해당 부분을 쉽게 제거/숨길 수 있을지 확실하지 않습니다.

훌륭한 노고에 감사드립니다. 정말 유용합니다. 2.2와, 가능하면 2.3도 고려해 주시기를 바랍니다…

3개의 좋아요

말씀드린 대로, 또는 이전에 작성한 글에서 언급했듯이, 어떤 측면에서는 과도해 보입니다. 회원이라면 답글을 건너뛸 수 있어야 합니다. 불행히도 일부 사람들은 이러한 기술을 갖추지 못한 것 같습니다.

개인적으로는 단순히 직접적인 답변만 보여주는 방식이 좋다고 생각합니다. 그러나 지나치게 예민한 사용자에게는 시작점에서 끝점까지의 흐름이 도움이 될 수 있습니다.

보충적인 별도 구성 요소로라도 말이죠. 지나치게 예민한 사용자뿐만 아니라, 잠재적인 골칫거리를 하나 줄일 수 있어 관리팀에도 유용할 수 있습니다. 사용자가 이 기능을 켜고 끌 수 있도록 사용자 필드를 활용하면 어떨까요?

Dan

제 특정 사례를 말씀드리면, 한 회원이 답글을 읽고 넘어가는 대신 건너뛸 수 없었기 때문에 커뮤니티에서 소중한 구성원을 잃었습니다. 그는 그 답글들이 사람들을 가스라이팅 한다고 생각했습니다. 그래서 그는 화가 나서 자신에게 문제가 있었던 사용자를 제가 차단해 달라고 요구했습니다.

분명히 말씀드리자면, 이 사용자(지나치게 예민한 쪽)는 2~3년간 회원으로서 결코 문제가 되지 않았고, 강력한 기여자였습니다.

이 개념은 정신 건강 문제로 도움을 받는 사람들을 위한 포럼에도 이점이 될 수 있습니다.

이 주제에는 많은 도전 과제가 있으며, 주요 문제와 부차적 문제에 대한 의견이 엇갈리면 상황이 악화될 수 있습니다.

누군가를 지나치게 예민하거나 정신 건강에 문제가 있는 사람으로 규정하는 것은 해당 인물에 대한 모욕으로 받아들여질 수 있습니다. 대화가 어떻게 빠르게 논쟁으로 번지다가 결국 누군가를 트롤이나 문제를 일으키는 사람으로 지목하게 되는지 보면 참으로 비극적입니다.

검열이나 편집에 대한 두려움 없이 자유롭게 논쟁할 수 있는 공간은 큰 가치를 지닐 수 있지만, 다른 사람에게 불필요한 문제를 일으키지 않도록 하기 위해서는 이를 위한 특정 유형의 포럼이나 장이 필요할 수 있습니다.

2개의 좋아요

이것이 흔한 필요가 아니길 바라지만, 저는 실제로 그런 필요성을 느낀 적이 있습니다. 저를 매우 괴롭게 하던 한 사람의 존재와 의견을 상기시키지 않기 위해, 그런데도 그걸 할 도구가 없었던 상황이었습니다. 어떤 사람은 제가 '트릭거(감정적 자극)'를 받았다고 할 수도 있고, 또 어떤 사람은 제가 '트롤링’을 당했거나 '조롱’을 당했다고 말할지도 모릅니다. 하지만 저는 매우 현실적이고 원치 않는 생리적 반응을 겪었고, 포럼에서 활발한 멤버로 남고 싶었다면 적어도 당분간은 그 사람의 존재를 몰랐으면 했을 것입니다.

때로는 우리는 강인한 사람들만 함께 있을 때도 있고, 때로는 모든 형태의 개인적 표현을 높게 평가하는 서브컬처 안에 있을 때도 있지만, 때로는 여전히 참여하거나 소속감을 느끼고 싶은 취약한 개인일 때도 있습니다.

수정: 이런 일은 제 실제 삶에서도, 직장에서 일어난 적이 있습니다. 저와 항상 대립하던 한 사람이 방에 들어오기만 해도 심박수가 올라가고 전투-도주(fight-or-flight) 반응을 경험했습니다. 그 사람은 공격적이거나 문제적이지도 않았는데, 제 반응이 저를 괴롭게 한 것이었습니다.

8개의 좋아요

차단한 사용자의 직접적인 응답(최소 읽을 수 없거나 읽으라는 지속적인 제안이 나오는 경우)을 차단하는 것은 좋은 조치라고 생각합니다.

솔직히 말해, 어떤 의미에서는 차단한 사용자의 모든 콘텐츠를 차단할 수 있어야 한다고 봅니다. 과도한 트롤링 같은 경우에는 그렇게 하지 않을 이유가 무엇인지 이해가 가지 않습니다.

3개의 좋아요

이 기능이 무시한 사용자의 새 주제 알림을 숨기는 건가요? 코드에서 추측하건대, 답은 아니지 않을까요?

1개의 좋아요

이것은 게시물(댓글)이 아닌 새 주제(게시물)에만 적용됩니다.

2개의 좋아요

네, 기본적으로 게시글과 답글이 숨겨집니다. 이 기능은 새 주제를 추가합니다.

1개의 좋아요

플러그인을 제공해 주셔서 감사합니다.
불행히도, 각 카테고리에서 최신 주제를 표시하도록 설정되어 있을 때 카테고리 보기에서 주제를 숨기는 것 같지 않습니다.
이 문제를 수정할 수 있을까요?

2개의 좋아요

이 컴포넌트는 Tests-passed를 위해 업데이트가 필요합니다

3개의 좋아요

이것은 작동하지만, 현재는 주제(topic) 페이지에서만 기능합니다. 홈페이지의 '주제 목록’에서 숨기는 방법에 대한 아이디어가 있을까요?

<script type="text/discourse-plugin" version="1.6.0">

const { alias } = require("@ember/object/computed");

api.modifyClass("component:topic-list-columns", {
    pluginId: "remove-ignored-users-topic",
    attributeBindings: ["data-topic-id", "role", "ariaLevel:aria-level", "data-creator-name"],
    "data-creator-name": alias("topic.creator.username"),
});

if (api.registerValueTransformer()) {
const s = document.createElement("style");

for (const u of api.registerValueTransformer()?.ignored_users) {
    s.innerHTML += `tr.topic-list-columns[data-creator-name="${u}"] { display: none; }`;
}

document.body.appendChild(s);
}

</script>

1개의 좋아요

업그레이드되었습니다. 이제 새로운 Discourse 주제 목록과 호환됩니다.

4개의 좋아요

@Lhc_fl 님, 업데이트해 주셔서 정말 감사합니다. 설명대로 정상 작동하는 것을 확인했습니다.

부연 설명으로, 이 기능은 사용자가 다른 사용자를 무시(ignore)했을 때 적어도 옵션으로, 혹은 심지어 기본 동작으로 Discourse 코어에 포함되는 것이 정말 적합합니다. 사용자는 ‘무시’ 기능에 대해 당연히 그렇게 기대할 테니까요.

2개의 좋아요

작은 버그나 제한 사항이 있는 것 같습니다. 이 컴포넌트가 Glimmer로 이전된 이후의 문제인지 확신할 수 없는데, 이전에 이 기능을 위해 다른 컴포넌트를 사용했기 때문입니다.

문제는 무시된 사용자가 감시/추적 중인 토픽에 게시글을 작성해도 토픽 목록에서 해당 제목 옆에 새 게시글을 나타내는 (1) 표시가 여전히 표시된다는 것입니다. 그리고 게시글이 사용자에게 숨겨지므로, 토픽에 들어가서 맨 아래까지 스크롤해도 토픽 목록에 새 게시글 알림이 계속 표시됩니다. 새 게시글이 보이지 않기 때문에 읽음 처리가 되지 않는다고 추정합니다.

참고로: 이 문제로 인해 프론트엔드에서 관리자 경고가 표시되었습니다.

Jagster님, 혹시 이 비슷한 컴포넌트가 아닐까요?

확실합니다.