Files
chatrebot_aireply_plug/README-WINDOWS.md

24 KiB
Raw Permalink Blame History

OpenClaw Bridge — Windows 部署指南

本文档是 README.md 的 Windows 版。架构和原理完全一致,针对 Windows 10/11 平台调整部署流程。

核心差异速览:

组件 Linux 部署 Windows 部署
NapCat Docker 容器 原生 NapCatQQ桌面应用
qqrebot systemd 服务 NSSM / Task Scheduler 注册为服务
OpenClaw systemd 服务 NSSM 注册为服务
Python venv source .venv/bin/activate .venv\Scripts\activate
路径风格 /opt/... C:\ProgramData\ChatBot\...
打包脚本 packup.sh packup.bat(已有)
QQ 登录 Docker 扫码 + WebUI 原生 QQ 窗口 + 托盘扫码

脚本全是 Pythonrequests + jiebaWindows / Linux 完全一致,不需要额外适配。


架构(不变)

QQ 用户  →→→  NapCatQQ原生 Windows 版)
                │
                │  HTTP POST事件推送 → localhost:25580
                ▼
          qqrebotHTTP Server :25580
                │
                ├── 执行 openclaw_bridge 插件
                │        │
                │        │  HTTP POST /v1/chat/completions
                │        ▼
                │   OpenClaw Gateway:18789
                │        │
                │        ▼
                │   qq-agentAI 模型)
                │        │
                ◄── 返回回复文本 ──┘
                │
                │  HTTP POSTsend_private_msg / send_group_msg
                ▼
          NapCatQQ原生→ 回复发送到 QQ

前提条件检查清单

需要提前安装的软件

软件 版本要求 下载
Python 3.10+ python.org
Node.js 18+ nodejs.org
OpenClaw Gateway 最新 docs.openclaw.ai
NSSM(推荐) 或 Task Scheduler nssm.cc/download
Git 任意 git-scm.com
7-Zip(可选) 7-zip.org

安装 Python 时务必勾选 "Add Python to PATH"

确认安装

打开 PowerShell管理员 执行:

python --version           # 应 ≥ 3.10
node --version             # 应 ≥ 18
git --version
nssm --version             # 如用 NSSM

端口确认

端口 用途 是否需放行防火墙
18789 OpenClaw Gateway 否(仅本地通信)
25580 qqrebot HTTP 服务 否(仅本地通信)
6097 NapCat HTTP API 否(仅本地通信)
6099 NapCat WebUI可选 仅在局域网需远程扫码时开放

Windows Defender 防火墙通常不拦截 127.0.0.1 通信,一般无需额外规则。


第1步规划目录结构

使用统一的根目录 C:\ProgramData\ChatBot,方便管理和备份。

# 创建工作目录
mkdir C:\ProgramData\ChatBot\napcat-config -Force
mkdir C:\ProgramData\ChatBot\napcat-data -Force
mkdir C:\ProgramData\ChatBot\qqrebot -Force
mkdir C:\ProgramData\ChatBot\qqrebot\plugins -Force
mkdir C:\ProgramData\ChatBot\qqrebot\config -Force

echo "目录结构已创建 ✅"

第2步部署 NapCatQQ原生 Windows 版)

2.1 NapCat 是什么

NapCat 是 QQ 协议实现,接收 QQ 消息并通过 HTTP POST 推送到 qqrebot。 Windows 版是原生桌面应用(非 Docker使用你自己的 QQ 客户端。

2.2 下载安装 NapCat Shell 版本

NapCat 提供 Shell 版(无 GUI后台运行以及 GUI 版(有界面)。

推荐方式:使用 Shell 版本 + 一键安装脚本

# 1. 进入数据目录
cd C:\ProgramData\ChatBot

# 2. 下载 NapCat Shell 安装脚本
#    从 NapCat 官方仓库获取
Invoke-WebRequest -Uri "https://github.com/NapNeko/NapCatQQ/releases/latest/download/NapCat.Shell.zip" -OutFile "NapCat.Shell.zip"

# 3. 解压
Expand-Archive -Path "NapCat.Shell.zip" -DestinationPath "C:\ProgramData\ChatBot\napcat" -Force

# 4. 安装依赖npm 方式)
cd C:\ProgramData\ChatBot\napcat
npm install

如果 GitHub 下载慢,也可从官方 QQ 群 / 镜像站下载。

2.3 配置 onebot11.json

NapCat 的 Windows 版配置文件位置:C:\ProgramData\ChatBot\napcat\config\onebot11.json

$config = @'
{
  "network": {
    "httpServers": [
      {
        "name": "http-server",
        "enable": true,
        "host": "0.0.0.0",
        "port": 6097,
        "token": "",
        "enableCors": true,
        "debug": false
      }
    ],
    "httpClients": [
      {
        "name": "http-post",
        "enable": true,
        "url": "http://127.0.0.1:25580/",
        "messagePostFormat": "array",
        "reportSelfMessage": false,
        "token": "",
        "debug": false
      }
    ],
    "websocketServers": [],
    "websocketClients": []
  },
  "musicSignUrl": "",
  "enableLocalFile2Url": true,
  "parseMultMsg": false
}
'@

$config | Out-File -FilePath "C:\ProgramData\ChatBot\napcat\config\onebot11.json" -Encoding utf8
Write-Host "onebot11.json 已创建 ✅"

2.4 启动 NapCat + QQ 登录

NapCat Shell 版启动方式:

cd C:\ProgramData\ChatBot\napcat
.\napcat.bat

首次启动会引导扫码登录 QQ。你需要

  1. 看到终端输出二维码 URL或截图二维码保存到本地
  2. 用手机 QQ 扫码登录
  3. 登录后 NapCat 会自动保持在线,窗口可以最小化

2.5 验证 HTTP API

# 登录成功后验证
Invoke-RestMethod -Uri "http://127.0.0.1:6097/get_version_info" -Method Get
# 预期:返回 {"status": "ok", "data": {"app_name": "NapCat", ...}}

如果上一步报错,说明 NapCat 尚未完成 QQ 登录。请等待登录后再试。


第3步克隆本仓库

cd C:\ProgramData\ChatBot

git clone ssh://git@jianfgit.xyz:220/jianf/chatrebot_aireply_plug.git

# 验证
ls C:\ProgramData\ChatBot\chatrebot_aireply_plug\README.md

第4步部署 qqrebot

4.1 下载 qqrebotWindows 版)

qqrebot 是 Go 语言编写的跨平台 HTTP Server支持 Windows。

cd C:\ProgramData\ChatBot\qqrebot

# 从仓库下载 qqrebot Windows 版本
# 如果已有 qqrebot 的 Windows exe直接复制到此目录
# 或从 https://jianfgit.xyz/ 下载
Invoke-WebRequest -Uri "https://jianfgit.xyz/jianf/chat_rebot-connect-with-onebot-standard-/archive/chatrebot1.0.tar.gz" -OutFile "chatrebot1.0.tar.gz"

# 解压tar 在较新 Windows 10/11 已内置,如没有则用 7-Zip
tar -xzf chatrebot1.0.tar.gz
Copy-Item -Recurse "chat_rebot-connect-with-onebot-standard-\*" "C:\ProgramData\ChatBot\qqrebot\" -Force
Remove-Item -Recurse "chat_rebot-connect-with-onebot-standard-" -Force
Remove-Item "chatrebot1.0.tar.gz" -Force

4.2 配置 qqrebot

$config = @'
[app]
list_port = 25580
send_url = "http://127.0.0.1:6097"

[rebot]
id = ""

[plugins]
dir = ["plugins"]
'@

$config | Out-File -FilePath "C:\ProgramData\ChatBot\qqrebot\config\config.toml" -Encoding utf8
Write-Host "config.toml 已创建 ✅"

4.3 用 NSSM 将 qqrebot 注册为 Windows 服务

# 注意:以下命令需在管理员 PowerShell 中执行
# qqrebot 的启动入口通常是 run.shbashWindows 版对应 .exe
# 请确认 qqrebot Windows exe 文件名,假设为 qqrebot.exe

# 先检查 qqrebot 目录下有哪些可执行文件
ls C:\ProgramData\ChatBot\qqrebot\*.exe

# --- 假设主程序为 qqrebot.exe ---
nssm install qqrebot "C:\ProgramData\ChatBot\qqrebot\qqrebot.exe"

# 设置工作目录
nssm set qqrebot AppDirectory "C:\ProgramData\ChatBot\qqrebot"

# 设置自动重启
nssm set qqrebot AppRestartDelay 3000

# 启动服务
nssm start qqrebot

Write-Host "qqrebot 服务已注册并启动 ✅"

⚠️ 如果 qqrebot.exe 不存在(原版可能是 Python 脚本或其他方式启动),请改用方案二:

方案二:使用 run.bat + 开机自启

# 创建 Windows 启动脚本
$runBat = @'
@echo off
cd /d "C:\ProgramData\ChatBot\qqrebot"
qqrebot.exe
'@
$runBat | Out-File -FilePath "C:\ProgramData\ChatBot\qqrebot\run.bat" -Encoding ascii

# 添加到开机启动(当前用户)
$WshShell = New-Object -ComObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup\qqrebot.lnk")
$Shortcut.TargetPath = "C:\ProgramData\ChatBot\qqrebot\run.bat"
$Shortcut.WorkingDirectory = "C:\ProgramData\ChatBot\qqrebot"
$Shortcut.Save()
Write-Host "已添加到开机启动 ✅"

4.4 验证 qqrebot 运行

# 检查服务状态NSSM
nssm status qqrebot

# 检查端口监听
netstat -ano | findstr :25580
# 预期TCP 0.0.0.0:25580  LISTENING

第5步打包并部署 openclaw_bridge 插件

5.1 打包插件

仓库中已有 packup.bat,直接使用即可。

cd C:\ProgramData\ChatBot\chatrebot_aireply_plug

# 创建并激活 Python 虚拟环境
python -m venv .venv
.\.venv\Scripts\activate

# 安装依赖
pip install -r requirements.txt

# 打包
python dependence.py
python package.py

# 检查打包结果
ls dist\
# 预期dist\openclaw_bridge.zip

5.2 部署到 qqrebot

Copy-Item -Path "C:\ProgramData\ChatBot\chatrebot_aireply_plug\dist\openclaw_bridge.zip" `
          -Destination "C:\ProgramData\ChatBot\qqrebot\plugins\"

# 验证
ls C:\ProgramData\ChatBot\qqrebot\plugins\

5.3 创建插件配置

# ⚠️ 以下值需要根据你的实际情况修改!
# allowed_sender → 你的 QQ 号
# gateway_token → 从 OpenClaw 配置中获取

$pluginConfig = @'
[openclaw]
gateway_url      = "http://127.0.0.1:18789"
gateway_token    = "你的GatewayToken"
allowed_sender   = "你的QQ号"
model            = "openclaw/qq-agent"
agent_id         = "qq-agent"
'@

# 创建配置目录
New-Item -ItemType Directory -Path "C:\ProgramData\ChatBot\qqrebot\config\openclawbridge" -Force

$pluginConfig | Out-File -FilePath "C:\ProgramData\ChatBot\qqrebot\config\openclawbridge\config.toml" -Encoding utf8
Write-Host "插件配置已创建 ✅"

5.4 重启 qqrebot

# 方式一NSSM 服务
nssm restart qqrebot

# 方式二:任务管理器结束进程,重新运行 run.bat

# 查看 qqrebot 日志
# NSSM 服务默认日志在 C:\ProgramData\ChatBot\qqrebot\logs\

# 验证插件加载
Get-Content "C:\ProgramData\ChatBot\qqrebot\log\*.log" -Tail 20
# 预期看到Config loaded: url=http://127.0.0.1:18789, allowed=123456789

清理旧版(如果之前部署过):

Remove-Item "C:\ProgramData\ChatBot\qqrebot\plugins\openclaw_bridge" -Recurse -Force -ErrorAction SilentlyContinue

插件是 ZIP 格式,删除旧目录后重启 qqrebot 即可加载新包。


第6步部署 OpenClaw Gateway

6.1 安装 OpenClawWindows

# OpenClaw 基于 Node.jsWindows 直接安装
npm install -g openclaw

如果使用官方安装器按照文档指引操作。OpenClaw 在 Windows 上完全可用。

6.2 配置 OpenClaw

假设已有运行中的 OpenClaw Gateway,以下是创建新 agent 的步骤。

创建 agent workspace

$agentId = "qq-agent"
$workspace = "C:\ProgramData\ChatBot\$agentId-workspace"

New-Item -ItemType Directory -Path "$workspace\scripts" -Force
New-Item -ItemType Directory -Path "$workspace\skills" -Force
New-Item -ItemType Directory -Path "$workspace\memory" -Force
New-Item -ItemType Directory -Path "$workspace\files" -Force

Write-Host "Agent workspace 已创建: $workspace ✅"

添加 agent 到 OpenClaw 配置:

# 读取 OpenClaw 配置
$configPath = "$env:USERPROFILE\.openclaw\openclaw.json"
$cfg = Get-Content $configPath -Raw | ConvertFrom-Json

# 添加 agent如果不存在
$exists = $cfg.agents.list | Where-Object { $_.id -eq "qq-agent" }
if (-not $exists) {
    $agent = @{
        id = "qq-agent"
        name = "qq-agent"
        model = "kimi/kimi-for-coding"
        workspace = "C:\ProgramData\ChatBot\qq-agent-workspace"
    }
    $cfg.agents.list += $agent
    $cfg | ConvertTo-Json -Depth 10 | Set-Content $configPath
    Write-Host "Agent qq-agent 已添加 ✅"
} else {
    Write-Host "Agent qq-agent 已存在,跳过"
}

6.3 用 NSSM 注册 OpenClaw 服务(可选)

# 找到 openclaw.cmd 路径
$ocPath = (Get-Command openclaw).Source

nssm install openclaw-gateway $ocPath
nssm set openclaw-gateway AppParameters "gateway start"
nssm set openclaw-gateway AppDirectory $env:USERPROFILE
nssm set openclaw-gateway AppRestartDelay 3000
nssm start openclaw-gateway

Write-Host "OpenClaw Gateway 已注册为服务 ✅"

第7步部署脚本和 Skills

7.1 复制脚本

$workspace = "C:\ProgramData\ChatBot\qq-agent-workspace"
$repoRoot = "C:\ProgramData\ChatBot\chatrebot_aireply_plug"

Copy-Item -Path "$repoRoot\scripts\*" -Destination "$workspace\scripts\" -Recurse -Force
Write-Host "脚本已复制: $( (ls $workspace\scripts).Count ) 个"

7.2 复制 Skills

$skills = @("qq-messenger", "qq-management", "qq-resolver", "qq-napcat-extras", "mc-query", "nix-helper", "browser", "file-process")

foreach ($skill in $skills) {
    $src = "$repoRoot\skills\$skill"
    if (Test-Path $src) {
        Copy-Item -Path $src -Destination "$workspace\skills\" -Recurse -Force
        Write-Host "已复制: $skill"
    } else {
        Write-Host "⚠️ 不存在: $skill"
    }
}

7.3 替换占位符

$workspace = "C:\ProgramData\ChatBot\qq-agent-workspace"

# ⚠️ 替换为你的实际值
$ADMIN_QQ = "你的QQ号"
$NAPCAT_URL = "127.0.0.1:6097"
$GATEWAY_TOKEN = "你的GatewayToken"

# PowerShell 替换脚本中的占位符
Get-ChildItem -Path "$workspace\scripts\*.py" | ForEach-Object {
    (Get-Content $_.FullName) -replace 'YOUR_NAPCAT_HOST:25570', $NAPCAT_URL `
                               -replace 'YOUR_ADMIN_QQ', $ADMIN_QQ `
                               -replace 'YOUR_GATEWAY_TOKEN', $GATEWAY_TOKEN `
                               -replace 'YOUR_WORKSPACE_PATH', $workspace `
                               -replace 'YOUR_SHARED_DIR', "C:\ProgramData\ChatBot\shared" | 
    Set-Content $_.FullName
}

# 替换 Skills 中的占位符
Get-ChildItem -Path "$workspace\skills\*\SKILL.md" | ForEach-Object {
    (Get-Content $_.FullName) -replace 'YOUR_WORKSPACE_PATH', $workspace `
                               -replace 'YOUR_ADMIN_QQ', $ADMIN_QQ | 
    Set-Content $_.FullName
}

Write-Host "占位符替换完毕 ✅"

第8步端到端验证

验证检查清单

Write-Host "========== 端到端验证 =========="

# 1. NapCat 是否运行
try {
    $ver = Invoke-RestMethod -Uri "http://127.0.0.1:6097/get_version_info" -Method Get
    Write-Host "✅ NapCat: $($ver.data.app_name) v$($ver.data.app_version)"
} catch {
    Write-Host "❌ NapCat 不可达"
}

# 2. qqrebot 是否运行
try {
    $tcp = netstat -ano | findstr :25580
    if ($tcp) { Write-Host "✅ qqrebot: 端口 25580 监听中" } else { Write-Host "❌ qqrebot 端口未监听" }
} catch {
    Write-Host "❌ 无法检查 qqrebot"
}

# 3. OpenClaw Gateway 是否运行
try {
    $oc = Invoke-RestMethod -Uri "http://127.0.0.1:18789/v1/models" -Method Get
    Write-Host "✅ OpenClaw Gateway: 可访问"
} catch {
    Write-Host "❌ OpenClaw Gateway 不可达"
}

Write-Host "================================"

发一条测试消息

在 QQ 上给机器人发一条消息,然后检查日志:

# 查看 qqrebot 日志
Get-Content "C:\ProgramData\ChatBot\qqrebot\log\*.log*" -Tail 20

# 查看 OpenClaw 日志
Get-Content "$env:USERPROFILE\.openclaw\logs\*" -Tail 20

Windows 特有注意事项

1. 路径分隔符

Python 脚本使用 Path 类(如 pathlibWindows 和 Linux 都兼容。 但在 .py 脚本中硬编码路径时,建议使用 os.path.join()Path()

# ❌ 不要
shared_dir = "/opt/napcat_shared"

# ✅ 好
from pathlib import Path
shared_dir = Path("C:/ProgramData/ChatBot/shared")

2. 虚拟环境激活

# Windows PowerShell / CMD
.\.venv\Scripts\activate

# Linux
source .venv/bin/activate

3. 环境变量

# PowerShell
$env:MY_VAR = "value"

# CMD
set MY_VAR=value

4. 文件共享路径

NapCat 原生 Windows 版无需共享目录映射。脚本中如果涉及文件传输:

  • qq_send_file.py → 直接用本地绝对路径发文件
  • qq_ocr_image.py → 图片路径用 Windows 格式(C:\...
  • NapCat Windows 版可直接访问本地文件系统,无需 Docker volume

5. 开机自启

推荐两种方式:

方式一NSSM 注册为服务(推荐)

nssm install <服务名> <程序路径>

方式二:添加到开机启动文件夹

shell:startup
# 将 qqrebot 和 napcat 的快捷方式拖入

方式三Windows Task Scheduler

  • 触发器:系统启动时
  • 操作:启动程序
  • 适用于需要延迟启动的场景

6. 日志管理

Windows 无 journalctl,使用以下替代:

# NSSM 服务日志
# 默认在 C:\ProgramData\ChatBot\qqrebot\logs\
Get-Content ".\logs\*.log" -Tail 100

# OpenClaw 日志
Get-Content "$env:USERPROFILE\.openclaw\logs\openclaw.log" -Tail 100

# 实时跟踪(类似 tail -f
Get-Content ".\logs\qqrebot.log" -Tail 10 -Wait

7. 防火墙

NapCat 监听 0.0.0.0:6097,如需从局域网其他设备访问(如 WebUI 扫码):

# 放行端口(管理员 PowerShell
New-NetFirewallRule -DisplayName "NapCat HTTP API" -Direction Inbound -LocalPort 6097 -Protocol TCP -Action Allow
New-NetFirewallRule -DisplayName "NapCat WebUI" -Direction Inbound -LocalPort 6099 -Protocol TCP -Action Allow

常见问题Windows 特有)

Q: NapCat 启动后闪退?

  • 确认已安装 QQNapCat Shell 版不依赖 QQ GUI但需 QQ 协议库)
  • 使用完整版 NapCatQQ带 GUI 的版本)
  • 检查日志文件:C:\ProgramData\ChatBot\napcat\logs\

Q: qqrebot 运行时报 "not a valid Win32 application"

  • 确认下载的是 Windows 版(.exe
  • 如果只有 Linux 版 qqrebot可以用 WSL 运行,或将 qqrebot 重写为 Python 版本

Q: NSSM 安装后服务无法启动?

# 查看错误详情
nssm status qqrebot
# 检查 Windows 事件查看器 > Windows 日志 > 应用程序

# 或者直接前台运行确认程序本身没问题
C:\ProgramData\ChatBot\qqrebot\qqrebot.exe

Q: 路径中的反斜杠 \ 被转义了?

在 Python 字符串中的路径:

  • 用正斜杠:"C:/ProgramData/ChatBot"
  • 用原始字符串:r"C:\ProgramData\ChatBot"
  • pathlibPath("C:/ProgramData/ChatBot")

Q: git clone 使用 SSH 在 Windows 上报错?

# 1. 确保已配置 SSH key
ssh-keygen -t ed25519 -C "你的邮箱"

# 2. 添加到 ssh-agent
Start-Service ssh-agent
ssh-add $env:USERPROFILE\.ssh\id_ed25519

# 3. 将公钥添加到 Git 服务器
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub

Q: 如何后台运行 qqrebot不用 NSSM

# 使用 Start-Process 在后台启动
Start-Process -WindowStyle Hidden -FilePath "C:\ProgramData\ChatBot\qqrebot\qqrebot.exe"

# 查看进程
Get-Process qqrebot

快速启动脚本(一键部署)

将以下内容保存为 deploy-windows.ps1,在管理员 PowerShell 中执行:

⚠️ 执行前请修改脚本中 $ADMIN_QQ$GATEWAY_TOKEN 的值。

# deploy-windows.ps1 — Windows 一键部署脚本
# 使用前请修改以下两个变量
$ADMIN_QQ = "你的QQ号"
$GATEWAY_TOKEN = "你的GatewayToken"

# ─── 配置 ───
$BaseDir = "C:\ProgramData\ChatBot"
$RepoUrl = "ssh://git@jianfgit.xyz:220/jianf/chatrebot_aireply_plug.git"
$NapCatPortApi = 6097
$NapCatPortWebUI = 6099
$QqrebotPort = 25580
$Workspace = "$BaseDir\qq-agent-workspace"
$AgentId = "qq-agent"

Write-Host "══════════════════════════════════════" -ForegroundColor Cyan
Write-Host " OpenClaw Bridge — Windows 一键部署" -ForegroundColor Cyan
Write-Host "══════════════════════════════════════" -ForegroundColor Cyan

# 1. 创建目录
Write-Host "`n[1/8] 创建目录..." -ForegroundColor Yellow
@("", "\qqrebot\plugins", "\qqrebot\config", "\shared") | ForEach-Object {
    New-Item -ItemType Directory -Path "$BaseDir$_" -Force | Out-Null
}

# 2. 克隆仓库
Write-Host "`n[2/8] 克隆仓库..." -ForegroundColor Yellow
if (!(Test-Path "$BaseDir\chatrebot_aireply_plug")) {
    git clone $RepoUrl "$BaseDir\chatrebot_aireply_plug"
} else {
    Write-Host "  仓库已存在,跳过克隆"
}

# 3. 打包插件
Write-Host "`n[3/8] 打包插件..." -ForegroundColor Yellow
cd "$BaseDir\chatrebot_aireply_plug"
if (!(Test-Path ".venv")) { python -m venv .venv }
.\.venv\Scripts\activate
pip install -r requirements.txt -q
python dependence.py
python package.py
Copy-Item "dist\openclaw_bridge.zip" "$BaseDir\qqrebot\plugins\" -Force

# 4. 配置插件
Write-Host "`n[4/8] 配置插件..." -ForegroundColor Yellow
$pluginConfig = @"
[openclaw]
gateway_url      = "http://127.0.0.1:18789"
gateway_token    = "$GATEWAY_TOKEN"
allowed_sender   = "$ADMIN_QQ"
model            = "openclaw/$AgentId"
agent_id         = "$AgentId"
"@
New-Item -ItemType Directory -Path "$BaseDir\qqrebot\config\openclawbridge" -Force | Out-Null
$pluginConfig | Out-File "$BaseDir\qqrebot\config\openclawbridge\config.toml" -Encoding utf8

# 5. 创建 Agent workspace
Write-Host "`n[5/8] 创建 Agent workspace..." -ForegroundColor Yellow
@("scripts", "skills", "memory", "files") | ForEach-Object {
    New-Item -ItemType Directory -Path "$Workspace\$_" -Force | Out-Null
}

# 6. 复制脚本和 Skills
Write-Host "`n[6/8] 复制脚本和 Skills..." -ForegroundColor Yellow
Copy-Item "$BaseDir\chatrebot_aireply_plug\scripts\*" "$Workspace\scripts\" -Recurse -Force
@("qq-messenger", "qq-management", "qq-resolver", "qq-napcat-extras", "browser", "file-process") | ForEach-Object {
    $src = "$BaseDir\chatrebot_aireply_plug\skills\$_"
    if (Test-Path $src) { Copy-Item $src "$Workspace\skills\" -Recurse -Force }
}

# 7. 替换占位符
Write-Host "`n[7/8] 替换占位符..." -ForegroundColor Yellow
Get-ChildItem "$Workspace\scripts\*.py" | ForEach-Object {
    (Get-Content $_.FullName) -replace 'YOUR_NAPCAT_HOST:25570', "127.0.0.1:6097" `
                               -replace 'YOUR_ADMIN_QQ', $ADMIN_QQ |
    Set-Content $_.FullName
}

# 8. 添加 OpenClaw agent
Write-Host "`n[8/8] 配置 OpenClaw agent..." -ForegroundColor Yellow
$ocConfig = "$env:USERPROFILE\.openclaw\openclaw.json"
if (Test-Path $ocConfig) {
    $cfg = Get-Content $ocConfig -Raw | ConvertFrom-Json
    $exists = $cfg.agents.list | Where-Object { $_.id -eq $AgentId }
    if (!$exists) {
        $agent = @{ id = $AgentId; name = $AgentId; model = "kimi/kimi-for-coding"; workspace = $Workspace }
        $cfg.agents.list += $agent
        $cfg | ConvertTo-Json -Depth 10 | Set-Content $ocConfig
        Write-Host "  Agent 已添加 ✅"
    }
}

Write-Host "`n══════════════════════════════════════" -ForegroundColor Green
Write-Host " 部署完成!请手动完成以下步骤:" -ForegroundColor Green
Write-Host "  1. 启动 NapCat: cd $BaseDir\napcat && .\napcat.bat扫码登录QQ" -ForegroundColor Yellow
Write-Host "  2. 启动 qqrebotNSSM 或手动)" -ForegroundColor Yellow
Write-Host "  3. 重启 OpenClaw Gateway" -ForegroundColor Yellow
Write-Host "  4. 验证:发 QQ 消息给机器人" -ForegroundColor Yellow
Write-Host "══════════════════════════════════════" -ForegroundColor Green