GitHub 事件实体
约 729 字大约 2 分钟
2026-03-19
GitHub 平台 8 个事件实体类的完整参考 — 属性、方法、Trait、工厂映射。
基类
GitHubBaseEvent
所有 GitHub 事件的公共基类。提供以下共有属性,子类无需重复定义。
Traits: HasSender
| 属性 | 类型 | 说明 |
|---|---|---|
api | IGitHubAPIClient | GitHub API 客户端 |
user_id | str | 操作者 ID |
sender | GitHubSender | 操作者信息 |
repo | str | 仓库全名("owner/repo") |
action | str | Webhook action 字段 |
from ncatbot.event.github import GitHubBaseEventIssue 事件
GitHubIssueEvent
继承: GitHubBaseEvent + Replyable
| 属性 | 类型 | 说明 |
|---|---|---|
issue_number | int | Issue 编号 |
issue_title | str | Issue 标题 |
labels | list | 标签列表 |
| 方法 | 签名 | 说明 |
|---|---|---|
reply() | async reply(text: str) -> Any | 在该 Issue 下创建评论 |
@registrar.github.on_issue()
async def on_issue(self, event: GitHubIssueEvent):
if event.action == "opened":
await event.reply(f"Issue #{event.issue_number} 已收到。")GitHubIssueCommentEvent
继承: GitHubBaseEvent + Replyable, Deletable
| 属性 | 类型 | 说明 |
|---|---|---|
comment_body | str | 评论内容 |
issue_number | int | 所属 Issue/PR 编号 |
| 方法 | 签名 | 说明 |
|---|---|---|
reply() | async reply(text: str) -> Any | 在同一 Issue 下回复 |
delete() | async delete() -> Any | 删除该评论 |
PR 事件
GitHubPREvent
继承: GitHubBaseEvent + Replyable
| 属性 | 类型 | 说明 |
|---|---|---|
pr_number | int | PR 编号 |
pr_title | str | PR 标题 |
merged | bool | 是否已合并 |
| 方法 | 签名 | 说明 |
|---|---|---|
reply() | async reply(text: str) -> Any | 在该 PR 下创建评论 |
@registrar.github.on_pr()
async def on_pr(self, event: GitHubPREvent):
if event.action == "opened" and not event.merged:
await event.reply("PR 已提交,等待 review。")GitHubPRReviewCommentEvent
继承: GitHubBaseEvent + Replyable, Deletable
| 属性 | 类型 | 说明 |
|---|---|---|
comment_body | str | Review 评论内容 |
pr_number | int | 所属 PR 编号 |
path | str | 评论所在文件路径 |
| 方法 | 签名 | 说明 |
|---|---|---|
reply() | async reply(text: str) -> Any | 在同一 PR 下回复 |
delete() | async delete() -> Any | 删除该评论 |
Push 事件
GitHubPushEvent
继承: GitHubBaseEvent
| 属性 | 类型 | 说明 |
|---|---|---|
ref | str | 分支引用(如 "refs/heads/main") |
before | str | Push 前 SHA |
after | str | Push 后 SHA |
commits | List[GitHubCommit] | 提交列表 |
head_commit | GitHubCommit | None | 最新提交 |
@registrar.github.on_push()
async def on_push(self, event: GitHubPushEvent):
for commit in event.commits:
print(f"{commit.sha[:7]} {commit.message}")其他事件
GitHubStarEvent
继承: GitHubBaseEvent
| 属性 | 类型 | 说明 |
|---|---|---|
starred_at | str | Star 时间 |
GitHubForkEvent
继承: GitHubBaseEvent
| 属性 | 类型 | 说明 |
|---|---|---|
forkee | GitHubForkee | Fork 目标仓库信息 |
forkee_full_name | str | Fork 后的仓库全名 |
GitHubReleaseEvent
继承: GitHubBaseEvent + HasAttachments
| 属性 | 类型 | 说明 |
|---|---|---|
release | GitHubRelease | Release 详情 |
release_tag | str | Tag 名称 |
release_name | str | Release 名称 |
release_body | str | Release 说明 |
prerelease | bool | 是否预发布 |
| 方法 | 签名 | 说明 |
|---|---|---|
get_assets() | async get_assets() -> List[GitHubReleaseAsset] | 获取该 Release 的所有 Assets(平台原生) |
get_full_release() | async get_full_release() -> GitHubReleaseInfo | 通过 API 获取完整 Release 信息 |
get_attachments() | async get_attachments() -> AttachmentList | 获取跨平台附件列表(HasAttachments) |
@registrar.github.on_release()
async def on_release(self, event: GitHubReleaseEvent):
if event.action == "published" and not event.prerelease:
# 跨平台方式(HasAttachments)
atts = await event.get_attachments()
for att in atts:
path = await att.download("./downloads")
print(f"已下载: {path}")
# 可以过滤
print(f"共 {len(atts)} 个附件,最大: {atts.largest().name}")继承关系
BaseEvent
└── GitHubBaseEvent (HasSender)
├── GitHubIssueEvent (Replyable)
├── GitHubIssueCommentEvent (Replyable, Deletable)
├── GitHubPREvent (Replyable)
├── GitHubPRReviewCommentEvent (Replyable, Deletable)
├── GitHubPushEvent
├── GitHubStarEvent
├── GitHubForkEvent
└── GitHubReleaseEvent (HasAttachments)工厂映射
| 数据模型 | 事件实体 | post_type |
|---|---|---|
GitHubIssueEventData | GitHubIssueEvent | "issue" |
GitHubIssueCommentEventData | GitHubIssueCommentEvent | "comment" |
GitHubPREventData | GitHubPREvent | "pull_request" |
GitHubPRReviewCommentEventData | GitHubPRReviewCommentEvent | "comment" |
GitHubPushEventData | GitHubPushEvent | "push" |
GitHubStarEventData | GitHubStarEvent | "star" |
GitHubForkEventData | GitHubForkEvent | "fork" |
GitHubReleaseEventData | GitHubReleaseEvent | "release" |
返回:事件参考首页 · 相关:GitHub API 参考 · GitHub 类型
注册器速查
| 装饰器 | 事件类型 |
|---|---|
@registrar.github.on_issue() | issue |
@registrar.github.on_pr() | pull_request |
@registrar.github.on_push() | push |
@registrar.github.on_star() | star |
@registrar.github.on_fork() | fork |
@registrar.github.on_release() | release |
@registrar.github.on_comment() | comment |
版权所有
版权归属:huan-yp
