@onebots/adapter-icqq 1.0.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/LICENSE +21 -0
- package/README.md +208 -0
- package/lib/adapter.d.ts +93 -0
- package/lib/adapter.js +561 -0
- package/lib/bot.d.ts +178 -0
- package/lib/bot.js +593 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.js +3 -0
- package/lib/types.d.ts +418 -0
- package/lib/types.js +26 -0
- package/package.json +39 -0
package/lib/types.d.ts
ADDED
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ICQQ 适配器类型定义
|
|
3
|
+
* 基于 @icqqjs/icqq 库
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 登录平台类型
|
|
7
|
+
*/
|
|
8
|
+
export declare enum Platform {
|
|
9
|
+
/** 安卓手机 */
|
|
10
|
+
Android = 1,
|
|
11
|
+
/** 安卓平板 */
|
|
12
|
+
AndroidPad = 2,
|
|
13
|
+
/** 安卓手表 */
|
|
14
|
+
AndroidWatch = 3,
|
|
15
|
+
/** MacOS */
|
|
16
|
+
MacOS = 4,
|
|
17
|
+
/** iPad */
|
|
18
|
+
iPad = 5,
|
|
19
|
+
/** Tim */
|
|
20
|
+
Tim = 6
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* ICQQ 协议配置
|
|
24
|
+
*/
|
|
25
|
+
export interface ICQQProtocol {
|
|
26
|
+
/** 登录平台,默认 2 (安卓平板) */
|
|
27
|
+
platform?: Platform;
|
|
28
|
+
/** 登录 Apk 版本 */
|
|
29
|
+
ver?: string;
|
|
30
|
+
/** 签名服务器地址,未配置可能会导致登录失败和无法收发消息 */
|
|
31
|
+
sign_api_addr?: string;
|
|
32
|
+
/** 数据存储目录,默认 path.join(process.cwd(), "data") */
|
|
33
|
+
data_dir?: string;
|
|
34
|
+
/** log4js 配置 */
|
|
35
|
+
log_config?: any;
|
|
36
|
+
/** 群聊和频道中过滤自己的消息,默认 true */
|
|
37
|
+
ignore_self?: boolean;
|
|
38
|
+
/** 被风控时是否尝试用分片发送,默认 true */
|
|
39
|
+
resend?: boolean;
|
|
40
|
+
/** 触发 system.offline.network 事件后的重新登录间隔秒数,默认 5 */
|
|
41
|
+
reconn_interval?: number;
|
|
42
|
+
/** 是否缓存群员列表,默认 true */
|
|
43
|
+
cache_group_member?: boolean;
|
|
44
|
+
/** 自动选择最优服务器,默认 true */
|
|
45
|
+
auto_server?: boolean;
|
|
46
|
+
/** ffmpeg 路径,需自行安装 ffmpeg */
|
|
47
|
+
ffmpeg_path?: string;
|
|
48
|
+
/** ffprobe 路径,需自行安装 ffmpeg */
|
|
49
|
+
ffprobe_path?: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* ICQQ 适配器配置
|
|
53
|
+
*/
|
|
54
|
+
export interface ICQQConfig {
|
|
55
|
+
/** 账号 ID (QQ 号) */
|
|
56
|
+
account_id: string;
|
|
57
|
+
/** QQ 密码 (可选,支持扫码登录) */
|
|
58
|
+
password?: string;
|
|
59
|
+
/** 协议配置 */
|
|
60
|
+
protocol?: ICQQProtocol;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* QQ 用户信息
|
|
64
|
+
*/
|
|
65
|
+
export interface ICQQUser {
|
|
66
|
+
/** QQ 号 */
|
|
67
|
+
user_id: number;
|
|
68
|
+
/** 昵称 */
|
|
69
|
+
nickname: string;
|
|
70
|
+
/** 性别 */
|
|
71
|
+
sex?: 'male' | 'female' | 'unknown';
|
|
72
|
+
/** 年龄 */
|
|
73
|
+
age?: number;
|
|
74
|
+
/** 头像 URL */
|
|
75
|
+
avatar?: string;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 好友信息
|
|
79
|
+
*/
|
|
80
|
+
export interface ICQQFriend extends ICQQUser {
|
|
81
|
+
/** 备注名 */
|
|
82
|
+
remark?: string;
|
|
83
|
+
/** 分组 ID */
|
|
84
|
+
class_id?: number;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* 群信息
|
|
88
|
+
*/
|
|
89
|
+
export interface ICQQGroup {
|
|
90
|
+
/** 群号 */
|
|
91
|
+
group_id: number;
|
|
92
|
+
/** 群名 */
|
|
93
|
+
group_name: string;
|
|
94
|
+
/** 群主 QQ */
|
|
95
|
+
owner_id?: number;
|
|
96
|
+
/** 管理员列表 */
|
|
97
|
+
admin_list?: number[];
|
|
98
|
+
/** 成员数量 */
|
|
99
|
+
member_count?: number;
|
|
100
|
+
/** 最大成员数 */
|
|
101
|
+
max_member_count?: number;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* 群成员信息
|
|
105
|
+
*/
|
|
106
|
+
export interface ICQQGroupMember {
|
|
107
|
+
/** 群号 */
|
|
108
|
+
group_id: number;
|
|
109
|
+
/** QQ 号 */
|
|
110
|
+
user_id: number;
|
|
111
|
+
/** 昵称 */
|
|
112
|
+
nickname: string;
|
|
113
|
+
/** 群名片 */
|
|
114
|
+
card?: string;
|
|
115
|
+
/** 性别 */
|
|
116
|
+
sex?: 'male' | 'female' | 'unknown';
|
|
117
|
+
/** 年龄 */
|
|
118
|
+
age?: number;
|
|
119
|
+
/** 加群时间 */
|
|
120
|
+
join_time?: number;
|
|
121
|
+
/** 最后发言时间 */
|
|
122
|
+
last_sent_time?: number;
|
|
123
|
+
/** 等级 */
|
|
124
|
+
level?: number;
|
|
125
|
+
/** 角色 */
|
|
126
|
+
role?: 'owner' | 'admin' | 'member';
|
|
127
|
+
/** 专属头衔 */
|
|
128
|
+
title?: string;
|
|
129
|
+
/** 头衔过期时间 */
|
|
130
|
+
title_expire_time?: number;
|
|
131
|
+
/** 是否被禁言 */
|
|
132
|
+
shutup_time?: number;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* 消息段类型
|
|
136
|
+
*/
|
|
137
|
+
export type ICQQMessageElement = {
|
|
138
|
+
type: 'text';
|
|
139
|
+
text: string;
|
|
140
|
+
} | {
|
|
141
|
+
type: 'face';
|
|
142
|
+
id: number;
|
|
143
|
+
} | {
|
|
144
|
+
type: 'image';
|
|
145
|
+
file: string;
|
|
146
|
+
url?: string;
|
|
147
|
+
} | {
|
|
148
|
+
type: 'record';
|
|
149
|
+
file: string;
|
|
150
|
+
url?: string;
|
|
151
|
+
} | {
|
|
152
|
+
type: 'video';
|
|
153
|
+
file: string;
|
|
154
|
+
url?: string;
|
|
155
|
+
} | {
|
|
156
|
+
type: 'at';
|
|
157
|
+
qq: number | 'all';
|
|
158
|
+
} | {
|
|
159
|
+
type: 'share';
|
|
160
|
+
url: string;
|
|
161
|
+
title: string;
|
|
162
|
+
content?: string;
|
|
163
|
+
image?: string;
|
|
164
|
+
} | {
|
|
165
|
+
type: 'json';
|
|
166
|
+
data: string;
|
|
167
|
+
} | {
|
|
168
|
+
type: 'xml';
|
|
169
|
+
data: string;
|
|
170
|
+
} | {
|
|
171
|
+
type: 'poke';
|
|
172
|
+
id: number;
|
|
173
|
+
} | {
|
|
174
|
+
type: 'reply';
|
|
175
|
+
id: string;
|
|
176
|
+
};
|
|
177
|
+
/**
|
|
178
|
+
* 私聊消息事件
|
|
179
|
+
*/
|
|
180
|
+
export interface ICQQPrivateMessageEvent {
|
|
181
|
+
/** 消息 ID */
|
|
182
|
+
message_id: string;
|
|
183
|
+
/** 发送者 QQ */
|
|
184
|
+
user_id: number;
|
|
185
|
+
/** 消息内容 */
|
|
186
|
+
message: ICQQMessageElement[];
|
|
187
|
+
/** 原始消息 */
|
|
188
|
+
raw_message: string;
|
|
189
|
+
/** 发送时间戳 */
|
|
190
|
+
time: number;
|
|
191
|
+
/** 发送者信息 */
|
|
192
|
+
sender: {
|
|
193
|
+
user_id: number;
|
|
194
|
+
nickname: string;
|
|
195
|
+
sex?: 'male' | 'female' | 'unknown';
|
|
196
|
+
age?: number;
|
|
197
|
+
};
|
|
198
|
+
/** 自动回复函数 */
|
|
199
|
+
reply?: (message: string | ICQQMessageElement[], quote?: boolean) => Promise<any>;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* 群消息事件
|
|
203
|
+
*/
|
|
204
|
+
export interface ICQQGroupMessageEvent {
|
|
205
|
+
/** 消息 ID */
|
|
206
|
+
message_id: string;
|
|
207
|
+
/** 群号 */
|
|
208
|
+
group_id: number;
|
|
209
|
+
/** 发送者 QQ */
|
|
210
|
+
user_id: number;
|
|
211
|
+
/** 消息内容 */
|
|
212
|
+
message: ICQQMessageElement[];
|
|
213
|
+
/** 原始消息 */
|
|
214
|
+
raw_message: string;
|
|
215
|
+
/** 发送时间戳 */
|
|
216
|
+
time: number;
|
|
217
|
+
/** 发送者信息 */
|
|
218
|
+
sender: {
|
|
219
|
+
user_id: number;
|
|
220
|
+
nickname: string;
|
|
221
|
+
card?: string;
|
|
222
|
+
sex?: 'male' | 'female' | 'unknown';
|
|
223
|
+
age?: number;
|
|
224
|
+
role?: 'owner' | 'admin' | 'member';
|
|
225
|
+
title?: string;
|
|
226
|
+
};
|
|
227
|
+
/** 群信息 */
|
|
228
|
+
group: {
|
|
229
|
+
group_id: number;
|
|
230
|
+
group_name: string;
|
|
231
|
+
};
|
|
232
|
+
/** @提及的 QQ 列表 */
|
|
233
|
+
atme?: boolean;
|
|
234
|
+
/** 自动回复函数 */
|
|
235
|
+
reply?: (message: string | ICQQMessageElement[], quote?: boolean) => Promise<any>;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* 好友申请事件
|
|
239
|
+
*/
|
|
240
|
+
export interface ICQQFriendRequestEvent {
|
|
241
|
+
/** 请求 ID */
|
|
242
|
+
request_id: string;
|
|
243
|
+
/** 申请人 QQ */
|
|
244
|
+
user_id: number;
|
|
245
|
+
/** 申请人昵称 */
|
|
246
|
+
nickname: string;
|
|
247
|
+
/** 验证信息 */
|
|
248
|
+
comment: string;
|
|
249
|
+
/** 来源 */
|
|
250
|
+
source: string;
|
|
251
|
+
/** 时间戳 */
|
|
252
|
+
time: number;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* 群申请/邀请事件
|
|
256
|
+
*/
|
|
257
|
+
export interface ICQQGroupRequestEvent {
|
|
258
|
+
/** 请求 ID */
|
|
259
|
+
request_id: string;
|
|
260
|
+
/** 群号 */
|
|
261
|
+
group_id: number;
|
|
262
|
+
/** 申请人/邀请人 QQ */
|
|
263
|
+
user_id: number;
|
|
264
|
+
/** 昵称 */
|
|
265
|
+
nickname: string;
|
|
266
|
+
/** 请求类型 */
|
|
267
|
+
sub_type: 'add' | 'invite';
|
|
268
|
+
/** 验证信息 */
|
|
269
|
+
comment: string;
|
|
270
|
+
/** 时间戳 */
|
|
271
|
+
time: number;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* 群成员增加事件
|
|
275
|
+
*/
|
|
276
|
+
export interface ICQQGroupIncreaseEvent {
|
|
277
|
+
/** 群号 */
|
|
278
|
+
group_id: number;
|
|
279
|
+
/** 新成员 QQ */
|
|
280
|
+
user_id: number;
|
|
281
|
+
/** 操作者 QQ (邀请人) */
|
|
282
|
+
operator_id?: number;
|
|
283
|
+
/** 时间戳 */
|
|
284
|
+
time: number;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* 群成员减少事件
|
|
288
|
+
*/
|
|
289
|
+
export interface ICQQGroupDecreaseEvent {
|
|
290
|
+
/** 群号 */
|
|
291
|
+
group_id: number;
|
|
292
|
+
/** 离开的成员 QQ */
|
|
293
|
+
user_id: number;
|
|
294
|
+
/** 操作者 QQ (踢人者) */
|
|
295
|
+
operator_id?: number;
|
|
296
|
+
/** 类型: leave 退群, kick 被踢 */
|
|
297
|
+
sub_type: 'leave' | 'kick' | 'kick_me';
|
|
298
|
+
/** 时间戳 */
|
|
299
|
+
time: number;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* 群禁言事件
|
|
303
|
+
*/
|
|
304
|
+
export interface ICQQGroupMuteEvent {
|
|
305
|
+
/** 群号 */
|
|
306
|
+
group_id: number;
|
|
307
|
+
/** 被禁言的 QQ (0 表示全员禁言) */
|
|
308
|
+
user_id: number;
|
|
309
|
+
/** 操作者 QQ */
|
|
310
|
+
operator_id: number;
|
|
311
|
+
/** 禁言时长 (秒,0 表示解除禁言) */
|
|
312
|
+
duration: number;
|
|
313
|
+
/** 时间戳 */
|
|
314
|
+
time: number;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* 群管理员变动事件
|
|
318
|
+
*/
|
|
319
|
+
export interface ICQQGroupAdminEvent {
|
|
320
|
+
/** 群号 */
|
|
321
|
+
group_id: number;
|
|
322
|
+
/** QQ 号 */
|
|
323
|
+
user_id: number;
|
|
324
|
+
/** 类型: set 设置管理员, unset 取消管理员 */
|
|
325
|
+
sub_type: 'set' | 'unset';
|
|
326
|
+
/** 时间戳 */
|
|
327
|
+
time: number;
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* 好友消息撤回事件
|
|
331
|
+
*/
|
|
332
|
+
export interface ICQQFriendRecallEvent {
|
|
333
|
+
/** 消息 ID */
|
|
334
|
+
message_id: string;
|
|
335
|
+
/** 好友 QQ */
|
|
336
|
+
user_id: number;
|
|
337
|
+
/** 时间戳 */
|
|
338
|
+
time: number;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* 群消息撤回事件
|
|
342
|
+
*/
|
|
343
|
+
export interface ICQQGroupRecallEvent {
|
|
344
|
+
/** 消息 ID */
|
|
345
|
+
message_id: string;
|
|
346
|
+
/** 群号 */
|
|
347
|
+
group_id: number;
|
|
348
|
+
/** 消息发送者 QQ */
|
|
349
|
+
user_id: number;
|
|
350
|
+
/** 操作者 QQ */
|
|
351
|
+
operator_id: number;
|
|
352
|
+
/** 时间戳 */
|
|
353
|
+
time: number;
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* 戳一戳事件
|
|
357
|
+
*/
|
|
358
|
+
export interface ICQQPokeEvent {
|
|
359
|
+
/** 群号 (私聊时为 0) */
|
|
360
|
+
group_id?: number;
|
|
361
|
+
/** 操作者 QQ */
|
|
362
|
+
operator_id: number;
|
|
363
|
+
/** 被戳者 QQ */
|
|
364
|
+
target_id: number;
|
|
365
|
+
/** 动作 */
|
|
366
|
+
action: string;
|
|
367
|
+
/** 后缀 */
|
|
368
|
+
suffix: string;
|
|
369
|
+
/** 时间戳 */
|
|
370
|
+
time: number;
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* 登录事件
|
|
374
|
+
*/
|
|
375
|
+
export interface ICQQLoginEvent {
|
|
376
|
+
/** QQ 号 */
|
|
377
|
+
uin: number;
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* 上线事件
|
|
381
|
+
*/
|
|
382
|
+
export interface ICQQOnlineEvent {
|
|
383
|
+
/** QQ 号 */
|
|
384
|
+
uin: number;
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* 离线事件
|
|
388
|
+
*/
|
|
389
|
+
export interface ICQQOfflineEvent {
|
|
390
|
+
/** QQ 号 */
|
|
391
|
+
uin: number;
|
|
392
|
+
/** 原因 */
|
|
393
|
+
message: string;
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* 滑块验证码事件
|
|
397
|
+
*/
|
|
398
|
+
export interface ICQQSliderEvent {
|
|
399
|
+
/** 验证码 URL */
|
|
400
|
+
url: string;
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* 设备锁验证事件
|
|
404
|
+
*/
|
|
405
|
+
export interface ICQQDeviceEvent {
|
|
406
|
+
/** 验证码 URL */
|
|
407
|
+
url: string;
|
|
408
|
+
/** 手机号 */
|
|
409
|
+
phone: string;
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* 二维码事件
|
|
413
|
+
*/
|
|
414
|
+
export interface ICQQQRCodeEvent {
|
|
415
|
+
/** 二维码图片 Buffer */
|
|
416
|
+
image: Buffer;
|
|
417
|
+
}
|
|
418
|
+
//# sourceMappingURL=types.d.ts.map
|
package/lib/types.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ICQQ 适配器类型定义
|
|
3
|
+
* 基于 @icqqjs/icqq 库
|
|
4
|
+
*/
|
|
5
|
+
// ============================================
|
|
6
|
+
// 配置类型
|
|
7
|
+
// ============================================
|
|
8
|
+
/**
|
|
9
|
+
* 登录平台类型
|
|
10
|
+
*/
|
|
11
|
+
export var Platform;
|
|
12
|
+
(function (Platform) {
|
|
13
|
+
/** 安卓手机 */
|
|
14
|
+
Platform[Platform["Android"] = 1] = "Android";
|
|
15
|
+
/** 安卓平板 */
|
|
16
|
+
Platform[Platform["AndroidPad"] = 2] = "AndroidPad";
|
|
17
|
+
/** 安卓手表 */
|
|
18
|
+
Platform[Platform["AndroidWatch"] = 3] = "AndroidWatch";
|
|
19
|
+
/** MacOS */
|
|
20
|
+
Platform[Platform["MacOS"] = 4] = "MacOS";
|
|
21
|
+
/** iPad */
|
|
22
|
+
Platform[Platform["iPad"] = 5] = "iPad";
|
|
23
|
+
/** Tim */
|
|
24
|
+
Platform[Platform["Tim"] = 6] = "Tim";
|
|
25
|
+
})(Platform || (Platform = {}));
|
|
26
|
+
//# sourceMappingURL=types.js.map
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@onebots/adapter-icqq",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "onebots ICQQ 适配器 - 基于 ICQQ 协议的 QQ 机器人",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "lib/index.js",
|
|
7
|
+
"types": "lib/index.d.ts",
|
|
8
|
+
"keywords": [
|
|
9
|
+
"onebots",
|
|
10
|
+
"icqq",
|
|
11
|
+
"qq",
|
|
12
|
+
"adapter",
|
|
13
|
+
"bot"
|
|
14
|
+
],
|
|
15
|
+
"author": "凉菜",
|
|
16
|
+
"license": "MIT",
|
|
17
|
+
"publishConfig": {
|
|
18
|
+
"access": "public",
|
|
19
|
+
"registry": "https://registry.npmjs.org"
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"/lib/**/*.js",
|
|
23
|
+
"/lib/**/*.d.ts"
|
|
24
|
+
],
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"tsc-alias": "latest",
|
|
27
|
+
"typescript": "latest"
|
|
28
|
+
},
|
|
29
|
+
"peerDependencies": {
|
|
30
|
+
"onebots": "1.0.0"
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@icqqjs/icqq": "^1.10.18"
|
|
34
|
+
},
|
|
35
|
+
"scripts": {
|
|
36
|
+
"build": "rm -f *.tsbuildinfo && tsc --project tsconfig.json && tsc-alias -p tsconfig.json",
|
|
37
|
+
"clean": "rm -rf lib *.tsbuildinfo"
|
|
38
|
+
}
|
|
39
|
+
}
|