Files
grok-keygen/start.sh
T
chaos c56d0d240a Add one-click start scripts for Linux and Windows
- start.sh: Linux/Mac one-click launcher
- start.bat: Windows one-click launcher
- Both scripts auto-detect/install:
  - Python 3.13+
  - uv package manager
  - Chrome/Chromium browser
  - Sync Python dependencies
  - Create .env/config.json from templates if missing
- Default to unlimited accounts (--count 0)
- Pass through CLI args for custom runs
2026-07-12 00:04:36 +08:00

243 lines
8.3 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# ============================================================================
# Grok 注册机 - 一键启动脚本 (Linux)
# 自动检测/安装环境依赖,然后启动 register_cli.py
#
# 用法:
# ./start.sh # 默认不限数量(持续注册)
# ./start.sh --count 10 # 跑 10 个
# ./start.sh --count 10 --threads 3 # 3 线程跑 10 个
# ./start.sh --extra 5 # 在已有基础上再注册 5 个
#
# 首次运行会自动:
# 1. 检测 Python 3.13+
# 2. 安装 uv 包管理器
# 3. 同步 Python 依赖
# 4. 检测 Chrome/Chromium 浏览器
# 5. 从模板复制 .env / config.json(如缺失)
# ============================================================================
set -euo pipefail
# ── 颜色 ──
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
BOLD='\033[1m'
NC='\033[0m'
PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$PROJECT_DIR"
echo -e "${CYAN}${BOLD}============================================${NC}"
echo -e "${CYAN}${BOLD} Grok 注册机 - 一键启动 (Linux)${NC}"
echo -e "${CYAN}${BOLD}============================================${NC}"
echo ""
# ── 1. 检测 Python 3.13+ ──
step1_check_python() {
echo -e "${CYAN}[1/5] 检测 Python 环境...${NC}"
# 优先使用 mise(如果已安装)
if command -v mise &>/dev/null && mise which python &>/dev/null 2>&1; then
local py
py=$(mise which python 2>/dev/null || true)
if [ -n "$py" ] && "$py" -c "import sys; sys.exit(0 if sys.version_info >= (3,13) else 1)" 2>/dev/null; then
echo -e " ${GREEN}✓${NC} Python (mise): $($py --version 2>&1) at $py"
PYTHON_BIN="$py"
return 0
fi
fi
# 检查系统 Python
for candidate in python3.13 python3.14 python3 python; do
if command -v "$candidate" &>/dev/null; then
local ver
ver=$("$candidate" -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')" 2>/dev/null || echo "0")
local major
major=$(echo "$ver" | cut -d. -f1)
if [ "$major" -ge 3 ]; then
local minor
minor=$(echo "$ver" | cut -d. -f2)
if [ "$minor" -ge 13 ]; then
echo -e " ${GREEN}✓${NC} Python $ver: $("$candidate" --version 2>&1)"
PYTHON_BIN="$candidate"
return 0
fi
fi
fi
done
# 检查 .venv
if [ -f "$PROJECT_DIR/.venv/bin/python3" ]; then
local py="$PROJECT_DIR/.venv/bin/python3"
if "$py" -c "import sys; sys.exit(0 if sys.version_info >= (3,13) else 1)" 2>/dev/null; then
echo -e " ${GREEN}✓${NC} Python (.venv): $("$py" --version 2>&1)"
PYTHON_BIN="$py"
return 0
fi
fi
echo -e " ${RED}✗${NC} 未找到 Python 3.13+"
echo ""
echo -e " ${YELLOW}请通过以下任一方式安装 Python 3.13:${NC}"
echo ""
echo " # 方式 1: 使用 mise(推荐,自动管理版本+venv)"
echo " curl https://mise.run | sh"
echo " mise install python@3.13"
echo " mise trust"
echo ""
echo " # 方式 2: Ubuntu/Debian deadsnakes PPA"
echo " sudo add-apt-repository -y ppa:deadsnakes/ppa"
echo " sudo apt update && sudo apt install -y python3.13 python3.13-venv"
echo ""
echo " # 方式 3: 使用 uv 自动获取 Python"
echo " curl -LsSf https://astral.sh/uv/install.sh | sh"
echo " uv python install 3.13"
echo ""
echo " # 方式 4: Arch Linux"
echo " sudo pacman -S python"
echo ""
return 1
}
# ── 2. 检测/安装 uv ──
step2_check_uv() {
echo -e "${CYAN}[2/5] 检测 uv 包管理器...${NC}"
if command -v uv &>/dev/null; then
echo -e " ${GREEN}✓${NC} uv: $(uv --version 2>&1)"
return 0
fi
echo -e " ${YELLOW}⚠${NC} 未检测到 uv,正在自动安装..."
if command -v curl &>/dev/null; then
curl -LsSf https://astral.sh/uv/install.sh | sh
elif command -v wget &>/dev/null; then
wget -qO- https://astral.sh/uv/install.sh | sh
else
echo -e " ${RED}✗${NC} 需要 curl 或 wget 来安装 uv"
echo " 请手动安装: curl -LsSf https://astral.sh/uv/install.sh | sh"
return 1
fi
# 重新加载 PATH(uv 安装到 ~/.local/bin 或 ~/.cargo/bin)
export PATH="$HOME/.local/bin:$HOME/.cargo/bin:$PATH"
if command -v uv &>/dev/null; then
echo -e " ${GREEN}✓${NC} uv 安装成功: $(uv --version 2>&1)"
return 0
fi
echo -e " ${RED}✗${NC} uv 安装失败,请手动安装: https://docs.astral.sh/uv/"
return 1
}
# ── 3. 同步依赖 ──
step3_sync_deps() {
echo -e "${CYAN}[3/5] 同步 Python 依赖...${NC}"
if command -v mise &>/dev/null && [ -f "$PROJECT_DIR/mise.toml" ]; then
# mise 管理 venv,直接用 uv sync
if [ -n "${PYTHON_BIN:-}" ]; then
"$PYTHON_BIN" -m uv sync 2>/dev/null || uv sync
else
uv sync
fi
else
# 纯 uv 模式
uv sync
fi
echo -e " ${GREEN}✓${NC} 依赖同步完成"
}
# ── 4. 检测浏览器 ──
step4_check_browser() {
echo -e "${CYAN}[4/5] 检测浏览器...${NC}"
local found=false
for candidate in \
google-chrome-stable google-chrome chromium chromium-browser \
/usr/bin/google-chrome-stable /usr/bin/google-chrome \
/snap/bin/chromium /usr/bin/chromium /usr/bin/chromium-browser; do
if command -v "$candidate" &>/dev/null || [ -x "$candidate" ] 2>/dev/null; then
echo -e " ${GREEN}✓${NC} 浏览器: $(command -v "$candidate" 2>/dev/null || echo "$candidate")"
found=true
break
fi
done
if ! $found; then
echo -e " ${YELLOW}⚠${NC} 未检测到 Chrome/Chromium 浏览器"
echo ""
echo " DrissionPage 需要 Chrome 或 Chromium 才能运行。"
echo ""
echo " 安装方式:"
echo " # Ubuntu/Debian"
echo " sudo apt install -y chromium-browser"
echo " # 或安装 Google Chrome:"
echo " wget -q -O /tmp/chrome.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb"
echo " sudo dpkg -i /tmp/chrome.deb"
echo ""
echo " # Arch Linux"
echo " sudo pacman -S chromium"
echo ""
echo " ${YELLOW}脚本将继续,但注册可能因缺少浏览器而失败。${NC}"
fi
}
# ── 5. 配置文件模板 ──
step5_config_templates() {
echo -e "${CYAN}[5/5] 检查配置文件...${NC}"
if [ ! -f "$PROJECT_DIR/.env" ] && [ -f "$PROJECT_DIR/.env.example" ]; then
cp "$PROJECT_DIR/.env.example" "$PROJECT_DIR/.env"
echo -e " ${YELLOW}⚠${NC} 已从 .env.example 创建 .env,请编辑填入真实配置"
elif [ -f "$PROJECT_DIR/.env" ]; then
echo -e " ${GREEN}✓${NC} .env 已存在"
fi
if [ ! -f "$PROJECT_DIR/config.json" ] && [ -f "$PROJECT_DIR/config.example.json" ]; then
cp "$PROJECT_DIR/config.example.json" "$PROJECT_DIR/config.json"
echo -e " ${YELLOW}⚠${NC} 已从 config.example.json 创建 config.json,请编辑填入真实配置"
elif [ -f "$PROJECT_DIR/config.json" ]; then
echo -e " ${GREEN}✓${NC} config.json 已存在"
fi
}
# ── 主流程 ──
main() {
step1_check_python || exit 1
echo ""
step2_check_uv || exit 1
echo ""
step3_sync_deps
echo ""
step4_check_browser
echo ""
step5_config_templates
echo ""
echo -e "${CYAN}${BOLD}============================================${NC}"
echo -e "${GREEN}${BOLD} 环境就绪,启动 register_cli.py${NC}"
echo -e "${CYAN}${BOLD}============================================${NC}"
echo ""
# 默认不限数量(--count 0),除非用户显式传参
if [ $# -eq 0 ]; then
echo -e "${YELLOW}[*] 默认模式:不限数量,持续注册(Ctrl+C 停止)${NC}"
echo ""
ARGS="--count 0"
else
ARGS="$*"
fi
if command -v mise &>/dev/null && [ -f "$PROJECT_DIR/mise.toml" ]; then
exec mise run register -- -- $ARGS
else
exec uv run python -u register_cli.py $ARGS
fi
}
main "$@"