Skip to content

cscs181/QQ-GitHub-Bot

Repository files navigation

qq-github-bot

QQ-GitHub-Bot

✨ GitHub Bot for QQ ✨

Docker Hub LICENSE Python Version NoneBot Version Black Pyright Ruff

Release Pre-Commit Pyright Ruff

OneBot V11 QQ

简介

在 QQ 内 订阅, 查看, 处理 GitHub Issue and Pull Request 。

功能简介

主要功能有 (持续更新中):

功能 描述
/状态/status 获取当前机器人及所在服务器运行状态,支持分布式多节点
/install [check|revoke] 安装 GitHub APP 集成(将用于 Issue/PR, WebHook 等管理)
/auth [check|revoke] 授权 APP 以进行用户快捷操作
/bind [owner/repo] 群绑定指定仓库以进行仓库快捷操作
/subscribe owner/repo event[/action] 订阅指定仓库的指定事件(支持多事件订阅)
/search [code|repo|user] query 搜索 GitHub 代码、仓库、用户
owner/repo[#number] 或 GitHub 链接 快捷查看仓库 Issue/PR, PR diff 等
/link, /repo 获取 Issue/PR、仓库链接
/readme 查看仓库 README
/license 获取仓库许可证
/release [tag] 获取仓库最新 Release,或指定 tag 的 Release
/deployment 获取仓库 Deployment 列表
/star, /unstar 快捷 star
/diff 查看 PR diff
/comment 评论 Issue/PR
/label [label ...], /unlabel [label] 添加删除标签
/close [reason], /reopen 关闭或重新开启 PR
/approve [message] 批准 PR
/merge [commit], /squash [commit], /rebase 合并 PR
sentry 日志监控,上报错误
health check 访问路由地址 /health 即可进行服务状态自检

事件订阅

支持的事件根据 GitHub APP 配置的 Webhook 事件列表而定,可以自行选择和更改,推荐选择的事件有:

事件类型 事件描述
Issues 任何开启、关闭、修改等 Issue 相关操作
Issue Comment 创建、修改、删除 Issue/PR 的评论
Pull Request 任何开启、关闭、修改等 PR 相关操作
Pull Request Review PR Review 相关操作
Star star、unstar 仓库
Push push commit 到仓库
Release 创建、修改、发布等 Release 相关操作

部署

Warning

请注意,go-cqhttp 的部署方式已不再提供说明,请自行配置连接。 如果使用 docker 部署,可以参考使用 docker compose --profile go-cqhttp up -d 命令启动。

Docker

  1. 部署要求

    • Docker & Docker Compose

      curl -sSL https://get.docker.com/ | sh
    • 1+ CPU Core

    • 1+ GB RAM

    • 能够访问 GitHub API 的网络环境

    对于内存大小的限制,可以通过修改 docker-compose.yml 中的 deploy.resources.limits.memory 来调整,由于采用了 playwright(chromium) 渲染图片,不限制内存可能会导致渲染大图时直接卡死服务器。

  2. 注册 GitHub App 配置 GitHub App:

    1. callback URL 为 http://<your-domain>/github/auth
    2. webhook URL 为 http://<your-domain>/github/webhooks/<app_id>,可在 app 创建完成后添加
    3. 权限为 Contents (Read Only), Deployments (Read Only), Issues (Read and Write), Pull requests (Read and Write), Metadata (Read Only)Starring (Read and Write)
    4. Webhook 事件参考 事件订阅 自行选择需要的事件
    5. 取消勾选 Expire user authorization tokens 或在 app optional feature 中 opt-out
    6. 勾选 Request user authorization (OAuth) during installation
    7. 记录 app_id, client_id,生成并下载 private_key, client_secret 备用
  3. 下载 docker-compose.yml 至任意空目录

  4. docker-compose.yml 同目录下创建 .env 并写入如下配置项:

    # 可选,参考 nonebot superuser 格式
    SUPERUSERS=["机器人管理号"]
    
    # filehost 配置项,用于上传图片
    # 必填
    FILEHOST_URL_BASE=https://<your-domain>
    
    # onebot
    # 可选
    ONEBOT_ACCESS_TOKEN=your_access_token
    # 可选
    ONEBOT_SECRET=your_secret
    
    # 可选,QQ 机器人配置项
    QQ_BOTS='
    [
      {
        "id": "xxx",
        "token": "xxx",
        "secret": "xxx",
        "intent": {
          "at_messages": false,
          "guild_messages": true,
          "direct_message": true
        }
      }
    ]
    '
    
    # 必填,postgres 数据库配置项
    POSTGRES_USER=bot
    POSTGRES_PASSWORD=postgres_password
    POSTGRES_DB=bot
    
    # 必填,redis 数据库配置项
    REDIS_PASSWORD=redis_password
    
    # 可选,Sentry DSN 网址
    SENTRY_DSN=https://xxxxxxxx.sentry.io/123123
    
    # Github App 配置
    # 可选,图片主题,light/dark
    GITHUB_THEME=light
    # 必填,github app 配置
    # 可选,oauth app 配置,用于没有权限时的 fallback
    # webhook_secret 与 github app 配置中的 webhook secret 保持一致,如果没有设置则删除
    GITHUB_APPS='
    [
      {
        "app_id": "",
        "private_key": [
          "-----BEGIN RSA PRIVATE KEY-----",
          "~~ YOUR PRIVATE KEY HERE ~~",
          "-----END RSA PRIVATE KEY-----"
        ],
        "client_id": "",
        "client_secret": "",
        "webhook_secret": ""
      },
      {
        "client_id": "",
        "client_secret": ""
      }
    ]
    '

    docker-compose.yml 中的配置视情况修改,如无必要请勿修改!

  5. 启动

    在目录下执行 docker compose up -d (旧版方式 docker-compose up -d) 即可。

Kubernetes

待完善,可自行尝试使用 k8s/bot/ 目录下的 helm chart

下载或克隆 k8s/bot/ 目录,新建文件 values.yaml,参考目录下的 values.yaml 填写覆盖配置项,然后执行 helm install -n <botnamespace> --create-namespace -f values.yaml <botname> ./k8s/bot 即可。其中 <botnamespace> 为命名空间,<botname> 为部署应用名称,请自行修改。

开发

使用 Codespaces (Dev Container) 一键配置开发环境 (Python、Redis、Postgres):

Open in GitHub Codespaces

修改 .env.dev 文件中的部分配置项,然后执行 python bot.py 即可。

如需连接到 Redis 或 Postgres 数据库调试,请确保 VSCode 已正确映射端口 (必要时可以重新映射 6379、5432 端口),使用本地工具远程连接即可。