@zhin.js/adapter-kook 1.0.52 → 1.0.53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # @zhin.js/adapter-kook
2
2
 
3
+ ## 1.0.53
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [bb6bfa8]
8
+ - Updated dependencies [bb6bfa8]
9
+ - zhin.js@1.0.52
10
+ - @zhin.js/logger@0.1.36
11
+
3
12
  ## 1.0.52
4
13
 
5
14
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,OAAO,EACP,MAAM,EAMP,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,qBAAa,WAAY,SAAQ,OAAO,CAAC,OAAO,CAAC;gBACnC,MAAM,EAAE,MAAM;IAI1B,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO;IAMnC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAMzD,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAMzE,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAM1D,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAMlF,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;;;;;;;;IAe1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IActB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAqPjC;;OAEG;IACH,OAAO,CAAC,eAAe;CA8BxB"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,OAAO,EACP,MAAM,EAIP,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,qBAAa,WAAY,SAAQ,OAAO,CAAC,OAAO,CAAC;gBACnC,MAAM,EAAE,MAAM;IAI1B,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO;IAMnC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAMzD,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAMzE,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAM1D,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAMlF,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;;;;;;;;IAe1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAqPjC;;OAEG;IACH,OAAO,CAAC,eAAe;CA8BxB"}
package/lib/adapter.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * KOOK 适配器
3
3
  */
4
- import { Adapter, createGroupManagementTools, GROUP_MANAGEMENT_SKILL_KEYWORDS, GROUP_MANAGEMENT_SKILL_TAGS, } from "zhin.js";
4
+ import { Adapter, createGroupManagementTools, } from "zhin.js";
5
5
  import { KookBot } from "./bot.js";
6
6
  import { KookPermission } from "./types.js";
7
7
  export class KookAdapter extends Adapter {
@@ -54,11 +54,6 @@ export class KookAdapter extends Adapter {
54
54
  this.registerKookPlatformTools();
55
55
  const groupTools = createGroupManagementTools(this, this.name);
56
56
  groupTools.forEach((t) => this.addTool(t));
57
- this.declareSkill({
58
- description: 'KOOK 服务器/频道群管理:踢人、禁言、封禁、设管理员、改服务器名、查成员等。仅昵称时请先 list_members 获取 user_id。',
59
- keywords: GROUP_MANAGEMENT_SKILL_KEYWORDS,
60
- tags: GROUP_MANAGEMENT_SKILL_TAGS,
61
- });
62
57
  await super.start();
63
58
  this.plugin.logger.info("KOOK 适配器已启动");
64
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhin.js/adapter-kook",
3
- "version": "1.0.52",
3
+ "version": "1.0.53",
4
4
  "description": "Zhin.js adapter for KOOK (开黑啦)",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -35,16 +35,20 @@
35
35
  },
36
36
  "devDependencies": {
37
37
  "typescript": "^5.3.0",
38
- "zhin.js": "1.0.51"
38
+ "zhin.js": "1.0.52"
39
39
  },
40
40
  "peerDependencies": {
41
- "@zhin.js/logger": "0.1.35",
42
- "zhin.js": "1.0.51"
41
+ "zhin.js": "1.0.52",
42
+ "@zhin.js/logger": "0.1.36"
43
43
  },
44
44
  "files": [
45
+ "src",
45
46
  "lib",
46
- "node",
47
+ "client",
48
+ "dist",
49
+ "skills",
47
50
  "README.md",
51
+ "node",
48
52
  "CHANGELOG.md"
49
53
  ],
50
54
  "publishConfig": {
@@ -0,0 +1,18 @@
1
+ ---
2
+ name: kook
3
+ description: KOOK 服务器/频道群管理:踢人、禁言、封禁、设管理员、改服务器名、查成员等。仅昵称时请先 list_members 获取 user_id。
4
+ keywords:
5
+ - kook
6
+ - KOOK
7
+ - adapter:kook
8
+ - 群管理
9
+ - list_members
10
+ tags:
11
+ - group
12
+ - management
13
+ tools: []
14
+ ---
15
+
16
+ ## 执行规则
17
+
18
+ - 使用 `kook_*` 工具;先 list_members 获取 user_id。
package/src/adapter.ts ADDED
@@ -0,0 +1,360 @@
1
+ /**
2
+ * KOOK 适配器
3
+ */
4
+ import {
5
+ Adapter,
6
+ Plugin,
7
+ createGroupManagementTools,
8
+ type IGroupManagement,
9
+ type ToolPermissionLevel,
10
+ } from "zhin.js";
11
+ import { KookBot } from "./bot.js";
12
+ import type { KookBotConfig } from "./types.js";
13
+ import { KookPermission, type KookSenderInfo } from "./types.js";
14
+
15
+ export class KookAdapter extends Adapter<KookBot> {
16
+ constructor(plugin: Plugin) {
17
+ super(plugin, "kook", []);
18
+ }
19
+
20
+ createBot(config: KookBotConfig): KookBot {
21
+ return new KookBot(this, config);
22
+ }
23
+
24
+ // ── IGroupManagement 标准群管方法 ──────────────────────────────────
25
+
26
+ async kickMember(botId: string, sceneId: string, userId: string) {
27
+ const bot = this.bots.get(botId);
28
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
29
+ return bot.kickUser(sceneId, userId);
30
+ }
31
+
32
+ async banMember(botId: string, sceneId: string, userId: string, reason?: string) {
33
+ const bot = this.bots.get(botId);
34
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
35
+ return bot.addToBlacklist(sceneId, userId, reason);
36
+ }
37
+
38
+ async unbanMember(botId: string, sceneId: string, userId: string) {
39
+ const bot = this.bots.get(botId);
40
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
41
+ return bot.removeFromBlacklist(sceneId, userId);
42
+ }
43
+
44
+ async setMemberNickname(botId: string, sceneId: string, userId: string, nickname: string) {
45
+ const bot = this.bots.get(botId);
46
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
47
+ return bot.setNickname(sceneId, userId, nickname);
48
+ }
49
+
50
+ async listMembers(botId: string, sceneId: string) {
51
+ const bot = this.bots.get(botId);
52
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
53
+ const members = await bot.getGuildMembers(sceneId);
54
+ return {
55
+ members: members.map(m => ({
56
+ id: m.id, username: m.username,
57
+ nickname: m.nickname, roles: m.roles,
58
+ })),
59
+ count: members.length,
60
+ };
61
+ }
62
+
63
+ // ── 生命周期 ───────────────────────────────────────────────────────
64
+
65
+ async start(): Promise<void> {
66
+ this.registerKookPlatformTools();
67
+ const groupTools = createGroupManagementTools(this as unknown as IGroupManagement, this.name);
68
+ groupTools.forEach((t) => this.addTool(t));
69
+ await super.start();
70
+ this.plugin.logger.info("KOOK 适配器已启动");
71
+ }
72
+
73
+ async stop(): Promise<void> {
74
+ await super.stop();
75
+ this.plugin.logger.info("KOOK 适配器已停止");
76
+ }
77
+
78
+ /**
79
+ * 注册 KOOK 平台特有工具(角色授予等)
80
+ */
81
+ private registerKookPlatformTools(): void {
82
+ // 角色管理工具 - 授予角色
83
+ this.addTool({
84
+ name: 'kook_grant_role',
85
+ description: '给用户授予 KOOK 服务器角色',
86
+ parameters: {
87
+ type: 'object',
88
+ properties: {
89
+ bot: {
90
+ type: 'string',
91
+ description: 'Bot 名称',
92
+ },
93
+ guild_id: {
94
+ type: 'string',
95
+ description: '服务器 ID',
96
+ },
97
+ user_id: {
98
+ type: 'string',
99
+ description: '用户 ID',
100
+ },
101
+ role_id: {
102
+ type: 'string',
103
+ description: '角色 ID',
104
+ },
105
+ },
106
+ required: ['bot', 'guild_id', 'user_id', 'role_id'],
107
+ },
108
+ platforms: ['kook'],
109
+ scopes: ['channel'],
110
+ permissionLevel: 'group_admin',
111
+ execute: async (args, context) => {
112
+ const { bot: botId, guild_id, user_id, role_id } = args;
113
+ const bot = this.bots.get(botId);
114
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
115
+
116
+ this.checkPermission(context, 'group_admin');
117
+
118
+ const success = await bot.grantRole(guild_id, user_id, role_id);
119
+ return { success, message: success ? `已授予用户 ${user_id} 角色 ${role_id}` : '授予角色失败' };
120
+ },
121
+ });
122
+
123
+ // 角色管理工具 - 撤销角色
124
+ this.addTool({
125
+ name: 'kook_revoke_role',
126
+ description: '撤销用户的 KOOK 服务器角色',
127
+ parameters: {
128
+ type: 'object',
129
+ properties: {
130
+ bot: {
131
+ type: 'string',
132
+ description: 'Bot 名称',
133
+ },
134
+ guild_id: {
135
+ type: 'string',
136
+ description: '服务器 ID',
137
+ },
138
+ user_id: {
139
+ type: 'string',
140
+ description: '用户 ID',
141
+ },
142
+ role_id: {
143
+ type: 'string',
144
+ description: '角色 ID',
145
+ },
146
+ },
147
+ required: ['bot', 'guild_id', 'user_id', 'role_id'],
148
+ },
149
+ platforms: ['kook'],
150
+ scopes: ['channel'],
151
+ permissionLevel: 'group_admin',
152
+ execute: async (args, context) => {
153
+ const { bot: botId, guild_id, user_id, role_id } = args;
154
+ const bot = this.bots.get(botId);
155
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
156
+
157
+ this.checkPermission(context, 'group_admin');
158
+
159
+ const success = await bot.revokeRole(guild_id, user_id, role_id);
160
+ return { success, message: success ? `已撤销用户 ${user_id} 的角色 ${role_id}` : '撤销角色失败' };
161
+ },
162
+ });
163
+
164
+ // 获取角色列表工具
165
+ this.addTool({
166
+ name: 'kook_list_roles',
167
+ description: '获取 KOOK 服务器的角色列表',
168
+ parameters: {
169
+ type: 'object',
170
+ properties: {
171
+ bot: {
172
+ type: 'string',
173
+ description: 'Bot 名称',
174
+ },
175
+ guild_id: {
176
+ type: 'string',
177
+ description: '服务器 ID',
178
+ },
179
+ },
180
+ required: ['bot', 'guild_id'],
181
+ },
182
+ platforms: ['kook'],
183
+ scopes: ['channel'],
184
+ permissionLevel: 'user', // 普通用户可查看
185
+ execute: async (args) => {
186
+ const { bot: botId, guild_id } = args;
187
+ const bot = this.bots.get(botId);
188
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
189
+
190
+ const roles = await bot.getRoleList(guild_id);
191
+ return {
192
+ roles: roles.map(r => ({
193
+ id: r.role_id,
194
+ name: r.name,
195
+ color: r.color,
196
+ position: r.position,
197
+ permissions: r.permissions,
198
+ })),
199
+ count: roles.length,
200
+ };
201
+ },
202
+ });
203
+
204
+ // 创建角色工具
205
+ this.addTool({
206
+ name: 'kook_create_role',
207
+ description: '在 KOOK 服务器中创建新角色(需要服务器主人权限)',
208
+ parameters: {
209
+ type: 'object',
210
+ properties: {
211
+ bot: {
212
+ type: 'string',
213
+ description: 'Bot 名称',
214
+ },
215
+ guild_id: {
216
+ type: 'string',
217
+ description: '服务器 ID',
218
+ },
219
+ name: {
220
+ type: 'string',
221
+ description: '角色名称',
222
+ },
223
+ },
224
+ required: ['bot', 'guild_id', 'name'],
225
+ },
226
+ platforms: ['kook'],
227
+ scopes: ['channel'],
228
+ permissionLevel: 'group_owner',
229
+ execute: async (args, context) => {
230
+ const { bot: botId, guild_id, name } = args;
231
+ const bot = this.bots.get(botId);
232
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
233
+
234
+ this.checkPermission(context, 'group_owner');
235
+
236
+ const role = await bot.createRole(guild_id, name);
237
+ return {
238
+ success: true,
239
+ message: `已创建角色 "${name}"`,
240
+ role: {
241
+ id: role.role_id,
242
+ name: role.name,
243
+ },
244
+ };
245
+ },
246
+ });
247
+
248
+ // 删除角色工具
249
+ this.addTool({
250
+ name: 'kook_delete_role',
251
+ description: '删除 KOOK 服务器中的角色(需要服务器主人权限)',
252
+ parameters: {
253
+ type: 'object',
254
+ properties: {
255
+ bot: {
256
+ type: 'string',
257
+ description: 'Bot 名称',
258
+ },
259
+ guild_id: {
260
+ type: 'string',
261
+ description: '服务器 ID',
262
+ },
263
+ role_id: {
264
+ type: 'string',
265
+ description: '角色 ID',
266
+ },
267
+ },
268
+ required: ['bot', 'guild_id', 'role_id'],
269
+ },
270
+ platforms: ['kook'],
271
+ scopes: ['channel'],
272
+ permissionLevel: 'group_owner',
273
+ execute: async (args, context) => {
274
+ const { bot: botId, guild_id, role_id } = args;
275
+ const bot = this.bots.get(botId);
276
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
277
+
278
+ this.checkPermission(context, 'group_owner');
279
+
280
+ const success = await bot.deleteRole(guild_id, role_id);
281
+ return { success, message: success ? `已删除角色 ${role_id}` : '删除角色失败' };
282
+ },
283
+ });
284
+
285
+ // 黑名单管理(仅支持 add/remove,通过 GuildMember API)
286
+ this.addTool({
287
+ name: 'kook_blacklist',
288
+ description: 'KOOK 服务器黑名单管理:添加/移除',
289
+ parameters: {
290
+ type: 'object',
291
+ properties: {
292
+ bot: { type: 'string', description: 'Bot 名称' },
293
+ guild_id: { type: 'string', description: '服务器 ID' },
294
+ action: { type: 'string', description: 'add|remove', enum: ['add', 'remove'] },
295
+ user_id: { type: 'string', description: '用户 ID' },
296
+ remark: { type: 'string', description: '备注(add 可选)' },
297
+ },
298
+ required: ['bot', 'guild_id', 'action', 'user_id'],
299
+ },
300
+ platforms: ['kook'],
301
+ scopes: ['channel'],
302
+ permissionLevel: 'group_admin',
303
+ execute: async (args, context) => {
304
+ const { bot: botId, guild_id, action, user_id, remark } = args;
305
+ const bot = this.bots.get(botId);
306
+ if (!bot) throw new Error(`Bot ${botId} 不存在`);
307
+ this.checkPermission(context, 'group_admin');
308
+
309
+ switch (action) {
310
+ case 'add': {
311
+ const success = await bot.addToBlacklist(guild_id, user_id, remark);
312
+ return { success, message: success ? `已将 ${user_id} 加入黑名单` : '操作失败' };
313
+ }
314
+ case 'remove': {
315
+ const success = await bot.removeFromBlacklist(guild_id, user_id);
316
+ return { success, message: success ? `已将 ${user_id} 从黑名单移除` : '操作失败' };
317
+ }
318
+ default: return { success: false, message: `未知操作: ${action}` };
319
+ }
320
+ },
321
+ });
322
+
323
+ this.plugin.logger.debug('已注册 KOOK 平台管理工具');
324
+ }
325
+
326
+ /**
327
+ * 检查执行上下文中的权限
328
+ */
329
+ private checkPermission(context: any, required: ToolPermissionLevel): void {
330
+ if (!context?.message) return; // 无上下文时跳过检查(命令行调用)
331
+
332
+ const sender = context.message.$sender as KookSenderInfo;
333
+ if (!sender) return;
334
+
335
+ const permissionLevels: Record<ToolPermissionLevel, number> = {
336
+ 'user': 0,
337
+ 'group_admin': 1,
338
+ 'group_owner': 2,
339
+ 'bot_admin': 3,
340
+ 'owner': 4,
341
+ };
342
+
343
+ // 获取发送者的实际权限级别
344
+ let senderLevel: ToolPermissionLevel = 'user';
345
+
346
+ if (sender.isGuildOwner || sender.permission === KookPermission.Owner) {
347
+ senderLevel = 'group_owner';
348
+ } else if (sender.isAdmin || sender.permission === KookPermission.Admin ||
349
+ sender.permission === KookPermission.ChannelAdmin) {
350
+ senderLevel = 'group_admin';
351
+ }
352
+
353
+ // TODO: 检查是否为 bot_admin 或 owner(需要从 zhin 配置中获取)
354
+
355
+ if (permissionLevels[senderLevel] < permissionLevels[required]) {
356
+ throw new Error(`权限不足:需要 ${required} 权限,当前为 ${senderLevel}`);
357
+ }
358
+ }
359
+ }
360
+
package/src/bot.ts ADDED
@@ -0,0 +1,692 @@
1
+ /**
2
+ * KOOK Bot 实现
3
+ */
4
+ import {
5
+ Client,
6
+ PrivateMessageEvent,
7
+ ChannelMessageEvent,
8
+ MessageSegment,
9
+ User,
10
+ Guild,
11
+ GuildMember,
12
+ parseGroupId,
13
+ } from "kook-client";
14
+ import path from "path";
15
+ import {
16
+ Bot,
17
+ Message,
18
+ SendOptions,
19
+ SendContent,
20
+ MessageElement,
21
+ segment,
22
+ MessageType,
23
+ } from "zhin.js";
24
+ import type { KookBotConfig, KookSenderInfo, KookRawMessage } from "./types.js";
25
+ import { KookPermission } from "./types.js";
26
+ import type { KookAdapter } from "./adapter.js";
27
+
28
+ export class KookBot extends Client implements Bot<KookBotConfig, KookRawMessage> {
29
+ $connected: boolean = false;
30
+ adapter: KookAdapter;
31
+
32
+ get $id(): string {
33
+ return this.$config.name;
34
+ }
35
+
36
+ get pluginLogger() {
37
+ return this.adapter.plugin.logger;
38
+ }
39
+
40
+ constructor(adapter: KookAdapter, public $config: KookBotConfig) {
41
+ super({
42
+ token: $config.token,
43
+ mode: "websocket", // KOOK 默认使用 WebSocket 模式
44
+ data_dir: $config.data_dir || path.join(process.cwd(), "data", "kook"),
45
+ timeout: $config.timeout || 10000,
46
+ max_retry: $config.max_retry || 3,
47
+ ignore: $config.ignore || "bot",
48
+ logLevel: $config.logLevel || "info",
49
+ });
50
+ this.adapter = adapter;
51
+ this.setupEventListeners();
52
+ }
53
+
54
+ /**
55
+ * 设置事件监听器
56
+ */
57
+ private setupEventListeners(): void {
58
+ // 监听消息事件
59
+ this.on("message", (msg: KookRawMessage) => {
60
+ try {
61
+ const message = this.$formatMessage(msg);
62
+ this.pluginLogger.debug(`KOOK 格式化消息: $content=${JSON.stringify(message.$content)}, $raw=${message.$raw}`);
63
+ this.adapter.emit("message.receive", message);
64
+
65
+ // 根据消息类型触发特定事件
66
+ const eventMap: Record<MessageType, string> = {
67
+ private: "message.private.receive",
68
+ group: "message.group.receive",
69
+ channel: "message.channel.receive",
70
+ };
71
+
72
+ const specificEvent = eventMap[msg.message_type];
73
+ if (specificEvent) {
74
+ this.adapter.emit(specificEvent as any, message);
75
+ }
76
+ } catch (error) {
77
+ this.pluginLogger.error(`处理 KOOK 消息失败:`, error);
78
+ }
79
+ });
80
+
81
+ // 监听连接事件
82
+ this.on("connect" as any, () => {
83
+ this.$connected = true;
84
+ this.pluginLogger.info(`KOOK Bot ${this.$id} 已连接`);
85
+ });
86
+
87
+ // 监听断开事件
88
+ this.on("disconnect" as any, () => {
89
+ this.$connected = false;
90
+ this.pluginLogger.warn(`KOOK Bot ${this.$id} 已断开`);
91
+ });
92
+
93
+ // 监听错误事件
94
+ this.on("error" as any, (error: Error) => {
95
+ this.pluginLogger.error(`KOOK Bot ${this.$id} 错误:`, error);
96
+ });
97
+ }
98
+
99
+ /**
100
+ * 将 KOOK 消息转换为标准消息格式
101
+ */
102
+ $formatMessage(msg: KookRawMessage): Message<KookRawMessage> {
103
+ const channelId = msg.message_type === "channel"
104
+ ? (msg as ChannelMessageEvent).channel_id
105
+ : msg.author_id;
106
+
107
+ // 获取发送者的权限信息
108
+ const senderInfo = this.getSenderInfo(msg);
109
+
110
+ // 频道消息需要获取 guild_id
111
+ let guildId: string | undefined;
112
+ if (msg.message_type === "channel") {
113
+ const channelMsg = msg as ChannelMessageEvent;
114
+ // 尝试从 channel 获取 guild_id
115
+ try {
116
+ const channel = channelMsg.channel;
117
+ guildId = (channel?.info as any)?.guild_id;
118
+ } catch {
119
+ // 如果获取失败,尝试从缓存中查找
120
+ }
121
+ }
122
+
123
+ const message: Message<KookRawMessage> = Message.from(msg, {
124
+ $id: msg.message_id.toString(),
125
+ $adapter: "kook" as const,
126
+ $bot: this.$id,
127
+
128
+ $sender: senderInfo,
129
+
130
+ $channel: {
131
+ id: channelId.toString(),
132
+ type: msg.message_type === "channel" ? "channel" : "private",
133
+ // 频道消息包含服务器ID
134
+ ...(guildId ? { guild_id: guildId } : {}),
135
+ },
136
+
137
+ $content: this.parseMessageContent(msg.message),
138
+ $raw: msg.raw_message,
139
+ $timestamp: msg.timestamp,
140
+
141
+ $recall: async () => {
142
+ await this.$recallMessage(message.$id);
143
+ },
144
+
145
+ $reply: async (content: SendContent, quote?: string | boolean): Promise<string> => {
146
+ const elements = Array.isArray(content) ? content : [content];
147
+ const finalContent: MessageElement[] = [];
148
+
149
+ if (quote) {
150
+ finalContent.push({
151
+ type: "reply",
152
+ data: {
153
+ id: typeof quote === "boolean" ? message.$id : quote,
154
+ },
155
+ });
156
+ }
157
+
158
+ finalContent.push(...elements.map(el =>
159
+ typeof el === 'string' ? { type: 'text' as const, data: { text: el } } : el
160
+ ));
161
+
162
+ return await this.adapter.sendMessage({
163
+ ...message.$channel,
164
+ context: "kook",
165
+ bot: this.$id,
166
+ content: finalContent,
167
+ });
168
+ },
169
+ });
170
+
171
+ return message;
172
+ }
173
+
174
+ /**
175
+ * 获取发送者的详细权限信息
176
+ */
177
+ private getSenderInfo(msg: KookRawMessage): KookSenderInfo {
178
+ const authorInfo = msg.author?.info;
179
+ const senderInfo: KookSenderInfo = {
180
+ id: msg.author_id.toString(),
181
+ name: authorInfo?.nickname || authorInfo?.username || "未知用户",
182
+ };
183
+
184
+ // 频道消息才有权限信息
185
+ if (msg.message_type === "channel") {
186
+ const channelMsg = msg as ChannelMessageEvent;
187
+
188
+ // 从 author.info 中获取权限信息(如果 kook-client 提供)
189
+ if (authorInfo) {
190
+ // 尝试获取角色列表
191
+ senderInfo.roles = (authorInfo as any).roles || [];
192
+
193
+ // 尝试获取 guild_id 并检查是否为服务器主人
194
+ try {
195
+ const channel = channelMsg.channel;
196
+ const guildId = (channel?.info as any)?.guild_id;
197
+ if (guildId) {
198
+ const guildInfo = this.guilds?.get(guildId);
199
+ if (guildInfo) {
200
+ senderInfo.isGuildOwner = guildInfo.user_id === msg.author_id;
201
+ }
202
+ }
203
+ } catch {
204
+ // 忽略获取失败
205
+ }
206
+
207
+ // 根据 permission 字段判断(如果有)
208
+ const permission = (authorInfo as any).permission as KookPermission | undefined;
209
+ if (permission !== undefined) {
210
+ senderInfo.permission = permission;
211
+ senderInfo.isAdmin = permission === KookPermission.Admin ||
212
+ permission === KookPermission.Owner ||
213
+ permission === KookPermission.ChannelAdmin;
214
+ senderInfo.isGuildOwner = senderInfo.isGuildOwner || permission === KookPermission.Owner;
215
+ }
216
+ }
217
+ }
218
+
219
+ return senderInfo;
220
+ }
221
+
222
+ // ==================== 频道管理 API ====================
223
+
224
+ /**
225
+ * 踢出用户
226
+ * @param guildId 服务器ID
227
+ * @param userId 用户ID
228
+ */
229
+ async kickUser(guildId: string, userId: string): Promise<boolean> {
230
+ try {
231
+ const guild = this.pickGuild(guildId);
232
+ const result = await guild.kick(userId);
233
+ this.pluginLogger.info(`KOOK Bot ${this.$id} 踢出用户 ${userId} 从服务器 ${guildId}`);
234
+ return result;
235
+ } catch (error) {
236
+ this.pluginLogger.error(`KOOK Bot ${this.$id} 踢出用户失败:`, error);
237
+ throw error;
238
+ }
239
+ }
240
+
241
+ /**
242
+ * 将用户加入黑名单
243
+ * @param guildId 服务器ID
244
+ * @param userId 用户ID
245
+ * @param remark 备注
246
+ * @param delMsgDays 删除消息天数(0-7)
247
+ */
248
+ async addToBlacklist(guildId: string, userId: string, remark?: string, delMsgDays?: number): Promise<boolean> {
249
+ try {
250
+ const member = this.pickGuildMember(guildId, userId);
251
+ const result = await member.addToBlackList(remark, delMsgDays);
252
+ this.pluginLogger.info(`KOOK Bot ${this.$id} 将用户 ${userId} 加入黑名单(服务器 ${guildId})`);
253
+ return result;
254
+ } catch (error) {
255
+ this.pluginLogger.error(`KOOK Bot ${this.$id} 加入黑名单失败:`, error);
256
+ throw error;
257
+ }
258
+ }
259
+
260
+ /**
261
+ * 将用户从黑名单移除
262
+ * @param guildId 服务器ID
263
+ * @param userId 用户ID
264
+ */
265
+ async removeFromBlacklist(guildId: string, userId: string): Promise<boolean> {
266
+ try {
267
+ const member = this.pickGuildMember(guildId, userId);
268
+ const result = await member.removeFromBlackList();
269
+ this.pluginLogger.info(`KOOK Bot ${this.$id} 将用户 ${userId} 从黑名单移除(服务器 ${guildId})`);
270
+ return result;
271
+ } catch (error) {
272
+ this.pluginLogger.error(`KOOK Bot ${this.$id} 移除黑名单失败:`, error);
273
+ throw error;
274
+ }
275
+ }
276
+
277
+ /**
278
+ * 给用户授予角色
279
+ * @param guildId 服务器ID
280
+ * @param userId 用户ID
281
+ * @param roleId 角色ID
282
+ */
283
+ async grantRole(guildId: string, userId: string, roleId: string): Promise<boolean> {
284
+ try {
285
+ const member = this.pickGuildMember(guildId, userId);
286
+ const result = await member.grant(roleId);
287
+ this.pluginLogger.info(`KOOK Bot ${this.$id} 授予用户 ${userId} 角色 ${roleId}(服务器 ${guildId})`);
288
+ return result;
289
+ } catch (error) {
290
+ this.pluginLogger.error(`KOOK Bot ${this.$id} 授予角色失败:`, error);
291
+ throw error;
292
+ }
293
+ }
294
+
295
+ /**
296
+ * 撤销用户角色
297
+ * @param guildId 服务器ID
298
+ * @param userId 用户ID
299
+ * @param roleId 角色ID
300
+ */
301
+ async revokeRole(guildId: string, userId: string, roleId: string): Promise<boolean> {
302
+ try {
303
+ const member = this.pickGuildMember(guildId, userId);
304
+ const result = await member.revoke(roleId);
305
+ this.pluginLogger.info(`KOOK Bot ${this.$id} 撤销用户 ${userId} 角色 ${roleId}(服务器 ${guildId})`);
306
+ return result;
307
+ } catch (error) {
308
+ this.pluginLogger.error(`KOOK Bot ${this.$id} 撤销角色失败:`, error);
309
+ throw error;
310
+ }
311
+ }
312
+
313
+ /**
314
+ * 设置用户昵称
315
+ * @param guildId 服务器ID
316
+ * @param userId 用户ID
317
+ * @param nickname 新昵称
318
+ */
319
+ async setNickname(guildId: string, userId: string, nickname: string): Promise<boolean> {
320
+ try {
321
+ const member = this.pickGuildMember(guildId, userId);
322
+ const result = await member.setNickname(nickname);
323
+ this.pluginLogger.info(`KOOK Bot ${this.$id} 设置用户 ${userId} 昵称为 "${nickname}"(服务器 ${guildId})`);
324
+ return result;
325
+ } catch (error) {
326
+ this.pluginLogger.error(`KOOK Bot ${this.$id} 设置昵称失败:`, error);
327
+ throw error;
328
+ }
329
+ }
330
+
331
+ /**
332
+ * 获取服务器角色列表
333
+ * @param guildId 服务器ID
334
+ */
335
+ async getRoleList(guildId: string): Promise<Guild.Role[]> {
336
+ try {
337
+ const guild = this.pickGuild(guildId);
338
+ return await guild.getRoleList();
339
+ } catch (error) {
340
+ this.pluginLogger.error(`KOOK Bot ${this.$id} 获取角色列表失败:`, error);
341
+ throw error;
342
+ }
343
+ }
344
+
345
+ /**
346
+ * 创建角色
347
+ * @param guildId 服务器ID
348
+ * @param name 角色名称
349
+ */
350
+ async createRole(guildId: string, name: string): Promise<Guild.Role> {
351
+ try {
352
+ const guild = this.pickGuild(guildId);
353
+ const role = await guild.createRole(name);
354
+ this.pluginLogger.info(`KOOK Bot ${this.$id} 创建角色 "${name}"(服务器 ${guildId})`);
355
+ return role;
356
+ } catch (error) {
357
+ this.pluginLogger.error(`KOOK Bot ${this.$id} 创建角色失败:`, error);
358
+ throw error;
359
+ }
360
+ }
361
+
362
+ /**
363
+ * 删除角色
364
+ * @param guildId 服务器ID
365
+ * @param roleId 角色ID
366
+ */
367
+ async deleteRole(guildId: string, roleId: string): Promise<boolean> {
368
+ try {
369
+ const guild = this.pickGuild(guildId);
370
+ const result = await guild.deleteRole(roleId);
371
+ this.pluginLogger.info(`KOOK Bot ${this.$id} 删除角色 ${roleId}(服务器 ${guildId})`);
372
+ return result;
373
+ } catch (error) {
374
+ this.pluginLogger.error(`KOOK Bot ${this.$id} 删除角色失败:`, error);
375
+ throw error;
376
+ }
377
+ }
378
+
379
+ /**
380
+ * 获取服务器成员列表
381
+ * @param guildId 服务器ID
382
+ * @param channelId 可选的频道ID
383
+ */
384
+ async getGuildMembers(guildId: string, channelId?: string): Promise<User.Info[]> {
385
+ try {
386
+ return await this.getGuildUserList(guildId, channelId);
387
+ } catch (error) {
388
+ this.pluginLogger.error(`KOOK Bot ${this.$id} 获取成员列表失败:`, error);
389
+ throw error;
390
+ }
391
+ }
392
+ private parseMarkdown(content: string): MessageElement[] {
393
+ const elements: MessageElement[] = [];
394
+
395
+ // KMarkdown 图片格式: ![alt](url)
396
+ const imageRegex = /!\[([^\]]*)\]\(([^)]+)\)/g;
397
+ // KMarkdown @提及格式: (met)userId(met) 或 @用户名
398
+ const mentionRegex = /\(met\)(\d+)\(met\)|@([^\s]+)/g;
399
+ // KMarkdown 表情格式: (emj)表情名(emj)[表情ID]
400
+ const emojiRegex = /\(emj\)([^(]+)\(emj\)\[([^\]]+)\]/g;
401
+ // KMarkdown 频道格式: (chn)channelId(chn)
402
+ const channelRegex = /\(chn\)(\d+)\(chn\)/g;
403
+
404
+ let lastIndex = 0;
405
+ const matches: Array<{ index: number; length: number; element: MessageElement }> = [];
406
+
407
+ // 解析图片
408
+ let match: RegExpExecArray | null;
409
+ while ((match = imageRegex.exec(content)) !== null) {
410
+ matches.push({
411
+ index: match.index,
412
+ length: match[0].length,
413
+ element: { type: "image", data: { url: match[2], alt: match[1] } }
414
+ });
415
+ }
416
+
417
+ // 解析 @提及
418
+ while ((match = mentionRegex.exec(content)) !== null) {
419
+ const userId = match[1] || match[2];
420
+ matches.push({
421
+ index: match.index,
422
+ length: match[0].length,
423
+ element: { type: "at", data: { id: userId } }
424
+ });
425
+ }
426
+
427
+ // 解析表情
428
+ while ((match = emojiRegex.exec(content)) !== null) {
429
+ matches.push({
430
+ index: match.index,
431
+ length: match[0].length,
432
+ element: { type: "face", data: { id: match[2], name: match[1] } }
433
+ });
434
+ }
435
+
436
+ // 解析频道引用
437
+ while ((match = channelRegex.exec(content)) !== null) {
438
+ matches.push({
439
+ index: match.index,
440
+ length: match[0].length,
441
+ element: { type: "text", data: { text: `#频道:${match[1]}` } }
442
+ });
443
+ }
444
+
445
+ // 按位置排序
446
+ matches.sort((a, b) => a.index - b.index);
447
+
448
+ // 组装消息段
449
+ for (const match of matches) {
450
+ // 添加之前的文本
451
+ if (match.index > lastIndex) {
452
+ const text = content.slice(lastIndex, match.index);
453
+ if (text) {
454
+ elements.push({ type: "text", data: { text } });
455
+ }
456
+ }
457
+
458
+ // 添加特殊元素
459
+ elements.push(match.element);
460
+ lastIndex = match.index + match.length;
461
+ }
462
+
463
+ // 添加剩余文本
464
+ if (lastIndex < content.length) {
465
+ const text = content.slice(lastIndex);
466
+ if (text) {
467
+ elements.push({ type: "text", data: { text } });
468
+ }
469
+ }
470
+
471
+ // 如果没有解析到任何特殊元素,返回纯文本
472
+ if (elements.length === 0) {
473
+ elements.push({ type: "text", data: { text: content } });
474
+ }
475
+
476
+ return elements;
477
+ }
478
+ /**
479
+ * 将 kook-client 的 MessageSegment[] 转换为 Zhin 的 MessageElement[]
480
+ */
481
+ private parseMessageContent(segments: MessageSegment[]): MessageElement[] {
482
+ const elements: MessageElement[] = [];
483
+
484
+ for (const segment of segments) {
485
+ switch (segment.type) {
486
+ case "markdown":
487
+ // 检查是否包含特殊语法,如果是纯文本则直接转换
488
+ if (this.hasKMarkdownSyntax(segment.text)) {
489
+ elements.push(...this.parseMarkdown(segment.text));
490
+ } else {
491
+ elements.push({ type: "text", data: { text: segment.text } });
492
+ }
493
+ break;
494
+
495
+ case "text":
496
+ elements.push({ type: "text", data: { text: segment.text } });
497
+ break;
498
+
499
+ case "at":
500
+ elements.push({ type: "at", data: { id: segment.user_id } });
501
+ break;
502
+
503
+ case "image":
504
+ elements.push({
505
+ type: "image",
506
+ data: { url: segment.url, alt: segment.title || "图片" }
507
+ });
508
+ break;
509
+
510
+ case "video":
511
+ elements.push({ type: "video", data: { url: segment.url } });
512
+ break;
513
+
514
+ case "audio":
515
+ elements.push({ type: "audio", data: { url: segment.url } });
516
+ break;
517
+
518
+ case "file":
519
+ elements.push({
520
+ type: "file",
521
+ data: { url: segment.url, name: segment.name }
522
+ });
523
+ break;
524
+
525
+ case "reply":
526
+ elements.push({ type: "reply", data: { id: segment.id } });
527
+ break;
528
+
529
+ case "card":
530
+ // Card 消息暂不支持,转为提示文本
531
+ elements.push({ type: "text", data: { text: "[卡片消息]" } });
532
+ break;
533
+
534
+ default:
535
+ this.pluginLogger.warn(`未知的 KOOK 消息段类型: ${(segment as any).type}`);
536
+ break;
537
+ }
538
+ }
539
+
540
+ return elements.length > 0 ? elements : [{ type: "text", data: { text: "" } }];
541
+ }
542
+
543
+ /**
544
+ * 检查文本是否包含 KMarkdown 特殊语法
545
+ */
546
+ private hasKMarkdownSyntax(text: string): boolean {
547
+ return /!\[.*?\]\(.*?\)|\(met\)|\(emj\)|\(chn\)|@\S+/.test(text);
548
+ }
549
+
550
+ /**
551
+ * 连接到 KOOK
552
+ */
553
+ async $connect(): Promise<void> {
554
+ try {
555
+ await this.connect();
556
+ this.$connected = true;
557
+ this.pluginLogger.info(`KOOK Bot ${this.$id} 连接成功`);
558
+ } catch (error) {
559
+ this.pluginLogger.error(`KOOK Bot ${this.$id} 连接失败:`, error);
560
+ throw error;
561
+ }
562
+ }
563
+
564
+ /**
565
+ * 断开连接
566
+ */
567
+ async $disconnect(): Promise<void> {
568
+ try {
569
+ await this.disconnect();
570
+ this.$connected = false;
571
+ this.pluginLogger.info(`KOOK Bot ${this.$id} 已断开连接`);
572
+ } catch (error) {
573
+ this.pluginLogger.error(`KOOK Bot ${this.$id} 断开连接失败:`, error);
574
+ throw error;
575
+ }
576
+ }
577
+
578
+ /**
579
+ * 发送消息
580
+ */
581
+ async $sendMessage(options: SendOptions): Promise<string> {
582
+ try {
583
+ const { id, type, content } = options;
584
+
585
+ // 将消息段转换为 KOOK 格式
586
+ const elements: MessageElement[] = Array.isArray(content)
587
+ ? content.map(el => typeof el === 'string' ? { type: 'text' as const, data: { text: el } } : el)
588
+ : [typeof content === 'string' ? { type: 'text' as const, data: { text: content } } : content];
589
+
590
+ const kookContent = this.convertToKookFormat(elements);
591
+
592
+ // 根据消息类型发送
593
+ let result: any;
594
+ if (type === "private") {
595
+ result = await (this as any).sendPrivateMsg(id, kookContent);
596
+ } else {
597
+ result = await (this as any).sendChannelMsg(id, kookContent);
598
+ }
599
+
600
+ return result?.msg_id || "";
601
+ } catch (error) {
602
+ this.pluginLogger.error(`KOOK Bot ${this.$id} 发送消息失败:`, error);
603
+ throw error;
604
+ }
605
+ }
606
+
607
+ /**
608
+ * 撤回消息
609
+ */
610
+ async $recallMessage(messageId: string): Promise<void> {
611
+ try {
612
+ await (this as any).deleteMsg(messageId);
613
+ this.pluginLogger.debug(`KOOK Bot ${this.$id} 撤回消息: ${messageId}`);
614
+ } catch (error) {
615
+ this.pluginLogger.error(`KOOK Bot ${this.$id} 撤回消息失败:`, error);
616
+ throw error;
617
+ }
618
+ }
619
+
620
+ /**
621
+ * 将消息段转换为 KOOK KMarkdown 格式
622
+ * 支持:文本、图片、@提及、表情、引用等
623
+ */
624
+ private convertToKookFormat(content: MessageElement[]): string {
625
+ return content
626
+ .map((el) => {
627
+ switch (el.type) {
628
+ case "text":
629
+ // 纯文本,转义特殊字符
630
+ return el.data.text.replace(/[\\`*_{}[\]()#+\-.!]/g, '\\$&');
631
+
632
+ case "image":
633
+ // 图片:![alt](url)
634
+ return `![${el.data.alt || '图片'}](${el.data.url || el.data.file})`;
635
+
636
+ case "at":
637
+ // @提及:(met)userId(met) 或 @all
638
+ if (el.data.id === "all") {
639
+ return "(met)all(met)";
640
+ }
641
+ return `(met)${el.data.id}(met)`;
642
+
643
+ case "face":
644
+ // 表情:(emj)表情名(emj)[表情ID]
645
+ return `(emj)${el.data.name || 'emoji'}(emj)[${el.data.id}]`;
646
+
647
+ case "reply":
648
+ // 引用消息(KOOK 使用 quote 参数,不在消息内容中)
649
+ return "";
650
+
651
+ case "video":
652
+ // 视频:使用链接形式
653
+ return `[视频](${el.data.url || el.data.file})`;
654
+
655
+ case "audio":
656
+ // 音频:使用链接形式
657
+ return `[音频](${el.data.url || el.data.file})`;
658
+
659
+ case "file":
660
+ // 文件:使用链接形式
661
+ return `[文件: ${el.data.name || '未命名'}](${el.data.url || el.data.file})`;
662
+
663
+ case "link":
664
+ // 链接:[文本](url)
665
+ return `[${el.data.text || el.data.url}](${el.data.url})`;
666
+
667
+ case "bold":
668
+ // 粗体:**文本**
669
+ return `**${el.data.text}**`;
670
+
671
+ case "italic":
672
+ // 斜体:*文本*
673
+ return `*${el.data.text}*`;
674
+
675
+ case "code":
676
+ // 行内代码:`代码`
677
+ return `\`${el.data.text}\``;
678
+
679
+ case "code_block":
680
+ // 代码块:```语言\n代码\n```
681
+ return `\`\`\`${el.data.language || ''}\n${el.data.text}\n\`\`\``;
682
+
683
+ default:
684
+ // 未知类型,尝试转换为文本
685
+ this.pluginLogger.warn(`未知的消息段类型: ${el.type}`);
686
+ return el.data.text || JSON.stringify(el.data);
687
+ }
688
+ })
689
+ .filter(Boolean)
690
+ .join("");
691
+ }
692
+ }
package/src/index.ts ADDED
@@ -0,0 +1,31 @@
1
+ /**
2
+ * KOOK 适配器入口:类型扩展、导出、注册
3
+ */
4
+ import { usePlugin, type Plugin } from "zhin.js";
5
+ import { KookAdapter } from "./adapter.js";
6
+
7
+ declare module "zhin.js" {
8
+ interface Adapters {
9
+ kook: KookAdapter;
10
+ }
11
+ }
12
+
13
+ export * from "./types.js";
14
+ export { KookBot } from "./bot.js";
15
+ export { KookAdapter } from "./adapter.js";
16
+
17
+ const plugin = usePlugin();
18
+ const { provide } = plugin;
19
+
20
+ provide({
21
+ name: "kook",
22
+ description: "KOOK Adapter",
23
+ mounted: async (p: Plugin) => {
24
+ const adapter = new KookAdapter(p);
25
+ await adapter.start();
26
+ return adapter;
27
+ },
28
+ dispose: async (adapter: KookAdapter) => {
29
+ await adapter.stop();
30
+ },
31
+ });
package/src/types.ts ADDED
@@ -0,0 +1,36 @@
1
+ /**
2
+ * KOOK 适配器类型与配置
3
+ */
4
+ import type { PrivateMessageEvent, ChannelMessageEvent } from "kook-client";
5
+ import type { LogLevel } from "kook-client";
6
+
7
+ export type { LogLevel };
8
+
9
+ export enum KookPermission {
10
+ Normal = 1,
11
+ Admin = 2,
12
+ Owner = 4,
13
+ ChannelAdmin = 5,
14
+ }
15
+
16
+ export interface KookSenderInfo {
17
+ id: string;
18
+ name: string;
19
+ permission?: KookPermission;
20
+ roles?: number[];
21
+ isGuildOwner?: boolean;
22
+ isAdmin?: boolean;
23
+ }
24
+
25
+ export interface KookBotConfig {
26
+ context: "kook";
27
+ name: string;
28
+ token: string;
29
+ data_dir?: string;
30
+ timeout?: number;
31
+ max_retry?: number;
32
+ ignore?: "bot" | "self";
33
+ logLevel?: LogLevel;
34
+ }
35
+
36
+ export type KookRawMessage = PrivateMessageEvent | ChannelMessageEvent;