Files
HeXi/README.md
T
sansenhoshi 131b92b319 结构调整
视频解析多图/多媒体结构 消息体适配
2026-09-08 14:25:32 +08:00

130 lines
5.8 KiB
Markdown
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.
# 禾汐 (HeXi)
基于 **NoneBot2** 的个人娱乐 QQ 机器人,使用 **OneBot V11** 协议接入。集成了游戏战绩查询、群聊学习、每日打卡、人设卡、表情包等大量功能,以插件化方式组织,方便增删。
## 功能特性
### 游戏相关
| 插件 | 功能 | 主要命令 |
| --- | --- | --- |
| `nonebot_plugin_bf_bot` | 战地系列 (BF3/BF4/BF1/BFV/BF2042/BF6) 战绩查询,PIL 生成统计卡片 | `/bft` `/bfbind` `/unbind` `/update_bind` |
| `nonebot_plugin_deadlock` | Deadlock 战绩、段位、近期比赛查询 | `/nekoscore` `/nekobind` `/nekounbind` `/nekorank` `/nekomatch` |
| `nonebot_plugin_steam_info` | Steam 玩家信息、库存、游戏时长查询 | `/steamhelp` `/steambind` `/steaminfo` `/steamplaytime` 等 |
| `nonebot_plugin_helldivers_tools` | 绝地潜兵 2 前线战况简报、星球详报、随机战备推荐 | `/简报` `/详报` `/随机战备` |
| `nonebot_plugin_mc_server_status` | Minecraft 服务器状态查询 | `/信息` `/信息数据` |
| `nonebot_plugin_ncm_saying` | 网易云音乐热评(网抑云) | `/网抑云` |
| `nonebot-bison` | Bilibili / 微博等订阅推送 | — |
### 聊天娱乐
| 插件 | 功能 | 主要命令 |
| --- | --- | --- |
| `nonebot_plugin_learning_chat` | 马尔可夫链群聊学习:被动学习群消息并模仿回复,定时主动发言;附 Vue 3 Web 管理后台 | — |
| `nonebot_plugin_galgame_card` | 群友"人设卡"生成与展示,带 Web 管理后台 | — |
| `nonebot_plugin_group_tools` | 群工具集(头像、表情、签到素材、游戏素材图等) | — |
| `nonebot_plugin_dailywife` | 每日随机抽取群友当"老婆" | `/今日老婆` |
| `nonebot_plugin_deer_pipe` | 每日打卡(鹿)与打卡记录,日历可视化 | `/打卡记鹿` `/查询记录` |
| `nonebot_plugin_makeaquote` | 生成"名言"引用图片 | — |
| `memes_ops` | 表情包运营/管理 | — |
| `nonebot_plugin_random_jm_code` | 随机 JM 本子代码 | `/jm` |
| `nonebot_plugin_dice` | 骰子掷点 | — |
### 实用工具
| 插件 | 功能 | 主要命令 |
| --- | --- | --- |
| `hexi/core`(核心模块) | 核心库:消息解析、权限分级、限流器 (token bucket)、命令冷却、热插件管理(**非插件**) | — |
| `nonebot_plugin_video_analysis` | 视频链接解析 | — |
| `nonebot_plugin_regif` | GIF 注册与处理 | — |
| `nonebot_plugin_picfinder_take` | 识图(Playwright 驱动) | — |
| `nonebot_plugin_picstatus` | 头像状态图生成 | — |
| `nonebot_plugin_group_daily_analysis` | 群聊行为分析报告 | `/群分析` |
| `hexi/web_hub`(核心模块) | 统一 Web 管理入口 `/hub`(**非插件**) | — |
## 快速开始
### 环境要求
- Python **3.10+**,使用 [Poetry](https://python-poetry.org/) 管理依赖
- 一个 OneBot V11 实现(如 [NapCat](https://github.com/NapNeko/NapCatQQ)、Lagrange)作为 QQ 接入端
### 安装与启动
```bash
# 安装依赖
poetry install
# 配置环境变量(见下节),然后启动
poetry run python bot.py
```
- **开发**:使用 `.env.dev`(监听 `127.0.0.1:11011`,昵称 Elika)
- **生产**:复制为根目录 `.env` 后启动(监听 `0.0.0.0:39697`,超级用户 `2931589710`,昵称 爱丽丝)
`.env` / `.env.dev` 均已被 `.gitignore` 排除,包含凭据的文件不会进入仓库。
## 配置
启动时 NoneBot 自动加载根目录 `.env` 文件,主要变量:
| 变量 | 说明 |
| --- | --- |
| `HOST` / `PORT` | 监听地址与端口 |
| `SUPERUSERS` | 超级用户 QQ 号 |
| `NICKNAME` | 机器人昵称 |
| `COMMAND_START` / `COMMAND_SEP` | 命令前缀与分隔符 |
| `DRIVER` | NoneBot 驱动器(httpx + fastapi + websockets) |
| `ONEBOT_ACCESS_TOKEN` | OneBot 接入鉴权 token |
| `DATASTORE_*` | 数据目录(localstore 统一指向 `hexi/data/` 等) |
| `SENTRY_DSN` / `SENTRY_ENVIRONMENT` | Sentry 错误上报(可选) |
| `BISON_*` | Bison 订阅推送配置 |
各插件专属配置(Steam API key、网易云 cookie、识图等)按需在 `.env` 中补充,详见各插件文档。
## 目录结构
```
HeXi/
├── bot.py pyproject.toml README.md
├── hexi/
│ ├── plugins/ # 全部插件(pyproject [tool.nonebot] plugin_dirs 加载)
│ ├── core/ # 机器人核心模块(非插件):工具库/插件控制面/热拔插管理
│ ├── web_hub/ # 机器人核心模块:统一 Web 管理台 + 鉴权/插件注册/配置标准
│ ├── data/ # 运行数据(不入库)
│ ├── config/ # 业务配置(不入库)
│ ├── resource/ # 全局静态资源(fonts/ 字体、menu_config 等)
│ ├── web/ # 统一 Web 前端(React + Vite,构建产物 dist/ 供 /hub 挂载)
│ ├── logs/ # 日志(不入库)
│ └── web_hub/ # 见上:统一 Web 管理台/鉴权/插件注册/配置标准
├── docs/ # 插件开发标准文档
├── tests/ # pytest 测试
└── plugin_template/ # 新插件脚手架模板
```
- **数据库**:`hexi/data/data.db`(datastore)、`hexi/data/nonebot_plugin_orm/db.sqlite3`(orm,各插件表)
- **群聊学习数据**:`hexi/data/record.json` + `inverted_index.json`(马尔可夫链)
- **本地插件数据**通过 localstore 统一收进 `hexi/data/`,避免散落根目录
## 测试与开发
```bash
poetry run pytest # 运行测试(tests/,asyncio auto 模式)
poetry run black . # 格式化
poetry run isort . # import 排序
poetry run ruff check . # lint
poetry run pyright # 类型检查
```
> 注意:测试文件必须放在 `tests/`,**不要**放进 `test/` —— `pyproject.toml` 中 `test` 是插件目录,NoneBot 启动时会把其中所有文件当插件加载。
新增插件请参考:
- [插件结构标准](dev/docs/plugin-structure-standard.md)
- [插件配置标准](dev/docs/plugin-config-standard.md)
- `dev/plugin_template/` 脚手架模板
## 许可
无