隐藏被忽略用户的主题

:information_source: 摘要 此组件允许您从您忽略的用户那里隐藏主题
:hammer_and_wrench: 代码库 GitHub - Lhcfl/discourse-hide-ignored-user-topics
: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 个赞

正如我在帖子中所说或写过的。在某些方面似乎有点过头了。作为会员,应该能够跳过回复。不幸的是,有些人似乎缺乏这项技能。

我个人认为也许只需要直接回复。但是,对于那些过于敏感的用户来说,从头到尾的追踪可能是有价值的。

甚至可以作为一个补充的独立组件。它不仅可以为过于敏感的用户提供价值。也可以为版主团队减少一个潜在的麻烦。也许可以使用一个用户字段来允许用户打开/关闭它?

Dan

就我个人而言,社区失去了一位有价值的会员,因为他无法忽略他认为是在煤气灯操纵他人的回复。因此,在他恼怒之下,他要求我封禁他有问题的那位用户。

需要明确的是,这位用户(过于敏感的那位)作为会员两三年以来从未有问题,并且是一位重要的贡献者。

这个概念也可以让致力于帮助人们解决心理健康问题的论坛受益。

这有很多挑战,当对主要或次要问题存在不同意见时,事情可能会崩溃。

将人们归类为过于敏感或有心理健康问题,可能被视为对他们的侮辱,对话很快就会变成争论,然后有人被定性为捣乱者或有问题的人,这可能是悲剧性的。

在一个人们可以自由争论而无需担心被审查或编辑的空间里,可能会有巨大的价值,但这可能需要特定类型的论坛或场所,以免给他人造成不必要的麻烦。

2 个赞

我希望这并非普遍需求,但我个人曾有过这种需求,却苦于没有工具,无法避免被一个曾让我非常困扰的人的存在和观点所提醒。有人可能会说我被触发了,有人可能会说我被挑衅了,或者被激怒了。但我的身体确实产生了真实而不受欢迎的生理反应,如果我想继续积极地参与论坛,我宁愿不知道那个人。至少一段时间内是这样。

所以,有时我们只与坚强的人为伍,有时我们身处一个高度重视各种个人表达的亚文化中,但有时我们是脆弱的个体,仍然需要参与或感受到归属感。

编辑:这种情况也曾发生在我现实生活中,在工作中,我总是与某人意见不合,如果他甚至走进房间,我的心率就会飙升,我会经历战斗或逃跑反应。他甚至没有表现出攻击性或令人反感,是我的反应在影响我。

7 个赞

我觉得屏蔽(至少不能阅读/被屏蔽用户持续性地建议阅读)来自被屏蔽用户的直接回复是一个不错的举措

老实说,在某种程度上,你应该能够屏蔽被屏蔽用户的所有内容,我看不出在某些情况下(例如过度的 trolling 等)这有什么不合理的。

3 个赞

这个会隐藏被忽略用户的新主题通知吗?从代码来看,我猜答案是否定的?

1 个赞

这仅适用于新主题,不适用于帖子。

2 个赞

是的,默认情况下会隐藏帖子和回复。这会添加新主题。

1 个赞

感谢您的插件。
遗憾的是,当配置为在每个类别中显示最新主题时,它似乎并未隐藏类别视图中的主题。
可以修复此问题吗?

2 个赞

此组件需要更新以通过测试

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,你确定不是这个类似的组件吗?

完全确定。