MCPcopy
hub / github.com/zhinianboke/xianyu-auto-reply

github.com/zhinianboke/xianyu-auto-reply @main sqlite

repository ↗ · DeepWiki ↗
5,823 symbols 22,312 edges 711 files 2,866 documented · 49%
README

闲鱼自动回复系统

基于 FastAPI + React + MySQL + Redis + Playwright 的闲鱼多账号自动化系统。

主系统负责账号管理、消息收发、自动回复、自动发货、商品发布与后台管理;promotion 子项目负责返佣账号、选品规则、素材库、发布规则、删除规则和相关修复任务。

🔴 说明

🔴 诚邀各位开发者提交pr,完善系统

🔴 承接各类项目定制,各类项目均可,有需要可联系,另外我菜,不一定都会

🔴 最新源码地址(建议转存)

🔴 我用夸克网盘给你分享了「自动发货」,点击链接或复制整段内容,打开「夸克网盘APP」即可获取。

🔴 /~79313YhCQU~:/

🔴 链接:https://pan.quark.cn/s/af567356cba7

交流群

微信群 QQ群 微信公众号 Telegram 赞赏支持
微信群 QQ群 微信公众号 Telegram 赞赏支持
扫码加入微信交流群 扫码加入QQ交流群 关注公众号发送"最新源码"获取最新代码 扫码加入Telegram群 如果觉得好用,请作者喝杯咖啡

如群二维码过期,请关注公众号获取最新群链接。


功能概览

主系统

模块 说明
多账号管理 支持多个闲鱼账号登录、状态切换、Cookie 维护与登录续期
自动回复 支持文本关键词、图片关键词、默认回复、商品专属回复
AI 回复 支持大模型上下文对话与智能回复
自动发货 支持卡券、虚拟商品、自动补发、发送结果记录
在线聊天 支持会话列表、消息收发、聊天联动
商品发布 支持素材库、地址库、单品发布、批量发布、发布日志
订单与评价 订单拉取、自动评价、求小红花、状态跟踪
商品采集与分销 Goofish 采集、货源管理、对接记录、结算链路
通知与风控 支持消息通知、风控日志、系统反馈与公告管理

返佣子系统

模块 说明
返佣账号 返佣账号登录、状态管理、Cookie 维护
选品规则 按规则抓取候选商品并自动写入素材库
素材库 管理标题、图片、详情、淘口令、短链、库存、发布状态
发布规则 定时发布返佣商品,复用公共发布能力
删除规则 定时删除已发布商品
补偿任务 已发布商品 ID 回写、短链修复、卡券补偿等

技术栈

后端与自动化

技术 说明
FastAPI 主系统与返佣后端 API 服务
SQLAlchemy 2.0 ORM 与数据库访问
MySQL 8.0 主数据存储
Redis 7 缓存、会话与任务辅助
Playwright 登录、Cookie 刷新、发布等浏览器自动化
APScheduler 定时任务调度
Loguru 日志管理

前端

技术 说明
React 18 + TypeScript 主系统与返佣前端
Vite 开发与构建
TailwindCSS 主系统 UI 样式
Zustand 状态管理
Lucide React 图标体系

部署

技术 说明
Docker / Docker Compose 容器化部署
Nginx 前端静态资源与反向代理

系统要求

开发环境

  • Python 3.11+
  • Node.js 18+
  • MySQL 8.0+
  • Redis 6+
  • Chromium / Chrome(Playwright 相关功能)

生产环境

  • Docker 20.10+
  • Docker Compose 2.0+
  • 最低 2 核 CPU / 4GB 内存
  • 推荐 4 核 CPU / 8GB 内存

项目结构

xianyu-auto-reply/
├── backend-web/          # 主 Web API 服务(端口 8089)
├── websocket/            # 闲鱼连接与消息处理服务(端口 8090)
├── scheduler/            # 定时任务服务(端口 8091)
├── common/               # 主系统与返佣系统共享模块
├── frontend/             # 主系统前端(端口 9000)
├── launcher/             # Windows 桌面启动器(Nuitka 打包为 EXE)
├── promotion/
│   ├── backend/          # 返佣后端(端口 8092)
│   └── frontend/         # 返佣前端(端口 9001)
├── scripts/              # CI/CD 与工具脚本
├── docker/frontend/      # 前端 Dockerfile 与 Nginx 配置
├── docker-compose.yml    # 本地源码构建编排
├── deploy.sh             # 一键部署脚本(自动生成远程镜像版 compose)
├── deploy_remote.sh      # 远程 MySQL/Redis 一键部署脚本(自动生成 docker-compose.remote.yml)
├── update.sh             # 一键更新脚本(拉取最新远程镜像)
├── build.sh              # 本地源码全量构建脚本
├── build_frontend.sh     # 单独构建并重启 Frontend
├── build_backend_web.sh  # 单独构建并重启 Backend-Web
├── build_websocket.sh    # 单独构建并重启 WebSocket
├── build_scheduler.sh    # 单独构建并重启 Scheduler
├── EXE打包构建.bat       # Windows 桌面启动器打包脚本
├── 离线依赖打包.bat      # Windows 离线依赖打包脚本
└── README.md

服务职责

服务 默认端口 说明
frontend 9000 主系统前端
backend-web 8089 主系统 API 网关、业务接口
websocket 8090 闲鱼 WebSocket、消息收发、登录与订单联动
scheduler 8091 定时任务执行器
promotion/backend 8092 返佣后端 API
promotion/frontend 9001 返佣前端

架构说明

  • 主系统采用多服务拆分:
  • frontend 负责界面与交互
  • backend-web 负责大部分业务 API
  • websocket 负责闲鱼实时连接、扫码登录、消息处理
  • scheduler 负责自动发货、评价、订单拉取、Cookie 刷新等定时任务
  • common 提供模型、数据库、自检、公共服务与工具
  • 返佣子系统位于 promotion/ 目录,前后端独立,当前不在根目录 Docker Compose 编排内
  • 主系统三个后端服务都提供 /health 健康检查接口
  • Docker 依赖链:mysql/redis → backend-web → websocket → scheduler;frontend → backend-web

快速开始

方式一:服务器一键部署(推荐)

服务器已安装 Docker 与 Docker Compose 后,直接执行一键部署脚本即可:

curl -fsSL https://xy-update.zhinianboke.com/deploy.sh | sed 's/\r$//' | bash

该脚本会自动完成部署所需的配置生成、镜像拉取、旧容器清理与服务启动。

更新版本,直接执行一键更新脚本即可:

curl -fsSL https://xy-update.zhinianboke.com/update.sh | sed 's/\r$//' | bash

方式二:克隆仓库部署

git clone https://github.com/zhinianboke/xianyu-auto-reply.git
cd xianyu-auto-reply
bash deploy.sh
  • 首次运行会自动生成 .env 配置文件和 docker-compose.deploy.yml
  • 从阿里云镜像仓库拉取预构建镜像并启动
  • 如果检测到加密版容器会自动清理(保留数据卷)
  • 部署完成后默认访问地址:
  • 前端:http://服务器IP:9000
  • API 文档:http://服务器IP:8089/docs
  • 默认账号:admin / admin123

后续更新:

bash update.sh

方式三:使用远程 MySQL / Redis 部署

当 MySQL 和 Redis 由外部(如云数据库 RDS、独立服务器或已有实例)提供时,可使用 deploy_remote.sh。 该脚本不内置 mysql/redis 容器,仅拉取并启动 4 个应用服务(frontend / backend-web / websocket / scheduler), 数据库连接信息通过 .env.remote 配置。与方式一相同,直接远程拉取脚本执行即可:

# 1) 首次运行:自动生成 .env.remote 后退出,提示填写远程连接信息
curl -fsSL https://xy-update.zhinianboke.com/deploy_remote.sh | sed 's/\r$//' | bash

# 2) 编辑 .env.remote,填写真实的远程地址(勿填 localhost)
#    MYSQL_HOST / REDIS_HOST 等
vim .env.remote

# 3) 再次运行:校验配置 → 自动生成 docker-compose.remote.yml → 拉取镜像 → 启动
curl -fsSL https://xy-update.zhinianboke.com/deploy_remote.sh | sed 's/\r$//' | bash

已克隆仓库的也可改用本地脚本:bash deploy_remote.sh(首次生成配置后退出,填好 .env.remote 再次执行)。

  • 首次运行自动生成 .env.remote,每次运行自动生成 docker-compose.remote.yml,均不影响根目录原有的 .env / docker-compose.yml / docker-compose.deploy.yml
  • 容器名与主套保持一致(xianyu-backend-web / xianyu-websocket / xianyu-scheduler / xianyu-frontend),与方式二/方式四属于同一套部署,二者只需选其一,不要同时启动
  • 远程 MySQL 需提前创建好数据库(默认 xianyu_data)并授权部署机 IP 远程访问,应用启动时会自动建表与补齐字段
  • 若远程库/缓存就在宿主机上,请使用 host.docker.internal 或宿主机内网 IP,不要填 localhost / 127.0.0.1

方式四:本地源码 Docker 构建

bash build.sh rebuild

常用命令:

命令 说明
bash build.sh rebuild 删除旧容器与镜像,重新构建并启动
bash build.sh start 启动服务
bash build.sh stop 停止服务
bash build.sh restart 重启服务
bash build.sh logs 查看实时日志
bash build.sh status 查看服务状态

单独重建某个服务(不影响其他服务):

bash build_frontend.sh      # 重建前端
bash build_backend_web.sh   # 重建 Backend-Web
bash build_websocket.sh     # 重建 WebSocket
bash build_scheduler.sh     # 重建 Scheduler

方式五:源码本地开发

1. 准备基础服务

可以使用本机 MySQL / Redis,也可以仅用 Docker 启动基础设施:

docker compose up -d mysql redis

2. 创建服务配置

主系统常用 .env 配置示例:

ENVIRONMENT=development
MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=root
MYSQL_DATABASE=xianyu_data
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DB=0
CORS_ORIGINS=*
BACKEND_WEB_PORT=8089
WEBSOCKET_PORT=8090
SCHEDULER_PORT=8091
WEBSOCKET_SERVICE_URL=http://127.0.0.1:8090
SCHEDULER_SERVICE_URL=http://127.0.0.1:8091
BACKEND_WEB_SERVICE_URL=http://127.0.0.1:8089
STATIC_DIR=static
TZ=Asia/Shanghai

3. 启动主系统后端

# Backend-Web 服务
cd backend-web
python -m venv .venv
# Windows: .venv\Scripts\activate
# Linux/macOS: source .venv/bin/activate
pip install -e .
python -m playwright install chromium
python main.py
# WebSocket 服务
cd websocket
python -m venv .venv
# Windows: .venv\Scripts\activate
# Linux/macOS: source .venv/bin/activate
pip install -e .
python -m playwright install chromium
python main.py
# Scheduler 服务
cd scheduler
python -m venv .venv
# Windows: .venv\Scripts\activate
# Linux/macOS: source .venv/bin/activate
pip install -e .
python -m playwright install chromium
python main.py

4. 启动前端

cd frontend
npm install
npm run dev

5. 启动返佣子系统

# 返佣后端
cd promotion/backend
pip install -e .
python main.py

# 返佣前端
cd promotion/frontend
npm install
npm run dev

配置说明

关键环境变量

变量 说明
MYSQL_HOST / MYSQL_PORT / MYSQL_USER / MYSQL_PASSWORD / MYSQL_DATABASE MySQL 连接
REDIS_HOST / REDIS_PORT / REDIS_PASSWORD / REDIS_DB Redis 连接
JWT_SECRET_KEY JWT 密钥,由数据库统一托管(首次启动自动生成并持久化),无需手动配置
BACKEND_WEB_PORT / WEBSOCKET_PORT / SCHEDULER_PORT 各服务端口
WEBSOCKET_SERVICE_URL / SCHEDULER_SERVICE_URL / BACKEND_WEB_SERVICE_URL 服务间调用地址
BACKEND_WEB_PUBLIC_URL 对外访问地址,用于生成文件 URL
CORS_ORIGINS CORS 白名单
BROWSER_HEADLESS Playwright 是否无头运行

数据库与初始化

  • 主系统启动时自动建表、自检、缺失字段补齐、默认数据初始化
  • 默认管理员:admin / admin123
  • 返佣系统启动时执行独立的数据库自检
  • 返佣系统表统一使用 fy_ 前缀
  • 不依赖外键约束,关系由代码维护
  • 所有时间统一使用北京时间(Asia/Shanghai

统一响应格式

后端采用统一响应包装,业务异常也返回 HTTP 200:

{
  "success": true,
  "code": 200,
  "message": "操作成功",
  "data": {}
}

构建脚本速查

脚本 平台 作用
deploy.sh Linux 生成远程镜像版 compose 并拉取镜像启动(首次部署)
deploy_remote.sh Linux 使用远程 MySQL/Redis 部署,生成 docker-compose.remote.yml.env.remote 并启动应用服务
update.sh Linux 拉取最新远程镜像并重建应用容器(后续更新)
build.sh Linux 从源码全量构建所有 Docker 镜像并启动
build_frontend.sh Linux 单独重建并重启 Frontend 服务
build_backend_web.sh Linux 单独重建并重启 Backend-Web 服务
build_websocket.sh Linux 单独重建并重启 WebSocket 服务
build_scheduler.sh Linux 单独重建并重启 Scheduler 服务
EXE打包构建.bat Windows 使用 Nuitka 打包桌面启动器 EXE
离线依赖打包.bat Windows 打包所有 Python 依赖供离线安装
scripts/Pipeline脚本-xianyu-auto-reply.groovy Jenkins CI/CD 流水线,构建多架构镜像并推送到阿里云 ACR

安全说明

  • JWT 认证:主系统与返佣系统都使用 JWT 做登录态控制
  • 密码存储:密码使用哈希方式保存
  • SQL 注入防护:数据库访问使用参数化查询
  • XSS 防护:前端输入与展示做好校验与转义
  • CORS 控制:生产环境应限制到明确域名

生产环境建议

  1. 立即修改默认管理员密码
  2. JWT 密钥由数据库统一托管,首次启动自动生成强随机密钥(无需手动设置)
  3. 设置正确的 BACKEND_WEB_PUBLIC_URL 与反向代理地址
  4. 为外网入口配置 HTTPS
  5. 定期备份 MySQL 与静态资源目录
  6. 确保 Playwright 浏览器已正确安装

常见问题

根目录 Docker Compose 没有启动返佣系统?

当前 docker-compose.yml 只覆盖主系统。返佣系统需要单独启动。

登录或发布时报浏览器缺失?

在对应 Python 环境执行:python -m playwright install chromium。Docker 环境依赖各服务 Dockerfile 内已安装的浏览器。

Docker 部署端口冲突?

修改根目录 .env 中的端口配置后重新部署。

执行脚本报 /bin/bash^M: 坏的解释器

脚本文件包含 Windows 换行符(CRLF),Linux 无法识别。解决方法:

# 方法一:用 sed 去除 \r 后执行
sed -i 's/\r$//' deploy.sh
bash deploy.sh

# 方法二:通过管道执行(推荐远程脚本使用)
curl -fsSL https://xy-update.zhinianboke.com/deploy.sh | sed 's/\r$//' | bash

许可证

本项目采用 GNU Affero General Public License v3.0 (AGPL-3.0) 开源协议。

⚠️ 禁止商业用途:本项目仅供学习研究使用,严禁任何形式的商业用途。

免责声明

本项目仅供技术学习和研究使用,使用者需自行承担使用风险。请遵守相关平台的使用条款和法律法规。

  • 本项目不对使用本系统造成的任何后果负责
  • 请勿用于违反闲鱼平台规则的行为
  • 请勿用于商业用途
  • 使用本系统可能存在账号风险,请谨慎使用

🧸 特别鸣谢

本项目参考了以下开源项目:

  • XianYuApis - 提供了闲鱼API接口的技术参考
  • XianyuAutoAgent - 提供了自动化处理的实现思路
  • myfish - 提供了扫码登录的实现思路

感谢这些优秀的开源项目为本项目的开发提供了宝贵的参考和启发!

Star History

Star History Chart

Extension points exported contracts — how you extend this code

WsConnection (Interface)
单个账号的 WebSocket 连接状态
frontend/src/pages/chat-new/useChatNewWs.ts
ThemeSettings (Interface)
主题设置
promotion/frontend/src/utils/theme.ts
ApiResp (Interface)
通用API响应
frontend/src/api/activation.ts
ThemePalette (Interface)
调色板
promotion/frontend/src/utils/theme.ts
User (Interface)
(no doc)
frontend/src/types/index.ts
User (Interface)
(no doc)
promotion/frontend/src/types/index.ts
LoginRequest (Interface)
(no doc)
frontend/src/types/index.ts
LoginRequest (Interface)
(no doc)
promotion/frontend/src/types/index.ts

Core symbols most depended-on inside this repo

get
called by 1617
backend-web/app/core/http_client.py
execute
called by 995
scheduler/app/services/scheduler/rate_task.py
get
called by 718
common/services/publish_address_service.py
get
called by 555
backend-web/app/services/user_service.py
add
called by 194
backend-web/app/services/pickup_service.py
filter
called by 134
common/db/init_database.py
safe_isoformat
called by 111
common/utils/time_utils.py
post
called by 109
frontend/src/utils/request.ts

Shape

Function 2,744
Method 1,756
Route 480
Class 455
Interface 388

Languages

Python68%
TypeScript32%

Modules by API surface

backend-web/app/api/routes/admin.py88 symbols
backend-web/app/api/routes/cookies.py73 symbols
frontend/src/pages/accounts/Accounts.tsx71 symbols
backend-web/app/api/routes/distribution.py67 symbols
frontend/src/api/accounts.ts65 symbols
websocket/app/services/xianyu/auto_delivery_handler.py64 symbols
common/db/compat.py64 symbols
backend-web/app/api/routes/items.py59 symbols
websocket/app/services/xianyu/xianyu_async.py57 symbols
frontend/src/api/settings.ts54 symbols
common/services/order_service.py47 symbols
websocket/app/api/routes/internal.py44 symbols

Dependencies from manifests, versioned

@types/node20.10.6 · 1×
@types/react18.2.46 · 1×
@types/react-dom18.2.18 · 1×
@typescript-eslint/eslint-plugin6.17.0 · 1×
@typescript-eslint/parser6.17.0 · 1×
@vitejs/plugin-react4.2.1 · 1×
autoprefixer10.4.16 · 1×
axios1.6.5 · 1×
clsx2.1.0 · 1×
eslint8.56.0 · 1×
eslint-plugin-react-hooks4.6.0 · 1×
eslint-plugin-react-refresh0.4.5 · 1×

Datastores touched

(mysql)Database · 1 repos

For agents

$ claude mcp add xianyu-auto-reply \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact