Skip to content

Commit 9401155

Browse files
committed
feat: 更新文档,添加 GitHub API 轮询和自定义模板系统设计概要,修改安装和部署说明
1 parent 50a6611 commit 9401155

File tree

7 files changed

+172
-19
lines changed

7 files changed

+172
-19
lines changed

README.md

Lines changed: 112 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,112 @@ python main.py
151151

152152
## 开发路线图
153153

154-
详细的开发路线图请参考 开发路线图文档。
154+
### 1. GitHub API 轮询(计划中)
155+
156+
对于无法使用 webhook 的场景(如私有仓库或受限环境),我们计划实现基于 GitHub API 的轮询机制。
157+
158+
#### 设计概要
159+
160+
- **配置方式**
161+
162+
```yaml
163+
GITHUB_API_POLLING:
164+
- NAME: "polling-example"
165+
REPO:
166+
- "username/repo"
167+
BRANCH:
168+
- "main"
169+
INTERVAL: 300 # 轮询间隔(秒)
170+
EVENTS:
171+
- "push"
172+
- "pull_request"
173+
TOKEN: "github_personal_access_token" # GitHub 个人访问令牌
174+
ONEBOT:
175+
- type: "group"
176+
id: 123456789
177+
```
178+
179+
- **功能**:
180+
- 定时检查仓库变更
181+
- 对比上次轮询结果,只通知新变更
182+
- 支持提交、PR、Issue 等多种数据类型轮询
183+
- 优化请求频率,避免触发 GitHub API 限流
184+
185+
- **实现计划**:
186+
- 使用 `APScheduler` 实现定时任务
187+
- 使用 `aiohttp` 实现异步 HTTP 请求
188+
- 使用本地文件存储上次轮询状态 ~~(轻量化的玩意不可能给你上数据库 or Redis)~~
189+
- 封装 GitHub API 客户端,处理认证和错误
190+
191+
### 2. 自定义模板系统(计划中)
192+
193+
允许用户自定义各类事件的通知消息格式,提供更灵活的展示方式。
194+
195+
#### 设计概要
196+
197+
- **模板存储**:
198+
- 模板文件存储在 `templates/` 目录下
199+
- 按照事件类型命名,如 `templates/push.txt`、`templates/issues.txt` 等
200+
- 也可以创建自定义命名的模板文件用于不同场景
201+
202+
- **配置方式**:
203+
204+
```yaml
205+
GITHUB_WEBHOOK:
206+
- NAME: "github"
207+
REPO:
208+
- "username/repo"
209+
BRANCH:
210+
- "main"
211+
SECRET: "your_secret"
212+
EVENTS:
213+
- "push"
214+
- "issues"
215+
TEMPLATES: # 为不同事件类型指定自定义模板
216+
push: "custom_push.txt" # 使用自定义推送模板
217+
issues: "default" # 使用默认 issues 模板
218+
ONEBOT:
219+
- type: "group"
220+
id: 123456789
221+
```
222+
223+
- **模板示例** (`templates/push.txt`):
224+
225+
```
226+
📢 GitHub 推送通知
227+
仓库:{{ repo_name }}
228+
分支:{{ branch }}
229+
推送者:{{ pusher }}
230+
提交数量:{{ commit_count }}
231+
{% for commit in commits %}
232+
[{{ loop.index }}] {{ commit.id[:7] }} by {{ commit.author.name }}
233+
{{ commit.message.split('\n')[0] }}
234+
{% endfor %}
235+
```
236+
237+
- **模板示例** (`templates/issues.txt`):
238+
239+
```
240+
📋 Issue {{ action }}
241+
仓库:{{ repo_name }}
242+
标题:{{ issue.title }}
243+
作者:{{ issue.user.login }}
244+
链接:{{ issue.html_url }}
245+
```
246+
247+
- **功能**:
248+
- 基于 Jinja2 模板引擎
249+
- 支持条件语句和循环
250+
- 每个 Webhook 可以指定不同的模板集合
251+
- 提供默认模板,无需配置即可使用
252+
- 模板变量自动文档化(将提供变量参考)
253+
254+
- **实现计划**:
255+
- 引入 Jinja2 依赖
256+
- 实现模板目录扫描和加载机制
257+
- 开发模板缓存以提高性能
258+
- 提供模板变量参考文档
259+
- 添加模板验证功能,避免语法错误
155260
156261
## 项目结构
157262
@@ -160,12 +265,15 @@ onebot-github-webhook/
160265
161266
├── app/ # 应用程序核心模块
162267
│ ├── api/ # API 接口
268+
| ├ └── github_webhook.py # GitHub Webhook 接口
163269
│ ├── core/ # 核心功能
164-
│ │ ├── github.py # GitHub Webhook 处理逻辑
165-
│ │ └── onebot.py # OneBot 消息发送客户端
270+
│ │ └── github.py # GitHub Webhook 处理逻辑
166271
│ ├── models/ # 数据模型
167272
│ │ └── config.py # 配置模型
273+
| ├── onebot/ # OneBot 发送器
274+
│ │ └── onebot.py # OneBot 消息发送客户端
168275
│ └── utils/ # 工具函数
276+
| ├── exceptions.py # 异常处理
169277
│ └── matching.py # 匹配规则工具
170278
171279
├── config/ # 配置文件目录
@@ -193,6 +301,7 @@ onebot-github-webhook/
193301
└── README.md # 项目说明文档
194302
```
195303
304+
196305
## 部署建议
197306
198307
### Docker 部署

docs/src/deployment.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@ docker run -d \
1010
e1saps/onebot-github-webhook:latest
1111
```
1212

13+
或使用 Docker Compose:
14+
15+
```bash
16+
cd docker
17+
docker-compose up -d
18+
```
19+
1320
### Systemd 服务
1421

1522
创建 `/etc/systemd/system/onebot-github-webhook.service`:
@@ -22,7 +29,7 @@ After=network.target
2229
[Service]
2330
User=www-data
2431
WorkingDirectory=/opt/onebot-github-webhook
25-
ExecStart=/opt/onebot-github-webhook/.venv/bin/python -m uvicorn app:app --host 0.0.0.0 --port 8000
32+
ExecStart=/opt/onebot-github-webhook/.venv/bin/python -m uvicorn main:app --host 0.0.0.0 --port 8000
2633
Restart=on-failure
2734
RestartSec=5s
2835

docs/src/faq.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,4 @@ A: 本程序暂时不支持推送到多个 QQ 机器人
2525

2626
## 许可证
2727

28-
本项目采用 [Apache License 2.0](LICENSE) 许可证。
28+
本项目采用 Apache License 2.0 许可证。

docs/src/installation.md

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ source .venv/bin/activate # Linux/Mac
1919

2020
```bash
2121
pip install -r requirements.txt
22+
# 或者使用 Poetry
23+
# poetry install
2224
```
2325

2426
4. 配置文件设置:
@@ -27,7 +29,7 @@ pip install -r requirements.txt
2729
或者复制示例配置文件:
2830

2931
```bash
30-
cp config.yaml.example config.yaml
32+
cp config/config.example.yaml config.yaml
3133
```
3234

3335
## 配置说明
@@ -42,12 +44,15 @@ ONEBOT_ACCESS_TOKEN: "your_token" # OneBot 访问令牌
4244

4345
GITHUB_WEBHOOK:
4446
- NAME: "github" # webhook 名称
45-
REPO: # 监听的仓库列表,支持用户名/* 匹配用户所有仓库
47+
REPO: # 监听的仓库列表,支持通配符匹配
4648
- "username/repo"
4749
- "username/*"
48-
BRANCH: # 监听的分支列表
50+
- "*/*-api"
51+
BRANCH: # 监听的分支列表,支持通配符匹配
4952
- "main"
5053
- "develop"
54+
- "feature/*"
55+
- "release-*"
5156
SECRET: "your_secret" # GitHub Webhook 密钥
5257
EVENTS: # 监听的事件类型
5358
- "push"
@@ -63,13 +68,13 @@ GITHUB_WEBHOOK:
6368
## 运行
6469
6570
```bash
66-
uvicorn app:app --host 0.0.0.0 --port 8000
71+
uvicorn main:app --host 0.0.0.0 --port 8000
6772
```
6873

6974
或者直接执行:
7075

7176
```bash
72-
python app.py
77+
python main.py
7378
```
7479

7580
## GitHub Webhook 设置

docs/src/introduction.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
<h1 align="center">
2-
OneBot GitHub Webhook
3-
</h1>
4-
51
<div align="center">
62
<img src="./resources/logo.png" alt="OneBot GitHub Webhook Logo">
73
</div>

docs/src/structure.md

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,42 @@
11
## 项目结构
22

3-
- app.py: 主应用入口和 Web 服务器
4-
- github_webhook.py: GitHub Webhook 处理逻辑
5-
- send_message.py: OneBot 消息发送客户端
6-
- settings.py: 配置加载和验证
7-
- requirements.txt: 项目依赖
3+
```
4+
onebot-github-webhook/
5+
6+
├── app/ # 应用程序核心模块
7+
│ ├── api/ # API 接口
8+
| ├ └── github_webhook.py # GitHub Webhook 接口
9+
│ ├── core/ # 核心功能
10+
│ │ └── github.py # GitHub Webhook 处理逻辑
11+
│ ├── models/ # 数据模型
12+
│ │ └── config.py # 配置模型
13+
| ├── onebot/ # OneBot 发送器
14+
│ │ └── onebot.py # OneBot 消息发送客户端
15+
│ └── utils/ # 工具函数
16+
| ├── exceptions.py # 异常处理
17+
│ └── matching.py # 匹配规则工具
18+
19+
├── config/ # 配置文件目录
20+
│ ├── config.example.yaml # 示例配置文件
21+
│ └── templates/ # 消息模板目录
22+
│ ├── push/ # 推送事件模板
23+
│ ├── issues/ # Issue 事件模板
24+
│ └── pull_request/ # Pull Request 事件模板
25+
26+
├── docs/ # 文档目录
27+
│ └── src/ # mdBook 文档源
28+
29+
├── tests/ # 测试目录
30+
│ ├── test_matching.py # 匹配规则测试
31+
│ ├── test_onebot_sender.py # OneBot 发送器测试
32+
│ └── test_webhook_signature.py # Webhook 签名验证测试
33+
34+
├── docker/ # Docker 相关文件
35+
│ └── docker-compose.yml # Docker Compose 配置文件
36+
37+
├── main.py # 应用程序入口点
38+
├── Dockerfile # Docker 构建文件
39+
├── pyproject.toml # Python 项目配置
40+
├── poetry.lock # Poetry 依赖锁定文件
41+
└── README.md # 项目说明文档
42+
```

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
aiohttp>=3.11.18,<4.0.0
22
fastapi>=0.115.12,<0.116.0
3+
jinja2>=3.1.6,<4.0.0
34
pydantic>=2.11.4,<3.0.0
45
pydantic-settings>=2.9.1,<3.0.0
56
pyyaml>=6.0.2,<7.0.0

0 commit comments

Comments
 (0)