@alemonjs/qq-bot 2.1.0-alpha.7 → 2.1.0-alpha.8
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/assets/index.css +1 -1255
- package/dist/assets/index.js +5 -11364
- package/dist/index.html +1 -1
- package/lib/register.js +74 -16
- package/lib/sdk/api.d.ts +36 -63
- package/lib/sdk/api.js +80 -70
- package/lib/sends.js +67 -41
- package/package.json +1 -1
package/dist/index.html
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>AlemonJS</title>
|
|
8
8
|
<script type="module" crossorigin src="/assets/index.js"></script>
|
|
9
|
-
<link rel="stylesheet" crossorigin href="/assets/index.css"
|
|
9
|
+
<link rel="stylesheet" crossorigin href="/assets/index.css">
|
|
10
10
|
</head>
|
|
11
11
|
|
|
12
12
|
<body>
|
package/lib/register.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getConfigValue, cbpPlatform, useUserHashKey,
|
|
1
|
+
import { getConfigValue, cbpPlatform, useUserHashKey, ResultCode, createResult } from 'alemonjs';
|
|
2
2
|
import { GROUP_AT_MESSAGE_CREATE, C2C_MESSAGE_CREATE, DIRECT_MESSAGE_CREATE, AT_MESSAGE_CREATE, MESSAGE_CREATE } from './sends.js';
|
|
3
3
|
|
|
4
4
|
// import dayjs from 'dayjs'
|
|
@@ -238,6 +238,16 @@ const register = (client) => {
|
|
|
238
238
|
cbp.send(e);
|
|
239
239
|
});
|
|
240
240
|
client.on('INTERACTION_CREATE', async (event) => {
|
|
241
|
+
// try {
|
|
242
|
+
// if (event.scene === 'group' || event.scene === 'c2c') {
|
|
243
|
+
// await client.interactionResponse('group', event.id)
|
|
244
|
+
// }
|
|
245
|
+
// else if (event.scene === 'guild') {
|
|
246
|
+
// await client.interactionResponse('guild', event.id)
|
|
247
|
+
// }
|
|
248
|
+
// } catch (err) {
|
|
249
|
+
// createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)
|
|
250
|
+
// }
|
|
241
251
|
if (event.scene === 'group') {
|
|
242
252
|
const master_key = config?.master_key ?? [];
|
|
243
253
|
const isMaster = master_key.includes(event.group_member_openid);
|
|
@@ -264,9 +274,9 @@ const register = (client) => {
|
|
|
264
274
|
MessageId: event.id,
|
|
265
275
|
MessageText: MessageText,
|
|
266
276
|
OpenId: event.group_member_openid,
|
|
267
|
-
tag: '
|
|
277
|
+
tag: 'INTERACTION_CREATE_GROUP',
|
|
268
278
|
CreateAt: Date.now(),
|
|
269
|
-
value: event
|
|
279
|
+
value: event
|
|
270
280
|
};
|
|
271
281
|
cbp.send(e);
|
|
272
282
|
}
|
|
@@ -284,9 +294,6 @@ const register = (client) => {
|
|
|
284
294
|
const e = {
|
|
285
295
|
name: 'private.interaction.create',
|
|
286
296
|
Platform: platform,
|
|
287
|
-
// guild
|
|
288
|
-
// GuildId: event.group_openid,
|
|
289
|
-
// ChannelId: event.group_openid,
|
|
290
297
|
// 用户Id
|
|
291
298
|
UserId: event.user_openid,
|
|
292
299
|
UserKey,
|
|
@@ -298,11 +305,51 @@ const register = (client) => {
|
|
|
298
305
|
MessageText: MessageText,
|
|
299
306
|
OpenId: event.user_openid,
|
|
300
307
|
CreateAt: Date.now(),
|
|
301
|
-
tag: '
|
|
308
|
+
tag: 'INTERACTION_CREATE_C2C',
|
|
302
309
|
value: event
|
|
303
310
|
};
|
|
304
311
|
cbp.send(e);
|
|
305
312
|
}
|
|
313
|
+
else if (event.scene === 'guild') {
|
|
314
|
+
const master_key = config?.master_key ?? [];
|
|
315
|
+
const isMaster = master_key.includes(event.data.resolved.user_id);
|
|
316
|
+
const UserAvatar = createUserAvatarURL(event.data.resolved.user_id);
|
|
317
|
+
const UserId = event.data.resolved.user_id;
|
|
318
|
+
const UserKey = useUserHashKey({
|
|
319
|
+
Platform: platform,
|
|
320
|
+
UserId: UserId
|
|
321
|
+
});
|
|
322
|
+
const MessageText = event.data.resolved.button_data?.trim() || '';
|
|
323
|
+
// 处理消息
|
|
324
|
+
const e = {
|
|
325
|
+
name: 'interaction.create',
|
|
326
|
+
Platform: platform,
|
|
327
|
+
// guild
|
|
328
|
+
GuildId: event.guild_id,
|
|
329
|
+
ChannelId: event.channel_id,
|
|
330
|
+
// 用户Id
|
|
331
|
+
UserId: event.data.resolved.user_id,
|
|
332
|
+
UserKey,
|
|
333
|
+
UserAvatar: UserAvatar,
|
|
334
|
+
IsMaster: isMaster,
|
|
335
|
+
IsBot: false,
|
|
336
|
+
// 格式化数据
|
|
337
|
+
MessageId: event.data.resolved.message_id,
|
|
338
|
+
MessageText: MessageText,
|
|
339
|
+
OpenId: event.guild_id,
|
|
340
|
+
CreateAt: Date.now(),
|
|
341
|
+
tag: 'INTERACTION_CREATE_GUILD',
|
|
342
|
+
value: event
|
|
343
|
+
};
|
|
344
|
+
cbp.send(e);
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
logger.warn({
|
|
348
|
+
code: ResultCode.Fail,
|
|
349
|
+
message: '暂未更新支持此类型的交互事件',
|
|
350
|
+
data: event
|
|
351
|
+
});
|
|
352
|
+
}
|
|
306
353
|
});
|
|
307
354
|
client.on('ERROR', console.error);
|
|
308
355
|
const api = {
|
|
@@ -352,6 +399,16 @@ const register = (client) => {
|
|
|
352
399
|
if (tag == 'MESSAGE_CREATE') {
|
|
353
400
|
return await MESSAGE_CREATE(client, event, val);
|
|
354
401
|
}
|
|
402
|
+
// 交互
|
|
403
|
+
if (tag == 'INTERACTION_CREATE_GROUP') {
|
|
404
|
+
return await GROUP_AT_MESSAGE_CREATE(client, event, val);
|
|
405
|
+
}
|
|
406
|
+
if (tag == 'INTERACTION_CREATE_C2C') {
|
|
407
|
+
return await C2C_MESSAGE_CREATE(client, event, val);
|
|
408
|
+
}
|
|
409
|
+
if (tag == 'INTERACTION_CREATE_GUILD') {
|
|
410
|
+
return await AT_MESSAGE_CREATE(client, event, val);
|
|
411
|
+
}
|
|
355
412
|
return Promise.all([]);
|
|
356
413
|
},
|
|
357
414
|
mention: async (event) => {
|
|
@@ -397,15 +454,16 @@ const register = (client) => {
|
|
|
397
454
|
}
|
|
398
455
|
});
|
|
399
456
|
// 处理 api 调用
|
|
400
|
-
cbp?.onapis &&
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
457
|
+
cbp?.onapis &&
|
|
458
|
+
cbp.onapis(async (data, consume) => {
|
|
459
|
+
const key = data.payload?.key;
|
|
460
|
+
if (client[key]) {
|
|
461
|
+
// 如果 client 上有对应的 key,直接调用。
|
|
462
|
+
const params = data.payload.params;
|
|
463
|
+
const res = await client[key](...params);
|
|
464
|
+
consume([createResult(ResultCode.Ok, '请求完成', res)]);
|
|
465
|
+
}
|
|
466
|
+
});
|
|
409
467
|
};
|
|
410
468
|
|
|
411
469
|
export { getQQBotConfig, platform, register };
|
package/lib/sdk/api.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import * as axios from 'axios';
|
|
2
2
|
import { AxiosRequestConfig } from 'axios';
|
|
3
3
|
import { ApiRequestData, FileType } from './typing.js';
|
|
4
|
-
import FormData from 'form-data';
|
|
5
4
|
|
|
6
5
|
declare class QQBotAPI {
|
|
7
6
|
/**
|
|
@@ -140,45 +139,44 @@ declare class QQBotAPI {
|
|
|
140
139
|
* @returns
|
|
141
140
|
*/
|
|
142
141
|
grouMessageDelte(group_openid: string, message_id: string): Promise<any>;
|
|
143
|
-
/**
|
|
144
|
-
* 创建form
|
|
145
|
-
* @param image
|
|
146
|
-
* @param msg_id
|
|
147
|
-
* @param content
|
|
148
|
-
* @param name
|
|
149
|
-
* @returns
|
|
150
|
-
*/
|
|
151
|
-
createFrom(image: Buffer, msg_id: string, content: any, Name?: string): Promise<false | FormData>;
|
|
152
142
|
/**
|
|
153
143
|
* ************
|
|
154
144
|
* 消息-图片接口
|
|
155
145
|
* ***********
|
|
156
146
|
*/
|
|
157
147
|
/**
|
|
158
|
-
*
|
|
159
|
-
* @param
|
|
160
|
-
* @param message
|
|
161
|
-
* @param
|
|
148
|
+
*
|
|
149
|
+
* @param channel_id
|
|
150
|
+
* @param message
|
|
151
|
+
* @param image
|
|
162
152
|
* @returns
|
|
163
153
|
*/
|
|
164
|
-
|
|
165
|
-
msg_id: string;
|
|
166
|
-
image: Buffer;
|
|
154
|
+
channelsMessages(channel_id: string, message: {
|
|
167
155
|
content?: string;
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
156
|
+
embed?: any;
|
|
157
|
+
ark?: any;
|
|
158
|
+
message_reference?: any;
|
|
159
|
+
image?: string;
|
|
160
|
+
msg_id?: string;
|
|
161
|
+
event_id?: string;
|
|
162
|
+
markdown?: any;
|
|
163
|
+
}, image?: Buffer): Promise<any>;
|
|
164
|
+
/**
|
|
165
|
+
* 私聊发送
|
|
166
|
+
* @param id 私信传频道id,公信传子频道id
|
|
167
|
+
* @param message {消息编号,图片,内容}
|
|
168
|
+
* @returns
|
|
169
|
+
*/
|
|
170
|
+
dmsMessages(guild_id: string, message: {
|
|
179
171
|
content?: string;
|
|
180
|
-
|
|
181
|
-
|
|
172
|
+
embed?: any;
|
|
173
|
+
ark?: any;
|
|
174
|
+
message_reference?: any;
|
|
175
|
+
image?: string;
|
|
176
|
+
msg_id?: string;
|
|
177
|
+
event_id?: string;
|
|
178
|
+
markdown?: any;
|
|
179
|
+
}, image?: Buffer): Promise<any>;
|
|
182
180
|
/**
|
|
183
181
|
* ********
|
|
184
182
|
* 用户api
|
|
@@ -320,24 +318,7 @@ declare class QQBotAPI {
|
|
|
320
318
|
* @param message_id
|
|
321
319
|
* @returns
|
|
322
320
|
*/
|
|
323
|
-
|
|
324
|
-
/**
|
|
325
|
-
* 发送消息
|
|
326
|
-
* @param channel_id
|
|
327
|
-
* @param message_id
|
|
328
|
-
* @param data
|
|
329
|
-
* @returns
|
|
330
|
-
*/
|
|
331
|
-
channelsMessagesPost(channel_id: string, data: {
|
|
332
|
-
content?: string;
|
|
333
|
-
embed?: any;
|
|
334
|
-
ark?: any;
|
|
335
|
-
message_reference?: any;
|
|
336
|
-
image?: string;
|
|
337
|
-
msg_id?: string;
|
|
338
|
-
event_id?: string;
|
|
339
|
-
markdown?: any;
|
|
340
|
-
}): Promise<any>;
|
|
321
|
+
channelsMessagesById(channel_id: string, message_id: string): Promise<any>;
|
|
341
322
|
/**
|
|
342
323
|
* 撤回消息
|
|
343
324
|
* @param channel_id
|
|
@@ -455,21 +436,6 @@ declare class QQBotAPI {
|
|
|
455
436
|
* @returns
|
|
456
437
|
*/
|
|
457
438
|
usersMeDms(): Promise<any>;
|
|
458
|
-
/**
|
|
459
|
-
* 发送私信
|
|
460
|
-
* @param guild_id
|
|
461
|
-
* @returns
|
|
462
|
-
*/
|
|
463
|
-
dmsMessage(guild_id: string, data: {
|
|
464
|
-
content?: string;
|
|
465
|
-
embed?: any;
|
|
466
|
-
ark?: any;
|
|
467
|
-
message_reference?: any;
|
|
468
|
-
image?: string;
|
|
469
|
-
msg_id?: string;
|
|
470
|
-
event_id?: string;
|
|
471
|
-
markdown?: any;
|
|
472
|
-
}): Promise<any>;
|
|
473
439
|
/**
|
|
474
440
|
* 撤回私信
|
|
475
441
|
* @param guild_id
|
|
@@ -776,6 +742,13 @@ declare class QQBotAPI {
|
|
|
776
742
|
* @returns
|
|
777
743
|
*/
|
|
778
744
|
guildApiPermission(guild_id: string): Promise<any>;
|
|
745
|
+
/**
|
|
746
|
+
* 交互事件回应
|
|
747
|
+
* @param interaction_id
|
|
748
|
+
* @param code
|
|
749
|
+
* @returns
|
|
750
|
+
*/
|
|
751
|
+
interactionResponse(mode: 'group' | 'guild', interaction_id: string, code?: number): Promise<any>;
|
|
779
752
|
}
|
|
780
753
|
|
|
781
754
|
export { QQBotAPI };
|
package/lib/sdk/api.js
CHANGED
|
@@ -90,13 +90,16 @@ class QQBotAPI {
|
|
|
90
90
|
* 0 文本 1 图文 2 md 3 ark 4 embed
|
|
91
91
|
*/
|
|
92
92
|
async usersOpenMessages(openid, data) {
|
|
93
|
+
const db = {
|
|
94
|
+
...(data.event_id ? { event_id: data.event_id } : {
|
|
95
|
+
msg_seq: this.getMessageSeq(data.msg_id || '')
|
|
96
|
+
}),
|
|
97
|
+
...data
|
|
98
|
+
};
|
|
93
99
|
return this.groupService({
|
|
94
100
|
url: `/v2/users/${openid}/messages`,
|
|
95
101
|
method: 'post',
|
|
96
|
-
data:
|
|
97
|
-
msg_seq: this.getMessageSeq(data.msg_id || ''),
|
|
98
|
-
...data
|
|
99
|
-
}
|
|
102
|
+
data: db
|
|
100
103
|
}).then(res => res?.data);
|
|
101
104
|
}
|
|
102
105
|
/**
|
|
@@ -123,13 +126,16 @@ class QQBotAPI {
|
|
|
123
126
|
* @returns
|
|
124
127
|
*/
|
|
125
128
|
async groupOpenMessages(group_openid, data) {
|
|
129
|
+
const db = {
|
|
130
|
+
...(data.event_id ? { event_id: data.event_id } : {
|
|
131
|
+
msg_seq: this.getMessageSeq(data.msg_id || '')
|
|
132
|
+
}),
|
|
133
|
+
...data
|
|
134
|
+
};
|
|
126
135
|
return this.groupService({
|
|
127
136
|
url: `/v2/groups/${group_openid}/messages`,
|
|
128
137
|
method: 'post',
|
|
129
|
-
data:
|
|
130
|
-
msg_seq: this.getMessageSeq(data.msg_id || ''),
|
|
131
|
-
...data
|
|
132
|
-
}
|
|
138
|
+
data: db
|
|
133
139
|
}).then(res => res?.data);
|
|
134
140
|
}
|
|
135
141
|
/**
|
|
@@ -220,41 +226,33 @@ class QQBotAPI {
|
|
|
220
226
|
method: 'delete'
|
|
221
227
|
}).then(res => res?.data);
|
|
222
228
|
}
|
|
223
|
-
/**
|
|
224
|
-
* 创建form
|
|
225
|
-
* @param image
|
|
226
|
-
* @param msg_id
|
|
227
|
-
* @param content
|
|
228
|
-
* @param name
|
|
229
|
-
* @returns
|
|
230
|
-
*/
|
|
231
|
-
async createFrom(image, msg_id, content, Name = 'image.jpg') {
|
|
232
|
-
const from = await createPicFrom(image, Name);
|
|
233
|
-
if (!from)
|
|
234
|
-
return false;
|
|
235
|
-
const { picData, name } = from;
|
|
236
|
-
const formdata = new FormData();
|
|
237
|
-
formdata.append('msg_id', msg_id);
|
|
238
|
-
if (typeof content === 'string')
|
|
239
|
-
formdata.append('content', content);
|
|
240
|
-
formdata.append('file_image', picData, name);
|
|
241
|
-
return formdata;
|
|
242
|
-
}
|
|
243
229
|
/**
|
|
244
230
|
* ************
|
|
245
231
|
* 消息-图片接口
|
|
246
232
|
* ***********
|
|
247
233
|
*/
|
|
248
234
|
/**
|
|
249
|
-
*
|
|
250
|
-
* @param
|
|
251
|
-
* @param message
|
|
252
|
-
* @param
|
|
235
|
+
*
|
|
236
|
+
* @param channel_id
|
|
237
|
+
* @param message
|
|
238
|
+
* @param image
|
|
253
239
|
* @returns
|
|
254
240
|
*/
|
|
255
|
-
async
|
|
256
|
-
const formdata =
|
|
257
|
-
const
|
|
241
|
+
async channelsMessages(channel_id, message, image) {
|
|
242
|
+
const formdata = new FormData();
|
|
243
|
+
for (const key in message) {
|
|
244
|
+
if (message[key] !== undefined) {
|
|
245
|
+
formdata.append(key, message[key]);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
if (image) {
|
|
249
|
+
const from = await createPicFrom(image);
|
|
250
|
+
if (from) {
|
|
251
|
+
const { picData, name } = from;
|
|
252
|
+
formdata.append('file_image', picData, name);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
const dary = formdata.getBoundary();
|
|
258
256
|
return this.guildServer({
|
|
259
257
|
method: 'post',
|
|
260
258
|
url: `/channels/${channel_id}/messages`,
|
|
@@ -265,14 +263,26 @@ class QQBotAPI {
|
|
|
265
263
|
}).then(res => res?.data);
|
|
266
264
|
}
|
|
267
265
|
/**
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
async
|
|
274
|
-
const formdata =
|
|
275
|
-
const
|
|
266
|
+
* 私聊发送
|
|
267
|
+
* @param id 私信传频道id,公信传子频道id
|
|
268
|
+
* @param message {消息编号,图片,内容}
|
|
269
|
+
* @returns
|
|
270
|
+
*/
|
|
271
|
+
async dmsMessages(guild_id, message, image) {
|
|
272
|
+
const formdata = new FormData();
|
|
273
|
+
for (const key in message) {
|
|
274
|
+
if (message[key] !== undefined) {
|
|
275
|
+
formdata.append(key, message[key]);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
if (image) {
|
|
279
|
+
const from = await createPicFrom(image);
|
|
280
|
+
if (from) {
|
|
281
|
+
const { picData, name } = from;
|
|
282
|
+
formdata.append('file_image', picData, name);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
const dary = formdata.getBoundary();
|
|
276
286
|
return this.guildServer({
|
|
277
287
|
method: 'post',
|
|
278
288
|
url: `/dms/${guild_id}/messages`,
|
|
@@ -462,26 +472,12 @@ class QQBotAPI {
|
|
|
462
472
|
* @param message_id
|
|
463
473
|
* @returns
|
|
464
474
|
*/
|
|
465
|
-
async
|
|
475
|
+
async channelsMessagesById(channel_id, message_id) {
|
|
466
476
|
return this.guildServer({
|
|
467
477
|
method: 'GET',
|
|
468
478
|
url: `/channels/${channel_id}/messages/${message_id}`
|
|
469
479
|
}).then(res => res?.data);
|
|
470
480
|
}
|
|
471
|
-
/**
|
|
472
|
-
* 发送消息
|
|
473
|
-
* @param channel_id
|
|
474
|
-
* @param message_id
|
|
475
|
-
* @param data
|
|
476
|
-
* @returns
|
|
477
|
-
*/
|
|
478
|
-
async channelsMessagesPost(channel_id, data) {
|
|
479
|
-
return this.guildServer({
|
|
480
|
-
method: 'POST',
|
|
481
|
-
url: `/channels/${channel_id}/messages`,
|
|
482
|
-
data
|
|
483
|
-
}).then(res => res?.data);
|
|
484
|
-
}
|
|
485
481
|
/**
|
|
486
482
|
* 撤回消息
|
|
487
483
|
* @param channel_id
|
|
@@ -662,18 +658,6 @@ class QQBotAPI {
|
|
|
662
658
|
url: `/users/@me/dms`
|
|
663
659
|
}).then(res => res?.data);
|
|
664
660
|
}
|
|
665
|
-
/**
|
|
666
|
-
* 发送私信
|
|
667
|
-
* @param guild_id
|
|
668
|
-
* @returns
|
|
669
|
-
*/
|
|
670
|
-
async dmsMessage(guild_id, data) {
|
|
671
|
-
return this.guildServer({
|
|
672
|
-
method: 'POST',
|
|
673
|
-
url: `/dms/${guild_id}/messages`,
|
|
674
|
-
data
|
|
675
|
-
}).then(res => res?.data);
|
|
676
|
-
}
|
|
677
661
|
/**
|
|
678
662
|
* 撤回私信
|
|
679
663
|
* @param guild_id
|
|
@@ -1069,6 +1053,32 @@ class QQBotAPI {
|
|
|
1069
1053
|
url: `/guilds/${guild_id}/api_permission`
|
|
1070
1054
|
}).then(res => res?.data);
|
|
1071
1055
|
}
|
|
1056
|
+
/**
|
|
1057
|
+
* 交互事件回应
|
|
1058
|
+
* @param interaction_id
|
|
1059
|
+
* @param code
|
|
1060
|
+
* @returns
|
|
1061
|
+
*/
|
|
1062
|
+
async interactionResponse(mode, interaction_id, code) {
|
|
1063
|
+
if (mode === 'group') {
|
|
1064
|
+
return this.groupService({
|
|
1065
|
+
method: 'PUT',
|
|
1066
|
+
url: `/interactions/${interaction_id}`,
|
|
1067
|
+
data: {
|
|
1068
|
+
code: code || 0,
|
|
1069
|
+
}
|
|
1070
|
+
}).then(res => res?.data);
|
|
1071
|
+
}
|
|
1072
|
+
else {
|
|
1073
|
+
return this.guildServer({
|
|
1074
|
+
method: 'PUT',
|
|
1075
|
+
url: `/interactions/${interaction_id}`,
|
|
1076
|
+
data: {
|
|
1077
|
+
code: code || 0,
|
|
1078
|
+
}
|
|
1079
|
+
}).then(res => res?.data);
|
|
1080
|
+
}
|
|
1081
|
+
}
|
|
1072
1082
|
}
|
|
1073
1083
|
|
|
1074
1084
|
export { API_URL, API_URL_SANDBOX, BOTS_API_RUL, QQBotAPI };
|