延长慢速模式的使用以应对“实时聊天”的战斗

我们非常喜欢“慢速模式”功能,并希望扩大其使用范围。我们希望为所有分类启用永久慢速模式——不仅适用于新主题,也适用于所有现有主题。

首先,让我们说明为何希望这样做。

目前我们拥有约 1 万名成员和 1.3 万个主题。部分用户尚未养成进行有意义、深思熟虑讨论的习惯,而是将论坛当作即时聊天工具,把整个论坛当作消息应用来使用。这并不是我们希望看到的景象——我们希望在社区中开展有意义的讨论。然而,在大多数情况下,“暂停”或“禁言”等处罚措施过于严厉,且并不适用。此时,“慢速模式”功能便派上了用场。借助该功能,我们可以减缓讨论节奏,防止实时聊天变得过于激烈。据我们理解(如有错误请指正),激活慢速模式有两种方式:

  • 手动为特定主题启用慢速模式;
  • 在分类级别启用:一旦为某个分类启用该设置,该分类下所有主题将自动启用慢速模式。

目前,我们的版主会识别“热门主题”(即演变为实时聊天的主题),并手动为其启用慢速模式。问题在于,由于并非所有现有主题都处于慢速模式,其他未启用慢速模式的主题会不断被顶起,再次演变为实时聊天。因此,一些用户开始抱怨:“为什么有些主题不断被顶起却未启用慢速模式(处罚)?”“为什么这个主题剩余慢速模式时间为 4 小时,而另一个却是 1 小时?”等等。更有甚者,对此产生了各种阴谋论,我们的团队也因此受到大量批评(尽管我们对此已习以为常),原因正是慢速模式的启用显得“随机”。随着用户数量和主题数量持续增长,而我们的资源却非常有限,这一问题只会愈发严重。

我们希望通过以下方法解决该问题,或至少改善现状:

  1. 让所有公开主题均启用慢速模式:以此防止实时聊天,鼓励有意义的讨论。
  2. 将默认首页设置为“最新”(New)(而非“最新”Latest)对所有用户和整个站点生效:这样,希望查找真实内容(而非仅“哈哈”“嗨”等闲聊帖)的用户在访问站点时能获得更好的体验。起初,我们将“最新(Latest)”设为站点默认首页。我们发现,这会导致用户默认看到“热门主题”。此外,由于此类“热门主题”数量过多,新用户或时间有限的用户可能会认为所有可见主题都是无意义的闲聊,或认为在此进行实时聊天是正常/可接受的——遗憾的是,这已严重损害我们的社区。我们希望将默认首页改为“最新(New)”能缓解这一问题。至少,用户默认首先看到的将不再是实时聊天帖。

针对第 1 点,我们计划:

1a. 为所有分类启用慢速模式——这将覆盖所有新主题。

1b. 批量更新所有现有公开主题以启用慢速模式。–> 这是目前我们不知如何操作的步骤。我们在通过 UI 对主题进行批量更新时,并未找到慢速模式选项。考虑到我们资源有限且现有主题数量庞大,逐个手动通过 UI 更新每个主题并不可行。请问有人知道如何实现这一目标吗?例如,是否可以直接连接数据库并修改某些字段?我们仅希望对公开主题进行修改,私信不应受影响。或者,在批量更新 UI 中添加“慢速模式”选项是否合理?

针对第 2 点,我们将:

2a. 在站点设置中,将“最新(New)”设为顶部菜单的首项。

2b. 批量更新所有用户的默认首页设置。–> 这也是我们需要指导如何实现的一步。

我们需要针对 1b 和 2b 提供帮助,同时也欢迎任何关于更优解决方案的建议。任何建议都将非常有帮助。感谢!

6 个赞

我想在类别设置中看到类似以下内容:


我相信你可以通过 Rails 控制台修改主题来解决 1b 问题。我已在本地测试过,看其是否按预期工作,但我仍然强烈建议你在尝试在生产环境的 Discourse 上执行此操作之前,先在测试环境(staging)中进行测试,或者等待 Discourse 团队成员确认这是一个可行的解决方案。(即使他们确认了,也最好在测试环境中再次测试。)

假设你使用的是标准安装的 Linux 服务器,请通过 SSH 或其他方式进入服务器的 Shell,然后执行以下命令:

cd /var/discourse
./launcher enter app
rails c

然后在出现的 Rails 控制台中执行:

Topic.where.not(archetype: "private_message").update_all(slow_mode_seconds: 120)

120 表示允许发布下一条消息之前的秒数,你可以根据需要替换该数值。如果你也希望避免为某些类别设置此选项,可以将其与 .where.not(category_id: n) 链式调用结合使用。例如,若要避免为类别 3 和 4 设置慢速模式,你可以将上述命令修改为:

Topic.where.not(archetype: "private_message").where.not(category_id: 3).where.not(category_id: 4).update_all(slow_mode_seconds: 120)

你可以通过在浏览器中访问某个类别,查看地址栏中的内容来获取类别 ID,例如类似 “c/staff/3” 中的数字。

3 个赞

感谢 @Simon_Manning!您的回复帮助我们找到了一种适用于 2b 的类似方法。

以下是我们针对 2b 将要采取的步骤(如果有人感兴趣的话)。在输入 rails 控制台后:

UserOption.update_all(homepage_id: 4)

在我们的测试站点中,homepage_id 4 对应的是“新”。由于不同的站点设置,我不确定这是否始终一致,但很容易检查。只需设置一个用户的默认主页为“新”,然后进入数据库检查该用户的 homepage_id 即可。有关如何进入数据库并检查数据的友好说明,可在此处找到:https://meta.discourse.org/t/how-to-access-the-discourse-database/41845/14?u=ty1

2 个赞

我愿意自动化这个过程,以便话题能够被 强制 自动进入慢速模式。但请帮我决定:

  • 系统如何知道 何时 切换到慢速模式?
  • 系统会查看哪些数据点来决定切换到慢速模式?
1 个赞