Skip to content

配置

密钥

WebHooker 需要多个密钥才能运行。本地开发时存储在 .dev.vars 中,生产环境使用 Cloudflare Worker Secrets。

必需密钥

变量说明
GITHUB_WEBHOOK_SECRETGitHub App 设置中的 Webhook 密钥
GITHUB_APP_IDGitHub App 的数字 ID
GITHUB_PRIVATE_KEYApp 私钥(PEM 格式,用 \n 转义)
GITHUB_CLIENT_IDApp 设置中的 OAuth 客户端 ID
GITHUB_CLIENT_SECRETApp 设置中的 OAuth 客户端密钥
DISCORD_TOKENDiscord Bot Token
DISCORD_CHANNEL_ID消息发送的默认 Discord 频道 ID

可选密钥

变量说明默认值
BASE_URLOAuth 回调的公开 URLhttp://localhost:8787

路由

路由定义了哪些事件被转发到哪些 Discord 频道。它们以 JSON 数组形式存储在 Cloudflare KV 中,键为 config:routes

首次启动时,如果 KV 中没有配置,则使用 7 条默认路由。

路由模式

json
{
  "id": "unique-route-id",
  "name": "可读名称",
  "enabled": true,
  "filters": [
    { "type": "event", "match": "push" },
    { "type": "repo", "match": "org/repo", "exclude": false }
  ],
  "target": {
    "channelId": "DISCORD_CHANNEL_ID",
    "threadId": "OPTIONAL_THREAD_ID"
  }
}

默认路由

ID事件说明
all-pushpush所有推送事件
pull-requestspull_request所有 PR 活动
issuesissues议题打开/关闭/编辑
issue-commentsissue_comment议题和 PR 评论
workflow-runsworkflow_runCI/CD 工作流完成
releasesrelease发布创建/编辑
branch-activitycreate, delete分支/标签创建和删除

自定义路由示例

json
[
  {
    "id": "backend-prs",
    "name": "后端 PR",
    "enabled": true,
    "filters": [
      { "type": "repo", "match": "myorg/backend" },
      { "type": "event", "match": "pull_request" },
      { "type": "actor", "match": "[bot]", "exclude": true }
    ],
    "target": {
      "channelId": "1234567890",
      "threadId": "9876543210"
    }
  }
]

过滤器类型

类型匹配对象示例
eventGitHub 事件名称push, pull_request, issues
repo仓库全名org/repo
actor发送者登录名username, [bot]
action事件操作opened, closed, published
branch分支名称main, feature/*
keyword载荷正文中的文本deploy, /fix\s+\d+/ (正则)

过滤器行为

  • 路由中的所有过滤器必须都匹配才触发路由(AND 逻辑)
  • 在任何过滤器上设置 "exclude": true 可反转匹配逻辑(NOT 逻辑)
  • keyword 过滤器支持正则表达式——如果正则有误,回退到子串匹配
  • branch 过滤器适用于 push、pull_request、create/delete、workflow_run 和 code_scanning_alert 事件

匹配值

过滤器接受单个字符串或字符串数组:

json
{ "type": "event", "match": "push" }
{ "type": "event", "match": ["push", "pull_request"] }

KV 存储布局

键模式TTL
config:routesJSON 路由数组永久
token:{userId}{ accessToken, expiresAt }至过期
state:{hex}{ userId, createdAt }600 秒

基于 MIT 许可发布。