@@ -82,6 +82,8 @@ source .venv/bin/activate # Linux/Mac
8282
8383``` bash
8484pip install -r requirements.txt
85+ # 或者使用 Poetry
86+ # poetry install
8587```
8688
87894 . 配置文件设置:
@@ -90,7 +92,7 @@ pip install -r requirements.txt
9092或者复制示例配置文件:
9193
9294``` bash
93- cp config.yaml. example config.yaml
95+ cp config/config. example.yaml config.yaml
9496```
9597
9698## 配置说明
@@ -129,13 +131,13 @@ GITHUB_WEBHOOK:
129131## 运行
130132
131133` ` ` bash
132- uvicorn app :app --host 0.0.0.0 --port 8000
134+ uvicorn main :app --host 0.0.0.0 --port 8000
133135```
134136
135137或者直接执行:
136138
137139``` bash
138- python app .py
140+ python main .py
139141```
140142
141143## GitHub Webhook 设置
@@ -149,144 +151,51 @@ python app.py
149151
150152## 开发路线图
151153
152- ### 1. GitHub API 轮询(计划中)
153-
154- 对于无法使用 webhook 的场景(如私有仓库或受限环境),我们计划实现基于 GitHub API 的轮询机制。
155-
156- #### 设计概要
157-
158- - ** 配置方式** :
159-
160- ``` yaml
161- GITHUB_API_POLLING :
162- - NAME : " polling-example"
163- REPO :
164- - " username/repo"
165- BRANCH :
166- - " main"
167- INTERVAL : 300 # 轮询间隔(秒)
168- EVENTS :
169- - " push"
170- - " pull_request"
171- TOKEN : " github_personal_access_token" # GitHub 个人访问令牌
172- ONEBOT :
173- - type : " group"
174- id : 123456789
175- ` ` `
176-
177- - **功能**:
178- - 定时检查仓库变更
179- - 对比上次轮询结果,只通知新变更
180- - 支持提交、PR、Issue 等多种数据类型轮询
181- - 优化请求频率,避免触发 GitHub API 限流
182-
183- - **实现计划**:
184- - 使用 ` APScheduler` 实现定时任务
185- - 使用 `aiohttp` 实现异步 HTTP 请求
186- - 使用本地文件存储上次轮询状态 ~~(轻量化的玩意不可能给你上数据库 or Redis)~~
187- - 封装 GitHub API 客户端,处理认证和错误
188-
189- # ## 2. 自定义模板系统(计划中)
190-
191- 允许用户自定义各类事件的通知消息格式,提供更灵活的展示方式。
192-
193- # ### 设计概要
194-
195- - **模板存储**:
196- - 模板文件存储在 `templates/` 目录下
197- - 按照事件类型命名,如 `templates/push.txt`、`templates/issues.txt` 等
198- - 也可以创建自定义命名的模板文件用于不同场景
199-
200- - **配置方式**:
201-
202- ` ` ` yaml
203- GITHUB_WEBHOOK:
204- - NAME: "github"
205- REPO:
206- - "username/repo"
207- BRANCH:
208- - "main"
209- SECRET: "your_secret"
210- EVENTS:
211- - "push"
212- - "issues"
213- TEMPLATES: # 为不同事件类型指定自定义模板
214- push: "custom_push.txt" # 使用自定义推送模板
215- issues: "default" # 使用默认 issues 模板
216- ONEBOT:
217- - type: "group"
218- id: 123456789
219- ` ` `
220-
221- - **模板示例** (`templates/push.txt`):
222-
223- ```
224- 📢 GitHub 推送通知
225- 仓库:{{ repo_name }}
226- 分支:{{ branch }}
227- 推送者:{{ pusher }}
228- 提交数量:{{ commit_count }}
229- {% for commit in commits %}
230- [ {{ loop.index }}] {{ commit.id[ :7] }} by {{ commit.author.name }}
231- {{ commit.message.split('\n')[ 0] }}
232- {% endfor %}
233- ```
234-
235- - **模板示例** (`templates/issues.txt`):
236-
237- ```
238- 📋 Issue {{ action }}
239- 仓库:{{ repo_name }}
240- 标题:{{ issue.title }}
241- 作者:{{ issue.user.login }}
242- 链接:{{ issue.html_url }}
243- ```
244-
245- - **功能**:
246- - 基于 Jinja2 模板引擎
247- - 支持条件语句和循环
248- - 每个 Webhook 可以指定不同的模板集合
249- - 提供默认模板,无需配置即可使用
250- - 模板变量自动文档化(将提供变量参考)
251-
252- - **实现计划**:
253- - 引入 Jinja2 依赖
254- - 实现模板目录扫描和加载机制
255- - 开发模板缓存以提高性能
256- - 提供模板变量参考文档
257- - 添加模板验证功能,避免语法错误
258-
259- ## API 参考
260-
261- ### Webhook 接口
262-
263- - **路径**: `/github-webhook`
264- - **方法**: POST
265- - **请求头**:
266- - `Content-Type`: application/json
267- - `X-GitHub-Event`: 事件类型
268- - `X-Hub-Signature-256`: SHA-256 HMAC 签名
269-
270- - **响应**:
271-
272- ```json
273- {
274- "status": "success|ignored",
275- "message": "处理信息"
276- }
277- ```
154+ 详细的开发路线图请参考 开发路线图文档。
278155
279156## 项目结构
280157
281- - app.py: 主应用入口和 Web 服务器
282- - hooks/github_webhook.py: GitHub Webhook 处理逻辑
283- - send_message.py: OneBot 消息发送客户端
284- - settings.py: 配置加载和验证
285- - requirements.txt: 项目依赖
158+ ```
159+ onebot-github-webhook/
160+ │
161+ ├── app/ # 应用程序核心模块
162+ │ ├── api/ # API 接口
163+ │ ├── core/ # 核心功能
164+ │ │ ├── github.py # GitHub Webhook 处理逻辑
165+ │ │ └── onebot.py # OneBot 消息发送客户端
166+ │ ├── models/ # 数据模型
167+ │ │ └── config.py # 配置模型
168+ │ └── utils/ # 工具函数
169+ │ └── matching.py # 匹配规则工具
170+ │
171+ ├── config/ # 配置文件目录
172+ │ ├── config.example.yaml # 示例配置文件
173+ │ └── templates/ # 消息模板目录
174+ │ ├── push/ # 推送事件模板
175+ │ ├── issues/ # Issue 事件模板
176+ │ └── pull_request/ # Pull Request 事件模板
177+ │
178+ ├── docs/ # 文档目录
179+ │ └── src/ # mdBook 文档源
180+ │
181+ ├── tests/ # 测试目录
182+ │ ├── test_matching.py # 匹配规则测试
183+ │ ├── test_onebot_sender.py # OneBot 发送器测试
184+ │ └── test_webhook_signature.py # Webhook 签名验证测试
185+ │
186+ ├── docker/ # Docker 相关文件
187+ │ └── docker-compose.yml # Docker Compose 配置文件
188+ │
189+ ├── main.py # 应用程序入口点
190+ ├── Dockerfile # Docker 构建文件
191+ ├── pyproject.toml # Python 项目配置
192+ ├── poetry.lock # Poetry 依赖锁定文件
193+ └── README.md # 项目说明文档
194+ ```
286195
287196## 部署建议
288197
289- ### Docker 部署(计划支持)
198+ ### Docker 部署
290199
291200``` bash
292201docker run -d \
@@ -296,6 +205,13 @@ docker run -d \
296205 e1saps/onebot-github-webhook:latest
297206```
298207
208+ 或使用 Docker Compose:
209+
210+ ``` bash
211+ cd docker
212+ docker-compose up -d
213+ ```
214+
299215### Systemd 服务
300216
301217创建 ` /etc/systemd/system/onebot-github-webhook.service ` :
@@ -308,7 +224,7 @@ After=network.target
308224[Service]
309225User =www-data
310226WorkingDirectory =/opt/onebot-github-webhook
311- ExecStart =/opt/onebot-github-webhook/.venv/bin/python -m uvicorn app :app --host 0.0.0.0 --port 8000
227+ ExecStart =/opt/onebot-github-webhook/.venv/bin/python -m uvicorn main :app --host 0.0.0.0 --port 8000
312228Restart =on-failure
313229RestartSec =5s
314230
@@ -350,4 +266,4 @@ A: 本程序暂时不支持推送到多个 QQ 机器人
350266
351267## 许可证
352268
353- 本项目采用 [ Apache License 2.0] ( LICENSE ) 许可证。
269+ 本项目采用 Apache License 2.0 许可证。
0 commit comments