群员签到积分系统 (group-checkin-points)
用途
为群聊/会话提供成员签到与积分管理:每日签到得分、连续签到 streak 奖励、积分查询、排行榜、管理员加减分、规则配置与重置。所有数据持久化在本地 JSON 文件,跨会话保留。
何时使用
- 用户说「签到」「我签到了」「帮忙打卡」等
- 查询「我的积分」「XX 多少分」
- 「排行榜」「积分排名」
- 管理员「给 XX 加 10 分」「扣 5 分」
- 「重置签到」「改一下签到规则」
使用方法
脚本位置:scripts/checkin.py。用 Bash 调用 Python 执行,输出为中文文本,直接转述给用户即可。
数据文件:默认 ~/.workbuddy/checkin-data/group.json。多群可用 --data <路径> 区分。成员以 --id 唯一标识:配合 QQ 机器人时,--id 固定用成员 QQ 号(如 10001),--name 可附带群昵称用于显示。
子命令
- 签到:
python3 scripts/checkin.py checkin --id <ID> [--name <昵称>] [--date YYYY-MM-DD] - 查分:
python3 scripts/checkin.py points --id <ID> - 排行:
python3 scripts/checkin.py rank [--top 10] - 成员列表:
python3 scripts/checkin.py members - 加减分:
python3 scripts/checkin.py adjust --id <ID> --delta <整数,可负> [--by <操作人QQ号>] [--reason <原因>] - 重置:
python3 scripts/checkin.py reset --confirm - 改规则:
python3 scripts/checkin.py setrule [--base 10] [--per_day 2] [--cap 20] [--first 5] [--admin id1,id2]
默认积分规则
- 每日基础分:10
- 连续签到奖励:每天 +2,封顶 +20(即连续 10 天及以上拿满)
- 新人首次签到:额外 +5
- 同日重复签到:拒绝并提示
群成员 ID 约定(配合 QQ 机器人)
- 每个群成员的
--id统一用其 QQ 号,保证跨会话、跨消息稳定对应同一人。 - 群昵称用
--name携带,仅用于展示;成员改昵称不影响积分归属。 - 管理操作
--by填操作人的 QQ 号;只有admin_ids中列出的 QQ 号才被允许加减分。
处理流程
- 识别用户意图与涉及成员(从消息中提取 ID/昵称;若用户未给 ID,向用户确认是谁在签到)。
- 选定
--data:单群默认即可;多群时按群区分路径。 - 调用对应子命令,拿到脚本输出的中文结果。
- 将结果自然转述给用户;排行榜等可原样发出。
权限说明
adjust 与 reset 为管理操作。若数据 config 中 admin_ids 非空,则 adjust 要求传入的 --by 在操作人列表中;为空时(默认)不限制,由上层会话自行把关。
示例
用户:「小明签到」
→ python3 scripts/checkin.py checkin --id 10001 --name 小明
→ 输出:✅ 签到成功!小明 今日 +12 分(基础10、连续3天+2)。当前积分 135,连续签到 3 天。