Skip to content

jeremykit/live-task

Repository files navigation

Live Task - 直播间验证码自动刷新工具

自动刷新直播间验证码并推送到企业微信的 Python 脚本。

功能特性

  • 支持多个服务器同时刷新验证码
  • 每个服务器的刷新结果都会单独推送到企业微信群机器人(成功/失败各一条)
  • 支持通过环境变量配置
  • 可在 GitHub Actions 中手动或自定义触发,定时刷新由 Cloudflare Worker 负责

快速开始

1. 克隆仓库

git clone <your-repo-url>
cd live-task

2. 安装依赖

本项目使用 uv 作为包管理器。

安装 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

3. 配置环境变量

创建 .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"

4. 运行脚本

# 使用 uv 运行
uv run python refresh_code.py

GitHub Actions 配置

配置 Secrets

在 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

创建 Workflow 文件

创建 .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.py

在 Cloudflare Workers 上运行

worker/cf_worker.js 提供了与 refresh_code.py 相同的逻辑,既可以作为 Worker 部署,也可以在本地或 GitHub Actions 中直接运行,方便对比两种运行环境的效果。该目录同时包含 wrangler.toml,可直接用于发布。

1) 部署到 Cloudflare Workers

  1. 使用仓库自带的 worker/wrangler.toml,默认的 Worker 项目名为 live-task-refresh,可按需修改 namecronscompatibility_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__"
  1. 部署:
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
  1. 手动触发或接入路由:部署后访问 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_LISTWECHAT_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 配置。

2) 在 GitHub Actions / 本地运行同一份 Worker 代码

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 运行时不会触发,不影响线上逻辑。

3) 通过 GitHub Actions 手动部署 Cloudflare Worker

仓库已提供 .github/workflows/deploy-worker.yml,支持手动触发发布至 Cloudflare Workers。

  1. 在仓库 Secrets 中新增以下凭据(Settings → Secrets and variables → Actions):
    • CLOUDFLARE_API_TOKEN:具备 Workers ScriptsWorkers KV Storage(如需)等权限
    • CLOUDFLARE_ACCOUNT_ID:Cloudflare 账户 ID
    • SERVER_ALIAS_LISTSERVER_URL_LISTSERVER_TOKENLIVE_NAME_LISTWECHAT_WEBHOOK_KEY
  2. 进入 GitHub Actions → Deploy Cloudflare WorkerRun workflow 手动触发。
  3. 工作流会先将 worker/wrangler.toml 中的占位符替换为 Secrets,再执行部署,避免 key=value 被误识别为变量名。

企业微信机器人配置

  1. 在企业微信群中添加机器人
  2. 获取 Webhook 地址:https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY
  3. 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.py

许可证

MIT

About

a simple task ,after finish have an notice to wx

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •