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 连接三、客户端配置
| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
token | string | - | Bot Token |
baseUrl | string | https://www.kookapp.cn | API 地址 |
tokenType | string | Bot | Token 类型 |
language | string | zh-CN | 语言 |
timeout | number | 15000 | 请求超时(ms) |
shardCount | number | 1 | WS 分片数 |
四、缓存与 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 / disconnected | WS 连接就绪 / 连接中 / 已断开 |
disconnect / reconnectFailed | WS 断开(含 code/reason)/ 重连失败 |
messageCreate / messageUpdate / messageDelete | 消息 收到 / 编辑 / 删除 |
guildCreate / guildUpdate / guildDelete | 服务器 加入 / 更新 / 离开 |
channelCreate / channelUpdate / channelDelete | 频道 创建 / 更新 / 删除 |
guildMemberAdd / guildMemberUpdate / guildMemberRemove | 成员 加入 / 更新 / 离开 |
interactionCreate / buttonInteraction | CardMessage 交互 / 按钮交互 |
六、服务接口一览(21 个模块)
| 模块 | 方法 | 说明 |
|---|---|---|
guild | list / view / userList / nickname / leave / kickout / muteList… | 服务器管理 |
channel | list / view / create / update / delete / userlist / moveUser… | 频道管理 |
message | list / view / create / update / delete / reactionList / addReaction… | 消息管理 |
directMessage / userChat | create / update / delete / reactionList… | 私信消息 / 会话 |
thread | categoryList / create / reply / view / list / delete / post | 帖子 |
gateway / user | index · me / view / offline / online / getOnlineStatus | 网关 / 用户 |
asset / guildRole | create · list / create / update / delete / grant / revoke | 上传 / 服务器角色 |
intimacy / guildEmoji | index / update · list / create / update / delete | 亲密度 / 服务器表情 |
invite / blacklist / badge | list / create / delete… | 邀请 / 黑名单 / 标识卡 |
game / oauth2 / friend | list / create / update / activity… · token · list / request / block… | 游戏状态 / OAuth2 / 好友 |
template / voice | list / 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。