An open API service indexing awesome lists of open source software.

https://github.com/nonebot/adapter-github

GitHub adapter for nonebot2
https://github.com/nonebot/adapter-github

Last synced: 11 months ago
JSON representation

GitHub adapter for nonebot2

Awesome Lists containing this project

README

          


nonebot

# NoneBot-Adapter-GitHub

_✨ GitHub 协议适配 ✨_



license


pypi

python

pre-commit




QQ Chat Group


QQ Channel


Telegram Channel


Discord Server

## 安装

```bash
poetry add nonebot-adapter-github
# 或者
pip install nonebot-adapter-github
```

## 加载适配器

```python
import nonebot
from nonebot.adapters.github import Adapter

nonebot.init()

driver = nonebot.get_driver()
driver.register_adapter(Adapter)
```

## 配置

### 配置 APP

```dotenv
GITHUB_APPS='
[
{
"app_id": "123456", # GitHub App ID 必填
"private_key": [
"-----BEGIN RSA PRIVATE KEY-----",
"...", # 将私钥按行输入
"...",
"...",
"-----END RSA PRIVATE KEY-----"
], # GitHub App 私钥必填
"client_id": "123456", # OAuth App Client ID 必填,GitHub App 可选
"client_secret": "xxxxxx", # OAuth App Client Secret 必填,GitHub App 可选
"webhook_secret": "xxxxxx" # 可选
}
]'
```

### 其他配置

```dotenv
GITHUB_BASE_URL=https://api.github.com
GITHUB_ACCEPT_FORMAT=full+json
GITHUB_PREVIEWS=["starfox"]
```

## 使用

### WebHook

URL: `/github/webhooks/` (GitHub APP) / `/github/webhooks/` (OAuth APP)

事件格式:

```python
class Event(BaseModel):
id: str # 事件 ID
name: str # 事件名称
payload: Dict[str, Any] # 事件内容

to_me: bool = False # 是否 @ 了机器人或机器人昵称
```

具体事件类型及内容请参考 [GitHub Developer](https://docs.github.com/en/developers/webhooks-and-events/webhooks/webhook-events-and-payloads)

### 调用 API

可以直接通过 bot 调用 API,但是请注意 **只能使用异步接口,参数必须是 keyword args**。具体使用方法参考 [githubkit](https://github.com/yanyongyu/githubkit)。

```python
async with bot.as_installation(installation_id=1):
resp = await bot.rest.issues.async_get(owner="owner", repo="repo", issue_number=1)
issue = resp.parsed_data

resp = await bot.async_graphql(query=query)

async for issue in bot.github.paginate(bot.rest.issues.async_list_for_repo, owner="owner", repo="repo"):
print(issue)
```

也可以直接使用 `githubkit`,但是将绕过 NoneBot 的 `call api hook`。

```python
github = bot.github
```

## 开发

生成事件列表:

```bash
python -m codegen && ruff check --fix -e . && ruff format .
```