首页开发文档

KOOK SDK 开发文档

KOOK 开放平台 JavaScript SDK —— @gedaxin/kook v2.0.17 · 完整客户端框架 · MIT License

KOOK 开放平台 JavaScript SDK,提供双模式:简单 API(快速上手)与完整客户端(discord.js 风格:事件 + 缓存 + 模型),覆盖服务器、频道、消息、语音、OAuth 等 21 个服务模块。

一、安装

npm install @gedaxin/kook

要求 Node.js ≥ 18。依赖:axios ^1.7.0。

二、快速开始

模式 A:简单 API(推荐快速上手)

import kook from '@gedaxin/kook';

kook.etc.token('your-bot-token');          // 设置 Token

const { items } = await kook.guild.list({}); // 获取服务器列表

await kook.message.create({                 // 发送消息
  channel_id: '123456789',
  type: 1,                                  // 文字消息
  content: 'Hello KOOK!'
});

const all = await kook.paginate(kook.guild.list); // 自动分页获取全量

模式 B:完整客户端(discord.js 风格)

import { Client } from '@gedaxin/kook';

const client = new Client({ token: 'your-bot-token' });

client.on('messageCreate', msg => {
  console.log(msg.content);
});
client.on('ready', () => console.log('Bot 已就绪'));

await client.login(); // 自动获取 Gateway 并建立 WebSocket 连接

三、客户端配置

选项类型默认值说明
tokenstring-Bot Token
baseUrlstringhttps://www.kookapp.cnAPI 地址
tokenTypestringBotToken 类型
languagestringzh-CN语言
timeoutnumber15000请求超时(ms)
shardCountnumber1WS 分片数

四、缓存与 fetch(discord.js 风格)

所有 Manager 均支持 Collection 风格操作:

client.guilds.cache.get(guildId);                      // 缓存查询
client.guilds.cache.filter(ch => ch.isText);           // 链式过滤
client.guilds.cache.find(g => g.name === 'My Guild');  // 条件查找
client.guilds.cache.some(g => g.level > 5);            // 条件判断

// fetch:缓存命中直接返回,未命中自动请求 API
const channel = await client.channels.fetch(channelId);
const user    = await client.users.fetch(userId);
const guild   = await client.guilds.fetch(guildId);
const member  = await client.guilds.cache.get(gid).members.fetch(uid);

// 快捷方法
await client.fetchGuilds();        // 获取全部服务器(带缓存)
await client.sendMessage({ channel_id: 'xxx', content: 'hello' });

// 模型自我刷新
await guild.fetch();               // 刷新 Guild 数据

五、事件列表

事件名说明
ready / connecting / disconnectedWS 连接就绪 / 连接中 / 已断开
disconnect / reconnectFailedWS 断开(含 code/reason)/ 重连失败
messageCreate / messageUpdate / messageDelete消息 收到 / 编辑 / 删除
guildCreate / guildUpdate / guildDelete服务器 加入 / 更新 / 离开
channelCreate / channelUpdate / channelDelete频道 创建 / 更新 / 删除
guildMemberAdd / guildMemberUpdate / guildMemberRemove成员 加入 / 更新 / 离开
interactionCreate / buttonInteractionCardMessage 交互 / 按钮交互

六、服务接口一览(21 个模块)

模块方法说明
guildlist / view / userList / nickname / leave / kickout / muteList…服务器管理
channellist / view / create / update / delete / userlist / moveUser…频道管理
messagelist / view / create / update / delete / reactionList / addReaction…消息管理
directMessage / userChatcreate / update / delete / reactionList…私信消息 / 会话
threadcategoryList / create / reply / view / list / delete / post帖子
gateway / userindex · me / view / offline / online / getOnlineStatus网关 / 用户
asset / guildRolecreate · list / create / update / delete / grant / revoke上传 / 服务器角色
intimacy / guildEmojiindex / update · list / create / update / delete亲密度 / 服务器表情
invite / blacklist / badgelist / create / delete…邀请 / 黑名单 / 标识卡
game / oauth2 / friendlist / create / update / activity… · token · list / request / block…游戏状态 / OAuth2 / 好友
template / voicelist / create / update / delete · join / list / leave / keepAlive消息模板 / 语音频道

七、工具与错误处理

import { paginate, Snowflake, Constants, KookAPIError } from '@gedaxin/kook';

const allGuilds = await paginate(kook.guild.list);   // 自动分页
Snowflake.getTimestamp('1704067200000');              // ID 解析时间戳
Constants.MessageType.TEXT;                            // 1

try {
  await kook.message.create({ ... });
} catch (err) {
  if (err instanceof KookAPIError) {
    if (err.isPermissionDenied) { /* 权限不足 */ }
    if (err.isNotFound)         { /* 资源不存在 */ }
  }
}

八、模型类

所有 API 返回数据自动封装为模型实例:

const { items } = await kook.guild.list({});
items.forEach(guild => {
  console.log(guild.name, guild.ownerId, guild.memberCount, guild.icon);
});

const user = new User({ id: 'xxx', username: 'test' });
console.log(user.avatarURL(128)); // 头像 URL

九、架构

kook.js/ — 双模式入口(简单 API + 完整客户端) ├── services/ # 21 个 HTTP 端点 Service 类 + ServicesContainer ├── utils/ # wrap / paginate └── src/ ├── client/ # Client(EventEmitter + REST + WS + Manager) ├── models/ # 数据模型(Guild/Channel/User/Member/Message 等) ├── managers/ # 缓存管理层 ├── rest/ # RESTManager(独立 axios + 拦截器 + wrap) ├── ws/ # WebSocketManager + Shard + PacketManager ├── util/ # Constants / Snowflake └── errors/ # KookAPIError
💡 环境变量:KOOK_BOT_TOKEN / KOOK_BASE_URL / KOOK_DEBUG;也可在项目根目录创建 config.json(connectors.kook)配置 Token。