QQ 机器人 SDK,基于 官方 SDK 改版而来,增加群聊与 c2c 场景的适配,支持 webhook,修复诸多错误
npm i qq-bot-sdk --registry=https://registry.npmjs.org详情请见 example 中webhook 使用案例
详情请见 example 中streaming 使用案例,部分源码参照 @openclaw/qqbot
可参见example中样例
const { createOpenAPI, createWebsocket, AvailableIntentsEventsEnum } = require("qq-bot-sdk"); // commonjs 引用方法
import { createOpenAPI, createWebsocket, AvailableIntentsEventsEnum } from "qq-bot-sdk"; // es 引用方法
// 注意:以上两种引用方法只能选择一种方式使用!
const testConfigWs = {
appID: "APPID",
token: "TOKEN",
intents: [AvailableIntentsEventsEnum.GUILD_MESSAGES], // 设置监听类型
};
const client = createOpenAPI(testConfigWs); // 创建 client 实例(用于发送消息)
const ws = createWebsocket(testConfigWs); // 创建 ws 实例(用于接收消息)详情请见 example 中index.js 使用案例
const testConfigWs = {
appID: '',
token: '',
intents: [AvailableIntentsEventsEnum.GROUP_AND_C2C_EVENT],
// 以下是使用 log4js 用法, configure 中填写你自己的 logger 配置
logger: log4js.configure(...).getLogger(),
};
const ws = createWebsocket(testConfigWs);详情请见 example 中webhook 使用案例
| 名称 | intents | 包含事件 |
|---|---|---|
GROUP_AND_C2C_EVENT |
1<<25 | GROUP_ADD_ROBOT 机器人加入群聊GROUP_DEL_ROBOT 机器人退出群聊GROUP_MSG_RECEIVE 群聊消息接收开启GROUP_MSG_REJECT 群聊消息接收关闭FRIEND_ADD 用户添加好友FRIEND_DEL 用户删除好友C2C_MSG_RECEIVE 单聊消息接收开启C2C_MSG_REJECT 单聊消息接收关闭 |
GROUP_MEMBER_EVENT |
1<<24 | GROUP_MEMBER_ADD 群成员加入GROUP_MEMBER_REMOVE 群成员退出GROUP_JOIN_REQUEST 用户申请加群事件 |
ws.on(AvailableIntentsEventsEnum.GROUP_AND_C2C_EVENT, async (data) => {
console.log("[GROUP_AND_C2C_EVENT] 事件接收 :", data);
});
ws.on(AvailableIntentsEventsEnum.GROUP_MEMBER_EVENT, async (data) => {
console.log("[GROUP_MEMBER_EVENT] 事件接收 :", data);
});| 分类 | API | 方法 |
|---|---|---|
| 群聊 | client.groupApi |
.postMessage() 群消息、富媒体发送.postFile() 上传文件.deleteMessage() 撤回消息.info() 获取群基本信息.botState() 获取机器人群内状态.joinRequestList() 入群申请列表拉取.approvalJoinRequest() 入群申请审批.restrictChatSetting() 查询群禁言状态.setRestrictChatSetting() 设置群成员禁言 |
| 群聊 | client.joinApprovalStrategyApi |
.strategies() 查询入群自动审批策略列表.createStrategy() 创建入群自动审批策略.updateStrategy() 修改入群自动审批策略.deleteStrategy() 删除入群自动审批策略.executeStrategy() 执行入群自动审批策略.updateStrategyWhitelist() 修改入群自动审批策略的白名单号码 |
| 群聊 | client.groupMemberApi |
.members() 获取群成员列表.member() 获取群成员详细信息.batchRemoveMembers() 批量移除群成员.memberBlacklist() 查询群黑名单列表.setMemberBlacklist() 操作群黑名单 |
| 单聊 | client.c2cApi |
.postStreamingMessage() 发送流式消息.postMessage() 单聊消息、富媒体发送.postFile() 上传文件.deleteMessage() 撤回消息 |
| 机器人 | client.meApi |
.generateUrlLink() 生成分享链接.getMenu() 查询全局自定义菜单.updateMenu() 修改全局自定义菜单.getPanels() 查询指令面板列表.createPanel() 创建指令面板.getPanel() 查询指令面板详情.updatePanel() 修改指令面板.deletePanel() 删除指令面板.updatePanelTarget() 修改指令面板关联对象 |
支持分片上传,默认不启用
await client.groupApi
.postFile(data.msg.group_id, {
file_type: 1, // 参数: 1.图片 2.视频 3.语音 4.文件 // 文件格式: 图片png/jpg 视频mp4 语音silk
url: "文件url", // 填入要发送的文件 url (不可与 file_data 一同使用)
file_data: "", // 文件base64后的字符串 (不可与 url 一同使用)
srv_send_msg: true, // 为 true 时,消息会直接发送到目标端,占用主动消息频次,超频会发送失败。
}, true) // 为 true 时启用分片上传
.then((res) => {
console.log(res.data);
}); // 主动发送文件await client.groupApi
.postMessage(data.msg.group_id, {
content: "hello world", // 填入要回复的内容
msg_id: data.msg.id, // 被动回复需要带上 msg_id (有效期为5分钟)
msg_seq: 1, // 回复消息的序号,与 msg_id 联合使用,避免相同消息id回复重复发送,不填默认是1(非sdk默认)。相同的 msg_id + msg_seq 重复发送会失败。
})
.then((res) => {
console.log(res.data);
}); // 发送消息请妥善利用发送文件时返回的 ttl 做好缓存处理
const fileRes = await client.groupApi.postFile(data.msg.group_id, {
file_type: 1, // 参数见上文
url: "https://www.w3school.com.cn/i/eg_tulip.jpg",
srv_send_msg: false, // 设置为 false 不发送到目标端,仅拿到文件信息
}); // 拿到文件信息
await client.groupApi.postMessage(data.msg.group_id, {
msg_type: 7, // 发送富媒体
content: "这是图文混排消息", // 当且仅当文件为图片时,才能实现图文混排,其余类型文件 content 会被忽略
media: { file_info: fileRes.data.file_info },
msg_id: data.msg.id,
}); // 通过文件信息发送文件git clone https://github.com/feilongproject/QQNodeSDK.git # 克隆仓库
cd QQNodeSDK
npm run dev # 开启开发环境,代码更改时实时更新
npm run linkdev # 将example下的 qq-bot-sdk 包环境链接到开发环境
node example/index.js # 开始测试- 👏 如果您有针对 SDK 的错误修复,请以分支
fix/xxx向main分支发 PR - 👏 如果您有新的内容贡献,请以分支
feature/xxx向main分支发起 PR - 👏 您如果在使用 SDK 中有任何问题,可以提出
issues(但是请遵循提问的智慧)
这并不是一个官方 SDK,这只是因为官方 SDK 长时间不维护,而在官方基础上改出的 SDK,本 SDK 带来的所有影响与官方无关