mirai-js 2.7.1-0 → 2.8.0-0
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +0 -8
- package/dist/node/BaseType.d.ts +292 -47
- package/dist/node/Bot.d.ts +15 -10
- package/dist/node/Message.d.ts +3 -3
- package/dist/node/Middleware.d.ts +2 -2
- package/dist/node/Waiter.d.ts +1 -1
- package/package.json +13 -13
- package/src/BaseType.d.ts +292 -47
- package/src/Bot.d.ts +15 -10
- package/src/Message.d.ts +3 -3
- package/src/Middleware.d.ts +2 -2
- package/src/Waiter.d.ts +1 -1
- package/src/util/isBrowserEnv.js +2 -2
package/README.md
CHANGED
@@ -27,14 +27,6 @@ QQ 群: 730757181
|
|
27
27
|
|
28
28
|
如果觉得这个项目还不错的话,就动动小手给个 star 吧!
|
29
29
|
|
30
|
-
## Star
|
31
|
-
|
32
|
-
[![Stargazers repo roster for @Drincann/Mirai-js](https://reporoster.com/stars/Drincann/Mirai-js)](https://github.com/Drincann/Mirai-js/stargazers)
|
33
|
-
|
34
|
-
## Fork
|
35
|
-
|
36
|
-
[![Forkers repo roster for @Drincann/Mirai-js](https://reporoster.com/forks/Drincann/Mirai-js)](https://github.com/Drincann/Mirai-js/network/members)
|
37
|
-
|
38
30
|
## 支持这个项目
|
39
31
|
|
40
32
|
<a href="https://opencollective.com/mirai-js#sponsors" target="_blank"><img src="https://opencollective.com/mirai-js/sponsors.svg?width=890"></a>
|
package/dist/node/BaseType.d.ts
CHANGED
@@ -1,17 +1,19 @@
|
|
1
|
+
import { Bot } from './Bot';
|
2
|
+
|
1
3
|
/**
|
2
4
|
* 消息链的元素,是 mirai-api-http 接口需要的原始类型
|
3
5
|
* 有多种消息类型实现了该接口,已经全部列出
|
4
|
-
*
|
6
|
+
*
|
5
7
|
* @see https://github.com/project-mirai/mirai-api-http/blob/master/docs/MessageType.md
|
6
8
|
*/
|
7
9
|
interface MessageType {
|
8
|
-
type:
|
10
|
+
type: MessageChainElementTypes;
|
9
11
|
|
10
12
|
// Quote
|
11
|
-
id?: number
|
12
|
-
groupId?: number
|
13
|
-
senderId?: number
|
14
|
-
targetId?: number
|
13
|
+
id?: number;
|
14
|
+
groupId?: number;
|
15
|
+
senderId?: number;
|
16
|
+
targetId?: number;
|
15
17
|
origin?: MessageType[];
|
16
18
|
|
17
19
|
// At
|
@@ -71,7 +73,6 @@ interface BotConfigGetable {
|
|
71
73
|
getSessionKey(): string;
|
72
74
|
}
|
73
75
|
|
74
|
-
|
75
76
|
// 图片 id
|
76
77
|
type ImageId = string;
|
77
78
|
// 语音 id
|
@@ -81,41 +82,291 @@ type MessageId = number;
|
|
81
82
|
|
82
83
|
/**
|
83
84
|
* 消息类型
|
84
|
-
*
|
85
|
+
*
|
85
86
|
* @see https://github.com/project-mirai/mirai-api-http/blob/master/docs/EventType.md
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
| '
|
90
|
-
|
91
|
-
| '
|
92
|
-
| '
|
93
|
-
| '
|
94
|
-
| '
|
95
|
-
| '
|
96
|
-
| '
|
97
|
-
| '
|
98
|
-
| '
|
99
|
-
| '
|
100
|
-
| '
|
101
|
-
| '
|
102
|
-
| '
|
103
|
-
| '
|
104
|
-
| '
|
105
|
-
| '
|
106
|
-
| '
|
87
|
+
*/
|
88
|
+
|
89
|
+
type MessageChainElementTypes =
|
90
|
+
| 'Source'
|
91
|
+
| 'Quote'
|
92
|
+
| 'At'
|
93
|
+
| 'AtAll'
|
94
|
+
| 'Face'
|
95
|
+
| 'Plain'
|
96
|
+
| 'Image'
|
97
|
+
| 'FlashImage'
|
98
|
+
| 'Voice'
|
99
|
+
| 'Xml'
|
100
|
+
| 'Json'
|
101
|
+
| 'App'
|
102
|
+
| 'Poke'
|
103
|
+
| 'Dice'
|
104
|
+
| 'MarketFace'
|
105
|
+
| 'MusicShare'
|
106
|
+
| 'ForwardMessage'
|
107
|
+
| 'File'
|
108
|
+
| 'MiraiCode';
|
109
|
+
|
110
|
+
interface EventBaseType {
|
111
|
+
bot: Bot;
|
112
|
+
}
|
113
|
+
|
114
|
+
// Middleware
|
115
|
+
interface MessageExtendType {
|
116
|
+
text?: string;
|
117
|
+
classified?: {
|
118
|
+
[key in MessageChainElementTypes]?: any[];
|
119
|
+
};
|
120
|
+
messageId?: number;
|
121
|
+
waitFor?: any
|
122
|
+
unlock?: () => void;
|
123
|
+
}
|
124
|
+
type RequestEventMethods =
|
125
|
+
| 'agree'
|
126
|
+
| 'refuse'
|
127
|
+
| 'ignore'
|
128
|
+
| 'refuseAndAddBlacklist'
|
129
|
+
| 'ignoreAndAddBlacklist';
|
130
|
+
|
131
|
+
type RequestEventExtendType = {
|
132
|
+
[key in RequestEventMethods]?: () => void;
|
133
|
+
};
|
134
|
+
|
135
|
+
interface Member {
|
136
|
+
id: number;
|
137
|
+
memberName: string;
|
138
|
+
specialTitle: string;
|
139
|
+
permission: GroupPermission;
|
140
|
+
joinTimestamp: number;
|
141
|
+
lastSpeakTimestamp: number;
|
142
|
+
muteTimeRemaining: number;
|
143
|
+
}
|
144
|
+
|
145
|
+
interface GroupSenderType {
|
146
|
+
id: number;
|
147
|
+
name: string;
|
148
|
+
permission: GroupPermission;
|
149
|
+
}
|
150
|
+
|
151
|
+
interface Friend {
|
152
|
+
id: number,
|
153
|
+
nickname: string,
|
154
|
+
remark: string;
|
155
|
+
}
|
156
|
+
|
157
|
+
interface EventTypes {
|
158
|
+
error: {
|
159
|
+
code: number;
|
160
|
+
} & EventBaseType,
|
161
|
+
close: {
|
162
|
+
reason: string;
|
163
|
+
} & EventBaseType,
|
164
|
+
'unexpected-response': {
|
165
|
+
reason: string;
|
166
|
+
} & EventBaseType,
|
167
|
+
GroupMessage: {
|
168
|
+
type: 'GroupMessage';
|
169
|
+
sender: Member & { group: GroupSenderType },
|
170
|
+
messageChain: MessageType[];
|
171
|
+
} & EventBaseType &
|
172
|
+
MessageExtendType,
|
173
|
+
FriendMessage: {
|
174
|
+
type: 'FriendMessage';
|
175
|
+
messageChain: MessageType[];
|
176
|
+
sender: Friend
|
177
|
+
} & EventBaseType &
|
178
|
+
MessageExtendType,
|
179
|
+
BotOnlineEvent: {
|
180
|
+
type: 'BotOnlineEvent',
|
181
|
+
qq: number
|
182
|
+
} & EventBaseType,
|
183
|
+
BotOfflineEventActive: {
|
184
|
+
type: 'BotOfflineEventActive',
|
185
|
+
qq: number
|
186
|
+
} & EventBaseType,
|
187
|
+
BotOfflineEventForce: {
|
188
|
+
type: 'BotOfflineEventForce',
|
189
|
+
qq: number
|
190
|
+
} & EventBaseType,
|
191
|
+
BotOfflineEventDropped: {
|
192
|
+
type: 'BotOfflineEventDropped',
|
193
|
+
qq: number
|
194
|
+
} & EventBaseType,
|
195
|
+
BotReloginEvent: {
|
196
|
+
type: 'BotReloginEvent',
|
197
|
+
qq: number
|
198
|
+
} & EventBaseType,
|
199
|
+
BotGroupPermissionChangeEvent: {
|
200
|
+
type: 'BotGroupPermissionChangeEvent';
|
201
|
+
origin: Exclude<GroupPermission, 'OWNER'>;
|
202
|
+
current: GroupPermission;
|
203
|
+
group: GroupSenderType;
|
204
|
+
} & EventBaseType,
|
205
|
+
BotMuteEvent: {
|
206
|
+
type: 'BotMuteEvent',
|
207
|
+
durationSeconds: number,
|
208
|
+
operator: Member & { group: GroupSenderType };
|
209
|
+
} & EventBaseType,
|
210
|
+
BotUnmuteEvent: {
|
211
|
+
type: 'BotUnmuteEvent',
|
212
|
+
durationSeconds: number,
|
213
|
+
operator: Member & { group: GroupSenderType };
|
214
|
+
} & EventBaseType,
|
215
|
+
BotJoinGroupEvent: {
|
216
|
+
type: 'BotJoinGroupEvent',
|
217
|
+
group: GroupSenderType
|
218
|
+
operator?: null | Member & { group: GroupSenderType };
|
219
|
+
};
|
220
|
+
BotLeaveEventActive: {
|
221
|
+
type: 'BotLeaveEventActive',
|
222
|
+
group: GroupSenderType
|
223
|
+
};
|
224
|
+
BotLeaveEventKick: {
|
225
|
+
type: 'BotLeaveEventKick',
|
226
|
+
group: GroupSenderType
|
227
|
+
operator: Member & { group: GroupSenderType };
|
228
|
+
} & EventBaseType;
|
229
|
+
GroupRecallEvent: {
|
230
|
+
type: 'GroupRecallEvent'
|
231
|
+
authorId: number,
|
232
|
+
messageId: number,
|
233
|
+
time: number,
|
234
|
+
group: GroupSenderType
|
235
|
+
operator: Member & { group: GroupSenderType };
|
236
|
+
} & EventBaseType;
|
237
|
+
FriendRecallEvent: {
|
238
|
+
type: 'GroupRecallEvent'
|
239
|
+
authorId: number,
|
240
|
+
messageId: number,
|
241
|
+
time: number,
|
242
|
+
operator: number
|
243
|
+
} & EventBaseType;
|
244
|
+
GroupNameChangeEvent: {
|
245
|
+
type: 'GroupNameChangeEvent',
|
246
|
+
origin: string,
|
247
|
+
current: string,
|
248
|
+
group: GroupSenderType;
|
249
|
+
operator: Member & { group: GroupSenderType };
|
250
|
+
} & EventBaseType;
|
251
|
+
GroupEntranceAnnouncementChangeEvent: {
|
252
|
+
type: 'GroupEntranceAnnouncementChangeEvent',
|
253
|
+
origin: string,
|
254
|
+
current: string,
|
255
|
+
group: GroupSenderType;
|
256
|
+
operator: Member & { group: GroupSenderType };
|
257
|
+
} & EventBaseType;
|
258
|
+
GroupMuteAllEvent: {
|
259
|
+
type: 'GroupMuteAllEvent',
|
260
|
+
origin: boolean,
|
261
|
+
current: boolean,
|
262
|
+
group: GroupSenderType;
|
263
|
+
operator: Member & { group: GroupSenderType };
|
264
|
+
} & EventBaseType;
|
265
|
+
GroupAllowAnonymousChatEvent: {
|
266
|
+
type: 'GroupAllowAnonymousChatEvent',
|
267
|
+
origin: boolean,
|
268
|
+
current: boolean,
|
269
|
+
group: GroupSenderType,
|
270
|
+
operator: Member & { group: GroupSenderType };
|
271
|
+
} & EventBaseType;
|
272
|
+
GroupAllowConfessTalkEvent: {
|
273
|
+
type: 'GroupAllowAnonymousChatEvent',
|
274
|
+
origin: boolean,
|
275
|
+
current: boolean,
|
276
|
+
group: GroupSenderType,
|
277
|
+
isByBot: boolean
|
278
|
+
} & EventBaseType;
|
279
|
+
GroupAllowMemberInviteEvent: EventBaseType;
|
280
|
+
MemberJoinEvent: {
|
281
|
+
type: 'MemberJoinEvent',
|
282
|
+
member: Member & { group: GroupSenderType },
|
283
|
+
invitor: Member;
|
284
|
+
} & EventBaseType;
|
285
|
+
MemberLeaveEventKick: {
|
286
|
+
type: 'MemberLeaveEventKick',
|
287
|
+
member: Member & { group: GroupSenderType },
|
288
|
+
operator: Member & { group: GroupSenderType },
|
289
|
+
} & EventBaseType;
|
290
|
+
MemberLeaveEventQuit: {
|
291
|
+
type: 'MemberLeaveEventQuit',
|
292
|
+
member: Member & { group: GroupSenderType },
|
293
|
+
} & EventBaseType;
|
294
|
+
MemberCardChangeEvent: {
|
295
|
+
type: 'MemberCardChangeEvent',
|
296
|
+
origin: string,
|
297
|
+
current: string,
|
298
|
+
member: Member & { group: GroupSenderType };
|
299
|
+
} & EventBaseType;
|
300
|
+
MemberSpecialTitleChangeEvent: {
|
301
|
+
type: 'MemberSpecialTitleChangeEvent',
|
302
|
+
origin: string,
|
303
|
+
current: string,
|
304
|
+
member: Member & { group: GroupSenderType };
|
305
|
+
} & EventBaseType;
|
306
|
+
MemberPermissionChangeEvent: {
|
307
|
+
type: 'MemberPermissionChangeEvent',
|
308
|
+
origin: string,
|
309
|
+
current: string,
|
310
|
+
member: Member & { group: GroupSenderType };
|
311
|
+
} & EventBaseType;
|
312
|
+
MemberMuteEvent: {
|
313
|
+
type: 'MemberMuteEvent',
|
314
|
+
durationSeconds: number,
|
315
|
+
member: Member & { group: GroupSenderType };
|
316
|
+
operator: Member & { group: GroupSenderType };
|
317
|
+
} & EventBaseType;
|
318
|
+
MemberUnmuteEvent: {
|
319
|
+
type: 'MemberUnmuteEvent',
|
320
|
+
member: Member & { group: GroupSenderType };
|
321
|
+
operator: Member & { group: GroupSenderType };
|
322
|
+
} & EventBaseType;
|
323
|
+
MemberHonorChangeEvent: {
|
324
|
+
type: 'MemberHonorChangeEvent',
|
325
|
+
member: Member & { group: GroupSenderType }
|
326
|
+
action: 'achieve' | 'lose',
|
327
|
+
honor: string;
|
328
|
+
}
|
329
|
+
NewFriendRequestEvent: {
|
330
|
+
type: 'NewFriendRequestEvent',
|
331
|
+
eventId: number,
|
332
|
+
fromId: number,
|
333
|
+
groupId: number,
|
334
|
+
nick: string,
|
335
|
+
message: string
|
336
|
+
} & RequestEventExtendType & EventBaseType;
|
337
|
+
MemberJoinRequestEvent: {
|
338
|
+
type: 'MemberJoinRequestEvent',
|
339
|
+
eventId: number,
|
340
|
+
fromId: number,
|
341
|
+
groupId: number,
|
342
|
+
groupName: string,
|
343
|
+
nick: string,
|
344
|
+
message: string
|
345
|
+
} & RequestEventExtendType & EventBaseType;
|
346
|
+
BotInvitedJoinGroupRequestEvent: {
|
347
|
+
type: 'MemberJoinRequestEvent',
|
348
|
+
eventId: number,
|
349
|
+
fromId: number,
|
350
|
+
groupId: number,
|
351
|
+
groupName: string,
|
352
|
+
nick: string,
|
353
|
+
message: string
|
354
|
+
} & RequestEventExtendType & EventBaseType;
|
355
|
+
AnyEvent: EventBaseType;
|
356
|
+
}
|
357
|
+
|
358
|
+
type EventType = keyof EventTypes;
|
359
|
+
|
360
|
+
type Awaitable<T> = T | PromiseLike<T>;
|
107
361
|
|
108
362
|
// 群成员权限
|
109
|
-
type GroupPermission =
|
110
|
-
| 'OWNER'
|
111
|
-
| 'ADMINISTRATOR'
|
112
|
-
| 'MEMBER';
|
363
|
+
type GroupPermission = 'OWNER' | 'ADMINISTRATOR' | 'MEMBER';
|
113
364
|
|
114
365
|
// 性别
|
115
|
-
type SEX = 'UNKNOWN' | 'MALE' | 'FEMALE'
|
366
|
+
type SEX = 'UNKNOWN' | 'MALE' | 'FEMALE';
|
116
367
|
|
117
368
|
// 消息处理器
|
118
|
-
type Processor = (data:
|
369
|
+
type Processor<U extends keyof EventTypes> = (data: EventTypes[U]) => Awaitable<void | any>
|
119
370
|
|
120
371
|
// QQ 自带表情
|
121
372
|
type FaceType =
|
@@ -175,22 +426,16 @@ type FaceType =
|
|
175
426
|
export {
|
176
427
|
// 接口
|
177
428
|
MessageChainGetable, BotConfigGetable,
|
178
|
-
|
179
429
|
// 消息类型
|
180
430
|
MessageType,
|
181
|
-
|
182
431
|
// MessageType.nodeList 的元素类型
|
183
432
|
ForwardNode,
|
184
|
-
|
185
433
|
// 图片 id 语音 id 消息 id
|
186
434
|
ImageId, VoiceId, MessageId,
|
187
|
-
|
188
|
-
|
189
|
-
EventType, GroupPermission, SEX,
|
190
|
-
|
191
|
-
// 消息处理器
|
192
|
-
Processor,
|
193
|
-
|
435
|
+
// 事件类型 群成员权限 性别
|
436
|
+
EventType, EventTypes, GroupPermission, SEX,
|
194
437
|
// QQ 自带表情
|
195
|
-
FaceType
|
196
|
-
|
438
|
+
FaceType,
|
439
|
+
Processor,
|
440
|
+
Awaitable,
|
441
|
+
};
|
package/dist/node/Bot.d.ts
CHANGED
@@ -3,10 +3,14 @@ import {
|
|
3
3
|
ImageId, VoiceId, MessageId,
|
4
4
|
|
5
5
|
// 事件类型 群成员权限 性别
|
6
|
-
EventType, GroupPermission, SEX,
|
6
|
+
EventType, EventTypes, GroupPermission, SEX,
|
7
7
|
|
8
8
|
// 接口 原始消息类型 事件处理器类型
|
9
|
-
MessageChainGetable, BotConfigGetable, MessageType,
|
9
|
+
MessageChainGetable, BotConfigGetable, MessageType,
|
10
|
+
|
11
|
+
Awaitable,
|
12
|
+
Processor,
|
13
|
+
|
10
14
|
} from './BaseType';
|
11
15
|
|
12
16
|
// 等待器
|
@@ -19,9 +23,7 @@ export class Bot implements BotConfigGetable {
|
|
19
23
|
|
20
24
|
// 类属性
|
21
25
|
public static groupPermission: {
|
22
|
-
|
23
|
-
ADMINISTRATOR: GroupPermission;
|
24
|
-
MEMBER: GroupPermission;
|
26
|
+
[k in GroupPermission]: k
|
25
27
|
};
|
26
28
|
|
27
29
|
// 一些私有的实例属性
|
@@ -91,7 +93,8 @@ export class Bot implements BotConfigGetable {
|
|
91
93
|
* @param callback 必选,回调函数
|
92
94
|
* @returns handle 事件处理器的标识,用于移除该处理器
|
93
95
|
*/
|
94
|
-
on(eventType:
|
96
|
+
on<U extends keyof EventTypes>(eventType: U, callback: Processor<U>): number;
|
97
|
+
on<U extends (keyof EventTypes)[]>(eventType: U, callback: Processor<U[number]>): number[];
|
95
98
|
|
96
99
|
/**
|
97
100
|
* @description 添加一个一次性事件处理器,回调一次后自动移除
|
@@ -101,7 +104,8 @@ export class Bot implements BotConfigGetable {
|
|
101
104
|
* 当为 true 时,只有开发者的处理器结束后才会移除该处理器
|
102
105
|
* 当为 false 时,即使消息被拦截,也会移除该处理器
|
103
106
|
*/
|
104
|
-
one(eventType:
|
107
|
+
one<U extends keyof EventTypes>(eventType: U, callback: Processor<U>, strict: boolean): void;
|
108
|
+
one<U extends (keyof EventTypes)[]>(eventType: U, callback: Processor<U[number]>, strict: boolean): void;
|
105
109
|
|
106
110
|
/**
|
107
111
|
* @description 移除一个事件处理器
|
@@ -314,11 +318,12 @@ declare namespace Bot {
|
|
314
318
|
verifyKey: string;
|
315
319
|
sessionKey: string;
|
316
320
|
}
|
321
|
+
|
317
322
|
// An index signature parameter type cannot be a union type. Consider using a mapped object type instead.
|
318
|
-
|
323
|
+
type EventProcessorMap = {
|
319
324
|
// 索引不能使用联合类型
|
320
|
-
[eventType
|
321
|
-
[
|
325
|
+
[eventType in EventType]: {
|
326
|
+
[handler: number]: (data: EventTypes[eventType]) => Awaitable<void | any>;
|
322
327
|
};
|
323
328
|
}
|
324
329
|
|
package/dist/node/Message.d.ts
CHANGED
@@ -58,9 +58,9 @@ export class ForwardMessage implements MessageChainGetable {
|
|
58
58
|
time,
|
59
59
|
senderName,
|
60
60
|
messageChain
|
61
|
-
}: ForwardNode):
|
62
|
-
addForwardNode(messageId: MessageId):
|
61
|
+
}: ForwardNode): this;
|
62
|
+
addForwardNode(messageId: MessageId): this;
|
63
63
|
|
64
64
|
// implements MessageChainGetable
|
65
65
|
getMessageChain(): MessageType[];
|
66
|
-
}
|
66
|
+
}
|
@@ -128,12 +128,12 @@ export class Middleware {
|
|
128
128
|
* @description 生成一个带有中间件的事件处理器
|
129
129
|
* @param callback 事件处理器
|
130
130
|
*/
|
131
|
-
done(callback: Processor): Processor
|
131
|
+
done(callback: Processor<'AnyEvent'>): Processor<'AnyEvent'>;
|
132
132
|
|
133
133
|
}
|
134
134
|
|
135
135
|
declare namespace Middleware {
|
136
|
-
type NextMiddlewareCaller = () => NextMiddlewareCaller | Processor
|
136
|
+
type NextMiddlewareCaller = () => NextMiddlewareCaller | Processor<'AnyEvent'>;
|
137
137
|
|
138
138
|
interface GroupMemberMap {
|
139
139
|
[group: number]: number[];
|
package/dist/node/Waiter.d.ts
CHANGED
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "mirai-js",
|
3
|
-
"version": "2.
|
3
|
+
"version": "2.8.0-0",
|
4
4
|
"description": "QQ robot development framework based on Mirai-api-http.",
|
5
5
|
"main": "dist/node/index.js",
|
6
6
|
"scripts": {
|
@@ -31,22 +31,22 @@
|
|
31
31
|
"license": "AGPL-3.0",
|
32
32
|
"dependencies": {
|
33
33
|
"axios": "^0.24.0",
|
34
|
-
"form-data": "^3.0.
|
35
|
-
"ws": "^8.
|
34
|
+
"form-data": "^3.0.1",
|
35
|
+
"ws": "^8.8.1"
|
36
36
|
},
|
37
37
|
"devDependencies": {
|
38
|
-
"@babel/cli": "^7.
|
39
|
-
"@babel/core": "^7.
|
40
|
-
"@babel/preset-env": "^7.
|
41
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
42
|
-
"@typescript-eslint/parser": "^5.
|
43
|
-
"eslint": "^8.
|
38
|
+
"@babel/cli": "^7.18.9",
|
39
|
+
"@babel/core": "^7.18.9",
|
40
|
+
"@babel/preset-env": "^7.18.9",
|
41
|
+
"@typescript-eslint/eslint-plugin": "^5.30.7",
|
42
|
+
"@typescript-eslint/parser": "^5.30.7",
|
43
|
+
"eslint": "^8.20.0",
|
44
44
|
"husky": "^6.0.0",
|
45
|
-
"lint-staged": "^12.0
|
45
|
+
"lint-staged": "^12.5.0",
|
46
46
|
"path-browserify": "^1.0.1",
|
47
47
|
"process": "^0.11.10",
|
48
|
-
"typescript": "^4.
|
49
|
-
"webpack": "^5.
|
50
|
-
"webpack-cli": "^4.
|
48
|
+
"typescript": "^4.7.4",
|
49
|
+
"webpack": "^5.73.0",
|
50
|
+
"webpack-cli": "^4.10.0"
|
51
51
|
}
|
52
52
|
}
|
package/src/BaseType.d.ts
CHANGED
@@ -1,17 +1,19 @@
|
|
1
|
+
import { Bot } from './Bot';
|
2
|
+
|
1
3
|
/**
|
2
4
|
* 消息链的元素,是 mirai-api-http 接口需要的原始类型
|
3
5
|
* 有多种消息类型实现了该接口,已经全部列出
|
4
|
-
*
|
6
|
+
*
|
5
7
|
* @see https://github.com/project-mirai/mirai-api-http/blob/master/docs/MessageType.md
|
6
8
|
*/
|
7
9
|
interface MessageType {
|
8
|
-
type:
|
10
|
+
type: MessageChainElementTypes;
|
9
11
|
|
10
12
|
// Quote
|
11
|
-
id?: number
|
12
|
-
groupId?: number
|
13
|
-
senderId?: number
|
14
|
-
targetId?: number
|
13
|
+
id?: number;
|
14
|
+
groupId?: number;
|
15
|
+
senderId?: number;
|
16
|
+
targetId?: number;
|
15
17
|
origin?: MessageType[];
|
16
18
|
|
17
19
|
// At
|
@@ -71,7 +73,6 @@ interface BotConfigGetable {
|
|
71
73
|
getSessionKey(): string;
|
72
74
|
}
|
73
75
|
|
74
|
-
|
75
76
|
// 图片 id
|
76
77
|
type ImageId = string;
|
77
78
|
// 语音 id
|
@@ -81,41 +82,291 @@ type MessageId = number;
|
|
81
82
|
|
82
83
|
/**
|
83
84
|
* 消息类型
|
84
|
-
*
|
85
|
+
*
|
85
86
|
* @see https://github.com/project-mirai/mirai-api-http/blob/master/docs/EventType.md
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
| '
|
90
|
-
|
91
|
-
| '
|
92
|
-
| '
|
93
|
-
| '
|
94
|
-
| '
|
95
|
-
| '
|
96
|
-
| '
|
97
|
-
| '
|
98
|
-
| '
|
99
|
-
| '
|
100
|
-
| '
|
101
|
-
| '
|
102
|
-
| '
|
103
|
-
| '
|
104
|
-
| '
|
105
|
-
| '
|
106
|
-
| '
|
87
|
+
*/
|
88
|
+
|
89
|
+
type MessageChainElementTypes =
|
90
|
+
| 'Source'
|
91
|
+
| 'Quote'
|
92
|
+
| 'At'
|
93
|
+
| 'AtAll'
|
94
|
+
| 'Face'
|
95
|
+
| 'Plain'
|
96
|
+
| 'Image'
|
97
|
+
| 'FlashImage'
|
98
|
+
| 'Voice'
|
99
|
+
| 'Xml'
|
100
|
+
| 'Json'
|
101
|
+
| 'App'
|
102
|
+
| 'Poke'
|
103
|
+
| 'Dice'
|
104
|
+
| 'MarketFace'
|
105
|
+
| 'MusicShare'
|
106
|
+
| 'ForwardMessage'
|
107
|
+
| 'File'
|
108
|
+
| 'MiraiCode';
|
109
|
+
|
110
|
+
interface EventBaseType {
|
111
|
+
bot: Bot;
|
112
|
+
}
|
113
|
+
|
114
|
+
// Middleware
|
115
|
+
interface MessageExtendType {
|
116
|
+
text?: string;
|
117
|
+
classified?: {
|
118
|
+
[key in MessageChainElementTypes]?: any[];
|
119
|
+
};
|
120
|
+
messageId?: number;
|
121
|
+
waitFor?: any
|
122
|
+
unlock?: () => void;
|
123
|
+
}
|
124
|
+
type RequestEventMethods =
|
125
|
+
| 'agree'
|
126
|
+
| 'refuse'
|
127
|
+
| 'ignore'
|
128
|
+
| 'refuseAndAddBlacklist'
|
129
|
+
| 'ignoreAndAddBlacklist';
|
130
|
+
|
131
|
+
type RequestEventExtendType = {
|
132
|
+
[key in RequestEventMethods]?: () => void;
|
133
|
+
};
|
134
|
+
|
135
|
+
interface Member {
|
136
|
+
id: number;
|
137
|
+
memberName: string;
|
138
|
+
specialTitle: string;
|
139
|
+
permission: GroupPermission;
|
140
|
+
joinTimestamp: number;
|
141
|
+
lastSpeakTimestamp: number;
|
142
|
+
muteTimeRemaining: number;
|
143
|
+
}
|
144
|
+
|
145
|
+
interface GroupSenderType {
|
146
|
+
id: number;
|
147
|
+
name: string;
|
148
|
+
permission: GroupPermission;
|
149
|
+
}
|
150
|
+
|
151
|
+
interface Friend {
|
152
|
+
id: number,
|
153
|
+
nickname: string,
|
154
|
+
remark: string;
|
155
|
+
}
|
156
|
+
|
157
|
+
interface EventTypes {
|
158
|
+
error: {
|
159
|
+
code: number;
|
160
|
+
} & EventBaseType,
|
161
|
+
close: {
|
162
|
+
reason: string;
|
163
|
+
} & EventBaseType,
|
164
|
+
'unexpected-response': {
|
165
|
+
reason: string;
|
166
|
+
} & EventBaseType,
|
167
|
+
GroupMessage: {
|
168
|
+
type: 'GroupMessage';
|
169
|
+
sender: Member & { group: GroupSenderType },
|
170
|
+
messageChain: MessageType[];
|
171
|
+
} & EventBaseType &
|
172
|
+
MessageExtendType,
|
173
|
+
FriendMessage: {
|
174
|
+
type: 'FriendMessage';
|
175
|
+
messageChain: MessageType[];
|
176
|
+
sender: Friend
|
177
|
+
} & EventBaseType &
|
178
|
+
MessageExtendType,
|
179
|
+
BotOnlineEvent: {
|
180
|
+
type: 'BotOnlineEvent',
|
181
|
+
qq: number
|
182
|
+
} & EventBaseType,
|
183
|
+
BotOfflineEventActive: {
|
184
|
+
type: 'BotOfflineEventActive',
|
185
|
+
qq: number
|
186
|
+
} & EventBaseType,
|
187
|
+
BotOfflineEventForce: {
|
188
|
+
type: 'BotOfflineEventForce',
|
189
|
+
qq: number
|
190
|
+
} & EventBaseType,
|
191
|
+
BotOfflineEventDropped: {
|
192
|
+
type: 'BotOfflineEventDropped',
|
193
|
+
qq: number
|
194
|
+
} & EventBaseType,
|
195
|
+
BotReloginEvent: {
|
196
|
+
type: 'BotReloginEvent',
|
197
|
+
qq: number
|
198
|
+
} & EventBaseType,
|
199
|
+
BotGroupPermissionChangeEvent: {
|
200
|
+
type: 'BotGroupPermissionChangeEvent';
|
201
|
+
origin: Exclude<GroupPermission, 'OWNER'>;
|
202
|
+
current: GroupPermission;
|
203
|
+
group: GroupSenderType;
|
204
|
+
} & EventBaseType,
|
205
|
+
BotMuteEvent: {
|
206
|
+
type: 'BotMuteEvent',
|
207
|
+
durationSeconds: number,
|
208
|
+
operator: Member & { group: GroupSenderType };
|
209
|
+
} & EventBaseType,
|
210
|
+
BotUnmuteEvent: {
|
211
|
+
type: 'BotUnmuteEvent',
|
212
|
+
durationSeconds: number,
|
213
|
+
operator: Member & { group: GroupSenderType };
|
214
|
+
} & EventBaseType,
|
215
|
+
BotJoinGroupEvent: {
|
216
|
+
type: 'BotJoinGroupEvent',
|
217
|
+
group: GroupSenderType
|
218
|
+
operator?: null | Member & { group: GroupSenderType };
|
219
|
+
};
|
220
|
+
BotLeaveEventActive: {
|
221
|
+
type: 'BotLeaveEventActive',
|
222
|
+
group: GroupSenderType
|
223
|
+
};
|
224
|
+
BotLeaveEventKick: {
|
225
|
+
type: 'BotLeaveEventKick',
|
226
|
+
group: GroupSenderType
|
227
|
+
operator: Member & { group: GroupSenderType };
|
228
|
+
} & EventBaseType;
|
229
|
+
GroupRecallEvent: {
|
230
|
+
type: 'GroupRecallEvent'
|
231
|
+
authorId: number,
|
232
|
+
messageId: number,
|
233
|
+
time: number,
|
234
|
+
group: GroupSenderType
|
235
|
+
operator: Member & { group: GroupSenderType };
|
236
|
+
} & EventBaseType;
|
237
|
+
FriendRecallEvent: {
|
238
|
+
type: 'GroupRecallEvent'
|
239
|
+
authorId: number,
|
240
|
+
messageId: number,
|
241
|
+
time: number,
|
242
|
+
operator: number
|
243
|
+
} & EventBaseType;
|
244
|
+
GroupNameChangeEvent: {
|
245
|
+
type: 'GroupNameChangeEvent',
|
246
|
+
origin: string,
|
247
|
+
current: string,
|
248
|
+
group: GroupSenderType;
|
249
|
+
operator: Member & { group: GroupSenderType };
|
250
|
+
} & EventBaseType;
|
251
|
+
GroupEntranceAnnouncementChangeEvent: {
|
252
|
+
type: 'GroupEntranceAnnouncementChangeEvent',
|
253
|
+
origin: string,
|
254
|
+
current: string,
|
255
|
+
group: GroupSenderType;
|
256
|
+
operator: Member & { group: GroupSenderType };
|
257
|
+
} & EventBaseType;
|
258
|
+
GroupMuteAllEvent: {
|
259
|
+
type: 'GroupMuteAllEvent',
|
260
|
+
origin: boolean,
|
261
|
+
current: boolean,
|
262
|
+
group: GroupSenderType;
|
263
|
+
operator: Member & { group: GroupSenderType };
|
264
|
+
} & EventBaseType;
|
265
|
+
GroupAllowAnonymousChatEvent: {
|
266
|
+
type: 'GroupAllowAnonymousChatEvent',
|
267
|
+
origin: boolean,
|
268
|
+
current: boolean,
|
269
|
+
group: GroupSenderType,
|
270
|
+
operator: Member & { group: GroupSenderType };
|
271
|
+
} & EventBaseType;
|
272
|
+
GroupAllowConfessTalkEvent: {
|
273
|
+
type: 'GroupAllowAnonymousChatEvent',
|
274
|
+
origin: boolean,
|
275
|
+
current: boolean,
|
276
|
+
group: GroupSenderType,
|
277
|
+
isByBot: boolean
|
278
|
+
} & EventBaseType;
|
279
|
+
GroupAllowMemberInviteEvent: EventBaseType;
|
280
|
+
MemberJoinEvent: {
|
281
|
+
type: 'MemberJoinEvent',
|
282
|
+
member: Member & { group: GroupSenderType },
|
283
|
+
invitor: Member;
|
284
|
+
} & EventBaseType;
|
285
|
+
MemberLeaveEventKick: {
|
286
|
+
type: 'MemberLeaveEventKick',
|
287
|
+
member: Member & { group: GroupSenderType },
|
288
|
+
operator: Member & { group: GroupSenderType },
|
289
|
+
} & EventBaseType;
|
290
|
+
MemberLeaveEventQuit: {
|
291
|
+
type: 'MemberLeaveEventQuit',
|
292
|
+
member: Member & { group: GroupSenderType },
|
293
|
+
} & EventBaseType;
|
294
|
+
MemberCardChangeEvent: {
|
295
|
+
type: 'MemberCardChangeEvent',
|
296
|
+
origin: string,
|
297
|
+
current: string,
|
298
|
+
member: Member & { group: GroupSenderType };
|
299
|
+
} & EventBaseType;
|
300
|
+
MemberSpecialTitleChangeEvent: {
|
301
|
+
type: 'MemberSpecialTitleChangeEvent',
|
302
|
+
origin: string,
|
303
|
+
current: string,
|
304
|
+
member: Member & { group: GroupSenderType };
|
305
|
+
} & EventBaseType;
|
306
|
+
MemberPermissionChangeEvent: {
|
307
|
+
type: 'MemberPermissionChangeEvent',
|
308
|
+
origin: string,
|
309
|
+
current: string,
|
310
|
+
member: Member & { group: GroupSenderType };
|
311
|
+
} & EventBaseType;
|
312
|
+
MemberMuteEvent: {
|
313
|
+
type: 'MemberMuteEvent',
|
314
|
+
durationSeconds: number,
|
315
|
+
member: Member & { group: GroupSenderType };
|
316
|
+
operator: Member & { group: GroupSenderType };
|
317
|
+
} & EventBaseType;
|
318
|
+
MemberUnmuteEvent: {
|
319
|
+
type: 'MemberUnmuteEvent',
|
320
|
+
member: Member & { group: GroupSenderType };
|
321
|
+
operator: Member & { group: GroupSenderType };
|
322
|
+
} & EventBaseType;
|
323
|
+
MemberHonorChangeEvent: {
|
324
|
+
type: 'MemberHonorChangeEvent',
|
325
|
+
member: Member & { group: GroupSenderType }
|
326
|
+
action: 'achieve' | 'lose',
|
327
|
+
honor: string;
|
328
|
+
}
|
329
|
+
NewFriendRequestEvent: {
|
330
|
+
type: 'NewFriendRequestEvent',
|
331
|
+
eventId: number,
|
332
|
+
fromId: number,
|
333
|
+
groupId: number,
|
334
|
+
nick: string,
|
335
|
+
message: string
|
336
|
+
} & RequestEventExtendType & EventBaseType;
|
337
|
+
MemberJoinRequestEvent: {
|
338
|
+
type: 'MemberJoinRequestEvent',
|
339
|
+
eventId: number,
|
340
|
+
fromId: number,
|
341
|
+
groupId: number,
|
342
|
+
groupName: string,
|
343
|
+
nick: string,
|
344
|
+
message: string
|
345
|
+
} & RequestEventExtendType & EventBaseType;
|
346
|
+
BotInvitedJoinGroupRequestEvent: {
|
347
|
+
type: 'MemberJoinRequestEvent',
|
348
|
+
eventId: number,
|
349
|
+
fromId: number,
|
350
|
+
groupId: number,
|
351
|
+
groupName: string,
|
352
|
+
nick: string,
|
353
|
+
message: string
|
354
|
+
} & RequestEventExtendType & EventBaseType;
|
355
|
+
AnyEvent: EventBaseType;
|
356
|
+
}
|
357
|
+
|
358
|
+
type EventType = keyof EventTypes;
|
359
|
+
|
360
|
+
type Awaitable<T> = T | PromiseLike<T>;
|
107
361
|
|
108
362
|
// 群成员权限
|
109
|
-
type GroupPermission =
|
110
|
-
| 'OWNER'
|
111
|
-
| 'ADMINISTRATOR'
|
112
|
-
| 'MEMBER';
|
363
|
+
type GroupPermission = 'OWNER' | 'ADMINISTRATOR' | 'MEMBER';
|
113
364
|
|
114
365
|
// 性别
|
115
|
-
type SEX = 'UNKNOWN' | 'MALE' | 'FEMALE'
|
366
|
+
type SEX = 'UNKNOWN' | 'MALE' | 'FEMALE';
|
116
367
|
|
117
368
|
// 消息处理器
|
118
|
-
type Processor = (data:
|
369
|
+
type Processor<U extends keyof EventTypes> = (data: EventTypes[U]) => Awaitable<void | any>
|
119
370
|
|
120
371
|
// QQ 自带表情
|
121
372
|
type FaceType =
|
@@ -175,22 +426,16 @@ type FaceType =
|
|
175
426
|
export {
|
176
427
|
// 接口
|
177
428
|
MessageChainGetable, BotConfigGetable,
|
178
|
-
|
179
429
|
// 消息类型
|
180
430
|
MessageType,
|
181
|
-
|
182
431
|
// MessageType.nodeList 的元素类型
|
183
432
|
ForwardNode,
|
184
|
-
|
185
433
|
// 图片 id 语音 id 消息 id
|
186
434
|
ImageId, VoiceId, MessageId,
|
187
|
-
|
188
|
-
|
189
|
-
EventType, GroupPermission, SEX,
|
190
|
-
|
191
|
-
// 消息处理器
|
192
|
-
Processor,
|
193
|
-
|
435
|
+
// 事件类型 群成员权限 性别
|
436
|
+
EventType, EventTypes, GroupPermission, SEX,
|
194
437
|
// QQ 自带表情
|
195
|
-
FaceType
|
196
|
-
|
438
|
+
FaceType,
|
439
|
+
Processor,
|
440
|
+
Awaitable,
|
441
|
+
};
|
package/src/Bot.d.ts
CHANGED
@@ -3,10 +3,14 @@ import {
|
|
3
3
|
ImageId, VoiceId, MessageId,
|
4
4
|
|
5
5
|
// 事件类型 群成员权限 性别
|
6
|
-
EventType, GroupPermission, SEX,
|
6
|
+
EventType, EventTypes, GroupPermission, SEX,
|
7
7
|
|
8
8
|
// 接口 原始消息类型 事件处理器类型
|
9
|
-
MessageChainGetable, BotConfigGetable, MessageType,
|
9
|
+
MessageChainGetable, BotConfigGetable, MessageType,
|
10
|
+
|
11
|
+
Awaitable,
|
12
|
+
Processor,
|
13
|
+
|
10
14
|
} from './BaseType';
|
11
15
|
|
12
16
|
// 等待器
|
@@ -19,9 +23,7 @@ export class Bot implements BotConfigGetable {
|
|
19
23
|
|
20
24
|
// 类属性
|
21
25
|
public static groupPermission: {
|
22
|
-
|
23
|
-
ADMINISTRATOR: GroupPermission;
|
24
|
-
MEMBER: GroupPermission;
|
26
|
+
[k in GroupPermission]: k
|
25
27
|
};
|
26
28
|
|
27
29
|
// 一些私有的实例属性
|
@@ -91,7 +93,8 @@ export class Bot implements BotConfigGetable {
|
|
91
93
|
* @param callback 必选,回调函数
|
92
94
|
* @returns handle 事件处理器的标识,用于移除该处理器
|
93
95
|
*/
|
94
|
-
on(eventType:
|
96
|
+
on<U extends keyof EventTypes>(eventType: U, callback: Processor<U>): number;
|
97
|
+
on<U extends (keyof EventTypes)[]>(eventType: U, callback: Processor<U[number]>): number[];
|
95
98
|
|
96
99
|
/**
|
97
100
|
* @description 添加一个一次性事件处理器,回调一次后自动移除
|
@@ -101,7 +104,8 @@ export class Bot implements BotConfigGetable {
|
|
101
104
|
* 当为 true 时,只有开发者的处理器结束后才会移除该处理器
|
102
105
|
* 当为 false 时,即使消息被拦截,也会移除该处理器
|
103
106
|
*/
|
104
|
-
one(eventType:
|
107
|
+
one<U extends keyof EventTypes>(eventType: U, callback: Processor<U>, strict: boolean): void;
|
108
|
+
one<U extends (keyof EventTypes)[]>(eventType: U, callback: Processor<U[number]>, strict: boolean): void;
|
105
109
|
|
106
110
|
/**
|
107
111
|
* @description 移除一个事件处理器
|
@@ -314,11 +318,12 @@ declare namespace Bot {
|
|
314
318
|
verifyKey: string;
|
315
319
|
sessionKey: string;
|
316
320
|
}
|
321
|
+
|
317
322
|
// An index signature parameter type cannot be a union type. Consider using a mapped object type instead.
|
318
|
-
|
323
|
+
type EventProcessorMap = {
|
319
324
|
// 索引不能使用联合类型
|
320
|
-
[eventType
|
321
|
-
[
|
325
|
+
[eventType in EventType]: {
|
326
|
+
[handler: number]: (data: EventTypes[eventType]) => Awaitable<void | any>;
|
322
327
|
};
|
323
328
|
}
|
324
329
|
|
package/src/Message.d.ts
CHANGED
@@ -58,9 +58,9 @@ export class ForwardMessage implements MessageChainGetable {
|
|
58
58
|
time,
|
59
59
|
senderName,
|
60
60
|
messageChain
|
61
|
-
}: ForwardNode):
|
62
|
-
addForwardNode(messageId: MessageId):
|
61
|
+
}: ForwardNode): this;
|
62
|
+
addForwardNode(messageId: MessageId): this;
|
63
63
|
|
64
64
|
// implements MessageChainGetable
|
65
65
|
getMessageChain(): MessageType[];
|
66
|
-
}
|
66
|
+
}
|
package/src/Middleware.d.ts
CHANGED
@@ -128,12 +128,12 @@ export class Middleware {
|
|
128
128
|
* @description 生成一个带有中间件的事件处理器
|
129
129
|
* @param callback 事件处理器
|
130
130
|
*/
|
131
|
-
done(callback: Processor): Processor
|
131
|
+
done(callback: Processor<'AnyEvent'>): Processor<'AnyEvent'>;
|
132
132
|
|
133
133
|
}
|
134
134
|
|
135
135
|
declare namespace Middleware {
|
136
|
-
type NextMiddlewareCaller = () => NextMiddlewareCaller | Processor
|
136
|
+
type NextMiddlewareCaller = () => NextMiddlewareCaller | Processor<'AnyEvent'>;
|
137
137
|
|
138
138
|
interface GroupMemberMap {
|
139
139
|
[group: number]: number[];
|
package/src/Waiter.d.ts
CHANGED
package/src/util/isBrowserEnv.js
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
exports.isBrowserEnv = () => {
|
2
|
-
return typeof window !== 'undefined';
|
1
|
+
exports.isBrowserEnv = () => {
|
2
|
+
return typeof window !== 'undefined';
|
3
3
|
};
|