@@ -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 部署
0 commit comments