[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81015":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":12,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":15,"stars7d":15,"stars30d":15,"stars90d":14,"forks30d":14,"starsTrendScore":16,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":18,"hasPages":18,"topics":20,"createdAt":10,"pushedAt":10,"updatedAt":21,"readmeContent":22,"aiSummary":23,"trendingCount":14,"starSnapshotCount":14,"syncStatus":24,"lastSyncTime":25,"discoverSource":26},81015,"FreezeHost","oyz8\u002FFreezeHost","oyz8","FreezeHost 自动续期 & 重启","",null,"Python",29,51,0,1,3,5.15,false,"main",[],"2026-06-12 02:04:09","# FreezeHost 自动续期 & 重启\n\n> ⭐ 觉得有用？给个 Star 支持一下！\n>\n> 注册地址：[https:\u002F\u002Ffree.freezehost.pro](https:\u002F\u002Ffree.freezehost.pro)\n\n用于 [FreezeHost](https:\u002F\u002Ffree.freezehost.pro) 免费服务器的自动续期与重启管理，基于 GitHub Actions，使用 Playwright 模拟浏览器操作，最多支持 5 个 Discord 账号。\n\n## 包含的 Workflow\n\n| Workflow 名称 | 功能 | 触发方式 |\n|---|---|---|\n| `FreezeHost 续期多账号版` | 自动续期服务器，到期前 2 天运行，自动更新 Cron | 定时 + 手动 |\n| `FreezeHost 自动重启` | 重启\u002F开机服务器，支持指定 Discord 账号 | 手动 + API |\n\n## 功能\n\n### 续期\n- 自动 Discord OAuth 登录并续期名下所有服务器\n- 最多支持 5 个 Discord Token，各自拥有独立 Cron 计划\n- 站点宕机自动重试（最多 3 次）\n- 续期后计算下次运行时间（到期前 2 天），自动更新 Workflow 中的 Cron 表达式\n- WARP 代理保障网络连通\n- Telegram 通知推送续期结果（含合并截图）\n\n### 重启\n- 自动检测服务器电源状态（运行\u002F关机\u002F过渡状态）\n- 运行中 → 执行重启；关机 → 执行开机；过渡 → 等待稳定后操作\n- 重启\u002F开机结果 Telegram 通知（含截图）\n\n## 配置 Secrets\n\n在仓库 `Settings → Secrets and variables → Actions` 中添加：\n\n| Secret 名称 | 必填 | 说明 |\n|---|---|---|\n| `FREEZEHOST_DISCORD_TOKEN_1` | ✅ | 第 1 个 Discord 账号 Token |\n| `FREEZEHOST_DISCORD_TOKEN_2` | ❌ | 第 2 个 Discord 账号 Token（可选） |\n| `FREEZEHOST_DISCORD_TOKEN_3` | ❌ | 第 3 个 Discord 账号 Token（可选） |\n| `FREEZEHOST_DISCORD_TOKEN_4` | ❌ | 第 4 个 Discord 账号 Token（可选） |\n| `FREEZEHOST_DISCORD_TOKEN_5` | ❌ | 第 5 个 Discord 账号 Token（可选） |\n| `REPO_TOKEN` | ✅ （仅续期） | 具有 `repo` 和 `workflow` 权限的 PAT，用于自动更新 Cron |\n| `TG_BOT_TOKEN` | ❌ | Telegram Bot Token，用于推送通知 |\n| `TG_CHAT_ID` | ❌ | Telegram 接收消息的 Chat ID |\n\n### 获取 Discord Token\n\n1. 在浏览器中登录 [Discord](https:\u002F\u002Fdiscord.com)\n2. 按 `F12` 打开开发者工具 → `Network`（网络）\n3. 筛选 `Fetch\u002FXHR`，刷新页面\n4. 点击任意 `discord.com\u002Fapi` 请求\n5. 在 `Headers`（请求头）中找到 `Authorization` 并复制完整值\n6. 填入对应 `FREEZEHOST_DISCORD_TOKEN_*`\n> 📌 图片参考：![Cookie格式](img\u002FCookie.png)\n\n⚠️ 注意：该值相当于账号凭证，请勿泄露\n\n### 获取 REPO_TOKEN（仅续期需要）\n\n1. 打开 [GitHub Tokens](https:\u002F\u002Fgithub.com\u002Fsettings\u002Ftokens) → Generate new token (classic)\n2. 勾选 `repo`（全部）与 `workflow`\n3. 生成后复制并填入 Secret\n\n### Telegram 通知（可选）\n\n1. [@BotFather](https:\u002F\u002Ft.me\u002FBotFather) 创建 Bot 获得 `TG_BOT_TOKEN`\n2. 向 Bot 发送任意消息，访问 `https:\u002F\u002Fapi.telegram.org\u002Fbot\u003CTOKEN>\u002FgetUpdates` 获取 `chat.id` 作为 `TG_CHAT_ID`\n\n## 使用方法\n\n### 1. Fork 并启用 Actions\n- Fork 本仓库\n- 在仓库 Actions 页面启用 workflows（若未自动启用）\n\n### 2. 配置 Secrets\n- 按上方表格添加 Secrets，至少配置 `FREEZEHOST_DISCORD_TOKEN_1`\n\n### 3. 选择触发方式\n\n#### 自动续期（定时）\n- 默认已配置 5 条独立 Cron 规则，分别对应 5 个 Token（UTC 01~05 每个整点错开）\n- 首次运行后，Workflow 会根据剩余天数自动更新对应 Cron，之后将在到期前 2 天准时运行\n\n#### 手动触发\n- **续期**：Actions → `FreezeHost 续期多账号版` → `Run workflow`，选择 Token 编号\n- **重启**：Actions → `FreezeHost 自动重启` → `Run workflow`，选择 Token 编号\n\n#### API 触发（仅重启）\n可通过 `curl` 或任何 HTTP 客户端调用 GitHub REST API 手动触发重启 Workflow。\n\n```bash\ncurl -X POST \"https:\u002F\u002Fapi.github.com\u002Frepos\u002F\u003C用户名>\u002F\u003C仓库名>\u002Factions\u002Fworkflows\u002FFreezeHost_Restart.yml\u002Fdispatches\" \\\n  -H \"Accept: application\u002Fvnd.github+json\" \\\n  -H \"Authorization: Bearer \u003C你的 PAT 或 GITHUB_TOKEN>\" \\\n  -d '{\"ref\":\"main\",\"inputs\":{\"token_number\":\"2\"}}'\n```\n\n> 注意：\n> - 替换 `\u003C用户名>`、`\u003C仓库名>` 以及 Token\n> - `token_number` 可选 `1`~`5`，对应已配置的 Secret\n> - 使用具有 `workflow` 权限的 Token（如 `REPO_TOKEN` 或 Fine-grained PAT）\n> - 文件名请与 `.github\u002Fworkflows\u002F` 下实际文件名一致\n\n## 工作原理（续期）\n\n1. 根据 Cron 或手动选择确定要使用的 Token 编号\n2. 拉取仓库、安装 Playwright，启动 WARP 代理\n3. Python 脚本模拟浏览器登录 FreezeHost（Discord OAuth）\n4. 扫描 Dashboard 下所有服务器，逐一检查剩余时间并执行续期\n5. 提取最小剩余天数，计算下次运行时间（到期前 2 天）\n6. 使用 `REPO_TOKEN` 自动更新对应 Cron 行并提交\n7. 通过 Telegram 发送结果截图\n\n## 工作原理（重启）\n\n1. 手动或 API 触发时指定 Token 编号\n2. 拉取仓库、安装 Playwright，启动 WARP 代理\n3. 脚本登录 FreezeHost，发现所有服务器\n4. 检测每台服务器电源状态：\n   - 运行中 → 执行重启\n   - 关机 → 执行开机\n   - 过渡中 → 等待稳定后按上述规则处理\n5. 将操作结果通过 Telegram 推送（含截图）\n\n## 注意事项\n\n- 至少配置 `FREEZEHOST_DISCORD_TOKEN_1` 才能使用\n- 续期需要 `REPO_TOKEN` 拥有 `workflow` 权限，否则无法自动调整 Cron\n- 重启 Workflow 没有定时计划，仅限手动或 API 触发\n- 某 Token 下若无服务器，会收到“无服务器”通知并跳过\n- 站点宕机时续期脚本会自动重试 3 次，若持续失败将推送通知\n- 敏感信息（Token、邮箱、服务器 ID）在日志与截图中已脱敏\n\n---\n\n**⚠️ 免责声明**：本脚本仅供学习交流使用，使用者需遵守 [FreezeHost](https:\u002F\u002Ffree.freezehost.pro) 的服务条款。因使用本脚本造成的任何问题，作者不承担任何责任。\n","FreezeHost 是一个用于 FreezeHost 免费服务器的自动续期与重启管理工具。它基于 GitHub Actions 和 Playwright 技术，能够模拟浏览器操作以实现自动续期和重启功能，最多支持 5 个 Discord 账号。项目的核心功能包括自动续期服务器（到期前 2 天运行）、自动更新 Cron 表达式、站点宕机自动重试、WARP 代理保障网络连通以及 Telegram 通知推送续期结果等。此外，还提供了手动或通过 API 触发的服务器重启功能，并能根据服务器状态执行相应操作。此工具适用于需要定期维护和确保高可用性的 FreezeHost 服务器场景。",2,"2026-06-11 04:03:13","CREATED_QUERY"]