Home

Awesome

<!-- markdownlint-disable-next-line MD041 --> <p align="center"> <a href="https://nonebot.dev/"><img src="https://raw.githubusercontent.com/nonebot/adapter-github/master/assets/logo.png" width="200" height="200" alt="nonebot"></a> </p> <div align="center">

NoneBot-Adapter-GitHub

<!-- markdownlint-capture --> <!-- markdownlint-disable MD036 -->

✨ GitHub 协议适配 ✨

<!-- markdownlint-restore --> </div> <p align="center"> <a href="https://raw.githubusercontent.com/nonebot/adapter-github/master/LICENSE"> <img src="https://img.shields.io/github/license/nonebot/adapter-github" alt="license"> </a> <a href="https://pypi.python.org/pypi/nonebot-adapter-github"> <img src="https://img.shields.io/pypi/v/nonebot-adapter-github" alt="pypi"> </a> <img src="https://img.shields.io/badge/python-3.9+-blue" alt="python"> <a href="https://results.pre-commit.ci/latest/github/nonebot/adapter-github/master"> <img src="https://results.pre-commit.ci/badge/github/nonebot/adapter-github/master.svg" alt="pre-commit"/> </a> <br /> <a href="https://jq.qq.com/?_wv=1027&k=5OFifDh"> <img src="https://img.shields.io/badge/QQ%E7%BE%A4-768887710-orange?style=flat-square" alt="QQ Chat Group"> </a> <a href="https://qun.qq.com/qqweb/qunpro/share?_wv=3&_wwv=128&appChannel=share&inviteCode=7b4a3&appChannel=share&businessType=9&from=246610&biz=ka"> <img src="https://img.shields.io/badge/QQ%E9%A2%91%E9%81%93-NoneBot-5492ff?style=flat-square" alt="QQ Channel"> </a> <a href="https://t.me/botuniverse"> <img src="https://img.shields.io/badge/telegram-botuniverse-blue?style=flat-square" alt="Telegram Channel"> </a> <a href="https://discord.gg/VKtE6Gdc4h"> <img src="https://discordapp.com/api/guilds/847819937858584596/widget.png?style=shield" alt="Discord Server"> </a> </p>

安装

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

加载适配器

import nonebot
from nonebot.adapters.github import Adapter

nonebot.init()

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

配置

配置 APP

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"  # 可选
  }
]'

其他配置

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

使用

WebHook

URL: /github/webhooks/<app_id> (GitHub APP) / /github/webhooks/<client_id> (OAuth APP)

事件格式:

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

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

具体事件类型及内容请参考 GitHub Developer

调用 API

可以直接通过 bot 调用 API,但是请注意 只能使用异步接口,参数必须是 keyword args。具体使用方法参考 githubkit

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

github = bot.github

开发

生成事件列表:

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