Скрыть темы игнорируемых пользователей

:information_source: Краткое описание Этот компонент позволяет скрывать темы от пользователей, которых вы игнорируете
:hammer_and_wrench: Репозиторий GitHub - Lhcfl/discourse-hide-ignored-user-topics · GitHub
:question: Руководство по установке Как установить тему или компонент темы
:open_book: Новичок в темах Discourse? Начинающее руководство по использованию тем Discourse

Установить этот компонент темы

Вдохновитесь этим сообщением:

Этот компонент позволяет скрывать темы от пользователей, которых вы игнорируете.

Он делает именно то, что следует из названия, и его основной принцип очень прост, поэтому я приведу основной код ниже:

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,

По сути, если бы функцию этого компонента темы можно было расширить, добавив переключатель с дополнительной опцией «скрыть».

По умолчанию «игнорировать» скрывает сообщения указанного пользователя.

Можно ли добавить в этот компонент опцию для скрытия ответов от игнорируемого пользователя? Некоторые чрезмерно чувствительные люди жалуются, что всё ещё видят, как другие отвечают игнорируемому пользователю.

1 лайк

Это не сложно, но я не уверен, что это необходимо…
Пользователь, которого я игнорирую, опубликовал сообщение. Он не хочет его видеть. Затем кто-то ответил этому пользователю. Он тоже не хочет это видеть. Потом кто-то другой ответил на этот ответ, а затем ещё один ответ на ответ на ответ… Разве их не должны видеть?

  • Это приводит к разрушению обсуждений. Хорошо, вы заглушили кого-то, так что вы «никогда» не видите посты этого человека. Но тогда другой пользователь, который вам нравится, цитирует заглушенного пользователя в своём посте, упоминает его @имя или отвечает на его пост. Тогда вы подавляете только цитируемую часть? Подавляете @имя? Подавляете все ответы на их посты тоже? Это оставляет большие дыры в разговоре и создаёт множество сложных технических проблем. При достаточном количестве личных заглушек, блокировок и игнорирований вся беседа превращается в странное лоскутное одеяло из частично видимых заявлений.
3 лайка

@Lhc_fl
Это необходимо…
Если A хочет игнорировать B, то это должно касаться всех тем и постов — это было бы идеально.

  1. Темы от B полностью игнорируются — это хорошо/выполнено.

  2. В темах других пользователей, где B ответил:
    2.1 Посты B должны быть скрыты — выполнено.
    2.2 Аватар B должен быть удалён со страницы списка постов (в разделе участников). Это, кажется, несложно реализовать?
    2.3 Если пост B процитирован, не уверен, легко ли будет удалить или скрыть эту часть?

Спасибо за ваши огромные усилия, это действительно полезно. Надеюсь, вы сможете рассмотреть возможность реализации пунктов 2.2 и 2.3, если это возможно.

2 лайка

Как я уже говорил или писал в одном из своих постов, в некоторых аспектах это кажется излишним. Участник должен иметь возможность пропускать ответы. К сожалению, некоторые люди, похоже, не обладают этим навыком.

Лично я считаю, что, возможно, стоит оставить только прямые ответы. Однако для этих чрезмерно чувствительных пользователей может быть ценна возможность видеть цепочку от начала до конца.

Даже как отдельный дополнительный компонент. Просто что-то, что может быть полезно не только чрезмерно чувствительным пользователям, но и командам модераторов, чтобы у них было на одну потенциальную головную боль меньше. Возможно, можно добавить пользовательское поле, чтобы разрешить пользователю включать или отключать эту функцию?

Дэн

В моём конкретном случае сообщество потеряло ценного участника, потому что он не мог проигнорировать ответы, которые, по его мнению, были формой газлайтинга. В раздражении он потребовал, чтобы я забанил пользователя, с которым у него возникли проблемы.

Для ясности: этот пользователь (чрезмерно чувствительный) за 2–3 года участия в сообществе никогда не создавал проблем и был активным contributor’ом.

Эта концепция также могла бы быть полезна форумам, посвящённым помощи людям с проблемами психического здоровья.

С этим связано множество сложностей, и ситуация может ухудшиться, когда возникают разногласия относительно того, какая проблема является первичной, а какая — вторичной.

Категоризация людей как чрезмерно чувствительных или имеющих проблемы с психическим здоровьем может быть воспринята как оскорбление. Трагично то, как быстро разговор перерастает в спор, после чего кого-то объявляют троллем или проблемным человеком.

Может быть большая ценность в наличии пространства, где люди могут свободно спорить, не опасаясь цензуры или редактирования, но для этого может потребоваться специфический форум или место, чтобы это не создавало излишних проблем для других.

2 лайка

Я надеюсь, что такая потребность не является распространённой, но лично я испытывал необходимость и не имел инструментов, чтобы избежать напоминаний о существовании и мнениях человека, который сильно меня беспокоил. Можно сказать, что меня это «триггернуло», можно сказать, что меня троллили или провоцировали. Но у меня была очень реальная и нежелательная физиологическая реакция, и если бы я хотел продолжать быть активным участником форума, я бы предпочёл не знать об этом человеке. По крайней мере, какое-то время.

Итак, иногда мы находимся исключительно в окружении стойких людей, иногда мы в субкультуре, которая высоко ценит все формы самовыражения, но иногда мы уязвимые личности, которые всё ещё нуждаются в участии или чувстве принадлежности.

Редактирование: со мной это случалось и в реальной жизни, на работе. Был человек, с которым я всегда был в конфликте: мой пульс учащался, и я испытывал реакцию «бей или беги», если он просто входил в комнату. Он даже не был агрессивным или вызывающим — это была моя реакция, которая влияла на меня.

7 лайков

Я считаю, что блокировка (по крайней мере, невозможность прочитать или постоянное предложение прочитать) прямых ответов от заблокированного пользователя — это хороший шаг. Честно говоря, в некотором смысле вы должны иметь возможность блокировать весь контент от заблокированного пользователя. Я не вижу, как это не может быть оправдано в некоторых случаях (чрезмерный троллинг и тому подобное).

3 лайка

Скрывает ли это уведомление о новых темах от игнорируемых пользователей? Исходя из кода, ответ — нет?

1 лайк

Это касается только новых тем, а не сообщений.

2 лайка

Да, по умолчанию скрываются посты и ответы. Это добавляет новые темы.

1 лайк

Спасибо за плагин.
К сожалению, похоже, что он не скрывает темы в представлении категорий, когда настроен на отображение последних тем в каждой категории.
Можно ли это исправить?

2 лайка

Этот компонент требует обновления для Tests-passed

3 лайка

Это работает, но только на странице темы. Есть идеи, как скрыть это в «списке тем» на главной странице?

<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 за обновление. Я могу подтвердить, что всё работает, как описано.

Кстати, эта функция действительно должна быть частью ядра Discourse — хотя бы как опция, а возможно, даже как поведение по умолчанию при игнорировании пользователя. Это именно то, что пользователь логично ожидает от функции «игнорировать».

2 лайка

Похоже, здесь есть небольшая ошибка или ограничение. Не уверен, что это нововведение после переноса этого компонента на Glimmer, так как ранее я использовал для этой функциональности другой компонент.

Проблема заключается в том, что когда игнорируемый пользователь публикует сообщение в отслеживаемой теме, рядом с её заголовком в списке тем всё ещё отображается (1) для новых сообщений. И поскольку это сообщение скрыто от пользователя, даже после перехода в тему и прокрутки до самого низа уведомление о новом сообщении в списке тем продолжает отображаться. Я предполагаю, что это происходит потому, что новое сообщение невидимо и поэтому не помечается как прочитанное.

Просто к сведению: это вызвало предупреждение администратора на фронтенде.

Привет, Jagster, ты уверен, что это не похожий компонент?

Совершенно точно.