| 摘要 | 运行限时每日签到挑战,包括排行榜、自动帖子和徽章奖励。 | |
| 仓库链接 | GitHub - R23DPrinting/discourse-daily-challenge · GitHub | |
| 安装指南 | 如何在 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 上提交问题或回复此主题。