创建带有自定义规则的自定义徽章

我想创建一个自定义徽章,其中将添加这些规则,这仅仅意味着当用户完成以下事情时,他们将自动获得相关的特定徽章。
用户需要完成以下事情/规则 -

  1. 用户至少创建了 2 篇帖子
  2. 用户上传了个人资料图片
  3. 用户至少点赞了一篇帖子

注意 - 我看到有些徽章是通过 SQL 查询创建的,实际上我对此非常陌生,所以请告诉我(如果需要)在哪里放置 SQL 查询来实现上述规则。

1 个赞

这有帮助吗?

4 个赞

嘿,这真的很有帮助。
我已经启用了 SQL 查询选项,之后只需要解决一个小问题就可以搞定了。

如何查看数据库,因为我的自定义徽章规则很复杂,所以我需要一些东西 -

  1. 如何查看数据库,以便我可以构建自己的查询
  2. 构建查询后如何测试这些徽章。

请回答这两点之后,我就可以安心睡觉了。

1 个赞

最简单的方法是安装 discourse-data-explorer 插件,它将提供一个类似这样的界面。

3 个赞

我已经安装了插件,并执行了下面的 SQL 命令,它能给出满足这 3 个规则的用户,但我不知道如何将其转换为用户在帖子上有行为时的触发器。

SQL 命令 -
select users.username, user_stats.user_id from user_stats Inner Join users ON user_stats.user_id = users.id where post_count = 2 AND likes_given = 1 AND uploaded_avatar_id > 0

遵循这篇帖子 Creating triggered custom badge queries 但由于我是 Discourse 的新手,仍然无法创建。

如果您能帮助我解决这个问题,我将不胜感激。一旦我能完成这个,我就可以更轻松地构建我自己的其他自定义徽章。
@Lhc_fl

1 个赞

这是“触发器:每日更新”的 SQL 代码;

SELECT st.user_id user_id, current_timestamp granted_at
FROM user_stats st
JOIN users u
ON st.user_id = u.id
WHERE st.post_count >= 2 AND st.likes_given >= 1 AND u.uploaded_avatar_id > 0

其他触发器依赖于特定内容,除非您找到 SQL 专家,否则我不建议使用它们。(我本人也不熟悉 SQL)

3 个赞

非常感谢您提供的信息,我只有三个基本问题:

  1. stu table 是什么?它们各自的用途是什么?为什么在 explorer 插件选项卡中看不到这些表?

  2. 每日触发器更新何时运行?具体来说,我想知道时间。

  3. 每日运行撤销查询 的用途是什么?

1 个赞

关于 1?,这些是表别名。

您是否看到 FROM user_stats st 行?这告诉查询 stuser_stats 表的缩写。

JOIN 语句中,其中写着 users u,情况也是如此。它表示在该查询中,uusers 表的别名。别名用于简化查询,减少输入量,从而降低出错的可能性。

关于 3,如果您启用该选项,那么如果用户根据查询不再符合徽章资格,它将从他们的帐户中删除该徽章。

3 个赞

感谢您澄清我的疑虑,现在只剩下第二个问题了

  1. 这个触发器更新每天将在何时运行,具体来说,我问的是时间。

哎呀。我以为我已经回答了。

查询每 24 小时运行一次,具体取决于您启动容器的时间。因此,我有一个实例大约在 0:00 UTC(大致)运行它,另一个实例在 6:00 UTC 之后不久运行它。

我们可以更改此查询的运行时间,或者修改此查询以触发器:当用户对帖子采取行动或当用户编辑或创建帖子时运行?
如果可能,请更改查询,因为我对这个 Discourse 系统是新手,如果您能帮助我一次,那么从下次起,我就可以构建自己的自定义徽章。