一个基于 GitHub Actions 的 GLaDOS 自动签到脚本。
无需服务器、无需编程基础,每天自动帮你签到。
- ✅ 每天自动签到,已签到自动识别
- 👥 支持多账号(
|||、&或换行连接) - 📊 查询总积分和剩余天数
- 📬 8 种推送渠道:PushDeer / Server酱 / Telegram / PushPlus / 钉钉 / 飞书 / 企业微信 / 云湖
- 🔄 网络请求自动重试(指数退避)
- 🔒 日志脱敏(邮箱/Cookie 自动隐藏)
- ✅ Cookie 结构预验证(前缀无关,自动兼容
koa:/gld:等任意前缀) - 🔧 每月自动空提交保活
- 💎 积分自动兑换(可选,消耗积分兑换会员天数)
- 🆓 完全免费
.
├── checkin.py # 签到脚本
└── .github/workflows/
└── glados.yml # GitHub Actions 配置
点击右上角 Fork,Fork 到你自己的 GitHub 账号下。
- 打开浏览器,登录 https://glados.cloud
- 按 F12 打开开发者工具
- 找到
Application→Cookies→glados.cloud - 复制完整 Cookie 内容
示例(官网当前签发的是 gld: 前缀):
gld:sess=xxxxxx; gld:sess.sig=yyyyyy
旧版签发的 koa:sess=xxxxxx; koa:sess.sig=yyyyyy 同样支持,两种前缀任选其一,无需手动转换。
sess 与 sess.sig 两个字段必须同时存在、前缀一致。
只复制其中一个会导致签到失败(脚本会明确指出缺少哪个字段)。
💡 脚本采用结构校验:只校验「
<前缀>:sess与同前缀:sess.sig成对」, 不写死具体前缀。因此 GLaDOS 即便再次变更前缀名,脚本也能自动识别,无需修改代码。 不要把gld:改成koa:—— 改前缀会让服务端无法识别 session,导致「没有权限」。
进入你 Fork 后的仓库:
- Settings → Secrets and variables → Actions → Secrets 标签页
- 点击 New repository secret
- 添加:
- Name:
COOKIES - Value:粘贴刚才复制的 Cookie
- Name:
- 点击 Save
未检测到 COOKIES。变量名必须是 COOKIES,不能有多余空格。
在 GitHub Secrets 中添加对应的环境变量:
| 渠道 | 必填环境变量 | 可选 |
|---|---|---|
| PushDeer | SENDKEY |
- |
| Server酱 | SERVERCHAN_KEY |
- |
| Telegram | TG_BOT_TOKEN + TG_CHAT_ID |
- |
| PushPlus | PUSHPLUS_TOKEN |
- |
| 钉钉机器人 | DINGTALK_WEBHOOK |
DINGTALK_SECRET |
| 飞书机器人 | FEISHU_WEBHOOK |
FEISHU_SECRET |
| 企业微信机器人 | WECOM_BOT_WEBHOOK |
- |
| 云湖机器人 | YUNHU_TOKEN + YUNHU_RECV_ID |
YUNHU_RECV_TYPE |
🔑 钉钉 / 飞书加签说明:若机器人启用了「加签」校验,则
DINGTALK_WEBHOOK+DINGTALK_SECRET(或FEISHU_WEBHOOK+FEISHU_SECRET)必须同时配置。只配 webhook 不配 secret 时,脚本会发送无签名请求并给出告警,加签机器人将鉴权失败。
在 GitHub Secrets 中添加 EXCHANGE_PLAN(或 GLADOS_EXCHANGE_PLAN,二选一)即可启用自动兑换积分功能。不配置则默认不兑换,不影响任何现有签到逻辑。
| 配置值 | 消耗积分 | 兑换天数 |
|---|---|---|
plan100 |
100 积分 | 10 天 |
plan200 |
200 积分 | 30 天 |
plan500 |
500 积分 | 100 天 |
机制说明:
- 每次签到后,仅在总积分 ≥ 计划所需积分时才调用兑换接口,否则自动跳过(不会浪费积分)。
- 兑换结果会附加到签到日志行末尾,例如:
| 兑换:🎁 兑换成功(+30天)。 - 兑换失败 / 异常不影响签到结果与运行退出码。
多个账号的 Cookie 用 |||、& 或换行连接(三种分隔符均可混用,推荐使用 ||| 以避免与 Cookie 值冲突):
cookie_账号1 ||| cookie_账号2 ||| cookie_账号3
或
cookie_账号1
cookie_账号2
cookie_账号3
|||、& 或换行符,否则会被错误拆分。推荐使用 ||| 作为分隔符,因为 Cookie 值中几乎不可能出现该字符串。
每天 UTC 04:00(北京时间 中午 12 点)自动运行。
| 状态 | 说明 |
|---|---|
| ✅ 成功 | 签到成功,显示获得积分 |
| 🔄 已签到 | 今日已签到过 |
| ❌ 失败 | 签到失败,显示原因 |
Q: 签到提示「没有权限」/ 鉴权失败?
A: 说明 Cookie 已失效或复制不完整,请重新登录 GLaDOS 获取最新 Cookie 并更新 Secrets 中的 COOKIES。
若日志提示「会话字段不成对」或输出了「实际键名」,则多为复制遗漏了 sess / sess.sig 其中之一,重新完整复制即可。
💡 脚本会自动识别
koa:/gld:等任意前缀,无需手动修改前缀;反之,手动把前缀改错(如把gld:改成koa:)会让服务端无法识别 session。
Q: Cookie 有有效期吗?
A: 有。Cookie 会随会话过期,需重新登录获取最新 Cookie 并更新 Secrets。
Q: Actions 被暂停了?
A: 项目内置每月空提交保活。如仍被暂停,手动触发一次 workflow_dispatch。
Q: 日志中的邮箱为什么显示不完整?
A: 出于隐私保护,邮箱会自动脱敏(如 te***t@example.com)。
Q: 可以同时配置多个推送渠道吗?
A: 可以,配置多个 Secrets 即可同时推送。
问题修复
- 修复 GLaDOS 变更 Cookie 前缀(
koa:sess→gld:sess)导致的签到失败:validate_cookie原先把koa:sess写死校验,新版 Cookie 被误判为「缺少必要字段」,签到请求根本未发出,表现为「❌ 失败(没有权限)」
优化改进
- Cookie 校验改为前缀无关的结构校验:只校验「
<任意前缀>:sess与同前缀:sess.sig成对」,不再枚举任何前缀名——GLaDOS 未来再次变更前缀通常无需改代码即可自动适配 - 新增
normalize_cookie:自动剥离粘贴时混入的首尾引号、空白与Cookie:头名 - 新增自诊断日志:校验成功时打印识别到的会话前缀;失败时输出实际解析到的键名,前缀变化可一眼定位
- 服务端鉴权失败(没有权限 / 未登录等)与格式错误分开提示,明确引导「重新获取 Cookie」
glados.yml:COOKIES支持secrets与vars双路读取
功能新增
- 新增积分自动兑换功能(#9,可选配置
EXCHANGE_PLAN/GLADOS_EXCHANGE_PLAN,支持 plan100/plan200/plan500 三档策略;默认关闭,不影响现有签到) - 兑换请求单次尝试不重试(非幂等操作,避免响应丢失后重复扣积分)
功能新增
- 新增 Telegram Bot 推送
- 新增 PushPlus(推送加)推送
- 新增钉钉机器人推送(支持加签验证)
- 新增飞书机器人推送(支持加签验证)
- 新增企业微信机器人推送
- 新增云湖机器人推送
- 新增总积分查询功能
- 新增网络请求自动重试机制(指数退避)
- 新增 Cookie 格式预验证
- 新增日志脱敏处理(邮箱/Cookie 自动隐藏)
- 新增每月自动空提交保活机制
问题修复
- 修复 PushPlus 推送域名问题
- 修复飞书机器人加签算法
优化改进
- Python 版本升级至 3.11
- 多账号间请求增加随机延迟
- GitHub Actions 添加超时和并发控制
- 代码整合为单文件,简化部署
MIT License