@alemonjs/qq-bot 2.1.0-alpha.7 → 2.1.0-alpha.9
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 +75 -16
- package/lib/sdk/api.d.ts +31 -58
- package/lib/sdk/api.js +80 -66
- 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
|
@@ -238,6 +238,17 @@ 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
|
+
}
|
|
249
|
+
catch (err) {
|
|
250
|
+
createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null);
|
|
251
|
+
}
|
|
241
252
|
if (event.scene === 'group') {
|
|
242
253
|
const master_key = config?.master_key ?? [];
|
|
243
254
|
const isMaster = master_key.includes(event.group_member_openid);
|
|
@@ -261,12 +272,12 @@ const register = (client) => {
|
|
|
261
272
|
IsMaster: isMaster,
|
|
262
273
|
IsBot: false,
|
|
263
274
|
// 格式化数据
|
|
264
|
-
MessageId: event.id
|
|
275
|
+
MessageId: `INTERACTION_CREATE:${event.id}`,
|
|
265
276
|
MessageText: MessageText,
|
|
266
277
|
OpenId: event.group_member_openid,
|
|
267
|
-
tag: '
|
|
278
|
+
tag: 'INTERACTION_CREATE_GROUP',
|
|
268
279
|
CreateAt: Date.now(),
|
|
269
|
-
value: event
|
|
280
|
+
value: event
|
|
270
281
|
};
|
|
271
282
|
cbp.send(e);
|
|
272
283
|
}
|
|
@@ -284,9 +295,6 @@ const register = (client) => {
|
|
|
284
295
|
const e = {
|
|
285
296
|
name: 'private.interaction.create',
|
|
286
297
|
Platform: platform,
|
|
287
|
-
// guild
|
|
288
|
-
// GuildId: event.group_openid,
|
|
289
|
-
// ChannelId: event.group_openid,
|
|
290
298
|
// 用户Id
|
|
291
299
|
UserId: event.user_openid,
|
|
292
300
|
UserKey,
|
|
@@ -298,11 +306,51 @@ const register = (client) => {
|
|
|
298
306
|
MessageText: MessageText,
|
|
299
307
|
OpenId: event.user_openid,
|
|
300
308
|
CreateAt: Date.now(),
|
|
301
|
-
tag: '
|
|
309
|
+
tag: 'INTERACTION_CREATE_C2C',
|
|
310
|
+
value: event
|
|
311
|
+
};
|
|
312
|
+
cbp.send(e);
|
|
313
|
+
}
|
|
314
|
+
else if (event.scene === 'guild') {
|
|
315
|
+
const master_key = config?.master_key ?? [];
|
|
316
|
+
const isMaster = master_key.includes(event.data.resolved.user_id);
|
|
317
|
+
const UserAvatar = createUserAvatarURL(event.data.resolved.user_id);
|
|
318
|
+
const UserId = event.data.resolved.user_id;
|
|
319
|
+
const UserKey = useUserHashKey({
|
|
320
|
+
Platform: platform,
|
|
321
|
+
UserId: UserId
|
|
322
|
+
});
|
|
323
|
+
const MessageText = event.data.resolved.button_data?.trim() || '';
|
|
324
|
+
// 处理消息
|
|
325
|
+
const e = {
|
|
326
|
+
name: 'interaction.create',
|
|
327
|
+
Platform: platform,
|
|
328
|
+
// guild
|
|
329
|
+
GuildId: event.guild_id,
|
|
330
|
+
ChannelId: event.channel_id,
|
|
331
|
+
// 用户Id
|
|
332
|
+
UserId: event.data.resolved.user_id,
|
|
333
|
+
UserKey,
|
|
334
|
+
UserAvatar: UserAvatar,
|
|
335
|
+
IsMaster: isMaster,
|
|
336
|
+
IsBot: false,
|
|
337
|
+
// 格式化数据
|
|
338
|
+
MessageId: event.data.resolved.message_id,
|
|
339
|
+
MessageText: MessageText,
|
|
340
|
+
OpenId: event.guild_id,
|
|
341
|
+
CreateAt: Date.now(),
|
|
342
|
+
tag: 'INTERACTION_CREATE_GUILD',
|
|
302
343
|
value: event
|
|
303
344
|
};
|
|
304
345
|
cbp.send(e);
|
|
305
346
|
}
|
|
347
|
+
else {
|
|
348
|
+
logger.warn({
|
|
349
|
+
code: ResultCode.Fail,
|
|
350
|
+
message: '暂未更新支持此类型的交互事件',
|
|
351
|
+
data: event
|
|
352
|
+
});
|
|
353
|
+
}
|
|
306
354
|
});
|
|
307
355
|
client.on('ERROR', console.error);
|
|
308
356
|
const api = {
|
|
@@ -352,6 +400,16 @@ const register = (client) => {
|
|
|
352
400
|
if (tag == 'MESSAGE_CREATE') {
|
|
353
401
|
return await MESSAGE_CREATE(client, event, val);
|
|
354
402
|
}
|
|
403
|
+
// 交互
|
|
404
|
+
if (tag == 'INTERACTION_CREATE_GROUP') {
|
|
405
|
+
return await GROUP_AT_MESSAGE_CREATE(client, event, val);
|
|
406
|
+
}
|
|
407
|
+
if (tag == 'INTERACTION_CREATE_C2C') {
|
|
408
|
+
return await C2C_MESSAGE_CREATE(client, event, val);
|
|
409
|
+
}
|
|
410
|
+
if (tag == 'INTERACTION_CREATE_GUILD') {
|
|
411
|
+
return await AT_MESSAGE_CREATE(client, event, val);
|
|
412
|
+
}
|
|
355
413
|
return Promise.all([]);
|
|
356
414
|
},
|
|
357
415
|
mention: async (event) => {
|
|
@@ -397,15 +455,16 @@ const register = (client) => {
|
|
|
397
455
|
}
|
|
398
456
|
});
|
|
399
457
|
// 处理 api 调用
|
|
400
|
-
cbp?.onapis &&
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
458
|
+
cbp?.onapis &&
|
|
459
|
+
cbp.onapis(async (data, consume) => {
|
|
460
|
+
const key = data.payload?.key;
|
|
461
|
+
if (client[key]) {
|
|
462
|
+
// 如果 client 上有对应的 key,直接调用。
|
|
463
|
+
const params = data.payload.params;
|
|
464
|
+
const res = await client[key](...params);
|
|
465
|
+
consume([createResult(ResultCode.Ok, '请求完成', res)]);
|
|
466
|
+
}
|
|
467
|
+
});
|
|
409
468
|
};
|
|
410
469
|
|
|
411
470
|
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
|
-
|
|
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>;
|
|
170
164
|
/**
|
|
171
|
-
* 私聊发送
|
|
165
|
+
* 私聊发送
|
|
172
166
|
* @param id 私信传频道id,公信传子频道id
|
|
173
167
|
* @param message {消息编号,图片,内容}
|
|
174
168
|
* @returns
|
|
175
169
|
*/
|
|
176
|
-
|
|
177
|
-
msg_id: string;
|
|
178
|
-
image: Buffer;
|
|
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,18 @@ 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
|
|
95
|
+
? { event_id: data.event_id }
|
|
96
|
+
: {
|
|
97
|
+
msg_seq: this.getMessageSeq(data.msg_id || '')
|
|
98
|
+
}),
|
|
99
|
+
...data
|
|
100
|
+
};
|
|
93
101
|
return this.groupService({
|
|
94
102
|
url: `/v2/users/${openid}/messages`,
|
|
95
103
|
method: 'post',
|
|
96
|
-
data:
|
|
97
|
-
msg_seq: this.getMessageSeq(data.msg_id || ''),
|
|
98
|
-
...data
|
|
99
|
-
}
|
|
104
|
+
data: db
|
|
100
105
|
}).then(res => res?.data);
|
|
101
106
|
}
|
|
102
107
|
/**
|
|
@@ -123,13 +128,18 @@ class QQBotAPI {
|
|
|
123
128
|
* @returns
|
|
124
129
|
*/
|
|
125
130
|
async groupOpenMessages(group_openid, data) {
|
|
131
|
+
const db = {
|
|
132
|
+
...(data.event_id
|
|
133
|
+
? { event_id: data.event_id }
|
|
134
|
+
: {
|
|
135
|
+
msg_seq: this.getMessageSeq(data.msg_id || '')
|
|
136
|
+
}),
|
|
137
|
+
...data
|
|
138
|
+
};
|
|
126
139
|
return this.groupService({
|
|
127
140
|
url: `/v2/groups/${group_openid}/messages`,
|
|
128
141
|
method: 'post',
|
|
129
|
-
data:
|
|
130
|
-
msg_seq: this.getMessageSeq(data.msg_id || ''),
|
|
131
|
-
...data
|
|
132
|
-
}
|
|
142
|
+
data: db
|
|
133
143
|
}).then(res => res?.data);
|
|
134
144
|
}
|
|
135
145
|
/**
|
|
@@ -220,41 +230,33 @@ class QQBotAPI {
|
|
|
220
230
|
method: 'delete'
|
|
221
231
|
}).then(res => res?.data);
|
|
222
232
|
}
|
|
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
233
|
/**
|
|
244
234
|
* ************
|
|
245
235
|
* 消息-图片接口
|
|
246
236
|
* ***********
|
|
247
237
|
*/
|
|
248
238
|
/**
|
|
249
|
-
*
|
|
250
|
-
* @param
|
|
251
|
-
* @param message
|
|
252
|
-
* @param
|
|
239
|
+
*
|
|
240
|
+
* @param channel_id
|
|
241
|
+
* @param message
|
|
242
|
+
* @param image
|
|
253
243
|
* @returns
|
|
254
244
|
*/
|
|
255
|
-
async
|
|
256
|
-
const formdata =
|
|
257
|
-
const
|
|
245
|
+
async channelsMessages(channel_id, message, image) {
|
|
246
|
+
const formdata = new FormData();
|
|
247
|
+
for (const key in message) {
|
|
248
|
+
if (message[key] !== undefined) {
|
|
249
|
+
formdata.append(key, message[key]);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
if (image) {
|
|
253
|
+
const from = await createPicFrom(image);
|
|
254
|
+
if (from) {
|
|
255
|
+
const { picData, name } = from;
|
|
256
|
+
formdata.append('file_image', picData, name);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
const dary = formdata.getBoundary();
|
|
258
260
|
return this.guildServer({
|
|
259
261
|
method: 'post',
|
|
260
262
|
url: `/channels/${channel_id}/messages`,
|
|
@@ -265,14 +267,26 @@ class QQBotAPI {
|
|
|
265
267
|
}).then(res => res?.data);
|
|
266
268
|
}
|
|
267
269
|
/**
|
|
268
|
-
* 私聊发送
|
|
270
|
+
* 私聊发送
|
|
269
271
|
* @param id 私信传频道id,公信传子频道id
|
|
270
272
|
* @param message {消息编号,图片,内容}
|
|
271
273
|
* @returns
|
|
272
274
|
*/
|
|
273
|
-
async
|
|
274
|
-
const formdata =
|
|
275
|
-
const
|
|
275
|
+
async dmsMessages(guild_id, message, image) {
|
|
276
|
+
const formdata = new FormData();
|
|
277
|
+
for (const key in message) {
|
|
278
|
+
if (message[key] !== undefined) {
|
|
279
|
+
formdata.append(key, message[key]);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
if (image) {
|
|
283
|
+
const from = await createPicFrom(image);
|
|
284
|
+
if (from) {
|
|
285
|
+
const { picData, name } = from;
|
|
286
|
+
formdata.append('file_image', picData, name);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
const dary = formdata.getBoundary();
|
|
276
290
|
return this.guildServer({
|
|
277
291
|
method: 'post',
|
|
278
292
|
url: `/dms/${guild_id}/messages`,
|
|
@@ -462,26 +476,12 @@ class QQBotAPI {
|
|
|
462
476
|
* @param message_id
|
|
463
477
|
* @returns
|
|
464
478
|
*/
|
|
465
|
-
async
|
|
479
|
+
async channelsMessagesById(channel_id, message_id) {
|
|
466
480
|
return this.guildServer({
|
|
467
481
|
method: 'GET',
|
|
468
482
|
url: `/channels/${channel_id}/messages/${message_id}`
|
|
469
483
|
}).then(res => res?.data);
|
|
470
484
|
}
|
|
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
485
|
/**
|
|
486
486
|
* 撤回消息
|
|
487
487
|
* @param channel_id
|
|
@@ -662,18 +662,6 @@ class QQBotAPI {
|
|
|
662
662
|
url: `/users/@me/dms`
|
|
663
663
|
}).then(res => res?.data);
|
|
664
664
|
}
|
|
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
665
|
/**
|
|
678
666
|
* 撤回私信
|
|
679
667
|
* @param guild_id
|
|
@@ -1069,6 +1057,32 @@ class QQBotAPI {
|
|
|
1069
1057
|
url: `/guilds/${guild_id}/api_permission`
|
|
1070
1058
|
}).then(res => res?.data);
|
|
1071
1059
|
}
|
|
1060
|
+
/**
|
|
1061
|
+
* 交互事件回应
|
|
1062
|
+
* @param interaction_id
|
|
1063
|
+
* @param code
|
|
1064
|
+
* @returns
|
|
1065
|
+
*/
|
|
1066
|
+
async interactionResponse(mode, interaction_id, code) {
|
|
1067
|
+
if (mode === 'group') {
|
|
1068
|
+
return this.groupService({
|
|
1069
|
+
method: 'PUT',
|
|
1070
|
+
url: `/interactions/${interaction_id}`,
|
|
1071
|
+
data: {
|
|
1072
|
+
code: code || 0
|
|
1073
|
+
}
|
|
1074
|
+
}).then(res => res?.data);
|
|
1075
|
+
}
|
|
1076
|
+
else {
|
|
1077
|
+
return this.guildServer({
|
|
1078
|
+
method: 'PUT',
|
|
1079
|
+
url: `/interactions/${interaction_id}`,
|
|
1080
|
+
data: {
|
|
1081
|
+
code: code || 0
|
|
1082
|
+
}
|
|
1083
|
+
}).then(res => res?.data);
|
|
1084
|
+
}
|
|
1085
|
+
}
|
|
1072
1086
|
}
|
|
1073
1087
|
|
|
1074
1088
|
export { API_URL, API_URL_SANDBOX, BOTS_API_RUL, QQBotAPI };
|