|
| 1 | +# EchoWaveBot 使用与部署指南 |
| 2 | + |
| 3 | +本指南面向运营/管理员,涵盖环境准备、功能说明、数据位置、部署与排障。假设你已拥有一个 Telegram Bot Token,并能把 Bot 拉进你的群组。 |
| 4 | + |
| 5 | +## 1. 环境与配置 |
| 6 | +- Python 3.13(本地调试)或 Docker(推荐生产)。 |
| 7 | +- 依赖:见 `requirements.txt`,主要包括 `python-telegram-bot[job-queue]`、`aiosqlite`、`httpx`、`python-dotenv`。 |
| 8 | +- 必填环境变量(`.env`): |
| 9 | + - `BOT_TOKEN`:BotFather 生成的 token。 |
| 10 | + - `ADMIN_GROUP_ID`:超级管理员 ID,可填个人 user_id(推荐)或一个“管理员群” chat_id。只有它能使用 `/report`、`/revoke`、`/set_topic`。 |
| 11 | +- 数据文件(默认值与位置): |
| 12 | + - SQLite DB:`echowave.db`(当前代码指向项目根;若按生产部署方案,则在容器内 `/app/echowave.db`,挂载宿主 `/root/echowave.db`)。 |
| 13 | + - 旧版 JSON 数据:`bot_data.json`(首次启动会尝试迁移到 DB,迁移后会重命名为 `.bak`)。 |
| 14 | + - 段位默认值:`{"0":"🌱茁壮韭菜", "100":"💎钻石双手", "500":"🐋潜水巨鲸", "2000":"📈K线主宰", "5000":"🚀交易战神"}`(初始化时写入 groups.rank_config)。 |
| 15 | + |
| 16 | +## 2. 本地运行(非 Docker) |
| 17 | +1) `python -m venv .venv && source .venv/bin/activate` |
| 18 | +2) `pip install -r requirements.txt` |
| 19 | +3) 创建 `.env`,填入 `BOT_TOKEN` 和 `ADMIN_GROUP_ID`。 |
| 20 | +4) 运行 `python main.py`。启动后日志显示 “EchoWave Pro Max (SQLite Edition) 已启动…”。 |
| 21 | + |
| 22 | +## 3. 功能总览 |
| 23 | +- 公共指令:`/shop`(积分商城)、`/invite`(邀请好友)、`/my`(我的积分)、`/top`(积分榜)、`/fear`(恐慌贪婪指数)、`/help`。 |
| 24 | +- 管理员/高级指令: |
| 25 | + - 终极管理员(ADMIN_ID):`/report`、`/revoke <chat_id>`、`/set_topic <news|analysis|marketing|signal>`、`/request_broadcast`。 |
| 26 | + - 群管理员:`/request_broadcast`。 |
| 27 | + - 私聊管理员工具:`/setup`(配置群)、`/add_product`、`/products`、`/use <code>`。 |
| 28 | +- 互动与积分规则(默认): |
| 29 | + - 签到口令:`恒智牛逼`(可在 `/setup` 修改)。 |
| 30 | + - 晒单关键词:盈/吃肉 → `kw_profit`,损/止损 → `kw_loss`(默认可在 `/setup` 设置,积分默认 50/30;示例数据为 20/20)。 |
| 31 | + - 每日晒单上限:5 次(-2 表示不限)。 |
| 32 | + - 邀请奖励:15 分(通过验证后触发)。 |
| 33 | + |
| 34 | +## 4. 核心流程 |
| 35 | +### 4.1 入群验证与邀请 |
| 36 | +- 新人进群(非 Bot)会被禁言并收到验证按钮。超时未验证将被封禁后解禁。 |
| 37 | +- 通过验证后: |
| 38 | + - 标记为已验证; |
| 39 | + - 若是通过邀请链接(`https://t.me/<bot>?start=ref_<referrerId>_<groupId>`),邀请人得积分奖励; |
| 40 | + - 发送欢迎语(支持 `{name}` 占位符)。 |
| 41 | +- 邀请链接生成:私聊 `/invite` → 选择一个你已经有积分记录的群(users 表里有记录即可)→ Bot 返回带 group_id 的 deep link。管理员需确保 Bot 在目标群且有生成邀请链接权限,否则无法附带入群按钮。 |
| 42 | + |
| 43 | +### 4.2 配置面板 `/setup`(仅私聊、群管理员) |
| 44 | +- 进入后选择要配置的群。面板项目: |
| 45 | + - 开关:欢迎语、验证码、各类型订阅(早报/分析/战绩/信号)、暂停广播。 |
| 46 | + - 路由:topic ID 绑定(早报/分析/战绩/信号)。 |
| 47 | + - 欢迎语、签到口令、晒单关键词、各积分数值、段位表 JSON、晒单上限。 |
| 48 | +- 注意:`/setup` 是会话式指令。若被卡在会话里影响其他回调,请使用关闭/返回或 `/cancel` 结束。 |
| 49 | + |
| 50 | +### 4.3 广播与话题绑定 |
| 51 | +- 在群内 `/request_broadcast` 向 ADMIN_ID 申请;终极管理员批准后该群标记为广播群。 |
| 52 | +- 终极管理员发消息(常在 ADMIN_ID 对应的聊天/话题)→ Bot弹出类型选择 → 分发到订阅了对应类型的群,支持按话题发送。 |
| 53 | +- 回执会尝试用原话题回复,找不到则发到 General。 |
| 54 | +- 如果群不存在/被踢,会自动关闭该群的广播标记。 |
| 55 | + |
| 56 | +### 4.4 商城 |
| 57 | +- `/add_product`(私聊,管理员):选择群→传图(可跳过)→“价格 商品名”→上架。 |
| 58 | +- `/products`(私聊,管理员):列出商品,点击“下架”。 |
| 59 | +- `/shop`(群内):列出商品列表,带“购买”按钮。 |
| 60 | +- 购买流程:扣积分→生成核销码 ORD-XXXXXX → 私聊买家发送核销信息(若无法私聊则回到群提示)。管理员 `/use <code>` 核销,校验管理员身份(需在订单所属群有 admin 权限)。 |
| 61 | + |
| 62 | +### 4.5 积分&榜单 |
| 63 | +- `/my`:当前积分(points),历史总分(total_points),段位基于 total_points。 |
| 64 | +- `/top`:按当前积分排序显示前 10。 |
| 65 | +- 积分获取:签到、晒单(盈/亏),邀请奖励。 |
| 66 | + |
| 67 | +## 5. 部署(Docker) |
| 68 | +### 5.1 镜像构建 |
| 69 | +- 已提供 `Dockerfile`:基于 `python:3.13-slim`,设置时区为上海,安装依赖后 `CMD ["python", "main.py"]`。 |
| 70 | +- 推荐新增 `.dockerignore`(如排除 `.env`、`.venv`、本地 DB/WAL/SHM、`__pycache__` 等)。 |
| 71 | + |
| 72 | +### 5.2 数据持久化 |
| 73 | +- 默认 DB 路径:`/app/echowave.db`。必须通过 volume 将宿主机文件或目录挂载进容器,避免重建容器丢数据。 |
| 74 | +- 现有 GitHub Action 部署脚本(`.github/workflows/deploy.yml` 示例)挂载方式: |
| 75 | + - `-v /root/bot_data.json:/app/bot_data.json` |
| 76 | + - `-v /root/echowave.db:/app/echowave.db` |
| 77 | +- 如果你改成目录挂载(推荐):把代码里的 DB_FILE 指向 `data/echowave.db`,运行容器时 `-v /root/bot_data:/app/data`,WAL/SHM 也会被持久化。 |
| 78 | + |
| 79 | +### 5.3 GitHub Action 示例要点 |
| 80 | +- main 分支推送触发,构建并推送镜像到 Docker Hub。 |
| 81 | +- SSH 到 VPS,拉取最新镜像,停止旧容器,挂载数据文件后重新运行: |
| 82 | + ``` |
| 83 | + docker run -d \ |
| 84 | + --name echowave \ |
| 85 | + --restart always \ |
| 86 | + -v /root/bot_data.json:/app/bot_data.json \ |
| 87 | + -v /root/echowave.db:/app/echowave.db \ |
| 88 | + --env-file /root/.env \ |
| 89 | + jerry113/echowave:latest |
| 90 | + ``` |
| 91 | +- 确保 `/root/.env` 存在且含 BOT_TOKEN/ADMIN_GROUP_ID。 |
| 92 | + |
| 93 | +## 6. 常见问题与排障 |
| 94 | +- `/invite` 生成后没有入群按钮:Bot 在目标群没有创建邀请链接权限或不在群。解决:赋予生成链接权限或增加一个“自填邀请链接”字段作为兜底。 |
| 95 | +- `/invite` 选择群后跳到 `/setup`:旧设计下 setup 会话会截获回调,需要给 setup 的 CallbackQueryHandler 加 pattern 或手动结束会话(本仓库已修复)。 |
| 96 | +- `/report` 无响应:ADMIN_ID 未正确解析(.env 错误/空),或你不是 ADMIN_ID/所在聊天不是 ADMIN_ID。 |
| 97 | +- `/report` 订阅只显示“早,信”:旧版漏掉“析”“战”,已在 `handlers/admin.py` 修复。 |
| 98 | +- 新人验证后仍无法发图/视频:需使用 `ChatPermissions` 的关键字参数覆盖全部媒体字段(本仓库已修复)。 |
| 99 | +- 数据丢失:检查容器启动命令是否正确挂载 DB 文件/目录。 |
| 100 | +- 无法推送/拉取镜像:确认网络代理及 Docker Hub 凭证;CI 使用的代理可能导致 127.0.0.1:7890 连接失败。 |
| 101 | + |
| 102 | +## 7. 表结构概览(简述) |
| 103 | +- `groups`:群配置(订阅开关、topic、欢迎语、积分规则、段位表)。 |
| 104 | +- `users`:群内用户积分、签到/晒单计数、邀请人、验证状态。 |
| 105 | +- `message_map`:管理员消息 ID 与各群回执消息 ID 的映射(用于追踪回复)。 |
| 106 | +- `pending_req`:广播申请队列。 |
| 107 | +- `admin_topic_mappings`:管理员话题 -> 类型绑定。 |
| 108 | +- `products` / `orders`:商城商品与订单(核销码)。 |
| 109 | + |
| 110 | +## 8. 快速检查清单 |
| 111 | +1) `.env` 填了 BOT_TOKEN、ADMIN_GROUP_ID。 |
| 112 | +2) Bot 已加入目标群且是管理员(必要权限:禁言/解禁、发送消息、创建邀请链接(可选)、管理话题(如需话题路由)、读取管理员列表(核销鉴权))。 |
| 113 | +3) 部署时挂载了 DB 文件/目录;首次运行后确认 DB 文件大小有增长。 |
| 114 | +4) 终极管理员(ADMIN_ID)能在私聊执行 `/report`;群内管理员能 `/setup`。 |
| 115 | +5) `/invite` 生成的链接能打开,若无按钮检查 Bot 邀请权限或提供手动链接。 |
0 commit comments