• cxk123
    每日签到与成长任务
    ID daily_quest版本 2.2.0插件制作者 cxk123售价 30 积分3716 行 / 227.1 KBHook / 路由 / 后台页
    每天签到累积连续天数,漏签可以消耗补签券补回来;每天还有一组会自动轮换的任务,
    收费插件安装说明购买后点击“授权码”获取一次性授权码;在后台 > 插件广场点击在线安装或更新,并填写该授权码。已购买用户更新免费:每次在线安装或更新前,重新点击“授权码”获取新的一次性授权码即可,无需再次购买;也可直接下载新版后用后台“插件上传”更新。尊重并感谢他人劳动,请勿传播代码。
    app/plugins/daily_quest/plugin.php
    开发日志已有 5 条

    此项目接受所有登录用户协助维护和提交更新。

    • cxk123
      cxk123
      版本 2.2.0 1ce9276eded6 更新:**2.2.0 · 任务来源的版块可见性** - **修复(越权)**:签到面板的「来源」条与今日达成流此前只做**匿名遮蔽**、不做版块可见性判定 ⇒ 「仅指定用户组可见」版块里的主题标题会出现在任务页。现在两处按核心同一口径过滤。 - **注意**:被过滤时**只丢掉来源条本身、不抹整行** —— 抹掉整行会让今日达成流退回"真名兜底",反而泄露匿名身份(这是一个反向陷阱,已在实现里注明)。 release
    • cxk123
      cxk123
      版本 2.1.0 1843b8e7089b 更新:2.1.0:新增签到月报导出;修掉一条真并发下会丢券的缺陷;升级路径实测(老库覆盖文件即自愈)。 【新能力⑤签到月报导出】?a=daily_quest_export&month=YYYY-MM 下载自己的签到记录 CSV: 逐日一行(日期 / 类型 / 积分 / 截至该日的连续天数 / 本行消耗补签券 / 记录时间)+ 末行合计 (签到天数 / 补签次数 / 本月积分 / 本月最长连续)。只导自己
    • cxk123
      cxk123
      版本 2.0.0 98dbf6370920 更新:2.0.0:四项新能力 + 五条缺陷修复。 【新能力①积分兑券】攒下的积分可以主动换成补签券(后台设每张价格,默认 0 = 关闭;还要打开积分轨才生效)。 扣分走核心 user_points_change(),先判余额再扣、扣不动就把券退回去;台账两笔单位分开(points/spend 支出 + coupon/coupon_buy 收入),券守恒仍然成立。原来券只能等连续满 N 天或任务奖励,想补
    • cxk123
      cxk123
      版本 1.0.1 a1072402f255 更新:daily_quest 1.0.1 - 新增给「页面组件 DIY」的原生只读组件「今日任务」(daily_quest:today):今日任务进度(已完成 / 总数 + 逐条进度条 + 领取状态)+ 我的连续天数 + 最近里程碑,声明成本 6 条。 - 未登录时**降级为登录提示**(不是空白也不是报错);站点上一条签到数据都没有时**零查询**返回空块。 - 按人渲染:显式声明 per_user
    • cxk123
      cxk123
      版本 1.0.0 889138cfa494 更新:首次上架:每日签到与成长任务 1.0.0 【它解决什么】市场 406 条在售条目里,签到类 5 款(daily_checkin / checkin_captcha / nb_checkin / streak_reward / daily_fortune)都没有「补签、跨插件任务、写入期风控、账目对账」这四件事; 「成就 / 成长 / 里程碑」0 命中。本款的差异化不在签到本身,而在**任务体系**
    主楼
  • cxk123

    版本 1.0.0 更新:
    首次上架:每日签到与成长任务 1.0.0

    【它解决什么】市场 406 条在售条目里,签到类 5 款(daily_checkin / checkin_captcha / nb_checkin /
    streak_reward / daily_fortune)都没有「补签、跨插件任务、写入期风控、账目对账」这四件事;
    「成就 / 成长 / 里程碑」0 命中。本款的差异化不在签到本身,而在任务体系。

    一、连续签到 + 补签券
    · 日桶 UNIQUE(user_id,day_key) 做并发仲裁:同一天重复签到不重复发奖(积分一分不多发)
    · 漏签可以用「补签券」补回来:只补最近 7 天里缺失的那一天(可配),券有上限、由任务与连续产出
    · 补签另写一行(kind=1、不发当日积分、不改写任何历史行),券的进出全部写进台账

    二、任务总线(Hook 驱动、零轮询)
    · 当日任务池按站点种子轮换;发帖 / 回帖 / 收获积分 / 回答被采纳 / 报名活动 / 现场签到都会
    自动推进进度,够数就能领奖励 —— 不需要任何人去点「刷新」
    · 幂等键保证同一个事件反复投递只算一次;一条事件命中多个任务也只用一条语句
    · 消费已有的 qa_bounty.after_accept;event_rsvp 的报名 / 签到事件是新增契约,
    对方升级前页面上会写明需要哪个版本(本插件不去读对方的数据表)

    三、双轨奖励 + 台账对账
    · 积分一律走核心积分接口;里程碑徽记按历史最长连续天数一次性点亮,同档永不重发
    · 逐笔台账,后台能直接看到「Σ台账 = 应发合计」的守恒等式与漂移人数
    · 默认一分不发:装了插件不会静默改变任何人的积分,要发奖就在后台打开积分轨逐项配置

    四、写入期风控(只标注,不处置)
    · 同秒重复提交 / 自问自答 / 内容无效 / 每天刚过零点就签到 —— 全部只记进面板
    · 插件没有任何自动扣分与封禁;IP 与 UA 只存不可逆哈希,可一键清空

    五、每日重置不依赖逐用户定时任务
    · 进度按天天然清零 + 用户自己那次请求内的懒更新 + 唯一的站点级任务(与用户数无关)

    入口:首页侧栏「每日签到」、顶栏「签到」、?a=daily_quest(签到面板)、
    ?a=daily_quest_board(连续榜与里程碑徽记);列表页作者名旁会给今天已签到的作者一个「签」标记。

    #1
  • 质量报告

    插件质量报告

    插件:daily_quest

    Hook功能范围循环使用频率文件读写修改系统表读写系统表读写自己的表
    sidebar.feature_links首页/侧栏快捷功能否5----
    top.bar.actions顶部栏插件入口,同一请求只执行一次(展示位置:版块导航与搜索框前后)否5----
    topic.index_data.loaded首页/版块/用户主题列表查询后否5---读 plugin_daily_quest_days
    topic.title_suffix首页/版块主题列表逐条标题是5----
    reply.after_save回帖保存后否3---写 plugin_daily_quest_risk, plugin_daily_quest_stats;读 plugin_daily_quest_events, plugin_daily_quest_roll
    topic.after_save主题保存后否3---写 plugin_daily_quest_risk, plugin_daily_quest_stats;读 plugin_daily_quest_events, plugin_daily_quest_roll
    user.points_changed用户积分变动后否3---写 plugin_daily_quest_risk, plugin_daily_quest_stats;读 plugin_daily_quest_events, plugin_daily_quest_roll
    diy_layout.components非系统hook否1----
    event_rsvp.after_checkin非系统hook否1---写 plugin_daily_quest_risk, plugin_daily_quest_stats;读 plugin_daily_quest_events, plugin_daily_quest_roll
    event_rsvp.after_signup非系统hook否1---写 plugin_daily_quest_risk, plugin_daily_quest_stats;读 plugin_daily_quest_events, plugin_daily_quest_roll
    qa_bounty.after_accept非系统hook否1--app_topics写 plugin_daily_quest_risk, plugin_daily_quest_stats;读 plugin_daily_quest_events, plugin_daily_quest_roll

    颜色说明:黄色表示有数据读写,红色表示 Hook 在系统循环中执行,浅蓝色表示有文件写入。“列表跳过”表示回调在列表路径会提前返回,“回调内”表示操作位于回调自身或其帮助函数的循环体内。“文件批处理”表示逐个处理用户一次提交的文件,属于必要操作,不标记修正。只有操作实际处于需要优化的循环路径时,才会标记“修正❗️”。

    数据字典

    plugin_daily_quest_days

    字段类型可空默认值约束
    -动态定义--无法静态解析

    plugin_daily_quest_progress

    字段类型可空默认值约束
    -动态定义--无法静态解析

    plugin_daily_quest_stats

    字段类型可空默认值约束
    -动态定义--无法静态解析

    plugin_daily_quest_ledger

    字段类型可空默认值约束
    -动态定义--无法静态解析

    plugin_daily_quest_badges

    字段类型可空默认值约束
    -动态定义--无法静态解析

    plugin_daily_quest_risk

    字段类型可空默认值约束
    -动态定义--无法静态解析

    plugin_daily_quest_events

    字段类型可空默认值约束
    -动态定义--无法静态解析

    plugin_daily_quest_roll

    字段类型可空默认值约束
    -动态定义--无法静态解析
    #2
  • dasheyang

    厉害!

    #3
  • cxk123

    版本 1.0.1 更新:
    daily_quest 1.0.1

    • 新增给「页面组件 DIY」的原生只读组件「今日任务」(daily_quest:today):今日任务进度(已完成 / 总数 + 逐条进度条 + 领取状态)+ 我的连续天数 + 最近里程碑,声明成本 6 条。
    • 未登录时降级为登录提示(不是空白也不是报错);站点上一条签到数据都没有时零查询返回空块。
    • 按人渲染:显式声明 per_user —— 这个块渲染当前登录用户的私人进度,不进跨请求组件级缓存(避免甲的数字被乙命中)。
    • 渲染回调不写库(连续数断链只在 PHP 里判定,不使用 stats_touch),拿不到数据不抛异常。
    • 未装 / 未启用 layout_diy 时行为、查询数、页面字节逐字节不变(套件有 A/B 对照)。
    #4
  • cxk123

    版本 2.0.0 更新:
    2.0.0:四项新能力 + 五条缺陷修复。

    【新能力①积分兑券】攒下的积分可以主动换成补签券(后台设每张价格,默认 0 = 关闭;还要打开积分轨才生效)。
    扣分走核心 user_points_change(),先判余额再扣、扣不动就把券退回去;台账两笔单位分开(points/spend 支出 +
    coupon/coupon_buy 收入),券守恒仍然成立。原来券只能等连续满 N 天或任务奖励,想补签却没券时毫无办法。

    【新能力②断链保护】站长设一个阈值(默认 0 = 关闭)后,用户下次打开面板时,若「昨天漏签 + 前天有签到
    (补了确实接得上链)+ 有券 + 历史最长连续达标」四条同时成立,自动用 1 张补签券补回昨天,并在面板上
    明说用了哪张券。补了接不上链的情况一张券都不花。

    【新能力③签到月历回看】?a=daily_quest&month=YYYY-MM 整月网格(周对齐 + 四态)+ 本月签到/补签/积分/
    最长连续小结 + 上下月翻页;网格里的补签按钮带回跳月份。默认视图一个字都没变(连查询数都没变)。

    【新能力④后台人工台账】赠券 / 扣券 / 积分调整,理由必填,事后可追;券走写入期 CAS 守上下限,
    积分走核心。后台把「自动发放(进守恒等式)/ 人工调整 / 支出」三列分开显示 —— 这两个情况原来在代码里
    留了口子却没有入口。另加「按用户重算派生状态」与「刷新站点标记」两支运营动作。

    【修的缺陷】

    1. 积分轨关闭时(默认就是关的),任务与里程碑把「配置里的奖励值」当成「实际入账」写进了应发合计,

    而发放那一步一分没发、台账也没记 —— 用户点一次领取,后台对账面板就显示漂移。现在两个字段只记
    实际入账,历史行用升级时间戳按台账口径精确换算。

    1. 券类奖励把「券的数量」写进了积分的字段(一个字段两种单位)→ 券发得越多积分账越不平。现在券不再

    占用积分字段,凭据是台账里的 coupon_in(ref=quest:<day>:<key>)。

    1. 超过 90 天的连续天数被窗口截断:补签一次或后台校准一次,连续从 150 掉到 90(补签行的 streak_after

    还被 makeup_window+1 天的窗口算错)。现在单用户路径按有界全量(10 年)走链,批量校准另加
    「链走到窗口下缘就不许降级」的守卫。

    1. 补签写路径不维护站点标记:站点在「还没有任何签到行」时补签成功,面板却永远停在「还没有人签到过」

    的空视图(1.0.1 给组件修过同类问题,面板路径漏了)。现在补签写路径补上标记,后台也能一键重探。

    1. 补签券上限是在读出来的缓存值上判定的(读-判-写),并发下可以超上限;而且先改内存值再整行写回,

    刚加的券会被覆盖掉。现在加券/减券各是一条写入期 CAS(rowCount 是唯一仲裁者)。

    【跨插件契约口径修正】event_rsvp 已经发到 12.0.0,而它的 manifest 与源码里至今没有
    event_rsvp.after_signup / after_checkin 这两个投递点(新事件是 after_publish / after_review)。
    1.0.1 写的「需要 11.1.0+」是一句做不到的版本承诺(升上去提示也不会消失)。2.0.0 改成如实写
    「至今(核对到 12.0.0)没有投递这个事件」;三态与 data 属性形状不变,对方真的加了投递点后只需改一行。

    #5
  • cxk123

    版本 2.1.0 更新:
    2.1.0:新增签到月报导出;修掉一条真并发下会丢券的缺陷;升级路径实测(老库覆盖文件即自愈)。

    【新能力⑤签到月报导出】?a=daily_quest_export&month=YYYY-MM 下载自己的签到记录 CSV:
    逐日一行(日期 / 类型 / 积分 / 截至该日的连续天数 / 本行消耗补签券 / 记录时间)+ 末行合计
    (签到天数 / 补签次数 / 本月积分 / 本月最长连续)。只导自己的数据(不接受任何 uid 参数),
    一条查询、表头与行同源生成、单元格做公式注入中和;UTF-8 BOM + text/csv + attachment + nosniff,
    Excel 打开中文不乱码;非法月份回落到当月,未登录走登录提示页而不是 500 或空文件。
    入口在签到月历的翻页那一行。

    【修的缺陷·真并发】

    1. 券余额被整行 upsert 覆盖:签到 / 补签路径的整行覆盖写会把并发中刚由 CAS 加上去的券写回旧值,

    于是台账(+1)与派生缓存(0)对不上、券对账漂移。现在整行 upsert 不写 coupons 这一列,
    该列由写入期 CAS 独占(唯一例外是后台人工重算与游标批量校准这两个显式运维动作)。

    1. 「先读余额、再扣分」之间可以透支成负数:核心的 user_points_change() 不做余额保护,

    多 worker 下多个兑券请求能同时读到「余额够」。现在这一段放进「同一用户同一秒」的租约
    (复用里程碑判定那把 _stats.lease_at),抢不到就明确回「上一个操作还在处理中,请稍后再试」。
    副作用写在 README 边界里:同一秒里里程碑判定与兑券会互相让路,徽记只会迟到不会漏发。

    1. 券的两条 CAS 加了有界重试(撞到争用 ≠ 已达上限),并发下不会把「只是撞了争用」误报成「已达上限」。

    【升级路径实测】本插件不加表、不加列:1.0.1 老库直接覆盖 2.1.0 文件即可。
    实测两段:A 只覆盖文件(不重装、不 disable/enable、不同步)→ 第一发请求就 200、跑的是新代码、
    结构标记与升级来源当场写上(后台显示「结构标记 2.1.0(升级自 1.0.1)」)、
    119 天历史日桶 + 台账 + 徽记 + 进度行一行不丢、连续 118 仍是 118;
    B 再走市场在线更新那一步(换文件 + 同步)→ 核心重新登记为 2.1.0、新路由可用。
    1.0.1 时代写下的老口径数据(积分轨关闭时领取积分类任务记下的 reward=7、券类奖励把券数写进积分字段)
    升级后对账漂移 0 人。

    【真并发套件】私有副本用 4 个 worker 起站,套件里同时发 4 个请求:兑券处处不超上限、账实一致、
    余额不为负;断链保护只补出一行、只扣一张券;「补了接不上链」4 个并发请求之后零写入、券一张没花。
    另做预算复核:首页贡献仍是 +1、当天角标路径不变(人数翻倍 1 → 1)、live=0 时首页 0 条。

    #6
  • cxk123

    版本 2.2.0 更新:
    2.2.0 · 任务来源的版块可见性

    • 修复(越权):签到面板的「来源」条与今日达成流此前只做匿名遮蔽、不做版块可见性判定 ⇒ 「仅指定用户组可见」版块里的主题标题会出现在任务页。现在两处按核心同一口径过滤。
    • 注意:被过滤时只丢掉来源条本身、不抹整行 —— 抹掉整行会让今日达成流退回"真名兜底",反而泄露匿名身份(这是一个反向陷阱,已在实现里注明)。
    • 口径:无受限版块时 SQL 文本逐字节不变;页面语句数增量 0。
    #7

发表回复

登录后回复