NodeSDK 接入指南

介绍

NodeSDK主要基于基础 API封装,提供给用户一种简单、高效的使用方式。

安装

  1. npm i qq-guild-bot
  2. # 或者使用yarn
  3. yarn add qq-guild-bot
  4. # 国内安装可以使用腾讯源
  5. npm i qq-guild-bot --registry=https://mirrors.tencent.com/npm/

:::danger 注意 @tencent-connect/bot-node-sdk已更名为qq-guild-bot。 原包已废弃,请使用新包! :::

使用示例

使用前请先确保已在机器人平台创建机器人,并拿到相应的BotAppIDBotToken

  1. // ESModule | TypeScript
  2. // import { createOpenAPI, createWebsocket } from 'qq-guild-bot';
  3. // CommonJs
  4. const { createOpenAPI, createWebsocket } = require('qq-guild-bot');
  5. const testConfig = {
  6. appID: 'APPID', // 申请机器人时获取到的机器人 BotAppID
  7. token: 'TOKEN', // 申请机器人时获取到的机器人 BotToken
  8. intents: ['AT_MESSAGES'], // 事件订阅,用于开启可接收的消息类型
  9. sandbox: false, // 沙箱支持,可选,默认false. v2.7.0+
  10. };
  11. // 创建 client
  12. const client = createOpenAPI(testConfig);
  13. // 创建 websocket 连接
  14. const ws = createWebsocket(testConfig);
  • intents 可选值举例:['GUILDS', 'GUILD_MEMBERS', 'DIRECT_MESSAGE', 'AUDIO_ACTION', 'AT_MESSAGES']详情参考
  • 沙箱配置说明:接口域名

:::warning 注意

  • 事件类型的订阅,是有权限控制的,除了 GUILDSAT_MESSAGESDIRECT_MESSAGEGUILD_MEMBERS 事件是基础的事件,默认有权限订阅之外,其他的特殊事件,都需要经过申请才能够使用,如果在鉴权的时候传递了无权限的 intentswebsocket 会报错,并直接关闭连接

  • intents空数组时,将默认开启全部事件类型的监听。

:::

通过上述示例代码我们可以拿到整个 NodeSDK 最核心的两个对象clientws,整个 SDK 能力将由这两个对象提供。

使用 client

client提供了一系列操作频道和发送消息的能力,如:创建频道、创建频道身份组、发送私信等等,具体能力见左侧菜单。

client 调用示例

以给子频道发送消息为例,使用示例如下:

  1. client.messageApi
  2. .postMessage(channelID, {
  3. content: 'messageApi接口触发:hello',
  4. })
  5. .then(res => {
  6. // 数据存储在data中
  7. console.log(res.data);
  8. })
  9. .catch(err => {
  10. // err信息错误码请参考API文档错误码描述
  11. console.log(err);
  12. });

client 返回示例

client操作的返回结果与REST OPENAPI 接口保持一致。

  1. {
  2. "id": "xxxxx",
  3. "channel_id": "xxxxx",
  4. "guild_id": "xxxxx",
  5. "content": "messageApi接口触发:hello",
  6. "timestamp": "2021-12-03T17:20:00+08:00",
  7. "tts": false,
  8. "mention_everyone": false,
  9. "author": {
  10. "id": "xxxxx",
  11. "username": "",
  12. "avatar": "",
  13. "bot": true
  14. },
  15. "pinned": false,
  16. "type": 0,
  17. "flags": 0
  18. }

::: tip 提示

针对返回失败的情况,可查看错误状态码描述。

:::

使用 ws

ws用于频道内消息监听,如要使用client向指定子频道发送消息,必须先建立 ws 连接

ws 调用示例

  1. // 消息监听
  2. ws.on('READY', data => {
  3. console.log('[READY] 事件接收 :', data);
  4. });
  5. ws.on('ERROR', data => {
  6. console.log('[ERROR] 事件接收 :', data);
  7. });
  8. ws.on('GUILDS', data => {
  9. console.log('[GUILDS] 事件接收 :', data);
  10. });
  11. ws.on('GUILD_MEMBERS', data => {
  12. console.log('[GUILD_MEMBERS] 事件接收 :', data);
  13. });
  14. ws.on('DIRECT_MESSAGE', data => {
  15. console.log('[DIRECT_MESSAGE] 事件接收 :', data);
  16. });
  17. ws.on('AUDIO_ACTION', data => {
  18. console.log('[AUDIO_ACTION] 事件接收 :', data);
  19. });
  20. ws.on('AT_MESSAGES', data => {
  21. console.log('[AT_MESSAGES] 事件接收 :', data);
  22. });

ws 返回示例

以下是某个监听的返回示例:

  1. {
  2. eventType: 'EVENT_TYPE',
  3. msg: {
  4. author: {
  5. avatar: 'xxx',
  6. bot: false,
  7. id: 'xxx',
  8. username: 'xxx,'
  9. },
  10. channel_id: 'xxx',
  11. content: 'xxx',
  12. guild_id: 'xxx',
  13. id: 'xxx',
  14. member: { joined_at: 'xxx', roles: [Array] },
  15. mentions: [ [Object] ],
  16. timestamp: 'xxx'
  17. }
  18. }

“创建子频道” 场景举个例子:

  1. // 开启事件监听
  2. ws.on('GUILDS', data => {
  3. console.log(data);
  4. });
  5. // 创建子频道
  6. client.channelApi.postChannel('GUILD_ID', {
  7. name: 'test_creation',
  8. type: 0,
  9. parent_id: 'CHANNEL_ID',
  10. owner_id: '0',
  11. sub_type: 0,
  12. });

上述代码打印信息为:

  1. {
  2. eventType: 'CHANNEL_CREATE',
  3. msg: {
  4. guild_id: 'xxxxxx',
  5. id: 'xxxxxx',
  6. name: 'test_creation',
  7. op_user_id: 'xxxxxx',
  8. owner_id: 'xxxxxx',
  9. sub_type: 0,
  10. type: 0
  11. }
  12. }

SDK 架构说明

整个 SDK 设计与实现基于两条主线

  • 主动的事件触发
    • 频道操作能力:子频道增删改、身份组增删改、成员增删改等。
    • 主动消息推送能力。
  • 被动的事件监听
    • 通过 websocket 监听事件。

SDK 分三层设计:应用层框架层基础层,具体结构如下图所示:

SDK 底层架构设计