Discourse 动态组

:information_source: 摘要 自动管理组成员资格
:hammer_and_wrench: 仓库链接 https://github.com/communiteq/discourse-dynamic-groups
:open_book: 安装指南 如何在 Discourse 中安装插件

:warning: 此插件应被视为 Beta 版 :warning:

功能

Discourse 社区经常需要根据徽章所有权或现有组成员资格等条件来自动管理组成员资格。

常见用例包括:

  • 不在“订阅者”组中的用户

  • 未被禁止在 Marketplace 中发帖的用户

  • TL0 或 TL1 用户,但不是 TL2 用户

  • 已完成新用户教程或已成为会员一年以上

  • 属于 client_1、client_2 或 client_3 且不是实习生的用户

以前,解决这个问题需要定期同步组的自定义脚本。Dynamic Groups 插件消除了这种需求。

该插件在组设置中引入了一个布尔表达式字段,允许管理员定义动态确定组成员资格的规则。

示例:

  • 不在“订阅者”组中的用户
    trust_level_0 AND NOT subscribers

  • 未被禁止在 Marketplace 中发帖的用户
    trust_level_2 AND NOT banned_users

  • TL0 或 TL1 用户,但不是 TL2 用户
    trust_level_0 AND NOT trust_level_2

  • 已完成新用户教程或已成为会员一年以上
    badge:certified OR badge:anniversary

  • 属于 client 1、2 或 3 且不是实习生的用户
    (client_1 OR client_2 OR client_3) AND NOT interns

配置

安装并启用插件后,组管理界面中会出现一个新选项卡:

输入或更新布尔表达式后,系统将花费一些时间来填充匹配用户的组。从那时起,随着用户状态的变化,组成员资格将自动更新。

重要提示:
定义规则后,该组将被标记为 自动,禁用手动成员更改。要将组恢复为手动管理,只需清除表达式字段。现有成员将保留,您将重新获得手动控制权。

24 个赞

哇!理查德,干得漂亮!

这填补了 Discourse 中群组管理的一大空白。我非常满意,并期待着好好使用它。

我将主要使用它来实现功能性子群组。

3 个赞

绝对是 Discourse 功能的一个受欢迎的补充!

1 个赞

7 个帖子已合并到现有主题中:仅在使用 User first logged in 触发器时,第一个条目在多选字段中工作

您好,感谢您开发这款超级有用的插件!

我目前正在使用 Discourse Dynamic Groups 来自动将所有非匿名用户添加到一个特殊的组。我的布尔表达式是:

NOT anonymous_users
预期行为:
当一个新用户注册(不属于 anonymous_users 组)时,他们应该被自动添加到这个组,无需任何手动干预。

实际行为:
新注册的用户不会立即被添加到组中。只有在我手动重新保存在组设置中的布尔表达式后,他们才会被添加。
这意味着该组不会随着用户的加入而自动更新,除非我触发手动同步。

1 个赞

嗯… 抓得很好。我同意这应该是预期的行为。

从技术角度来看,插件只会在两种不同的情况下重新评估组成员身份:

  1. 保存组设置中的布尔表达式时
  2. 如果在布尔表达式中提到的组中添加或删除用户时。

当新用户注册时,以上两种情况都不是。

您可以尝试将表达式更改为 trust_level_0 AND NOT anonymous_users,然后反馈是否解决了问题吗?

3 个赞

您好,

当我尝试使用表达式

trust_level_0 AND NOT anonymous_users

时,出现以下错误:
Unknown keyword, group or badge: 'anonymous_users'(未知关键字、群组或徽章: ‘anonymous_users’)

如果我将群组名称更改为我的实际群组,例如:

trust_level_0 AND NOT interns

我仍然得到:
Unknown keyword, group or badge: 'interns'(未知关键字、群组或徽章: ‘interns’)

我已经仔细检查过,并且我是直接从群组管理页面复制群组的唯一名称,所以没有拼写错误。
是否遗漏了什么,或者我还需要配置其他内容才能使自定义群组在表达式中被识别?

4 个赞

感谢您报告此问题。

在尝试重现时,我发现了两个错误,其中一个可能影响了您。请将插件更新到最新版本 59640f1,看看是否能解决此问题。

该插件仍然不能很好地处理重命名组。如果您重命名一个组,您应该保存所有依赖于它的组的规则(只需在布尔表达式后输入一个空格,然后再删除它,以启用“保存”按钮)。这将在以后的版本中解决。

3 个赞

这是在使用您的 Category restrictor 插件还是独立于它运行?

一个很棒的插件,可以填补空白。

它是独立运行的。

1 个赞

您好,

我正在使用 Dynamic Groups 插件,并将我的条件设置为:

trust_level_0 AND NOT anon_group

但是,我注意到 trust_level_1 且 anon_group 中的用户也被添加到了这个动态组中。

您能否确认这是预期行为,还是一个错误?

信任级别为 1 的用户也是信任级别 0 组的成员。因此,该行为是符合预期的。您可以排除信任级别 1 组,只获取 TL0 用户。类似于第一个帖子中的示例

2 个赞

谢谢你的澄清