@alemonjs/qq-bot 0.0.20 → 0.0.22
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/lib/index.guild.js +18 -16
- package/lib/index.js +19 -17
- package/lib/register.js +21 -26
- package/lib/sdk/intents.js +3 -3
- package/lib/send/index.js +417 -366
- package/lib/sends.js +648 -0
- package/package.json +1 -1
package/lib/sends.js
ADDED
|
@@ -0,0 +1,648 @@
|
|
|
1
|
+
import { readFileSync } from 'fs';
|
|
2
|
+
import { createResult, ResultCode } from 'alemonjs';
|
|
3
|
+
import axios from 'axios';
|
|
4
|
+
|
|
5
|
+
const createButtonsData = (rows) => {
|
|
6
|
+
let id = 0;
|
|
7
|
+
const data = {
|
|
8
|
+
rows: rows.map(row => {
|
|
9
|
+
const val = row.value;
|
|
10
|
+
return {
|
|
11
|
+
buttons: val.map(button => {
|
|
12
|
+
const value = button.value;
|
|
13
|
+
const options = button.options;
|
|
14
|
+
id++;
|
|
15
|
+
return {
|
|
16
|
+
id: String(id),
|
|
17
|
+
render_data: {
|
|
18
|
+
label: typeof value == 'object' ? value.title : value,
|
|
19
|
+
visited_label: typeof value == 'object' ? value.label : value,
|
|
20
|
+
// tudo
|
|
21
|
+
style: 0
|
|
22
|
+
},
|
|
23
|
+
action: {
|
|
24
|
+
// 0 link 1 callback , 2 command
|
|
25
|
+
type: typeof options.data === 'object' ? 1 : options?.isLink ? 0 : 2,
|
|
26
|
+
permission: {
|
|
27
|
+
// 所有人
|
|
28
|
+
type: 2
|
|
29
|
+
// "specify_role_ids": ["1", "2", "3"]
|
|
30
|
+
},
|
|
31
|
+
// "click_limit": 10,
|
|
32
|
+
unsupport_tips: options?.toolTip ?? '',
|
|
33
|
+
data: options?.data ?? '',
|
|
34
|
+
// reply: true,
|
|
35
|
+
at_bot_show_channel_list: options.showList ?? false,
|
|
36
|
+
enter: options?.autoEnter ?? false
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
})
|
|
40
|
+
};
|
|
41
|
+
})
|
|
42
|
+
};
|
|
43
|
+
return data;
|
|
44
|
+
};
|
|
45
|
+
const createArkCardData = (value) => {
|
|
46
|
+
return {
|
|
47
|
+
template_id: 24,
|
|
48
|
+
kv: [
|
|
49
|
+
{
|
|
50
|
+
key: '#DESC#',
|
|
51
|
+
value: value.decs
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
key: '#PROMPT#',
|
|
55
|
+
value: value.prompt
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
key: '#TITLE#',
|
|
59
|
+
value: value.title
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
key: '#METADESC#',
|
|
63
|
+
value: value.metadecs
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
key: '#IMG#',
|
|
67
|
+
value: value.cover
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
key: '#LINK#',
|
|
71
|
+
value: value.link
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
key: '#SUBTITLE#',
|
|
75
|
+
value: value.subtitle
|
|
76
|
+
}
|
|
77
|
+
]
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
const createArkBigCardData = (value) => {
|
|
81
|
+
return {
|
|
82
|
+
template_id: 37,
|
|
83
|
+
kv: [
|
|
84
|
+
{
|
|
85
|
+
key: '#PROMPT#',
|
|
86
|
+
value: value.prompt
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
key: '#METATITLE#',
|
|
90
|
+
value: value.title
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
key: '#METASUBTITLE#',
|
|
94
|
+
value: value.subtitle
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
key: '#METACOVER#',
|
|
98
|
+
value: value.cover
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
key: '#METAURL#',
|
|
102
|
+
value: value.link
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
const createArkList = (value) => {
|
|
108
|
+
const [tip, data] = value;
|
|
109
|
+
return {
|
|
110
|
+
template_id: 23,
|
|
111
|
+
kv: [
|
|
112
|
+
{
|
|
113
|
+
key: '#DESC#',
|
|
114
|
+
value: tip.value.desc
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
key: '#PROMPT#',
|
|
118
|
+
value: tip.value.prompt
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
key: '#LIST#',
|
|
122
|
+
obj: data.value.map(item => {
|
|
123
|
+
const value = item.value;
|
|
124
|
+
if (typeof value === 'string') {
|
|
125
|
+
return {
|
|
126
|
+
obj_kv: [
|
|
127
|
+
{
|
|
128
|
+
key: 'desc',
|
|
129
|
+
value: value
|
|
130
|
+
}
|
|
131
|
+
]
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
obj_kv: [
|
|
136
|
+
{
|
|
137
|
+
key: 'desc',
|
|
138
|
+
value: value.title
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
key: 'link',
|
|
142
|
+
value: value.link
|
|
143
|
+
}
|
|
144
|
+
]
|
|
145
|
+
};
|
|
146
|
+
})
|
|
147
|
+
}
|
|
148
|
+
]
|
|
149
|
+
};
|
|
150
|
+
};
|
|
151
|
+
/**
|
|
152
|
+
* 群组消息
|
|
153
|
+
* @param client
|
|
154
|
+
* @param event
|
|
155
|
+
* @param val
|
|
156
|
+
* @returns
|
|
157
|
+
*/
|
|
158
|
+
const GROUP_AT_MESSAGE_CREATE = async (client, event, val) => {
|
|
159
|
+
const content = val
|
|
160
|
+
.filter(item => item.type == 'Mention' || item.type == 'Text' || item.type == 'Link')
|
|
161
|
+
.map(item => {
|
|
162
|
+
if (item.type == 'Link') {
|
|
163
|
+
return `[${item.value}](${item?.options?.link})`;
|
|
164
|
+
}
|
|
165
|
+
else if (item.type == 'Mention') {
|
|
166
|
+
if (item.value == 'everyone' ||
|
|
167
|
+
item.value == 'all' ||
|
|
168
|
+
item.value == '' ||
|
|
169
|
+
typeof item.value != 'string') {
|
|
170
|
+
return ``;
|
|
171
|
+
}
|
|
172
|
+
if (item.options?.belong == 'user') {
|
|
173
|
+
return `<@${item.value}>`;
|
|
174
|
+
}
|
|
175
|
+
return '';
|
|
176
|
+
}
|
|
177
|
+
else if (item.type == 'Text') {
|
|
178
|
+
return item.value;
|
|
179
|
+
}
|
|
180
|
+
})
|
|
181
|
+
.join('');
|
|
182
|
+
if (content) {
|
|
183
|
+
const res = await Promise.all([content].map(async (item) => {
|
|
184
|
+
const res = await client.groupOpenMessages(event.GuildId, {
|
|
185
|
+
content: item,
|
|
186
|
+
msg_id: event.MessageId,
|
|
187
|
+
msg_type: 0,
|
|
188
|
+
msg_seq: client.getMessageSeq(event.MessageId)
|
|
189
|
+
});
|
|
190
|
+
return createResult(ResultCode.Ok, 'client.groupOpenMessages', {
|
|
191
|
+
id: res.id
|
|
192
|
+
});
|
|
193
|
+
})).catch(err => [createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)]);
|
|
194
|
+
return res;
|
|
195
|
+
}
|
|
196
|
+
const images = val.filter(item => item.type == 'Image' || item.type == 'ImageFile' || item.type == 'ImageURL');
|
|
197
|
+
if (images && images.length > 0) {
|
|
198
|
+
return Promise.all(images.map(async (item) => {
|
|
199
|
+
if (item.type == 'ImageURL') {
|
|
200
|
+
const res = await client.groupOpenMessages(event.GuildId, {
|
|
201
|
+
content: '',
|
|
202
|
+
media: {
|
|
203
|
+
file_info: item.value
|
|
204
|
+
},
|
|
205
|
+
msg_id: event.MessageId,
|
|
206
|
+
msg_type: 7,
|
|
207
|
+
msg_seq: client.getMessageSeq(event.MessageId)
|
|
208
|
+
});
|
|
209
|
+
return createResult(ResultCode.Ok, 'client.groupOpenMessages', {
|
|
210
|
+
id: res.id
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
try {
|
|
214
|
+
const file_data = item.type == 'ImageFile'
|
|
215
|
+
? readFileSync(item.value, 'base64')
|
|
216
|
+
: item.value.toString('base64');
|
|
217
|
+
const file_info = await client
|
|
218
|
+
.postRichMediaByGroup(event.GuildId, {
|
|
219
|
+
file_type: 1,
|
|
220
|
+
file_data: file_data
|
|
221
|
+
})
|
|
222
|
+
.then(res => res?.file_info);
|
|
223
|
+
if (!file_info) {
|
|
224
|
+
return createResult(ResultCode.Fail, 'client.postRichMediaByGroup', null);
|
|
225
|
+
}
|
|
226
|
+
const res = await client.groupOpenMessages(event.GuildId, {
|
|
227
|
+
content: '',
|
|
228
|
+
media: {
|
|
229
|
+
file_info
|
|
230
|
+
},
|
|
231
|
+
msg_id: event.MessageId,
|
|
232
|
+
msg_type: 7,
|
|
233
|
+
msg_seq: client.getMessageSeq(event.MessageId)
|
|
234
|
+
});
|
|
235
|
+
return createResult(ResultCode.Ok, 'client.groupOpenMessages', {
|
|
236
|
+
id: res.id
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
return createResult(ResultCode.Fail, error ? (error?.message ?? error) : 'client.groupOpenMessages', null);
|
|
241
|
+
}
|
|
242
|
+
})).catch(err => [createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)]);
|
|
243
|
+
}
|
|
244
|
+
// buttons
|
|
245
|
+
const buttons = val.filter(item => item.type == 'BT.group');
|
|
246
|
+
if (buttons && buttons.length > 0) {
|
|
247
|
+
return Promise.all(buttons.map(async (item) => {
|
|
248
|
+
const template_id = item?.options?.template_id;
|
|
249
|
+
if (template_id) {
|
|
250
|
+
const res = await client.groupOpenMessages(event.GuildId, {
|
|
251
|
+
content: '',
|
|
252
|
+
msg_id: event.MessageId,
|
|
253
|
+
keyboard: {
|
|
254
|
+
id: template_id
|
|
255
|
+
},
|
|
256
|
+
msg_type: 2,
|
|
257
|
+
msg_seq: client.getMessageSeq(event.MessageId)
|
|
258
|
+
});
|
|
259
|
+
return createResult(ResultCode.Ok, 'client.groupOpenMessages', {
|
|
260
|
+
id: res.id
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
const rows = item.value;
|
|
264
|
+
// 构造成按钮
|
|
265
|
+
const data = createButtonsData(rows);
|
|
266
|
+
const res = await client.groupOpenMessages(event.GuildId, {
|
|
267
|
+
content: '',
|
|
268
|
+
msg_id: event.MessageId,
|
|
269
|
+
keyboard: {
|
|
270
|
+
content: data
|
|
271
|
+
},
|
|
272
|
+
msg_type: 2,
|
|
273
|
+
msg_seq: client.getMessageSeq(event.MessageId)
|
|
274
|
+
});
|
|
275
|
+
return createResult(ResultCode.Ok, 'client.groupOpenMessages', {
|
|
276
|
+
id: res.id
|
|
277
|
+
});
|
|
278
|
+
})).catch(err => [createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)]);
|
|
279
|
+
}
|
|
280
|
+
// ark
|
|
281
|
+
const ark = val.filter(item => item.type == 'Ark.BigCard' || item.type == 'Ark.Card' || item.type == 'Ark.list');
|
|
282
|
+
if (ark && ark.length > 0) {
|
|
283
|
+
return Promise.all(ark.map(async (item) => {
|
|
284
|
+
if (item.type === 'Ark.Card') {
|
|
285
|
+
const arkData = createArkCardData(item.value);
|
|
286
|
+
const res = await client.groupOpenMessages(event.GuildId, {
|
|
287
|
+
msg_id: event.MessageId,
|
|
288
|
+
ark: arkData,
|
|
289
|
+
msg_type: 3,
|
|
290
|
+
msg_seq: client.getMessageSeq(event.MessageId)
|
|
291
|
+
});
|
|
292
|
+
return createResult(ResultCode.Ok, 'client.groupOpenMessages', {
|
|
293
|
+
id: res.id
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
if (item.type === 'Ark.BigCard') {
|
|
297
|
+
const arkData = createArkBigCardData(item.value);
|
|
298
|
+
const res = await client.groupOpenMessages(event.GuildId, {
|
|
299
|
+
msg_id: event.MessageId,
|
|
300
|
+
ark: arkData,
|
|
301
|
+
msg_type: 3,
|
|
302
|
+
msg_seq: client.getMessageSeq(event.MessageId)
|
|
303
|
+
});
|
|
304
|
+
return createResult(ResultCode.Ok, 'client.groupOpenMessages', { id: res.id });
|
|
305
|
+
}
|
|
306
|
+
const arkData = createArkList(item.value);
|
|
307
|
+
const res = await client.groupOpenMessages(event.GuildId, {
|
|
308
|
+
msg_id: event.MessageId,
|
|
309
|
+
ark: arkData,
|
|
310
|
+
msg_type: 3,
|
|
311
|
+
msg_seq: client.getMessageSeq(event.MessageId)
|
|
312
|
+
});
|
|
313
|
+
return createResult(ResultCode.Ok, 'client.groupOpenMessages', { id: res.id });
|
|
314
|
+
})).catch(err => [createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)]);
|
|
315
|
+
}
|
|
316
|
+
return Promise.all([]);
|
|
317
|
+
};
|
|
318
|
+
/**
|
|
319
|
+
* 私聊消息
|
|
320
|
+
* @param client
|
|
321
|
+
* @param event
|
|
322
|
+
* @param val
|
|
323
|
+
* @returns
|
|
324
|
+
*/
|
|
325
|
+
const C2C_MESSAGE_CREATE = (client, event, val) => {
|
|
326
|
+
const content = val
|
|
327
|
+
.filter(item => item.type == 'Mention' || item.type == 'Text' || item.type == 'Link')
|
|
328
|
+
.map(item => {
|
|
329
|
+
if (item.type == 'Link') {
|
|
330
|
+
return `[${item.value}](${item?.options?.link})`;
|
|
331
|
+
}
|
|
332
|
+
else if (item.type == 'Text') {
|
|
333
|
+
return item.value;
|
|
334
|
+
}
|
|
335
|
+
return '';
|
|
336
|
+
})
|
|
337
|
+
.join('');
|
|
338
|
+
if (content) {
|
|
339
|
+
return Promise.all([content].map(async (item) => {
|
|
340
|
+
const res = await client.usersOpenMessages(event.OpenId, {
|
|
341
|
+
content: item,
|
|
342
|
+
msg_id: event.MessageId,
|
|
343
|
+
msg_type: 0,
|
|
344
|
+
msg_seq: client.getMessageSeq(event.MessageId)
|
|
345
|
+
});
|
|
346
|
+
return createResult(ResultCode.Ok, 'client.usersOpenMessages', {
|
|
347
|
+
id: res.id
|
|
348
|
+
});
|
|
349
|
+
})).catch(err => [createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)]);
|
|
350
|
+
}
|
|
351
|
+
const images = val.filter(item => item.type == 'Image' || item.type == 'ImageFile' || item.type == 'ImageURL');
|
|
352
|
+
if (images && images.length > 0) {
|
|
353
|
+
return Promise.all(images.map(async (item) => {
|
|
354
|
+
if (item.type == 'ImageURL') {
|
|
355
|
+
const res = await client.usersOpenMessages(event.OpenId, {
|
|
356
|
+
content: '',
|
|
357
|
+
media: {
|
|
358
|
+
file_info: item.value
|
|
359
|
+
},
|
|
360
|
+
msg_id: event.MessageId,
|
|
361
|
+
msg_type: 7,
|
|
362
|
+
msg_seq: client.getMessageSeq(event.MessageId)
|
|
363
|
+
});
|
|
364
|
+
return createResult(ResultCode.Ok, 'client.usersOpenMessages', {
|
|
365
|
+
id: res.id
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
const file_data = item.type == 'ImageFile'
|
|
369
|
+
? readFileSync(item.value, 'base64')
|
|
370
|
+
: item.value.toString('base64');
|
|
371
|
+
const file_info = await client
|
|
372
|
+
.postRichMediaByUsers(event.OpenId, {
|
|
373
|
+
file_type: 1,
|
|
374
|
+
file_data: file_data
|
|
375
|
+
})
|
|
376
|
+
.then(res => res?.file_info);
|
|
377
|
+
if (!file_info)
|
|
378
|
+
return Promise.resolve(null);
|
|
379
|
+
return client.usersOpenMessages(event.OpenId, {
|
|
380
|
+
content: '',
|
|
381
|
+
media: {
|
|
382
|
+
file_info
|
|
383
|
+
},
|
|
384
|
+
msg_id: event.MessageId,
|
|
385
|
+
msg_type: 7,
|
|
386
|
+
msg_seq: client.getMessageSeq(event.MessageId)
|
|
387
|
+
});
|
|
388
|
+
})).catch(err => [createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)]);
|
|
389
|
+
}
|
|
390
|
+
// buttons
|
|
391
|
+
const buttons = val.filter(item => item.type == 'BT.group');
|
|
392
|
+
if (buttons && buttons.length > 0) {
|
|
393
|
+
return Promise.all(buttons.map(async (item) => {
|
|
394
|
+
const template_id = item?.options?.template_id;
|
|
395
|
+
if (template_id) {
|
|
396
|
+
const res = await client.usersOpenMessages(event.GuildId, {
|
|
397
|
+
content: '',
|
|
398
|
+
msg_id: event.MessageId,
|
|
399
|
+
keyboard: {
|
|
400
|
+
id: template_id
|
|
401
|
+
},
|
|
402
|
+
msg_type: 2,
|
|
403
|
+
msg_seq: client.getMessageSeq(event.MessageId)
|
|
404
|
+
});
|
|
405
|
+
return createResult(ResultCode.Ok, 'client.usersOpenMessages', {
|
|
406
|
+
id: res.id
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
const rows = item.value;
|
|
410
|
+
// 构造成按钮
|
|
411
|
+
const data = createButtonsData(rows);
|
|
412
|
+
const res = await client.usersOpenMessages(event.GuildId, {
|
|
413
|
+
content: '',
|
|
414
|
+
msg_id: event.MessageId,
|
|
415
|
+
keyboard: {
|
|
416
|
+
content: data
|
|
417
|
+
},
|
|
418
|
+
msg_type: 2,
|
|
419
|
+
msg_seq: client.getMessageSeq(event.MessageId)
|
|
420
|
+
});
|
|
421
|
+
return createResult(ResultCode.Ok, 'client.usersOpenMessages', {
|
|
422
|
+
id: res.id
|
|
423
|
+
});
|
|
424
|
+
})).catch(err => [createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)]);
|
|
425
|
+
}
|
|
426
|
+
// ark
|
|
427
|
+
const ark = val.filter(item => item.type == 'Ark.BigCard' || item.type == 'Ark.Card' || item.type == 'Ark.list');
|
|
428
|
+
if (ark && ark.length > 0) {
|
|
429
|
+
return Promise.all(ark.map(async (item) => {
|
|
430
|
+
if (item.type === 'Ark.Card') {
|
|
431
|
+
const arkData = createArkCardData(item.value);
|
|
432
|
+
const res = await client.usersOpenMessages(event.GuildId, {
|
|
433
|
+
msg_id: event.MessageId,
|
|
434
|
+
ark: arkData,
|
|
435
|
+
msg_type: 3,
|
|
436
|
+
msg_seq: client.getMessageSeq(event.MessageId)
|
|
437
|
+
});
|
|
438
|
+
return createResult(ResultCode.Ok, 'client.usersOpenMessages', { id: res.id });
|
|
439
|
+
}
|
|
440
|
+
if (item.type === 'Ark.BigCard') {
|
|
441
|
+
const arkData = createArkBigCardData(item.value);
|
|
442
|
+
const res = await client.usersOpenMessages(event.GuildId, {
|
|
443
|
+
msg_id: event.MessageId,
|
|
444
|
+
ark: arkData,
|
|
445
|
+
msg_type: 3,
|
|
446
|
+
msg_seq: client.getMessageSeq(event.MessageId)
|
|
447
|
+
});
|
|
448
|
+
return createResult(ResultCode.Ok, 'client.usersOpenMessages', { id: res.id });
|
|
449
|
+
}
|
|
450
|
+
const arkData = createArkList(item.value);
|
|
451
|
+
const res = await client.usersOpenMessages(event.GuildId, {
|
|
452
|
+
msg_id: event.MessageId,
|
|
453
|
+
ark: arkData,
|
|
454
|
+
msg_type: 3,
|
|
455
|
+
msg_seq: client.getMessageSeq(event.MessageId)
|
|
456
|
+
});
|
|
457
|
+
return createResult(ResultCode.Ok, 'client.usersOpenMessages', { id: res.id });
|
|
458
|
+
})).catch(err => [createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)]);
|
|
459
|
+
}
|
|
460
|
+
return Promise.all([]);
|
|
461
|
+
};
|
|
462
|
+
/**
|
|
463
|
+
* 频道私聊
|
|
464
|
+
* @param client
|
|
465
|
+
* @param event
|
|
466
|
+
* @param val
|
|
467
|
+
* @returns
|
|
468
|
+
*/
|
|
469
|
+
const DIRECT_MESSAGE_CREATE = (client, event, val) => {
|
|
470
|
+
const content = val
|
|
471
|
+
.filter(item => item.type == 'Mention' || item.type == 'Text' || item.type == 'Link')
|
|
472
|
+
.map(item => {
|
|
473
|
+
if (item.type == 'Link') {
|
|
474
|
+
return `[${item.value}](${item?.options?.link})`;
|
|
475
|
+
}
|
|
476
|
+
if (item.type == 'Text') {
|
|
477
|
+
return item.value;
|
|
478
|
+
}
|
|
479
|
+
return '';
|
|
480
|
+
})
|
|
481
|
+
.join('');
|
|
482
|
+
if (content) {
|
|
483
|
+
return Promise.all([content].map(async (item) => {
|
|
484
|
+
const res = await client.dmsMessage(event.OpenId, {
|
|
485
|
+
content: item,
|
|
486
|
+
msg_id: event.MessageId
|
|
487
|
+
});
|
|
488
|
+
return createResult(ResultCode.Ok, 'client.dmsMessage', { id: res?.id });
|
|
489
|
+
})).catch(err => [createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)]);
|
|
490
|
+
}
|
|
491
|
+
const images = val.filter(item => item.type == 'Image' || item.type == 'ImageFile' || item.type == 'ImageURL');
|
|
492
|
+
if (images && images.length > 0) {
|
|
493
|
+
return Promise.all(images.map(async (item) => {
|
|
494
|
+
if (item.value == 'ImageURL') {
|
|
495
|
+
// 请求得到buffer
|
|
496
|
+
const data = await axios
|
|
497
|
+
.get(item.value, {
|
|
498
|
+
responseType: 'arraybuffer'
|
|
499
|
+
})
|
|
500
|
+
.then(res => res?.data);
|
|
501
|
+
const res = await client.postDirectImage(event.OpenId, {
|
|
502
|
+
msg_id: event.MessageId,
|
|
503
|
+
image: data
|
|
504
|
+
});
|
|
505
|
+
return createResult(ResultCode.Ok, 'client.postDirectImage', { id: res?.id });
|
|
506
|
+
}
|
|
507
|
+
const file_data = item.type == 'ImageFile' ? readFileSync(item.value) : item.value;
|
|
508
|
+
const res = await client.postDirectImage(event.OpenId, {
|
|
509
|
+
msg_id: event.MessageId,
|
|
510
|
+
image: Buffer.isBuffer(file_data) ? file_data : Buffer.from(file_data)
|
|
511
|
+
});
|
|
512
|
+
return createResult(ResultCode.Ok, 'client.postDirectImage', { id: res?.id });
|
|
513
|
+
})).catch(err => [createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)]);
|
|
514
|
+
}
|
|
515
|
+
return Promise.all([]);
|
|
516
|
+
};
|
|
517
|
+
const AT_MESSAGE_CREATE = (client, event, val) => {
|
|
518
|
+
const content = val
|
|
519
|
+
.filter(item => item.type == 'Mention' || item.type == 'Text' || item.type == 'Link')
|
|
520
|
+
.map(item => {
|
|
521
|
+
if (item.type == 'Link') {
|
|
522
|
+
return `[${item.value}](${item?.options?.link})`;
|
|
523
|
+
}
|
|
524
|
+
if (item.type == 'Mention') {
|
|
525
|
+
if (item.value == 'everyone' ||
|
|
526
|
+
item.value == 'all' ||
|
|
527
|
+
item.value == '' ||
|
|
528
|
+
typeof item.value != 'string') {
|
|
529
|
+
return `@everyone`;
|
|
530
|
+
}
|
|
531
|
+
if (item.options?.belong == 'user') {
|
|
532
|
+
return `<@!${item.value}>`;
|
|
533
|
+
}
|
|
534
|
+
else if (item.options?.belong == 'channel') {
|
|
535
|
+
return `<#${item.value}>`;
|
|
536
|
+
}
|
|
537
|
+
return '';
|
|
538
|
+
}
|
|
539
|
+
else if (item.type == 'Text') {
|
|
540
|
+
return item.value;
|
|
541
|
+
}
|
|
542
|
+
})
|
|
543
|
+
.join('');
|
|
544
|
+
if (content) {
|
|
545
|
+
return Promise.all([content].map(async (item) => {
|
|
546
|
+
const res = await client.channelsMessagesPost(event.ChannelId, {
|
|
547
|
+
content: item,
|
|
548
|
+
msg_id: event.MessageId
|
|
549
|
+
});
|
|
550
|
+
return createResult(ResultCode.Ok, 'client.channelsMessagesPost', { id: res?.id });
|
|
551
|
+
})).catch(err => [createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)]);
|
|
552
|
+
}
|
|
553
|
+
const images = val.filter(item => item.type == 'Image' || item.type == 'ImageFile' || item.type == 'ImageURL');
|
|
554
|
+
if (images && images.length > 0) {
|
|
555
|
+
return Promise.all(images.map(async (item) => {
|
|
556
|
+
if (item.value == 'ImageURL') {
|
|
557
|
+
// 请求得到buffer
|
|
558
|
+
const data = await axios
|
|
559
|
+
.get(item.value, {
|
|
560
|
+
responseType: 'arraybuffer'
|
|
561
|
+
})
|
|
562
|
+
.then(res => res.data);
|
|
563
|
+
const res = await client.postImage(event.ChannelId, {
|
|
564
|
+
msg_id: event.MessageId,
|
|
565
|
+
image: data
|
|
566
|
+
});
|
|
567
|
+
return createResult(ResultCode.Ok, 'client.postImage', { id: res?.id });
|
|
568
|
+
}
|
|
569
|
+
const file_data = item.type == 'ImageFile' ? readFileSync(item.value) : item.value;
|
|
570
|
+
const res = await client.postImage(event.ChannelId, {
|
|
571
|
+
msg_id: event.MessageId,
|
|
572
|
+
image: Buffer.isBuffer(file_data) ? file_data : Buffer.from(file_data)
|
|
573
|
+
});
|
|
574
|
+
return createResult(ResultCode.Ok, 'client.postImage', { id: res?.id });
|
|
575
|
+
})).catch(err => [createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)]);
|
|
576
|
+
}
|
|
577
|
+
return Promise.all([]);
|
|
578
|
+
};
|
|
579
|
+
/**
|
|
580
|
+
*
|
|
581
|
+
* @param event
|
|
582
|
+
* @param val
|
|
583
|
+
* @returns
|
|
584
|
+
*/
|
|
585
|
+
const MESSAGE_CREATE = (client, event, val) => {
|
|
586
|
+
const content = val
|
|
587
|
+
.filter(item => item.type == 'Mention' || item.type == 'Text' || item.type == 'Link')
|
|
588
|
+
.map(item => {
|
|
589
|
+
if (item.type == 'Link') {
|
|
590
|
+
return `[${item.value}](${item?.options?.link})`;
|
|
591
|
+
}
|
|
592
|
+
if (item.type == 'Mention') {
|
|
593
|
+
if (item.value == 'everyone' ||
|
|
594
|
+
item.value == 'all' ||
|
|
595
|
+
item.value == '' ||
|
|
596
|
+
typeof item.value != 'string') {
|
|
597
|
+
return `@everyone`;
|
|
598
|
+
}
|
|
599
|
+
if (item.options?.belong == 'user') {
|
|
600
|
+
return `<@!${item.value}>`;
|
|
601
|
+
}
|
|
602
|
+
else if (item.options?.belong == 'channel') {
|
|
603
|
+
return `<#${item.value}>`;
|
|
604
|
+
}
|
|
605
|
+
return '';
|
|
606
|
+
}
|
|
607
|
+
else if (item.type == 'Text') {
|
|
608
|
+
return item.value;
|
|
609
|
+
}
|
|
610
|
+
})
|
|
611
|
+
.join('');
|
|
612
|
+
if (content) {
|
|
613
|
+
return Promise.all([content].map(async (item) => {
|
|
614
|
+
const res = await client.channelsMessagesPost(event.ChannelId, {
|
|
615
|
+
content: item,
|
|
616
|
+
msg_id: event.MessageId
|
|
617
|
+
});
|
|
618
|
+
return createResult(ResultCode.Ok, 'client.channelsMessagesPost', { id: res?.id });
|
|
619
|
+
})).catch(err => [createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)]);
|
|
620
|
+
}
|
|
621
|
+
const images = val.filter(item => item.type == 'Image' || item.type == 'ImageFile' || item.type == 'ImageURL');
|
|
622
|
+
if (images && images.length > 0) {
|
|
623
|
+
return Promise.all(images.map(async (item) => {
|
|
624
|
+
if (item.value == 'ImageURL') {
|
|
625
|
+
// 请求得到buffer
|
|
626
|
+
const data = await axios
|
|
627
|
+
.get(item.value, {
|
|
628
|
+
responseType: 'arraybuffer'
|
|
629
|
+
})
|
|
630
|
+
.then(res => res.data);
|
|
631
|
+
const res = await client.postImage(event.ChannelId, {
|
|
632
|
+
msg_id: event.MessageId,
|
|
633
|
+
image: data
|
|
634
|
+
});
|
|
635
|
+
return createResult(ResultCode.Ok, 'client.postImage', { id: res?.id });
|
|
636
|
+
}
|
|
637
|
+
const file_data = item.type == 'ImageFile' ? readFileSync(item.value) : item.value;
|
|
638
|
+
const res = await client.postImage(event.ChannelId, {
|
|
639
|
+
msg_id: event.MessageId,
|
|
640
|
+
image: Buffer.isBuffer(file_data) ? file_data : Buffer.from(file_data)
|
|
641
|
+
});
|
|
642
|
+
return createResult(ResultCode.Ok, 'client.postImage', { id: res?.id });
|
|
643
|
+
})).catch(err => [createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)]);
|
|
644
|
+
}
|
|
645
|
+
return Promise.all([]);
|
|
646
|
+
};
|
|
647
|
+
|
|
648
|
+
export { AT_MESSAGE_CREATE, C2C_MESSAGE_CREATE, DIRECT_MESSAGE_CREATE, GROUP_AT_MESSAGE_CREATE, MESSAGE_CREATE };
|