# qq-farm-bot **Repository Path**: stonic-open-source/qq-farm-bot ## Basic Information - **Project Name**: qq-farm-bot - **Description**: 基于 Node.js 的 QQ 经典农场小程序自动化挂机脚本。通过分析小程序 WebSocket 通信协议(Protocol Buffers),实现全自动农场管理。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-05-08 - **Last Updated**: 2026-05-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # QQ经典农场 挂机脚本 > 二开自 [linguo2625469/qq-farm-bot](https://github.com/linguo2625469/qq-farm-bot.git),感谢原作者的开源贡献。 基于 Node.js 的 QQ/微信经典农场小程序自动化挂机脚本。通过分析小程序 WebSocket 通信协议(Protocol Buffers),实现全自动农场管理。 ## 二开新增内容 ### 多账号管理 支持同时运行多个 QQ / 微信账号,每个账号在独立子进程中运行,互不干扰: - 默认 `node client.js` 即进入多账号 Web 管理模式,通过仪表盘添加/删除/启停账号 - 账号配置持久化到 `data/accounts.json`,重启后自动恢复账号列表 - 每个账号独立维护运行状态(登录中 / 运行中 / 已停止 / 异常)和农场数据 - 仪表盘支持账号切换查看,显示昵称、平台、等级、金币、运行时长 - 保留 `--code` 单账号传统模式 ### Web 可视化仪表盘 在原版纯终端输出的基础上,新增了完整的 Web 端实时监控面板: **实时数据面板** - 农场地块可视化 — 模拟小程序 6×3 网格布局,显示每块地的作物名称、生长阶段、成熟倒计时、缺水/有草/有虫等状态标签,并按土地等级(普通/红土/黑土/金土/彩虹)以不同颜色区分 - 变异标签 — 农场格子实时显示变异类型(❄️ 冰冻·售价×3 / ❤️ 爱心·数量×3 / 🌑 暗化·售价×2 / 💧 湿润·数量×2) - 用户信息栏 — 实时显示平台(QQ/微信)、昵称、等级、金币、经验进度条(含精确经验数值)、运行时长 - 好友列表 — 展示所有好友及其等级,按等级高亮排名 - 好友互动记录 — 最近 50 条偷菜/帮忙操作的实时流水 - 仓库物品 — 当前背包内容及数量 - 任务进度 — 每日任务和成长任务的完成进度条 - 变异统计面板 — 总种植次数、变异率、各变异类型分布 - 运行日志 — 最近 200 条日志的实时滚动展示(支持 INFO/WARN/ERROR 颜色区分) **Web 端扫码登录** - 在浏览器中直接展示 QQ 扫码登录二维码,无需在终端操作 - 实时同步扫码状态(等待扫码 → 扫码成功 → 正在登录 → 已连接) - 支持二维码刷新,断线后自动重新获取 - 支持微信小程序 Code 登录 — 切换到「微信登录」标签页输入 code 即可 **在线配置修改** - 偷菜功能开关 — 在 Web 端实时开启/关闭自动偷菜 - 好友巡查间隔 — 在 Web 端动态调整巡查频率(1~3600 秒) - 施肥配置 — 化肥/有机化肥独立开关,支持容量阈值设置 - 变异赌博开关 — 在 Web 端实时开启/关闭赌博策略及参数调整 **安全认证** - 支持密码保护(环境变量 `WEB_PASSWORD`),未设置则免密访问 - 基于 HttpOnly Cookie + Session Token 的认证机制 - 使用 `timingSafeEqual` 防时序攻击 - WebSocket 连接同样需要有效 Token - Origin 校验防止跨站 WebSocket 劫持(CSWSH) - 连接数上限 10,请求体限制 1KB 防 DoS **技术实现** - 后端:HTTP 静态托管 + WebSocket 双向通信(`webServer.js`) - 状态聚合:全局单例 `WebStateManager`(`webState.js`),通过脏检查避免无变化推送 - 前端:纯原生 HTML/CSS/JS 单文件,暗色主题,响应式布局适配移动端 - 日志钩子:拦截 `console.log/warn/error`,同时输出到终端、日志文件和 Web 端 ### Docker 部署支持 新增完整的容器化部署方案: - `Dockerfile` — 基于 `node:20-alpine`,非 root 用户运行,分层缓存优化 - `deploy.sh` — 一键部署脚本:构建镜像 → 停止旧容器 → 启动新容器 → 清理悬空镜像 - `docker-compose.yml` — 编排配置 - `.env` 环境变量配置 — 统一管理密码、端口、巡查间隔等参数 - Docker Health Check — 基于 `/api/health` 接口的容器健康检查 - 数据持久化 — `data/` 和 `logs/` 目录通过 bind mount 持久化到宿主机 ### 变异系统 全自动变异数据收集与赌博收益策略: **被动数据收集** - 种植时立即记录并持久化到 `data/mutation-stats.json`,重启不丢失 - 巡查时自动检测变异类型(冰冻·售价×3 / 爱心·数量×3 / 暗化·售价×2 / 湿润·数量×2) - 统计维度:总种植次数、变异次数、变异率、按变异类型分布、按植物品种分布 **赌博策略(可选开启)** - 原理:种植 → 到检测阶段 → 无变异则铲除重种 → 有变异则保留等待成熟收获 - 铲除免费,每次失败仅损失一颗种子价格;变异倍率 2x~9x(复合变异),长期盈利 - 检测阶段自动从历史数据学习,也可手动指定 - 金币低于安全线(默认 500)时自动暂停;单块地超过最大重试次数(默认 20)后放弃 - 默认沿用最优经验种子,也可指定赌博专用种子 - ROI 追踪:记录赌博总次数、命中次数、花费金币、卖出金币、净收益,持久化到 `data/gambling-stats.json` ### 自动施肥 支持化肥与有机化肥两种类型,均可在 Web 仪表盘实时开关: - **化肥** — 每次种植后对新种土地逐块施用 - **有机化肥** — 持续循环施用,优先选最高等级土地(金土 > 黑土 > 红土 > 普通) - 容量不足时自动关闭对应开关并同步更新 Web 前端 ### Docker 部署支持 新增完整的容器化部署方案: - `Dockerfile` — 基于 `node:20-alpine`,非 root 用户运行,分层缓存优化 - `deploy.sh` — 一键部署脚本:构建镜像 → 停止旧容器 → 启动新容器 → 清理悬空镜像 - `docker-compose.yml` — 编排配置 - `.env` 环境变量配置 — 统一管理密码、端口、巡查间隔等参数 - Docker Health Check — 基于 `/api/health` 接口的容器健康检查 - 数据持久化 — `data/` 和 `logs/` 目录通过 bind mount 持久化到宿主机 ### 日志系统优化 - 新增按天分割的文件日志持久化(`logs/YYYY-MM-DD.log`),同时保留终端输出 - 日志钩子机制,支持将日志同步推送到 Web 仪表盘 --- ## 功能特性 ### 自己农场 - **自动收获** — 检测成熟作物并自动收获 - **自动铲除** — 自动铲除枯死/收获后的作物残留 - **自动种植** — 收获/铲除后自动购买种子并种植(默认按经验效率选种;可配置强制最低等级作物) - **自动施肥** — 支持化肥与有机化肥,容量不足时自动关闭 - **自动除草** — 检测并清除杂草 - **自动除虫** — 检测并消灭害虫 - **自动浇水** — 检测缺水作物并浇水 - **自动出售** — 每分钟自动出售仓库中的果实 - **变异赌博** — 可选开启,通过种植铲除循环最大化变异收益 ### 好友农场 - **好友巡查** — 自动巡查好友农场 - **帮忙操作** — 帮好友浇水/除草/除虫(经验耗尽后自动停止) - **自动偷菜** — 偷取好友成熟作物 ### 系统功能 - **多账号管理** — 支持同时运行多个 QQ/微信账号,各自独立子进程 - **自动领取任务** — 自动领取完成的任务奖励,支持分享翻倍/三倍奖励 - **自动同意好友** — 微信同玩好友申请自动同意(支持推送实时响应) - **邀请码处理** — 启动时自动处理 `share.txt` 中的邀请链接 - **变异数据收集** — 自动收集变异统计数据,支持 Web 端查看变异率和分布 - **状态栏显示** — 终端顶部固定显示平台/昵称/等级/经验(含精确数值)/金币 - **心跳保活** — 自动维持 WebSocket 连接 ### 开发工具 - **[PB 解码工具](#pb-解码工具)** — 内置 Protobuf 数据解码器,方便调试分析 - **[经验分析工具](#经验分析工具)** — 分析作物经验效率,计算最优种植策略 ## 安装 ```bash git clone https://github.com/linguo2625469/qq-farm-bot.git cd qq-farm-bot npm install ``` ## 使用 ### 获取登录 Code **QQ 平台**:直接运行 `node client.js`,在 Web 仪表盘或终端中扫码登录即可,无需手动获取 code。 [lkeme/QRLib](https://github.com/lkeme/QRLib) - 扫码登录使用此项目代码,非常感谢。 **微信平台**:需要通过抓包工具拦截小程序的 WebSocket 连接,从 URL 中提取 `code` 参数。微信 code 只能使用一次,抓包时必须阻断原始请求。 > 详细图文教程请参考 **[微信小程序抓包获取 Code 教程](docs/wechat-capture-guide.md)**(支持 Proxyman 和 Fiddler Everywhere 两种方案) ### 启动挂机 ```bash # 多账号模式(推荐)— 启动 Web 仪表盘管理多个账号 node client.js # 单账号模式 — QQ小程序,手动传入 code node client.js --code <你的登录code> # 单账号模式 — 微信小程序,命令行传入 code node client.js --code <你的登录code> --wx ``` ### Web 仪表盘 默认启动后访问 `http://localhost:7788` 即可打开仪表盘。 ```bash # 自定义端口 node client.js --web-port 8080 # 禁用 Web 仪表盘 node client.js --no-web ``` 如需密码保护,在 `.env` 中设置: ```env WEB_PASSWORD=你的密码 ``` ### Docker 部署 ```bash # 配置环境变量 cp .env.example .env # 编辑 .env 设置密码、端口等 # 一键部署 chmod +x deploy.sh ./deploy.sh ``` 部署完成后访问 `http://你的服务器IP:7788`。 ### 自定义巡查间隔 ```bash # 农场巡查间隔 5 秒,好友巡查间隔 2 秒 node client.js --code --interval 5 --friend-interval 2 ``` ### 参数说明 | 参数 | 说明 | 默认值 | |------|------|--------| | `--code` | 小程序登录凭证 | — | | `--wx` | 使用微信登录 | QQ 小程序 | | `--interval` | 自己农场巡查间隔(秒) | 2 | | `--friend-interval` | 好友巡查间隔(秒) | 1 | | `--web-port` | Web 仪表盘端口 | 7788 | | `--no-web` | 禁用 Web 仪表盘 | — | | `--verify` | 验证 proto 定义是否正确 | — | | `--decode` | 进入 PB 数据解码模式 | — | ### 环境变量 | 变量 | 说明 | 默认值 | |------|------|--------| | `WEB_PASSWORD` | Web 仪表盘访问密码(留空则免密) | — | | `HOST_PORT` | 宿主机映射端口 | 7788 | | `FARM_INTERVAL` | 自己农场巡查间隔(秒) | — | | `FRIEND_INTERVAL` | 好友巡查间隔(秒) | — | ### 邀请码功能(微信环境) 在项目根目录创建 `share.txt` 文件,每行一个邀请链接: ``` ?uid=123&openid=xxx&share_source=4&doc_id=2 ?uid=456&openid=xxx&share_source=4&doc_id=2 ``` 启动时会自动处理这些邀请链接,申请添加好友。处理完成后文件会被清空。 ### PB 解码工具 内置 Protobuf 数据解码器,支持自动推断消息类型: ```bash # 解码 base64 格式的 gatepb.Message node client.js --decode CigKGWdhbWVwYi... --gate # 解码 hex 格式,指定消息类型 node client.js --decode 0a1c0a19... --hex --type gatepb.Message # 查看解码工具详细帮助 node client.js --decode ``` ### 经验分析工具 ```bash node tools/calc-exp-yield.js node tools/calc-exp-yield.js --lands 18 --level 27 ``` ## 项目结构
点击展开项目结构 ``` ├── client.js # 入口文件 - 参数解析与启动调度 ├── src/ │ ├── config.js # 配置常量与生长阶段枚举 │ ├── utils.js # 工具函数 (类型转换/日志/时间同步/sleep) │ ├── proto.js # Protobuf 加载与消息类型管理 │ ├── network.js # WebSocket 连接/消息编解码/登录/心跳 │ ├── farm.js # 自己农场: 收获/浇水/除草/除虫/铲除/种植/施肥 │ ├── friend.js # 好友农场: 进入/帮忙/偷菜/巡查循环 │ ├── task.js # 任务系统: 自动领取任务奖励 │ ├── warehouse.js # 仓库系统: 自动出售果实 │ ├── status.js # 状态栏: 终端顶部固定显示用户状态 │ ├── logger.js # 日志系统: 按天分割文件日志 + 终端输出 + Web 钩子 │ ├── webServer.js # Web 服务: HTTP 托管 + WebSocket 推送 + 认证 │ ├── webState.js # Web 状态: 全局状态聚合 + 脏检查 + 事件通知 │ ├── gameConfig.js # 游戏配置: 等级经验表/植物数据 │ ├── invite.js # 邀请码处理: 自动申请好友 │ ├── qqQrLogin.js # QQ 扫码登录 │ ├── decode.js # PB 解码/验证工具模式 │ ├── accountManager.js # 多账号主进程管理器 │ ├── accountWorker.js # 单账号子进程逻辑 │ ├── mutationTracker.js # 变异数据被动收集与统计 │ └── mutationGambler.js # 变异赌博策略引擎 ├── web/ │ ├── index.html # 仪表盘前端 (单文件, 暗色主题, 响应式) │ └── login.html # 密码登录页 ├── proto/ # Protobuf 消息定义 │ ├── game.proto # 网关消息定义 (gatepb) │ ├── userpb.proto # 用户/登录/心跳消息 │ ├── plantpb.proto # 农场/土地/植物消息 │ ├── corepb.proto # 通用 Item 消息 │ ├── shoppb.proto # 商店消息 │ ├── friendpb.proto # 好友列表/申请消息 │ ├── visitpb.proto # 好友农场拜访消息 │ ├── notifypb.proto # 服务器推送通知消息 │ ├── taskpb.proto # 任务系统消息 │ └── itempb.proto # 背包/仓库/物品消息 ├── gameConfig/ # 游戏配置数据 │ ├── RoleLevel.json # 等级经验表 │ └── Plant.json # 植物数据(名称/生长时间/经验等) ├── tools/ # 辅助工具 │ └── calc-exp-yield.js # 经验效率分析脚本 ├── data/ # 持久化数据 (Git 忽略) │ ├── accounts.json # 多账号配置 │ ├── mutation-stats.json # 变异统计数据 │ └── gambling-stats.json # 赌博策略 ROI 统计 ├── logs/ # 日志文件 (按天分割, Git 忽略) ├── Dockerfile # Docker 镜像构建 ├── deploy.sh # 一键部署脚本 ├── docker-compose.yml # Docker Compose 编排 ├── .env # 环境变量配置 └── package.json ```
## 配置说明 大部分配置可通过 Web 仪表盘在线调整,无需修改代码。以下为代码层面的默认配置: ### src/config.js ```javascript const CONFIG = { serverUrl: 'wss://gate-obt.nqf.qq.com/prod/ws', clientVersion: '1.6.0.14_20251224', platform: 'qq', // 平台: qq 或 wx os: 'iOS', heartbeatInterval: 25000, // 心跳间隔 25秒 farmCheckInterval: 1000, // 农场巡查完成后等待间隔 friendCheckInterval: 10000, // 好友巡查完成后等待间隔 forceLowestLevelCrop: false, // true: 固定最低等级作物,跳过经验效率分析 // 施肥配置(可通过 Web 端开关) fertilizeEnabled: false, // 施肥总开关 fertilizeChemical: false, // 化肥:种植后立即施用 fertilizeChemicalMinHours: 0, // 化肥容量低于此小时数时自动停止(0=不限) fertilizeOrganic: false, // 有机化肥:持续循环施用 fertilizeOrganicMinHours: 0, // 有机化肥容量低于此小时数时自动停止(0=不限) // 变异赌博配置(可通过 Web 端开关) mutationGamblingEnabled: false, // 赌博总开关 gamblingMaxRetries: 20, // 单块地最大尝试次数 gamblingMinGold: 500, // 金币安全线,低于此值暂停赌博 gamblingDetectionPhase: 0, // 检测阶段(0=自动从历史数据学习) }; ``` ### src/friend.js ```javascript const HELP_ONLY_WITH_EXP = true; // 只在有经验时帮助好友(耗尽自动停止) const ENABLE_PUT_BAD_THINGS = false; // 是否启用放虫放草功能(暂不可用,必须关闭) ``` ## 注意事项 > **封号警告**:使用脚本挂机存在被官方检测并封号的风险。建议低调使用,合理设置巡查间隔,避免高频操作引起异常。本项目不对任何封号后果负责。 1. **登录 Code 有效期有限**,过期后需要重新抓取 2. **请合理设置巡查间隔**,过于频繁可能触发服务器限流或封号 3. **微信环境**才支持邀请码和好友申请功能 4. **QQ 环境**下 code 支持多次使用 5. **微信环境**下 code 不支持多次使用,请抓包时将 code 拦截掉 6. **公网部署**建议在前端放置 nginx/caddy 反向代理并启用 HTTPS 7. **变异赌博**功能会产生大量种植/铲除操作,建议谨慎开启 ## 免责声明 本项目仅供学习和研究用途。使用本脚本可能违反游戏服务条款,存在被封号的风险,由此产生的一切后果由使用者自行承担。 ## License MIT