{"repo":"xueelf/chobits","free":true,"listed":false,"github":"https://github.com/xueelf/chobits","clone":"git clone https://github.com/xueelf/chobits.git","description":"A JavaScript SDK for QQ Bot.","language":"TypeScript","stars":24,"topics":["bot","qq","qqbot","sdk","typescript"],"license":"MIT","category":"api-integrations-sdks","readme_excerpt":"Chobits Chobits 是一个使用 TypeScript 语言，基于 Web API 开发的 QQ 机器人 SDK。 介绍 Chobits 提供消息事件接收、消息回复、主动消息、文件上传等常用能力，并支持两种事件接入方式： - WebSocket ，适合持续运行的机器人服务。 - Webhook ，适合通过 HTTP 接收事件的服务器或云函数。 Chobits 仅支持 QQ 群聊与私聊 ，不兼容 QQ 频道及官方已经废弃的接口。项目以 纯 ESM 发布，使用标准 Web API，不依赖 Node.js、Bun 或其他运行时的专有 API。 [!WARNING] QQ 机器人官方文档中的部分事件与接口说明，与实际收到的事件推送或接口响应并不一致。截至 2026 年 8 月 12 日，Chobits 已分别使用 QQ 平台的 WebSocket、Webhook 和 OpenAPI 完成联调，核对并处理这些差异。由于 QQ 接口仍可能调整，正式使用前建议结合自身场景完成测试。 安装 快速开始 使用前，请在 QQ 开放平台 创建机器人，并在开发设置中取得 AppID 与 AppSecret。接口与事件的详细说明可以查阅 QQ 机器人开发文档。 WebSocket 调用 online() 便会建立 WebSocket 连接，可以使用 await 等待连接成功。 除此之外 offline() 会主动断开 WebSocket 连接，并清理当前会话状态： 首次连接失败时， online() 会抛出错误。WebSocket 连接建立后，Chobits 会自动处理心跳和断线重连。后续发生的内部连接错误会触发 error 事件，例如自动重连失败： 事件监听器中的错误不会触发 error ，需要开发者自行捕获： Webhook Webhook 是 QQ 主动发送到指定 HTTP 地址的事件请求。 Client 的 callback() 接收一个 Web 标准的 Request，并返回一个 Web 标准的 Response。 Chobits 不内置 HTTP Server，也不依赖 Express、Hono 或其他服务器框架。Webhook 使用 Web Crypto 中的 Ed25519 算法校验签名。 HTTP Server HTTP Server 需要将返回的 Response 作为当前请求的响应。 callback() 会完成回调地址验证、事件签名校验和事件确认，监听器不会阻塞确认响应。 Hono： Bun： 事件处理生命周期 函数 callback() 还有一个可选的第二个参数，可以传入 任务处理函数 。收到事件后，Chobits 会将本次事件处理任务对应的 Promise 传给该函数。开发者可以在函数中记录处理耗时、捕获错误、跟踪任务状态，或者将任务注册到云函数的生命周期： 云函数 Cloudflare Workers、Vercel Functions 和 Netlify Functions 等云函数平台，可能在 HTTP 响应结束后终止尚未完成的事件处理。使用这些平台时，应将平台提供的 生命周期函数 传入 callback() 的第二个参数，使事件处理能够在响应结束后继续运行。 Cloudflare Workers： Vercel Functions： Netlify Functions： 如果当前使用的云函数平台没有提供类似的生命周期函数， callback() 返回 HTTP 响应后，尚未完成的事件处理可能会被终止。建议迁移至支持任务生命周期管理","default_branch":null,"files":null,"tree":[],"storefront":"/r/xueelf","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/xueelf/chobits/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}