napcat-sdk 0.5.1 → 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.cjs
CHANGED
|
@@ -50,7 +50,7 @@ const CONSOLE_LOGGER = {
|
|
|
50
50
|
//#endregion
|
|
51
51
|
//#region package.json
|
|
52
52
|
var name$1 = "napcat-sdk";
|
|
53
|
-
var version$1 = "0.
|
|
53
|
+
var version$1 = "0.6.0";
|
|
54
54
|
|
|
55
55
|
//#endregion
|
|
56
56
|
//#region src/segment.ts
|
|
@@ -129,14 +129,32 @@ var NapCat = class {
|
|
|
129
129
|
/** 机器人 ID */
|
|
130
130
|
#uin = 0;
|
|
131
131
|
/** 机器人昵称 */
|
|
132
|
-
#nickname = "
|
|
132
|
+
#nickname = "";
|
|
133
133
|
/** 机器人状态 */
|
|
134
134
|
#online = false;
|
|
135
|
+
/** nickname 缓存 */
|
|
136
|
+
#nicknameCache = /* @__PURE__ */ new Map();
|
|
137
|
+
/** 消息数据 */
|
|
138
|
+
#stat = {
|
|
139
|
+
start_time: Date.now(),
|
|
140
|
+
recv: {
|
|
141
|
+
group: 0,
|
|
142
|
+
private: 0
|
|
143
|
+
},
|
|
144
|
+
send: {
|
|
145
|
+
group: 0,
|
|
146
|
+
private: 0
|
|
147
|
+
}
|
|
148
|
+
};
|
|
135
149
|
/** Cookies 缓存 */
|
|
136
150
|
#cookieCache = /* @__PURE__ */ new Map();
|
|
137
151
|
constructor(options) {
|
|
138
152
|
this.options = options;
|
|
139
153
|
}
|
|
154
|
+
/** 统计数据 */
|
|
155
|
+
get stat() {
|
|
156
|
+
return this.#stat;
|
|
157
|
+
}
|
|
140
158
|
/** 配置项 */
|
|
141
159
|
get #config() {
|
|
142
160
|
return {
|
|
@@ -165,6 +183,8 @@ var NapCat = class {
|
|
|
165
183
|
}
|
|
166
184
|
/**
|
|
167
185
|
* 机器人 QQ 号
|
|
186
|
+
*
|
|
187
|
+
* @deprecated 建议使用 `uin` 属性
|
|
168
188
|
*/
|
|
169
189
|
get user_id() {
|
|
170
190
|
return this.uin;
|
|
@@ -187,7 +207,8 @@ var NapCat = class {
|
|
|
187
207
|
}
|
|
188
208
|
/** 构建 WebSocket 连接地址 */
|
|
189
209
|
#buildWsUrl() {
|
|
190
|
-
|
|
210
|
+
const { protocol, host, port, token } = this.#config;
|
|
211
|
+
return `${protocol}://${host}:${port}?access_token=${token}`;
|
|
191
212
|
}
|
|
192
213
|
/** 包装回复消息 */
|
|
193
214
|
#wrapReply(sendable, message_id, reply) {
|
|
@@ -207,7 +228,7 @@ var NapCat = class {
|
|
|
207
228
|
}
|
|
208
229
|
}
|
|
209
230
|
/** 标准化可发送消息元素 */
|
|
210
|
-
|
|
231
|
+
normalizeSendable(msg) {
|
|
211
232
|
return [msg].flat(2).map((item) => {
|
|
212
233
|
if (typeof item === "string") return {
|
|
213
234
|
type: "text",
|
|
@@ -245,97 +266,75 @@ var NapCat = class {
|
|
|
245
266
|
group_id,
|
|
246
267
|
group_name,
|
|
247
268
|
napcat: this,
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
setCard: (user_id, card) => this.api("set_group_card", {
|
|
260
|
-
group_id,
|
|
261
|
-
user_id,
|
|
262
|
-
card
|
|
263
|
-
}),
|
|
264
|
-
addEssence: (message_id) => this.api("set_essence_msg", { message_id }),
|
|
265
|
-
delEssence: (message_id) => this.api("delete_essence_msg", { message_id }),
|
|
266
|
-
recall: (message_id) => this.api("delete_msg", { message_id }),
|
|
267
|
-
banMember: (user_id, duration) => this.api("set_group_ban", {
|
|
268
|
-
group_id,
|
|
269
|
-
user_id,
|
|
270
|
-
duration
|
|
271
|
-
}),
|
|
272
|
-
sendMsg: (sendable) => this.sendGroupMsg(group_id, sendable)
|
|
269
|
+
sign: this.setGroupSign.bind(this, group_id),
|
|
270
|
+
setTitle: this.setGroupSpecialTitle.bind(this, group_id),
|
|
271
|
+
setCard: this.setGroupCard.bind(this, group_id),
|
|
272
|
+
setEssence: this.setEssenceMsg.bind(this),
|
|
273
|
+
delEssence: this.deleteEssenceMsg.bind(this),
|
|
274
|
+
getInfo: this.getGroupInfo.bind(this, group_id),
|
|
275
|
+
getMemberList: this.getGroupMemberList.bind(this, group_id),
|
|
276
|
+
getMemberInfo: this.getGroupMemberInfo.bind(this, group_id),
|
|
277
|
+
recall: this.recallMsg.bind(this),
|
|
278
|
+
ban: this.setGroupBan.bind(this, group_id),
|
|
279
|
+
sendMsg: this.sendGroupMsg.bind(this, group_id)
|
|
273
280
|
};
|
|
274
281
|
}
|
|
275
282
|
/** 构建好友对象 */
|
|
276
283
|
#buildFriend(user_id, nickname = "", extraInfo = {}) {
|
|
284
|
+
const name$2 = nickname || this.#nicknameCache.get(user_id) || "";
|
|
285
|
+
this.#nicknameCache.set(user_id, name$2);
|
|
277
286
|
return {
|
|
278
287
|
...extraInfo,
|
|
279
288
|
user_id,
|
|
280
|
-
nickname,
|
|
289
|
+
nickname: name$2,
|
|
281
290
|
napcat: this,
|
|
282
|
-
delete: (
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
temp_both_del: both
|
|
286
|
-
}),
|
|
287
|
-
sendMsg: (sendable) => this.sendPrivateMsg(user_id, sendable),
|
|
288
|
-
getInfo: () => this.api("get_stranger_info", { user_id })
|
|
291
|
+
delete: this.deleteFriend.bind(this, user_id),
|
|
292
|
+
sendMsg: this.sendPrivateMsg.bind(this, user_id),
|
|
293
|
+
getInfo: this.getStrangerInfo.bind(this, user_id)
|
|
289
294
|
};
|
|
290
295
|
}
|
|
296
|
+
#transformOneBotMessage(message) {
|
|
297
|
+
return (message || []).filter((e) => e.type !== "reply").map((el) => ({
|
|
298
|
+
type: el.type,
|
|
299
|
+
...el.data
|
|
300
|
+
}));
|
|
301
|
+
}
|
|
291
302
|
/** 构建私聊消息事件 */
|
|
292
303
|
#buildPrivateMessageEvent(event) {
|
|
293
304
|
const quote_id = event.message.find((el) => el.type === "reply")?.data?.id || null;
|
|
305
|
+
if (event.sender.nickname) this.#nicknameCache.set(event.sender.user_id, event.sender.nickname);
|
|
306
|
+
const target = event.target_id ? {
|
|
307
|
+
user_id: event.target_id,
|
|
308
|
+
nickname: this.#nicknameCache.get(event.target_id) || ""
|
|
309
|
+
} : {
|
|
310
|
+
user_id: event.sender.user_id,
|
|
311
|
+
nickname: event.sender.nickname
|
|
312
|
+
};
|
|
294
313
|
return {
|
|
295
314
|
...event,
|
|
296
315
|
quote_id,
|
|
297
|
-
getQuoteMessage:
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
},
|
|
302
|
-
message: (event.message || []).filter((e) => e.type !== "reply").map((el) => ({
|
|
303
|
-
type: el.type,
|
|
304
|
-
...el.data
|
|
305
|
-
})),
|
|
306
|
-
friend: this.#buildFriend(event.user_id, event.sender?.nickname || ""),
|
|
307
|
-
reply: (sendable, reply = false) => this.sendPrivateMsg(event.user_id, this.#wrapReply(sendable, event.message_id, reply))
|
|
316
|
+
getQuoteMessage: () => this.getMsg(quote_id),
|
|
317
|
+
message: this.#transformOneBotMessage(event.message),
|
|
318
|
+
friend: this.#buildFriend(target.user_id, target.nickname),
|
|
319
|
+
reply: (sendable, reply = false) => this.sendPrivateMsg(target.user_id, this.#wrapReply(sendable, event.message_id, reply))
|
|
308
320
|
};
|
|
309
321
|
}
|
|
310
322
|
/** 构建群消息事件对象 */
|
|
311
323
|
#buildGroupMessageEvent(event) {
|
|
312
324
|
const quote_id = event.message.find((el) => el.type === "reply")?.data?.id || null;
|
|
325
|
+
if (event.sender.nickname) this.#nicknameCache.set(event.sender.user_id, event.sender.nickname);
|
|
313
326
|
return {
|
|
314
327
|
...event,
|
|
315
328
|
quote_id,
|
|
316
|
-
getQuoteMessage:
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
group: this.#buildGroup(event.group_id, event.group?.group_name || ""),
|
|
326
|
-
recall: () => this.api("delete_msg", { message_id: event.message_id }),
|
|
327
|
-
addReaction: (id) => this.api("set_msg_emoji_like", {
|
|
328
|
-
message_id: event.message_id,
|
|
329
|
-
emoji_id: id,
|
|
330
|
-
set: true
|
|
331
|
-
}),
|
|
332
|
-
delReaction: (id) => this.api("set_msg_emoji_like", {
|
|
333
|
-
message_id: event.message_id,
|
|
334
|
-
emoji_id: id,
|
|
335
|
-
set: false
|
|
336
|
-
}),
|
|
337
|
-
addEssence: () => this.api("set_essence_msg", { message_id: event.message_id }),
|
|
338
|
-
delEssence: () => this.api("delete_essence_msg", { message_id: event.message_id }),
|
|
329
|
+
getQuoteMessage: () => this.getMsg(quote_id),
|
|
330
|
+
getSenderMemberInfo: this.getGroupMemberInfo.bind(this, event.group_id, event.sender.user_id),
|
|
331
|
+
message: this.#transformOneBotMessage(event.message),
|
|
332
|
+
group: this.#buildGroup(event.group_id, event.group_name || ""),
|
|
333
|
+
recall: this.recallMsg.bind(this, event.message_id),
|
|
334
|
+
addReaction: this.addReaction.bind(this, event.message_id),
|
|
335
|
+
delReaction: this.delReaction.bind(this, event.message_id),
|
|
336
|
+
setEssence: this.setEssenceMsg.bind(this, event.message_id),
|
|
337
|
+
delEssence: this.deleteEssenceMsg.bind(this, event.message_id),
|
|
339
338
|
reply: (sendable, reply = false) => this.sendGroupMsg(event.group_id, this.#wrapReply(sendable, event.message_id, reply))
|
|
340
339
|
};
|
|
341
340
|
}
|
|
@@ -366,41 +365,60 @@ var NapCat = class {
|
|
|
366
365
|
app_name,
|
|
367
366
|
app_version,
|
|
368
367
|
protocol_version,
|
|
369
|
-
|
|
368
|
+
timestamp: data.time * 1e3
|
|
370
369
|
});
|
|
371
370
|
}
|
|
372
371
|
this.#event.emit(`meta_event.${data.meta_event_type}.${data.sub_type}`, data);
|
|
373
372
|
}
|
|
374
373
|
}
|
|
375
374
|
break;
|
|
376
|
-
case "message":
|
|
377
|
-
if (data.message_type === "private")
|
|
378
|
-
|
|
375
|
+
case "message": {
|
|
376
|
+
if (data.message_type === "private") {
|
|
377
|
+
this.#stat.recv.private++;
|
|
378
|
+
data = this.#buildPrivateMessageEvent(data);
|
|
379
|
+
} else {
|
|
380
|
+
this.#stat.recv.group++;
|
|
381
|
+
data = this.#buildGroupMessageEvent(data);
|
|
382
|
+
}
|
|
379
383
|
this.#event.emit("message", data);
|
|
384
|
+
const msg = this.stringifyMessage(data.message);
|
|
385
|
+
const group = data.group ? `${data.group_name}(${data.group_id})` : "";
|
|
386
|
+
const sender = `${data.sender.nickname}(${data.sender.user_id})`;
|
|
380
387
|
switch (data.message_type) {
|
|
381
388
|
case "private":
|
|
382
|
-
this.logger.trace(`received private message: ${JSON.stringify(data)}`);
|
|
383
|
-
this.logger.info(`[P] ${data.sender.nickname}(${data.sender.user_id}): ${this.stringifyMessage(data.message)}`);
|
|
384
389
|
this.#event.emit("message.private", data);
|
|
385
390
|
this.#event.emit(`message.private.${data.sub_type}`, data);
|
|
391
|
+
this.logger.trace(`received private message: ${JSON.stringify(data)}`);
|
|
392
|
+
this.logger.info(`[私:${sender}] ${msg}`);
|
|
386
393
|
break;
|
|
387
394
|
case "group":
|
|
388
|
-
this.logger.trace(`received group message: ${JSON.stringify(data)}`);
|
|
389
|
-
this.logger.info(`[G:${data.group_name}:${data.group_id}] ${data.sender.nickname}(${data.sender.user_id}): ${this.stringifyMessage(data.message)}`);
|
|
390
395
|
this.#event.emit("message.group", data);
|
|
391
396
|
this.#event.emit(`message.group.${data.sub_type}`, data);
|
|
397
|
+
this.logger.trace(`received group message: ${JSON.stringify(data)}`);
|
|
398
|
+
this.logger.info(`[群:${group}] ${sender}: ${msg}`);
|
|
392
399
|
break;
|
|
393
400
|
default:
|
|
394
401
|
this.logger.debug(`received unknown message type: ${JSON.stringify(data)}`);
|
|
395
402
|
break;
|
|
396
403
|
}
|
|
397
404
|
break;
|
|
405
|
+
}
|
|
398
406
|
case "message_sent":
|
|
399
|
-
|
|
407
|
+
if (data.message_type === "private") {
|
|
408
|
+
this.#stat.send.private++;
|
|
409
|
+
data = this.#buildPrivateMessageEvent(data);
|
|
410
|
+
} else {
|
|
411
|
+
this.#stat.send.group++;
|
|
412
|
+
data = this.#buildGroupMessageEvent(data);
|
|
413
|
+
}
|
|
400
414
|
this.#event.emit("message_sent", data);
|
|
415
|
+
this.logger.trace(`received message_sent: ${JSON.stringify(data)}`);
|
|
401
416
|
if (data.message_type) {
|
|
402
417
|
this.#event.emit(`message_sent.${data.message_type}`, data);
|
|
403
418
|
if (data.sub_type) this.#event.emit(`message_sent.${data.message_type}.${data.sub_type}`, data);
|
|
419
|
+
const msg = this.stringifyMessage(data.message);
|
|
420
|
+
if (data.message_type === "group" && data.group_id) this.logger.info(`[>>>:群:${data.group_name}(${data.group_id})] ${msg}`);
|
|
421
|
+
else this.logger.info(`[>>>:私:${data.friend.nickname}(${data.friend.user_id})] ${msg}`);
|
|
404
422
|
}
|
|
405
423
|
break;
|
|
406
424
|
case "notice": {
|
|
@@ -548,12 +566,85 @@ var NapCat = class {
|
|
|
548
566
|
return this.#waitForAction(echo);
|
|
549
567
|
}
|
|
550
568
|
/**
|
|
569
|
+
* 获取好友列表
|
|
570
|
+
*/
|
|
571
|
+
async getFriendList() {
|
|
572
|
+
return (await this.api("get_friend_list")).map((f) => this.#buildFriend(f.user_id, f.nickname, f));
|
|
573
|
+
}
|
|
574
|
+
/**
|
|
575
|
+
* 获取群列表
|
|
576
|
+
*/
|
|
577
|
+
async getGroupList() {
|
|
578
|
+
return (await this.api("get_group_list")).map((g) => this.#buildGroup(g.group_id, g.group_name, g));
|
|
579
|
+
}
|
|
580
|
+
/**
|
|
581
|
+
* 添加消息回应
|
|
582
|
+
*/
|
|
583
|
+
addReaction(message_id, id) {
|
|
584
|
+
return this.api("set_msg_emoji_like", {
|
|
585
|
+
message_id,
|
|
586
|
+
emoji_id: id,
|
|
587
|
+
set: true
|
|
588
|
+
});
|
|
589
|
+
}
|
|
590
|
+
/**
|
|
591
|
+
* 删除消息回应
|
|
592
|
+
*/
|
|
593
|
+
delReaction(message_id, id) {
|
|
594
|
+
return this.api("set_msg_emoji_like", {
|
|
595
|
+
message_id,
|
|
596
|
+
emoji_id: id,
|
|
597
|
+
set: false
|
|
598
|
+
});
|
|
599
|
+
}
|
|
600
|
+
/**
|
|
601
|
+
* 获取消息
|
|
602
|
+
*/
|
|
603
|
+
async getMsg(message_id) {
|
|
604
|
+
if (!message_id) return null;
|
|
605
|
+
const msg = await this.api("get_msg", { message_id });
|
|
606
|
+
if (msg.message_type === "private") return this.#buildPrivateMessageEvent(msg);
|
|
607
|
+
else return this.#buildGroupMessageEvent(msg);
|
|
608
|
+
}
|
|
609
|
+
/**
|
|
610
|
+
* 删除好友
|
|
611
|
+
*/
|
|
612
|
+
deleteFriend(user_id, block = false, both = false) {
|
|
613
|
+
return this.api("delete_friend", {
|
|
614
|
+
user_id,
|
|
615
|
+
temp_block: block,
|
|
616
|
+
temp_both_del: both
|
|
617
|
+
});
|
|
618
|
+
}
|
|
619
|
+
/**
|
|
620
|
+
* 设置群成员禁言
|
|
621
|
+
*/
|
|
622
|
+
setGroupBan(group_id, user_id, duration) {
|
|
623
|
+
return this.api("set_group_ban", {
|
|
624
|
+
group_id,
|
|
625
|
+
user_id,
|
|
626
|
+
duration
|
|
627
|
+
});
|
|
628
|
+
}
|
|
629
|
+
/**
|
|
630
|
+
* 撤回消息
|
|
631
|
+
*/
|
|
632
|
+
recallMsg(message_id) {
|
|
633
|
+
return this.api("delete_msg", { message_id });
|
|
634
|
+
}
|
|
635
|
+
/**
|
|
636
|
+
* 获取陌生人信息
|
|
637
|
+
*/
|
|
638
|
+
getStrangerInfo(user_id) {
|
|
639
|
+
return this.api("get_stranger_info", { user_id });
|
|
640
|
+
}
|
|
641
|
+
/**
|
|
551
642
|
* 发送私聊消息
|
|
552
643
|
*/
|
|
553
644
|
sendPrivateMsg(user_id, sendable) {
|
|
554
645
|
return this.api("send_private_msg", {
|
|
555
646
|
user_id,
|
|
556
|
-
message: this
|
|
647
|
+
message: this.normalizeSendable(sendable)
|
|
557
648
|
});
|
|
558
649
|
}
|
|
559
650
|
/**
|
|
@@ -562,7 +653,66 @@ var NapCat = class {
|
|
|
562
653
|
sendGroupMsg(group_id, sendable) {
|
|
563
654
|
return this.api("send_group_msg", {
|
|
564
655
|
group_id,
|
|
565
|
-
message: this
|
|
656
|
+
message: this.normalizeSendable(sendable)
|
|
657
|
+
});
|
|
658
|
+
}
|
|
659
|
+
/**
|
|
660
|
+
* 获取群信息
|
|
661
|
+
*/
|
|
662
|
+
getGroupInfo(group_id) {
|
|
663
|
+
return this.api("get_group_info", { group_id });
|
|
664
|
+
}
|
|
665
|
+
/**
|
|
666
|
+
* 群签到
|
|
667
|
+
*/
|
|
668
|
+
setGroupSign(group_id) {
|
|
669
|
+
return this.api("set_group_sign", { group_id });
|
|
670
|
+
}
|
|
671
|
+
/**
|
|
672
|
+
* 设置群精华消息
|
|
673
|
+
*/
|
|
674
|
+
setEssenceMsg(message_id) {
|
|
675
|
+
return this.api("set_essence_msg", { message_id });
|
|
676
|
+
}
|
|
677
|
+
/**
|
|
678
|
+
* 删除群精华消息
|
|
679
|
+
*/
|
|
680
|
+
deleteEssenceMsg(message_id) {
|
|
681
|
+
return this.api("delete_essence_msg", { message_id });
|
|
682
|
+
}
|
|
683
|
+
/**
|
|
684
|
+
* 设置群成员名片
|
|
685
|
+
*/
|
|
686
|
+
setGroupCard(group_id, user_id, card) {
|
|
687
|
+
return this.api("set_group_card", {
|
|
688
|
+
group_id,
|
|
689
|
+
user_id,
|
|
690
|
+
card
|
|
691
|
+
});
|
|
692
|
+
}
|
|
693
|
+
/**
|
|
694
|
+
* 设置群成员专属头衔
|
|
695
|
+
*/
|
|
696
|
+
setGroupSpecialTitle(group_id, user_id, title) {
|
|
697
|
+
return this.api("set_group_special_title", {
|
|
698
|
+
group_id,
|
|
699
|
+
user_id,
|
|
700
|
+
title
|
|
701
|
+
});
|
|
702
|
+
}
|
|
703
|
+
/**
|
|
704
|
+
* 获取群成员列表
|
|
705
|
+
*/
|
|
706
|
+
getGroupMemberList(group_id) {
|
|
707
|
+
return this.api("get_group_member_list", { group_id });
|
|
708
|
+
}
|
|
709
|
+
/**
|
|
710
|
+
* 获取群成员信息
|
|
711
|
+
*/
|
|
712
|
+
getGroupMemberInfo(group_id, user_id) {
|
|
713
|
+
return this.api("get_group_member_info", {
|
|
714
|
+
group_id,
|
|
715
|
+
user_id
|
|
566
716
|
});
|
|
567
717
|
}
|
|
568
718
|
/**
|