Discourse 每日挑战

:information_source: 摘要 运行限时每日签到挑战,包括排行榜、自动帖子和徽章奖励。
:hammer_and_wrench: 仓库链接 GitHub - R23DPrinting/discourse-daily-challenge · GitHub
:open_book: 安装指南 如何在 Discourse 中安装插件

背景故事

我运营着一个健康和保健社区,该社区最近从 Discord 迁移到了 Discourse。在 Discord 上,我曾构建了一个自定义机器人来运行月度健身挑战——成员会发布他们每日的锻炼情况,机器人会跟踪签到、发布每周排行榜,并在每个月末宣布获胜者。这是我们最受欢迎的功能之一。

迁移到 Discourse 后,成员们开始要求恢复这些挑战。我搜索了现有的插件,但一无所获。于是我决定自己开发一个。

最初只是一个快速的解决方案,结果却变成了一个功能齐全的挑战系统,老实说,它比原来的 Discord 机器人效果更好。由于它可能对其他社区也有用,所以在这里分享给大家。

功能

  • 通过主题标签或照片签到——成员通过发布挑战主题标签(例如 #AprilFitness)或上传图片到挑战主题上来签到。两者都会触发有效的签到。
  • 每日一次签到——在应用程序和数据库层面强制执行。每个用户的每日时间窗口基于其个人资料时区。
  • 每个挑战独立时区——独立于服务器时区设置挑战时区,这样就不会有成员在 UTC 午夜时被截止。
  • 实时管理员仪表板——同时显示所有活跃挑战,包括参与者数量、平均签到次数、连胜跟踪、完成百分比和排名靠前的排行榜。
  • 多个同步进行的挑战——可以同时运行多个挑战,每个挑战都有自己的主题、主题标签、时间表和徽章。
  • 已归档的挑战——已完成的挑战保存在一个可折叠的存档中,显示最终统计数据、获胜者和完成率。
  • 自动每周排行榜帖子——在挑战时区中,于可配置的日期和时间发布到挑战主题中。
  • 最终结果帖子——在挑战结束后第二天自动发布,列出所有达到签到目标的成员。
  • 自定义徽章奖励——自动为每个挑战创建一个 Discourse 徽章,并在挑战结束时颁发给符合条件的参与者。
  • 管理员签到管理——直接从管理面板为任何用户添加或删除签到记录。
  • 手动触发排行榜——可以随时从挑战详情页面触发发布排行榜。
  • 包容性的结束日期——如果将结束日期设置为 3 月 31 日,3 月 31 日的签到也会被计算在内。

配置

创建挑战

转到 管理 → 插件 → 每日挑战 → 挑战 → 新建挑战

输入一个主题 ID 以将挑战链接到现有主题。插件将显示主题标题以供确认。填写主题标签触发器、开始和结束日期,以及完成挑战所需的签到次数。

设置挑战时区为您社区的主要时区,以确保日期边界能为您的成员正确评估。

如果您需要自动的每周排行榜帖子,请启用该开关并设置日期和时间。如果您需要一个完成徽章,请启用该开关并输入一个徽章名称(例如“四月健身冠军”)。

点击保存挑战——如果启用了徽章奖励,徽章将自动创建。

运行挑战

创建后,挑战立即生效。成员通过在链接的主题中发布带有主题标签或图片的帖子来签到。管理员仪表板(管理 → 插件 → 每日挑战 → 仪表板)显示所有活跃挑战的实时统计数据。

提示

  • 要求成员在个人资料 → 偏好设置 → 界面 → 时区中设置其时区,以确保每日签到窗口准确。
  • 使用挑战详情页面上的立即发布排行榜按钮,随时触发排行榜帖子。
  • 使用挑战详情页面上的签到部分,为任何用户手动添加或删除签到记录。

设置

名称 描述
daily_challenge_enabled 插件的主开关
Topic ID 参与者发布签到的主题 ID
Hashtag trigger 监控的主题标签,不含 # 符号
Start date 接受签到的第一天
End date 接受签到的最后一天(包含)
Check-ins needed 完成挑战并获得徽章所需的签到次数
Description 关于挑战的可选内部注释(不向参与者显示)
Challenge timezone 用于日期边界和每周发布时间表的时区
Enable weekly leaderboard post 开启/关闭自动每周帖子
Post day of week 发布每周帖子的星期
Post hour (0-23) 在挑战时区中发布每周帖子的小时(0-23)
Award completion badge 开启/关闭自动创建和奖励徽章
Badge name 为此挑战创建的徽章的名称

后续计划

v2 计划内容:

  • 每次签到后发送包含当前统计数据的私信确认
  • 向尚未签到的参与者发送每日提醒私信
  • 用于查询个人统计数据的 @提及 命令

支持和功能请求

如果您遇到任何问题或有新功能方面的想法,请在 GitHub 上提交问题或回复此主题。

14 个赞

这太棒了,感谢分享。就功能而言,如果可以将挑战间隔指定为除每日以外的任何时间,即在挑战期间选择每周一次的挑战签到,那它对我们来说会很有用。如果版主/分类版主也可以创建挑战,那就更好了,这样就不必完全由管理员来设置了。

1 个赞

让我确认一下我的理解是否正确:

所以,您的意思是将挑战设置例如 1 个月(4 月 1 日至 30 日),但指定每周只计算 1 次条目,而不是每天计算 1 次?您希望是以周日到周六为一个周期,还是每 7 天为一个周期?

这是个好主意。说实话,我的社区里没有任何版主,所以我不知道管理员面板对他们来说是什么样子的。我会用我的开发环境创建一个版主账户,然后研究一下。

1 个赞

是的,完全正确。我们的社区有一个“52 周 52 项挑战”,其中一年内有一个每周挑战,因此非每日签到可以为不同类型的挑战提供更大的灵活性。

Discourse Calendar (and Event) 允许管理员将周从星期六、星期日或星期一开始设置,因此如果您想为与该插件的兼容性(例如生成签到或开始/结束日期的日历事件?)做准备,我可能会遵循日历如何设置一周?对于我的社区来说,这似乎并不重要。

类别版主以及常规版主将非常有用——我们有一些兴趣小组有自己的子类别,很高兴能允许这些类别版主运行单独的挑战,而无需将他们提升为完全版主。

1 个赞

这些都是绝妙的主意。感谢分享!我会看看我能做些什么来实现它们。

1 个赞

这个插件是否需要启用 gamification 插件,还是您选择该标签是因为您的插件是关于游戏化的一般用途?

2 个赞

它不需要插件。我只是选择了标签。抱歉。

2 个赞