限制在“喜欢”一个主题前在某个分类中发帖

如果还有其他人有兴趣这样做,这是我所做事情的简短记录:

  1. 首先,您需要通过 Discourse 服务器的 CLI 启用 Badge SQL:
./launcher enter app
rails c
SiteSetting.enable_badge_sql = true
  1. 接下来,找到您希望成员互动的帖子 ID 才能获得徽章。在我的实例中,帖子 ID 是 117
  2. 找到您希望成员互动的帖子 ID 才能获得徽章。在我的实例中,帖子 ID 是 117

Screenshot 2026-02-27 113204

  1. 创建您的自定义徽章:
    1. 管理员 (Admin) > 徽章 (Badges) > 新建 (New)
    2. 将徽章命名为您想要的任何名称(例如 B/S/T 规则阅读者 (B/S/T Rule Reader))
    3. 选择徽章类型、图标并为其提供描述
    4. 如果您遵循了第 1 步,您将看到一个可以输入 SQL 查询的查询框。粘贴此查询(将 p.topic_id = 117 更改为您自己的主题 ID):
      1. SELECT DISTINCT ON (pa.user_id)
          pa.user_id,
          pa.post_id,
          pa.created_at granted_at
        FROM post_actions pa
        JOIN posts p ON pa.post_id = p.id AND p.post_number = 1
        WHERE pa.post_action_type_id = 2
          AND p.topic_id = 117
          AND (:backfill OR pa.post_id IN (:post_ids))
        
    5. 确保同时勾选 每天运行撤销查询 (Run revocation query daily)查询目标帖子 (Query targets posts)
    6. 触发器应设置为 当用户对帖子执行操作时 (When a user acts on post)
  2. 现在我们创建自动化 (Automation)
    1. 首先创建一个新组,供成员添加。我的组仅命名为 bst_rules_agreed,并且设置为只有组所有者和版主可以看到成员身份。它不需要任何信任等级 (Trust Level) 影响。
    2. 接下来,转到插件 (Plugins) > 自动化 (Automation)
      1. 添加一个新自动化
        1. 选择 通过徽章进行用户组隶属关系 (User Group Membership Through Badge)
        2. 触发器 (Trigger):定期 (Recurring)
          1. 周期 (Recurrence):我将其设置为每 1 小时一次。选择适合您的设置。
          2. 选择一个开始日期
        3. 脚本选项 (Script Options):
          1. 徽章 (Badge):选择您上面创建的徽章
          2. 组 (Group):选择您上面创建的组

就这样。现在您应该有了一个系统,可以确保成员在能够在该类别中发帖之前已同意该类别的规则。

我接下来的探索是看看是否有办法向不属于该组的任何人隐藏除规则之外的所有主题。但是,这个基本系统目前已经足够好了。

3 个赞