根据信任等级自动分配标题

大家好,

我设置了一个带有自定义头衔的排名系统,但正如你们所知,Discourse 没有内置的方法为所有新用户分配默认头衔。所以,我创建了一个变通方法:

  • 新成员属于第 1 组
  • 活跃成员属于第 2 组
  • 以此类推……

我使用的方法如下:

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

User.where(trust_level: 0).update_all(title: "新成员")
User.where(trust_level: 1).update_all(title: "新成员")
User.where(trust_level: 2).update_all(title: "参与者")
User.where(trust_level: 3).update_all(title: "创意者")

问题所在

每次有新用户加入时,我都必须手动运行这些命令。如果我今天运行脚本,而新成员明天发帖,他们将无法自动获得头衔,因此我必须登录服务器并重新运行命令。

我尝试使用 Ruby 脚本通过 crontab 自动执行此操作,但出现错误。

我问了 ChatGPT,它告诉我:

“当您在 Discourse 环境外直接使用 Ruby 运行脚本时,User 模型未加载。”

问题是我在 Discourse 文件中没有正确的 config/environment 设置。

我添加了它,但它不起作用。

我的问题

有没有不使用 crontab 的自动化方法?或者如何在不手动进入 Rails 控制台的情况下正确执行更新用户头衔的脚本?

提前感谢!

2 个赞

有什么帮助吗?

也许可以通过为 Discourse AutomationCreate custom Automations 创建自定义自动化来实现,但我不知道它是如何工作的。

1 个赞

您可以通过使用 User EventUser Promoted Event 触发器的自定义自动化脚本来实现此目的。当创建新用户(User Event)或更改其信任级别(User Promoted Event)时,您可以触发一个脚本,根据其信任级别自动为其分配一个头衔。

5 个赞

谢谢 @jahan_gagan!有什么帮助可以用来制作这个脚本吗?

太棒了!干得漂亮!:clap:

看起来有些群组设置对于像信任级别这样的自动化群组不可用,这确实很遗憾。应该可以根据用户所在的信任级别群组来设置用户头衔,但目前不行。

你可以尝试使用徽章系统来实现。创建一个徽章,当会员达到你想要的信任级别时授予该徽章,然后设置“允许将徽章用作头衔”。

然后,你可以使用“通过徽章获得用户群组成员资格”脚本创建一个自动化,该脚本每天运行一次,并更新用户的头衔和Flair。

5 个赞

添加此信息的自定义主题组件是否会更灵活?这样用户仍然可以使用标题字段来实现其他目的(徽章、组标识符、您可能想添加的自定义内容),并且由自定义主题组件添加的内容用户将无法更改/删除。

1 个赞

您好,

我正在尝试使用徽章系统自动化来实现这一点,但我遇到了一个限制。

要运行 user_group_membership_through_badge 脚本,我必须指定一个组。但是,我已经在使用默认的系统组:信任等级 1、2、3、4。这些组是内置的,无法在自动化工具中选择。

如果我创建新组来与此自动化一起使用,我担心所有当前成员将不会自动转移——并且我会丢失用户与其信任等级的准确映射。

这是显示在组字段留空时错误的屏幕截图:

是否有任何方法可以在不要求组的情况下应用徽章到头衔的更新?
或者是否有任何变通方法可以在此自动化中直接定位信任等级组

@xkhalid 我做了一个简单的插件(也是我的第一个插件!),它:
<s

  • 为新用户分配一个头衔
  • 将头衔更改为与其信任等级相对应的头衔。例如,TL1 → TL2:用户现在获得 TL2 头衔,而不是 TL1 头衔。
    </s
  • 每 12 小时更新一次用户头衔(计划使频率可配置)

所有头衔均可通过设置进行配置 :slightly_smiling_face:

4 个赞

谢谢!

在我将此添加到 app.yml 后:

- git clone https://github.com/NateDhaliwal/add-title-based-on-trust-level.git

并重新构建后,我遇到了 502 Bad Gateway 错误。有什么解决方案吗?
目前,我已经将其从 app.yml 中移除,一切都正常工作。

嗯,奇怪。据我回忆,那个错误有时会在重建后出现,但等待它解决(或者再重建一次)。

是的,我知道——但这个问题是在我添加 Git 仓库并重新构建后才出现的。它给了我这个错误。

不过,我稍后会再试一次。


这个问题呢?会不会有关联?

1 个赞

我会再看看这个,谢谢告知。

1 个赞

@xkhalid 你现在可以试试吗?刚更新了。

1 个赞

太好了!现在可以用了。

但这对所有用户都未生效。例如,这位用户是信任等级 1 的新用户,但没有分配头衔。

需要时间吗?

@xkhalid 我已经推送了一个修复补丁。请告诉我现在是否正常。
谢谢!

我要感谢 @NateDhaliwal 的插件!

它非常有帮助!并且标题每 12 小时更新一次。

1 个赞

您好,感谢您提供如此出色的插件!

我有一个更复杂的需求:
我希望根据用户所属的组(例如:A组或B组)和信任级别(例如:TL2、TL3等)的组合来自动设置用户头衔。例如,A组且信任级别为TL2的用户将获得头衔“A - TL2”,依此类推。

是否可以扩展您的插件以支持此功能,或者您有什么实现建议?
我自己没有编程经验,因此非常感谢任何建议或帮助。

非常感谢!

这些组是用户的主要组吗?

是的,我想使用用户的用户组来决定标题。