自动刷新直播间验证码并推送到企业微信的 Python 脚本。
- 支持多个服务器同时刷新验证码
- 每个服务器的刷新结果都会单独推送到企业微信群机器人(成功/失败各一条)
- 支持通过环境变量配置
- 可在 GitHub Actions 中手动或自定义触发,定时刷新由 Cloudflare Worker 负责
git clone <your-repo-url>
cd live-task本项目使用 uv 作为包管理器。
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"uv sync创建 .env 文件或设置以下环境变量:
# 服务器配置
export SERVER_ALIAS_LIST="east,west,hebei"
export SERVER_URL_LIST="your-east-server.com,your-west-server.com,your-hebei-server.com"
export LIVE_NAME_LIST="五会,6约1|6约2,6约,7日"
export SERVER_TOKEN="your-east-token"
# 企业微信 Webhook Key
export WECHAT_WEBHOOK_KEY="your-wechat-webhook-key"# 使用 uv 运行
uv run python refresh_code.py在 GitHub 仓库中配置以下 Secrets(Settings → Secrets and variables → Actions → New repository secret):
| Secret 名称 | 说明 | 示例 |
|---|---|---|
SERVER_ALIAS_LIST |
服务器别名列表 | east,west,hebei |
SERVER_URL_LIST |
服务器地址列表 | your-east-server.com,your-west-server.com,your-hebei-server.com |
SERVER_TOKEN |
服务器 Token | eyJhbGciOiJIUzI1NiIsInR5cCI6... |
LIVE_NAME_LIST |
直播房间名称列表 | 五会,6约,7日 |
WECHAT_WEBHOOK_KEY |
企业微信机器人 Key | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx |
创建 .github/workflows/refresh-code.yml:
name: Refresh Live Room Code
on:
workflow_dispatch: # 仅手动触发,定时刷新交给 Cloudflare Worker
jobs:
refresh:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v2
with:
version: "latest"
- name: Set up Python
run: uv python install 3.12
- name: Install dependencies
run: uv sync
- name: Run refresh script
env:
SERVER_ALIAS_LIST: ${{ secrets.SERVER_ALIAS_LIST }}
SERVER_URL_LIST: ${{ secrets.SERVER_URL_LIST }}
SERVER_TOKEN: ${{ secrets.SERVER_TOKEN }}
LIVE_NAME_LIST: ${{ secrets.LIVE_NAME_LIST }}
WECHAT_WEBHOOK_KEY: ${{ secrets.WECHAT_WEBHOOK_KEY }}
run: uv run python refresh_code.pyworker/cf_worker.js 提供了与 refresh_code.py 相同的逻辑,既可以作为 Worker 部署,也可以在本地或 GitHub Actions 中直接运行,方便对比两种运行环境的效果。该目录同时包含 wrangler.toml,可直接用于发布。
- 使用仓库自带的
worker/wrangler.toml,默认的 Worker 项目名为live-task-refresh,可按需修改name、crons、compatibility_date等配置:
name = "live-task-refresh"
main = "cf_worker.js"
compatibility_date = "2024-01-01"
# 默认开启每周五中午 12:00(UTC+8,对应 UTC 04:00)定时任务;如需调整请修改 crons。
[triggers]
crons = ["0 4 * * 6"]
[vars]
# 通过部署流程把占位符替换为真实值
SERVER_ALIAS_LIST = "__SERVER_ALIAS_LIST__"
SERVER_URL_LIST = "__SERVER_URL_LIST__"
SERVER_TOKEN = "__SERVER_TOKEN__"
LIVE_NAME_LIST = "__LIVE_NAME_LIST__"
WECHAT_WEBHOOK_KEY = "__WECHAT_WEBHOOK_KEY__"- 部署:
cd worker
# 将占位符替换为实际值(与 GitHub Actions 同步的写法,避免 key=value 被当作变量名)
python - <<'PY'
import os
from pathlib import Path
path = Path("wrangler.toml")
data = path.read_text()
replacements = {
"__SERVER_ALIAS_LIST__": os.environ.get("SERVER_ALIAS_LIST", ""),
"__SERVER_URL_LIST__": os.environ.get("SERVER_URL_LIST", ""),
"__SERVER_TOKEN__": os.environ.get("SERVER_TOKEN", ""),
"__LIVE_NAME_LIST__": os.environ.get("LIVE_NAME_LIST", ""),
"__WECHAT_WEBHOOK_KEY__": os.environ.get("WECHAT_WEBHOOK_KEY", ""),
}
for placeholder, value in replacements.items():
data = data.replace(placeholder, value)
path.write_text(data)
PY
wrangler deploy- 手动触发或接入路由:部署后访问
https://<worker>.<your-subdomain>.workers.dev/refresh即可手动执行。若配置了crons,Worker 会按计划自动执行。- 必须先配置变量:部署前先用上面的占位符替换脚本(或改用
wrangler deploy --var ...、Cloudflare Dashboard「Settings → Variables」或 GitHub Actions Secrets)把SERVER_ALIAS_LIST/SERVER_URL_LIST/SERVER_TOKEN/LIVE_NAME_LIST与WECHAT_WEBHOOK_KEY注入,否则 Worker 会提示「未配置服务端」。 - 快速联调(无需等待正式变量):访问
.../refresh?east_url=...&east_token=...&east_room_id=...&wechat_webhook_key=...可临时传入测试值。仅用于验证逻辑,正式部署仍建议通过变量注入。
- 必须先配置变量:部署前先用上面的占位符替换脚本(或改用
- 本地/远程模拟定时触发:在
worker目录下运行wrangler dev --remote --test-scheduled,Wrangler 会模拟一次scheduled事件执行,无需等待实际 Cron 时间。 - 临时修改 Cron:将
wrangler.toml中的crons调整为几分钟后的时间部署一次,用wrangler tail观察日志;验证后再改回正式的周五 12:00 配置。
worker/cf_worker.js 也支持 Node.js 执行,便于在 GitHub Actions 中与 Python 版本对比:
name: Run CF Worker Script
on:
workflow_dispatch:
jobs:
run-worker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run worker logic
env:
SERVER_ALIAS_LIST: ${{ secrets.SERVER_ALIAS_LIST }}
SERVER_URL_LIST: ${{ secrets.SERVER_URL_LIST }}
SERVER_TOKEN: ${{ secrets.SERVER_TOKEN }}
LIVE_NAME_LIST: ${{ secrets.LIVE_NAME_LIST }}
WECHAT_WEBHOOK_KEY: ${{ secrets.WECHAT_WEBHOOK_KEY }}
run: |
node worker/cf_worker.js说明:
cf_worker.js使用fetch,可在 Cloudflare Workers、Node.js 18+(GitHub Actions 默认环境)以及本地带有全局 fetch 的环境下运行。 Cloudflare 编辑器会对process等 Node 变量标红,它们仅在本地/Node 执行时启用,在 Worker 运行时不会触发,不影响线上逻辑。
仓库已提供 .github/workflows/deploy-worker.yml,支持手动触发发布至 Cloudflare Workers。
- 在仓库 Secrets 中新增以下凭据(Settings → Secrets and variables → Actions):
CLOUDFLARE_API_TOKEN:具备Workers Scripts、Workers KV Storage(如需)等权限CLOUDFLARE_ACCOUNT_ID:Cloudflare 账户 IDSERVER_ALIAS_LIST、SERVER_URL_LIST、SERVER_TOKEN、LIVE_NAME_LIST、WECHAT_WEBHOOK_KEY
- 进入 GitHub Actions →
Deploy Cloudflare Worker→Run workflow手动触发。 - 工作流会先将
worker/wrangler.toml中的占位符替换为 Secrets,再执行部署,避免key=value被误识别为变量名。
- 在企业微信群中添加机器人
- 获取 Webhook 地址:
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY - 将
YOUR_KEY部分配置到WECHAT_WEBHOOK_KEY环境变量
live-task/
├── refresh_code.py # 主程序脚本
├── pyproject.toml # 项目配置和依赖管理
├── README.md # 项目说明文档
├── worker/ # Cloudflare Worker 版本代码与 wrangler 配置
└── .github/
└── workflows/
├── deploy-worker.yml # 手动部署 Cloudflare Worker 的工作流
└── refresh-code.yml # 刷新验证码工作流
- Python >= 3.10
- requests >= 2.31.0
# 安装依赖
uv sync
# 添加新依赖
uv add <package-name>
# 运行脚本
uv run python refresh_code.pyMIT