|
| 1 | +## 开发路线图 |
| 2 | + |
| 3 | +### 1. GitHub API 轮询(计划中) |
| 4 | + |
| 5 | +对于无法使用 webhook 的场景(如私有仓库或受限环境),我们计划实现基于 GitHub API 的轮询机制。 |
| 6 | + |
| 7 | +#### 设计概要 |
| 8 | + |
| 9 | +- **配置方式**: |
| 10 | + |
| 11 | +```yaml |
| 12 | +GITHUB_API_POLLING: |
| 13 | + - NAME: "polling-example" |
| 14 | + REPO: |
| 15 | + - "username/repo" |
| 16 | + BRANCH: |
| 17 | + - "main" |
| 18 | + INTERVAL: 300 # 轮询间隔(秒) |
| 19 | + EVENTS: |
| 20 | + - "push" |
| 21 | + - "pull_request" |
| 22 | + TOKEN: "github_personal_access_token" # GitHub 个人访问令牌 |
| 23 | + ONEBOT: |
| 24 | + - type: "group" |
| 25 | + id: 123456789 |
| 26 | +``` |
| 27 | +
|
| 28 | +- **功能**: |
| 29 | + - 定时检查仓库变更 |
| 30 | + - 对比上次轮询结果,只通知新变更 |
| 31 | + - 支持提交、PR、Issue 等多种数据类型轮询 |
| 32 | + - 优化请求频率,避免触发 GitHub API 限流 |
| 33 | +
|
| 34 | +- **实现计划**: |
| 35 | + - 使用 `APScheduler` 实现定时任务 |
| 36 | + - 使用 `aiohttp` 实现异步 HTTP 请求 |
| 37 | + - 使用本地文件存储上次轮询状态 ~~(轻量化的玩意不可能给你上数据库 or Redis)~~ |
| 38 | + - 封装 GitHub API 客户端,处理认证和错误 |
| 39 | + |
| 40 | +### 2. 自定义模板系统(计划中) |
| 41 | + |
| 42 | +允许用户自定义各类事件的通知消息格式,提供更灵活的展示方式。 |
| 43 | + |
| 44 | +#### 设计概要 |
| 45 | + |
| 46 | +- **模板存储**: |
| 47 | + - 模板文件存储在 `templates/` 目录下 |
| 48 | + - 按照事件类型命名,如 `templates/push.txt`、`templates/issues.txt` 等 |
| 49 | + - 也可以创建自定义命名的模板文件用于不同场景 |
| 50 | + |
| 51 | +- **配置方式**: |
| 52 | + |
| 53 | + ```yaml |
| 54 | + GITHUB_WEBHOOK: |
| 55 | + - NAME: "github" |
| 56 | + REPO: |
| 57 | + - "username/repo" |
| 58 | + BRANCH: |
| 59 | + - "main" |
| 60 | + SECRET: "your_secret" |
| 61 | + EVENTS: |
| 62 | + - "push" |
| 63 | + - "issues" |
| 64 | + TEMPLATES: # 为不同事件类型指定自定义模板 |
| 65 | + push: "custom_push.txt" # 使用自定义推送模板 |
| 66 | + issues: "default" # 使用默认 issues 模板 |
| 67 | + ONEBOT: |
| 68 | + - type: "group" |
| 69 | + id: 123456789 |
| 70 | + ``` |
| 71 | + |
| 72 | +- **模板示例** (`templates/push.txt`): |
| 73 | + |
| 74 | + ``` |
| 75 | + 📢 GitHub 推送通知 |
| 76 | + 仓库:{{ repo_name }} |
| 77 | + 分支:{{ branch }} |
| 78 | + 推送者:{{ pusher }} |
| 79 | + 提交数量:{{ commit_count }} |
| 80 | + {% for commit in commits %} |
| 81 | + [{{ loop.index }}] {{ commit.id[:7] }} by {{ commit.author.name }} |
| 82 | + {{ commit.message.split('\n')[0] }} |
| 83 | + {% endfor %} |
| 84 | + ``` |
| 85 | +
|
| 86 | +- **模板示例** (`templates/issues.txt`): |
| 87 | +
|
| 88 | + ``` |
| 89 | + 📋 Issue {{ action }} |
| 90 | + 仓库:{{ repo_name }} |
| 91 | + 标题:{{ issue.title }} |
| 92 | + 作者:{{ issue.user.login }} |
| 93 | + 链接:{{ issue.html_url }} |
| 94 | + ``` |
| 95 | +
|
| 96 | +- **功能**: |
| 97 | + - 基于 Jinja2 模板引擎 |
| 98 | + - 支持条件语句和循环 |
| 99 | + - 每个 Webhook 可以指定不同的模板集合 |
| 100 | + - 提供默认模板,无需配置即可使用 |
| 101 | + - 模板变量自动文档化(将提供变量参考) |
| 102 | +
|
| 103 | +- **实现计划**: |
| 104 | + - 引入 Jinja2 依赖 |
| 105 | + - 实现模板目录扫描和加载机制 |
| 106 | + - 开发模板缓存以提高性能 |
| 107 | + - 提供模板变量参考文档 |
| 108 | + - 添加模板验证功能,避免语法错误 |
0 commit comments