napcat-sdk 0.5.0 → 0.6.0
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/dist/index.cjs +232 -82
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +134 -24
- package/dist/index.d.mts +134 -24
- package/dist/index.mjs +232 -82
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -21,7 +21,7 @@ const CONSOLE_LOGGER = {
|
|
|
21
21
|
//#endregion
|
|
22
22
|
//#region package.json
|
|
23
23
|
var name$1 = "napcat-sdk";
|
|
24
|
-
var version$1 = "0.
|
|
24
|
+
var version$1 = "0.6.0";
|
|
25
25
|
|
|
26
26
|
//#endregion
|
|
27
27
|
//#region src/segment.ts
|
|
@@ -100,14 +100,32 @@ var NapCat = class {
|
|
|
100
100
|
/** 机器人 ID */
|
|
101
101
|
#uin = 0;
|
|
102
102
|
/** 机器人昵称 */
|
|
103
|
-
#nickname = "
|
|
103
|
+
#nickname = "";
|
|
104
104
|
/** 机器人状态 */
|
|
105
105
|
#online = false;
|
|
106
|
+
/** nickname 缓存 */
|
|
107
|
+
#nicknameCache = /* @__PURE__ */ new Map();
|
|
108
|
+
/** 消息数据 */
|
|
109
|
+
#stat = {
|
|
110
|
+
start_time: Date.now(),
|
|
111
|
+
recv: {
|
|
112
|
+
group: 0,
|
|
113
|
+
private: 0
|
|
114
|
+
},
|
|
115
|
+
send: {
|
|
116
|
+
group: 0,
|
|
117
|
+
private: 0
|
|
118
|
+
}
|
|
119
|
+
};
|
|
106
120
|
/** Cookies 缓存 */
|
|
107
121
|
#cookieCache = /* @__PURE__ */ new Map();
|
|
108
122
|
constructor(options) {
|
|
109
123
|
this.options = options;
|
|
110
124
|
}
|
|
125
|
+
/** 统计数据 */
|
|
126
|
+
get stat() {
|
|
127
|
+
return this.#stat;
|
|
128
|
+
}
|
|
111
129
|
/** 配置项 */
|
|
112
130
|
get #config() {
|
|
113
131
|
return {
|
|
@@ -136,6 +154,8 @@ var NapCat = class {
|
|
|
136
154
|
}
|
|
137
155
|
/**
|
|
138
156
|
* 机器人 QQ 号
|
|
157
|
+
*
|
|
158
|
+
* @deprecated 建议使用 `uin` 属性
|
|
139
159
|
*/
|
|
140
160
|
get user_id() {
|
|
141
161
|
return this.uin;
|
|
@@ -158,7 +178,8 @@ var NapCat = class {
|
|
|
158
178
|
}
|
|
159
179
|
/** 构建 WebSocket 连接地址 */
|
|
160
180
|
#buildWsUrl() {
|
|
161
|
-
|
|
181
|
+
const { protocol, host, port, token } = this.#config;
|
|
182
|
+
return `${protocol}://${host}:${port}?access_token=${token}`;
|
|
162
183
|
}
|
|
163
184
|
/** 包装回复消息 */
|
|
164
185
|
#wrapReply(sendable, message_id, reply) {
|
|
@@ -178,7 +199,7 @@ var NapCat = class {
|
|
|
178
199
|
}
|
|
179
200
|
}
|
|
180
201
|
/** 标准化可发送消息元素 */
|
|
181
|
-
|
|
202
|
+
normalizeSendable(msg) {
|
|
182
203
|
return [msg].flat(2).map((item) => {
|
|
183
204
|
if (typeof item === "string") return {
|
|
184
205
|
type: "text",
|
|
@@ -216,97 +237,75 @@ var NapCat = class {
|
|
|
216
237
|
group_id,
|
|
217
238
|
group_name,
|
|
218
239
|
napcat: this,
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
setCard: (user_id, card) => this.api("set_group_card", {
|
|
231
|
-
group_id,
|
|
232
|
-
user_id,
|
|
233
|
-
card
|
|
234
|
-
}),
|
|
235
|
-
addEssence: (message_id) => this.api("set_essence_msg", { message_id }),
|
|
236
|
-
delEssence: (message_id) => this.api("delete_essence_msg", { message_id }),
|
|
237
|
-
recall: (message_id) => this.api("delete_msg", { message_id }),
|
|
238
|
-
banMember: (user_id, duration) => this.api("set_group_ban", {
|
|
239
|
-
group_id,
|
|
240
|
-
user_id,
|
|
241
|
-
duration
|
|
242
|
-
}),
|
|
243
|
-
sendMsg: (sendable) => this.sendGroupMsg(group_id, sendable)
|
|
240
|
+
sign: this.setGroupSign.bind(this, group_id),
|
|
241
|
+
setTitle: this.setGroupSpecialTitle.bind(this, group_id),
|
|
242
|
+
setCard: this.setGroupCard.bind(this, group_id),
|
|
243
|
+
setEssence: this.setEssenceMsg.bind(this),
|
|
244
|
+
delEssence: this.deleteEssenceMsg.bind(this),
|
|
245
|
+
getInfo: this.getGroupInfo.bind(this, group_id),
|
|
246
|
+
getMemberList: this.getGroupMemberList.bind(this, group_id),
|
|
247
|
+
getMemberInfo: this.getGroupMemberInfo.bind(this, group_id),
|
|
248
|
+
recall: this.recallMsg.bind(this),
|
|
249
|
+
ban: this.setGroupBan.bind(this, group_id),
|
|
250
|
+
sendMsg: this.sendGroupMsg.bind(this, group_id)
|
|
244
251
|
};
|
|
245
252
|
}
|
|
246
253
|
/** 构建好友对象 */
|
|
247
254
|
#buildFriend(user_id, nickname = "", extraInfo = {}) {
|
|
255
|
+
const name$2 = nickname || this.#nicknameCache.get(user_id) || "";
|
|
256
|
+
this.#nicknameCache.set(user_id, name$2);
|
|
248
257
|
return {
|
|
249
258
|
...extraInfo,
|
|
250
259
|
user_id,
|
|
251
|
-
nickname,
|
|
260
|
+
nickname: name$2,
|
|
252
261
|
napcat: this,
|
|
253
|
-
delete: (
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
temp_both_del: both
|
|
257
|
-
}),
|
|
258
|
-
sendMsg: (sendable) => this.sendPrivateMsg(user_id, sendable),
|
|
259
|
-
getInfo: () => this.api("get_stranger_info", { user_id })
|
|
262
|
+
delete: this.deleteFriend.bind(this, user_id),
|
|
263
|
+
sendMsg: this.sendPrivateMsg.bind(this, user_id),
|
|
264
|
+
getInfo: this.getStrangerInfo.bind(this, user_id)
|
|
260
265
|
};
|
|
261
266
|
}
|
|
267
|
+
#transformOneBotMessage(message) {
|
|
268
|
+
return (message || []).filter((e) => e.type !== "reply").map((el) => ({
|
|
269
|
+
type: el.type,
|
|
270
|
+
...el.data
|
|
271
|
+
}));
|
|
272
|
+
}
|
|
262
273
|
/** 构建私聊消息事件 */
|
|
263
274
|
#buildPrivateMessageEvent(event) {
|
|
264
275
|
const quote_id = event.message.find((el) => el.type === "reply")?.data?.id || null;
|
|
276
|
+
if (event.sender.nickname) this.#nicknameCache.set(event.sender.user_id, event.sender.nickname);
|
|
277
|
+
const target = event.target_id ? {
|
|
278
|
+
user_id: event.target_id,
|
|
279
|
+
nickname: this.#nicknameCache.get(event.target_id) || ""
|
|
280
|
+
} : {
|
|
281
|
+
user_id: event.sender.user_id,
|
|
282
|
+
nickname: event.sender.nickname
|
|
283
|
+
};
|
|
265
284
|
return {
|
|
266
285
|
...event,
|
|
267
286
|
quote_id,
|
|
268
|
-
getQuoteMessage:
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
},
|
|
273
|
-
message: (event.message || []).filter((e) => e.type !== "reply").map((el) => ({
|
|
274
|
-
type: el.type,
|
|
275
|
-
...el.data
|
|
276
|
-
})),
|
|
277
|
-
friend: this.#buildFriend(event.user_id, event.sender?.nickname || ""),
|
|
278
|
-
reply: (sendable, reply = false) => this.sendPrivateMsg(event.user_id, this.#wrapReply(sendable, event.message_id, reply))
|
|
287
|
+
getQuoteMessage: () => this.getMsg(quote_id),
|
|
288
|
+
message: this.#transformOneBotMessage(event.message),
|
|
289
|
+
friend: this.#buildFriend(target.user_id, target.nickname),
|
|
290
|
+
reply: (sendable, reply = false) => this.sendPrivateMsg(target.user_id, this.#wrapReply(sendable, event.message_id, reply))
|
|
279
291
|
};
|
|
280
292
|
}
|
|
281
293
|
/** 构建群消息事件对象 */
|
|
282
294
|
#buildGroupMessageEvent(event) {
|
|
283
295
|
const quote_id = event.message.find((el) => el.type === "reply")?.data?.id || null;
|
|
296
|
+
if (event.sender.nickname) this.#nicknameCache.set(event.sender.user_id, event.sender.nickname);
|
|
284
297
|
return {
|
|
285
298
|
...event,
|
|
286
299
|
quote_id,
|
|
287
|
-
getQuoteMessage:
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
group: this.#buildGroup(event.group_id, event.group?.group_name || ""),
|
|
297
|
-
recall: () => this.api("delete_msg", { message_id: event.message_id }),
|
|
298
|
-
addReaction: (id) => this.api("set_msg_emoji_like", {
|
|
299
|
-
message_id: event.message_id,
|
|
300
|
-
emoji_id: id,
|
|
301
|
-
set: true
|
|
302
|
-
}),
|
|
303
|
-
delReaction: (id) => this.api("set_msg_emoji_like", {
|
|
304
|
-
message_id: event.message_id,
|
|
305
|
-
emoji_id: id,
|
|
306
|
-
set: false
|
|
307
|
-
}),
|
|
308
|
-
addEssence: () => this.api("set_essence_msg", { message_id: event.message_id }),
|
|
309
|
-
delEssence: () => this.api("delete_essence_msg", { message_id: event.message_id }),
|
|
300
|
+
getQuoteMessage: () => this.getMsg(quote_id),
|
|
301
|
+
getSenderMemberInfo: this.getGroupMemberInfo.bind(this, event.group_id, event.sender.user_id),
|
|
302
|
+
message: this.#transformOneBotMessage(event.message),
|
|
303
|
+
group: this.#buildGroup(event.group_id, event.group_name || ""),
|
|
304
|
+
recall: this.recallMsg.bind(this, event.message_id),
|
|
305
|
+
addReaction: this.addReaction.bind(this, event.message_id),
|
|
306
|
+
delReaction: this.delReaction.bind(this, event.message_id),
|
|
307
|
+
setEssence: this.setEssenceMsg.bind(this, event.message_id),
|
|
308
|
+
delEssence: this.deleteEssenceMsg.bind(this, event.message_id),
|
|
310
309
|
reply: (sendable, reply = false) => this.sendGroupMsg(event.group_id, this.#wrapReply(sendable, event.message_id, reply))
|
|
311
310
|
};
|
|
312
311
|
}
|
|
@@ -337,41 +336,60 @@ var NapCat = class {
|
|
|
337
336
|
app_name,
|
|
338
337
|
app_version,
|
|
339
338
|
protocol_version,
|
|
340
|
-
|
|
339
|
+
timestamp: data.time * 1e3
|
|
341
340
|
});
|
|
342
341
|
}
|
|
343
342
|
this.#event.emit(`meta_event.${data.meta_event_type}.${data.sub_type}`, data);
|
|
344
343
|
}
|
|
345
344
|
}
|
|
346
345
|
break;
|
|
347
|
-
case "message":
|
|
348
|
-
if (data.message_type === "private")
|
|
349
|
-
|
|
346
|
+
case "message": {
|
|
347
|
+
if (data.message_type === "private") {
|
|
348
|
+
this.#stat.recv.private++;
|
|
349
|
+
data = this.#buildPrivateMessageEvent(data);
|
|
350
|
+
} else {
|
|
351
|
+
this.#stat.recv.group++;
|
|
352
|
+
data = this.#buildGroupMessageEvent(data);
|
|
353
|
+
}
|
|
350
354
|
this.#event.emit("message", data);
|
|
355
|
+
const msg = this.stringifyMessage(data.message);
|
|
356
|
+
const group = data.group ? `${data.group_name}(${data.group_id})` : "";
|
|
357
|
+
const sender = `${data.sender.nickname}(${data.sender.user_id})`;
|
|
351
358
|
switch (data.message_type) {
|
|
352
359
|
case "private":
|
|
353
|
-
this.logger.trace(`received private message: ${JSON.stringify(data)}`);
|
|
354
|
-
this.logger.info(`[P] ${data.sender.nickname}(${data.sender.user_id}): ${this.stringifyMessage(data.message)}`);
|
|
355
360
|
this.#event.emit("message.private", data);
|
|
356
361
|
this.#event.emit(`message.private.${data.sub_type}`, data);
|
|
362
|
+
this.logger.trace(`received private message: ${JSON.stringify(data)}`);
|
|
363
|
+
this.logger.info(`[私:${sender}] ${msg}`);
|
|
357
364
|
break;
|
|
358
365
|
case "group":
|
|
359
|
-
this.logger.trace(`received group message: ${JSON.stringify(data)}`);
|
|
360
|
-
this.logger.info(`[G:${data.group_name}:${data.group_id}] ${data.sender.nickname}(${data.sender.user_id}): ${this.stringifyMessage(data.message)}`);
|
|
361
366
|
this.#event.emit("message.group", data);
|
|
362
367
|
this.#event.emit(`message.group.${data.sub_type}`, data);
|
|
368
|
+
this.logger.trace(`received group message: ${JSON.stringify(data)}`);
|
|
369
|
+
this.logger.info(`[群:${group}] ${sender}: ${msg}`);
|
|
363
370
|
break;
|
|
364
371
|
default:
|
|
365
372
|
this.logger.debug(`received unknown message type: ${JSON.stringify(data)}`);
|
|
366
373
|
break;
|
|
367
374
|
}
|
|
368
375
|
break;
|
|
376
|
+
}
|
|
369
377
|
case "message_sent":
|
|
370
|
-
|
|
378
|
+
if (data.message_type === "private") {
|
|
379
|
+
this.#stat.send.private++;
|
|
380
|
+
data = this.#buildPrivateMessageEvent(data);
|
|
381
|
+
} else {
|
|
382
|
+
this.#stat.send.group++;
|
|
383
|
+
data = this.#buildGroupMessageEvent(data);
|
|
384
|
+
}
|
|
371
385
|
this.#event.emit("message_sent", data);
|
|
386
|
+
this.logger.trace(`received message_sent: ${JSON.stringify(data)}`);
|
|
372
387
|
if (data.message_type) {
|
|
373
388
|
this.#event.emit(`message_sent.${data.message_type}`, data);
|
|
374
389
|
if (data.sub_type) this.#event.emit(`message_sent.${data.message_type}.${data.sub_type}`, data);
|
|
390
|
+
const msg = this.stringifyMessage(data.message);
|
|
391
|
+
if (data.message_type === "group" && data.group_id) this.logger.info(`[>>>:群:${data.group_name}(${data.group_id})] ${msg}`);
|
|
392
|
+
else this.logger.info(`[>>>:私:${data.friend.nickname}(${data.friend.user_id})] ${msg}`);
|
|
375
393
|
}
|
|
376
394
|
break;
|
|
377
395
|
case "notice": {
|
|
@@ -519,12 +537,85 @@ var NapCat = class {
|
|
|
519
537
|
return this.#waitForAction(echo);
|
|
520
538
|
}
|
|
521
539
|
/**
|
|
540
|
+
* 获取好友列表
|
|
541
|
+
*/
|
|
542
|
+
async getFriendList() {
|
|
543
|
+
return (await this.api("get_friend_list")).map((f) => this.#buildFriend(f.user_id, f.nickname, f));
|
|
544
|
+
}
|
|
545
|
+
/**
|
|
546
|
+
* 获取群列表
|
|
547
|
+
*/
|
|
548
|
+
async getGroupList() {
|
|
549
|
+
return (await this.api("get_group_list")).map((g) => this.#buildGroup(g.group_id, g.group_name, g));
|
|
550
|
+
}
|
|
551
|
+
/**
|
|
552
|
+
* 添加消息回应
|
|
553
|
+
*/
|
|
554
|
+
addReaction(message_id, id) {
|
|
555
|
+
return this.api("set_msg_emoji_like", {
|
|
556
|
+
message_id,
|
|
557
|
+
emoji_id: id,
|
|
558
|
+
set: true
|
|
559
|
+
});
|
|
560
|
+
}
|
|
561
|
+
/**
|
|
562
|
+
* 删除消息回应
|
|
563
|
+
*/
|
|
564
|
+
delReaction(message_id, id) {
|
|
565
|
+
return this.api("set_msg_emoji_like", {
|
|
566
|
+
message_id,
|
|
567
|
+
emoji_id: id,
|
|
568
|
+
set: false
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
/**
|
|
572
|
+
* 获取消息
|
|
573
|
+
*/
|
|
574
|
+
async getMsg(message_id) {
|
|
575
|
+
if (!message_id) return null;
|
|
576
|
+
const msg = await this.api("get_msg", { message_id });
|
|
577
|
+
if (msg.message_type === "private") return this.#buildPrivateMessageEvent(msg);
|
|
578
|
+
else return this.#buildGroupMessageEvent(msg);
|
|
579
|
+
}
|
|
580
|
+
/**
|
|
581
|
+
* 删除好友
|
|
582
|
+
*/
|
|
583
|
+
deleteFriend(user_id, block = false, both = false) {
|
|
584
|
+
return this.api("delete_friend", {
|
|
585
|
+
user_id,
|
|
586
|
+
temp_block: block,
|
|
587
|
+
temp_both_del: both
|
|
588
|
+
});
|
|
589
|
+
}
|
|
590
|
+
/**
|
|
591
|
+
* 设置群成员禁言
|
|
592
|
+
*/
|
|
593
|
+
setGroupBan(group_id, user_id, duration) {
|
|
594
|
+
return this.api("set_group_ban", {
|
|
595
|
+
group_id,
|
|
596
|
+
user_id,
|
|
597
|
+
duration
|
|
598
|
+
});
|
|
599
|
+
}
|
|
600
|
+
/**
|
|
601
|
+
* 撤回消息
|
|
602
|
+
*/
|
|
603
|
+
recallMsg(message_id) {
|
|
604
|
+
return this.api("delete_msg", { message_id });
|
|
605
|
+
}
|
|
606
|
+
/**
|
|
607
|
+
* 获取陌生人信息
|
|
608
|
+
*/
|
|
609
|
+
getStrangerInfo(user_id) {
|
|
610
|
+
return this.api("get_stranger_info", { user_id });
|
|
611
|
+
}
|
|
612
|
+
/**
|
|
522
613
|
* 发送私聊消息
|
|
523
614
|
*/
|
|
524
615
|
sendPrivateMsg(user_id, sendable) {
|
|
525
616
|
return this.api("send_private_msg", {
|
|
526
617
|
user_id,
|
|
527
|
-
message: this
|
|
618
|
+
message: this.normalizeSendable(sendable)
|
|
528
619
|
});
|
|
529
620
|
}
|
|
530
621
|
/**
|
|
@@ -533,7 +624,66 @@ var NapCat = class {
|
|
|
533
624
|
sendGroupMsg(group_id, sendable) {
|
|
534
625
|
return this.api("send_group_msg", {
|
|
535
626
|
group_id,
|
|
536
|
-
message: this
|
|
627
|
+
message: this.normalizeSendable(sendable)
|
|
628
|
+
});
|
|
629
|
+
}
|
|
630
|
+
/**
|
|
631
|
+
* 获取群信息
|
|
632
|
+
*/
|
|
633
|
+
getGroupInfo(group_id) {
|
|
634
|
+
return this.api("get_group_info", { group_id });
|
|
635
|
+
}
|
|
636
|
+
/**
|
|
637
|
+
* 群签到
|
|
638
|
+
*/
|
|
639
|
+
setGroupSign(group_id) {
|
|
640
|
+
return this.api("set_group_sign", { group_id });
|
|
641
|
+
}
|
|
642
|
+
/**
|
|
643
|
+
* 设置群精华消息
|
|
644
|
+
*/
|
|
645
|
+
setEssenceMsg(message_id) {
|
|
646
|
+
return this.api("set_essence_msg", { message_id });
|
|
647
|
+
}
|
|
648
|
+
/**
|
|
649
|
+
* 删除群精华消息
|
|
650
|
+
*/
|
|
651
|
+
deleteEssenceMsg(message_id) {
|
|
652
|
+
return this.api("delete_essence_msg", { message_id });
|
|
653
|
+
}
|
|
654
|
+
/**
|
|
655
|
+
* 设置群成员名片
|
|
656
|
+
*/
|
|
657
|
+
setGroupCard(group_id, user_id, card) {
|
|
658
|
+
return this.api("set_group_card", {
|
|
659
|
+
group_id,
|
|
660
|
+
user_id,
|
|
661
|
+
card
|
|
662
|
+
});
|
|
663
|
+
}
|
|
664
|
+
/**
|
|
665
|
+
* 设置群成员专属头衔
|
|
666
|
+
*/
|
|
667
|
+
setGroupSpecialTitle(group_id, user_id, title) {
|
|
668
|
+
return this.api("set_group_special_title", {
|
|
669
|
+
group_id,
|
|
670
|
+
user_id,
|
|
671
|
+
title
|
|
672
|
+
});
|
|
673
|
+
}
|
|
674
|
+
/**
|
|
675
|
+
* 获取群成员列表
|
|
676
|
+
*/
|
|
677
|
+
getGroupMemberList(group_id) {
|
|
678
|
+
return this.api("get_group_member_list", { group_id });
|
|
679
|
+
}
|
|
680
|
+
/**
|
|
681
|
+
* 获取群成员信息
|
|
682
|
+
*/
|
|
683
|
+
getGroupMemberInfo(group_id, user_id) {
|
|
684
|
+
return this.api("get_group_member_info", {
|
|
685
|
+
group_id,
|
|
686
|
+
user_id
|
|
537
687
|
});
|
|
538
688
|
}
|
|
539
689
|
/**
|