我刚刚批准并发送了我的第一个Devvit应用,所以这里是它的功能以及我在路上犯的几个错误。
应用。一个帖子是一场五个问题的定时对战,涉及SAT数学、AP微积分AB/BC、AP美国历史或AP心理学。第一位完成的人成为该帖子的挑战者,之后的每个人都将他们的记录问题一一比赛——你可以看到他们的答案在你还在同一个问题时实时更新。正确答案越快锁定,价值越高(100个基本值,最高300),最后一个问题总是从最困难的等级中抽取,因此一场比赛通常是在最后才决定的。
一个调度任务每天将一个带有编号的战斗帖子发送出来,还有几个mod菜单项可以手动发布一个或切换科目。338个问题在服务器端打包;答案从未到达客户端。
花费我时间的三个事项:
一个尝试一个帖子比看起来更难。我已经有了ALREADY_PLAYED阻止任何完成的人,但会话过期后30分钟,所以你可以开始,阅读第一个问题,退出,等待30分钟,重新启动在同一个设置中。查找整个东西的方法。修复是从开始写入尝试标记,而不是在完成时写入的,从未过期。
然后这个修复创建了自己的错误。在中间战斗刷新时,尝试和inProgress都是真实的,但它们的含义相反——"你用尽了你的机会" vs "你可以恢复"。检查inProgress在战斗刷新时为真或假,以免在战斗中断时将玩家留在那里,正如发生在我的第一个测试者身上。
缓存让我在三个地方都受到了影响,而不是一个地方。我在API响应中设置了Cache-Control:no-store,而我的测试都保持绿色,但浏览器仍然显示陈旧的状态。服务器端标头只会阻止未来缓存——浏览器已经存储的条目仍然会被服务。需要在客户端的fetch中添加cache:'no-store',并且在我的本地模拟中添加相同的标头,以便它们之间的行为匹配。
关于分享:完成后会获得一个无谜的结果网格(⚡快速正确/✅/❌)以及积分和排名,用于评论。Wordle的分享文本没有携带任何链接,仍然传播开来,所以我只保留了网格。
最后一个,因为我无法在发布前测试它:调度器。没有办法在本地验证一个cron任务,而且developers.reddit.com不为我提供配置文档。所以我直接复制了Reddit发布的应用(devvit-HotAndCold)的形状,并且在信任的基础上发出了它。它在第一个真正的日子里按时运行,距我写它的时间两周。如果你被困在某个地方,文档不能告诉你,那么一个发出的应用是一个比猜测更好的参考。
它在r/qinnobattle中可用,如果你想尝试一个,并且在app目录中,如果你想在自己的社区中使用它。很高兴回答任何有关实现的内容——如果你发现一些看起来不正确的东西,我更希望你告诉我。
评论 (0)