@alemonjs/qq-bot 2.1.0-alpha.4 → 2.1.0-alpha.6

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.
Files changed (2) hide show
  1. package/lib/sends.js +566 -434
  2. package/package.json +1 -1
package/lib/sends.js CHANGED
@@ -147,6 +147,74 @@ const createArkList = (value) => {
147
147
  ]
148
148
  };
149
149
  };
150
+ // 数据md转为文本
151
+ const createMarkdownText = (data) => {
152
+ const content = data
153
+ .map(mdItem => {
154
+ if (mdItem.type === 'MD.title') {
155
+ // \n
156
+ return `# ${mdItem.value}\n`;
157
+ }
158
+ else if (mdItem.type === 'MD.subtitle') {
159
+ // \n
160
+ return `## ${mdItem.value}\n`;
161
+ }
162
+ else if (mdItem.type === 'MD.text') {
163
+ // 正文
164
+ return `${mdItem.value} `;
165
+ }
166
+ else if (mdItem.type === 'MD.bold') {
167
+ // 加粗
168
+ return `**${mdItem.value}** `;
169
+ }
170
+ else if (mdItem.type === 'MD.divider') {
171
+ // 分割线
172
+ return '\n————————\n';
173
+ }
174
+ else if (mdItem.type === 'MD.italic') {
175
+ // 斜体
176
+ return `_${mdItem.value}_ `;
177
+ }
178
+ else if (mdItem.type === 'MD.italicStar') {
179
+ // 星号斜体
180
+ return `*${mdItem.value}* `;
181
+ }
182
+ else if (mdItem.type === 'MD.strikethrough') {
183
+ // 删除线
184
+ return `~~${mdItem.value}~~ `;
185
+ }
186
+ else if (mdItem.type === 'MD.blockquote') {
187
+ // \n
188
+ return `> ${mdItem.value}\n`;
189
+ }
190
+ else if (mdItem.type === 'MD.newline') {
191
+ // 换行
192
+ return '\n';
193
+ }
194
+ else if (mdItem.type === 'MD.link') {
195
+ //
196
+ return `[🔗${mdItem.value.text}](${mdItem.value.url}) `;
197
+ }
198
+ else if (mdItem.type === 'MD.image') {
199
+ //
200
+ return `![text #${mdItem.options?.width || 208}px #${mdItem.options?.height || 320}px](${mdItem.value}) `;
201
+ }
202
+ else if (mdItem.type === 'MD.list') {
203
+ const listStr = mdItem.value.map(listItem => {
204
+ // 有序
205
+ if (typeof listItem.value === 'object') {
206
+ return `\n${listItem.value.index}. ${listItem.value.text}`;
207
+ }
208
+ // 无序
209
+ return `\n- ${listItem.value}`;
210
+ });
211
+ return `${listStr}\n`;
212
+ }
213
+ return;
214
+ })
215
+ .join('');
216
+ return content;
217
+ };
150
218
  /**
151
219
  * 群组消息
152
220
  * @param client
@@ -155,171 +223,154 @@ const createArkList = (value) => {
155
223
  * @returns
156
224
  */
157
225
  const GROUP_AT_MESSAGE_CREATE = async (client, event, val) => {
158
- const content = val
159
- .filter(item => item.type == 'Mention' || item.type == 'Text' || item.type == 'Link')
160
- .map(item => {
161
- if (item.type == 'Link') {
162
- return `[${item.value}](${item?.options?.link})`;
163
- }
164
- else if (item.type == 'Mention') {
165
- if (item.value == 'everyone' ||
166
- item.value == 'all' ||
167
- item.value == '' ||
168
- typeof item.value != 'string') {
169
- return ``;
226
+ try {
227
+ const content = val
228
+ .filter(item => item.type == 'Mention' || item.type == 'Text' || item.type == 'Link')
229
+ .map(item => {
230
+ if (item.type == 'Link') {
231
+ return `[${item.value}](${item?.options?.link})`;
170
232
  }
171
- if (item.options?.belong == 'user') {
172
- return `<@${item.value}>`;
233
+ else if (item.type == 'Mention') {
234
+ if (item.value == 'everyone' ||
235
+ item.value == 'all' ||
236
+ item.value == '' ||
237
+ typeof item.value != 'string') {
238
+ return ``;
239
+ }
240
+ if (item.options?.belong == 'user') {
241
+ return `<@${item.value}>`;
242
+ }
243
+ return '';
173
244
  }
174
- return '';
175
- }
176
- else if (item.type == 'Text') {
177
- return item.value;
178
- }
179
- })
180
- .join('');
181
- if (content) {
182
- const res = await Promise.all([content].map(async (item) => {
245
+ else if (item.type == 'Text') {
246
+ return item.value;
247
+ }
248
+ })
249
+ .join('');
250
+ const images = val.filter(item => item.type == 'Image' || item.type == 'ImageFile' || item.type == 'ImageURL');
251
+ if (images && images.length > 0) {
252
+ let url = '';
253
+ images.filter(async (item) => {
254
+ // 已经处理。
255
+ if (url)
256
+ return;
257
+ if (item.type == 'ImageURL') {
258
+ url = item.value;
259
+ }
260
+ else if (item.type === 'ImageFile' || item.type === 'Image') {
261
+ const getFileBase64 = () => readFileSync(item.value, 'base64');
262
+ const file_data = item.type == 'ImageFile' ? getFileBase64() : item.value;
263
+ const file_info = await client
264
+ .postRichMediaByGroup(event.GuildId, {
265
+ file_type: 1,
266
+ file_data: file_data
267
+ })
268
+ .then(res => res?.file_info);
269
+ if (file_info) {
270
+ url = file_info;
271
+ }
272
+ }
273
+ });
183
274
  const res = await client.groupOpenMessages(event.GuildId, {
184
- content: item,
275
+ content: content,
276
+ media: {
277
+ file_info: url
278
+ },
185
279
  msg_id: event.MessageId,
186
- msg_type: 0,
280
+ msg_type: 7,
187
281
  msg_seq: client.getMessageSeq(event.MessageId)
188
282
  });
189
- return createResult(ResultCode.Ok, 'client.groupOpenMessages', {
190
- id: res.id
191
- });
192
- })).catch(err => [
193
- createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)
194
- ]);
195
- return res;
196
- }
197
- const images = val.filter(item => item.type == 'Image' || item.type == 'ImageFile' || item.type == 'ImageURL');
198
- if (images && images.length > 0) {
199
- return Promise.all(images.map(async (item) => {
200
- if (item.type == 'ImageURL') {
201
- const res = await client.groupOpenMessages(event.GuildId, {
202
- content: '',
203
- media: {
204
- file_info: item.value
205
- },
206
- msg_id: event.MessageId,
207
- msg_type: 7,
208
- msg_seq: client.getMessageSeq(event.MessageId)
209
- });
210
- return createResult(ResultCode.Ok, 'client.groupOpenMessages', {
283
+ return [
284
+ createResult(ResultCode.Ok, 'client.groupOpenMessages', {
211
285
  id: res.id
212
- });
213
- }
214
- try {
215
- const getFileBase64 = () => readFileSync(item.value, 'base64');
216
- const file_data = item.type == 'ImageFile' ? getFileBase64() : item.value;
217
- const file_info = await client
218
- .postRichMediaByGroup(event.GuildId, {
219
- file_type: 1,
220
- file_data: file_data
221
286
  })
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 => [
243
- createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)
244
- ]);
245
- }
246
- // buttons
247
- const buttons = val.filter(item => item.type == 'BT.group');
248
- if (buttons && buttons.length > 0) {
249
- return Promise.all(buttons.map(async (item) => {
250
- const template_id = item?.options?.template_id;
251
- if (template_id) {
252
- const res = await client.groupOpenMessages(event.GuildId, {
253
- content: '',
254
- msg_id: event.MessageId,
255
- keyboard: {
256
- id: template_id
257
- },
258
- msg_type: 2,
259
- msg_seq: client.getMessageSeq(event.MessageId)
260
- });
261
- return createResult(ResultCode.Ok, 'client.groupOpenMessages', {
262
- id: res.id
263
- });
264
- }
265
- const rows = item.value;
266
- // 构造成按钮
267
- const data = createButtonsData(rows);
287
+ ];
288
+ }
289
+ const mdAndButtons = val.filter(item => item.type == 'Markdown' || item.type == 'BT.group');
290
+ if (mdAndButtons && mdAndButtons.length > 0) {
291
+ const params = {};
292
+ mdAndButtons.forEach(async (item) => {
293
+ if (item.type === 'BT.group') {
294
+ // 如果是按钮,获取参数
295
+ const template_id = item?.options?.template_id;
296
+ if (template_id) {
297
+ params['keyboard'] = {
298
+ id: template_id
299
+ };
300
+ }
301
+ else {
302
+ const rows = item.value;
303
+ // 构造成按钮
304
+ const content = createButtonsData(rows);
305
+ params['keyboard'] = {
306
+ content: content
307
+ };
308
+ }
309
+ }
310
+ else if (item.type === 'Markdown') {
311
+ // 如果是markdown,获取内容
312
+ const content = createMarkdownText(item.value);
313
+ if (content) {
314
+ params['markdown'] = {
315
+ content: content
316
+ };
317
+ }
318
+ }
319
+ });
268
320
  const res = await client.groupOpenMessages(event.GuildId, {
269
- content: '',
321
+ content: content,
270
322
  msg_id: event.MessageId,
271
- keyboard: {
272
- content: data
273
- },
274
323
  msg_type: 2,
275
- msg_seq: client.getMessageSeq(event.MessageId)
324
+ msg_seq: client.getMessageSeq(event.MessageId),
325
+ ...params
276
326
  });
277
- return createResult(ResultCode.Ok, 'client.groupOpenMessages', {
278
- id: res.id
327
+ return [createResult(ResultCode.Ok, 'client.groupOpenMessages', { id: res.id })];
328
+ }
329
+ // ark
330
+ const ark = val.filter(item => item.type == 'Ark.BigCard' || item.type == 'Ark.Card' || item.type == 'Ark.list');
331
+ if (ark && ark.length > 0) {
332
+ const params = {};
333
+ ark.forEach(async (item) => {
334
+ if (item.type === 'Ark.Card') {
335
+ const arkData = createArkCardData(item.value);
336
+ params['ark'] = arkData;
337
+ }
338
+ else if (item.type === 'Ark.BigCard') {
339
+ const arkData = createArkBigCardData(item.value);
340
+ params['ark'] = arkData;
341
+ }
342
+ else if (item.type === 'Ark.list') {
343
+ const arkData = createArkList(item.value);
344
+ params['ark'] = arkData;
345
+ }
279
346
  });
280
- })).catch(err => [
281
- createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)
282
- ]);
283
- }
284
- // ark
285
- const ark = val.filter(item => item.type == 'Ark.BigCard' || item.type == 'Ark.Card' || item.type == 'Ark.list');
286
- if (ark && ark.length > 0) {
287
- return Promise.all(ark.map(async (item) => {
288
- if (item.type === 'Ark.Card') {
289
- const arkData = createArkCardData(item.value);
290
- const res = await client.groupOpenMessages(event.GuildId, {
291
- msg_id: event.MessageId,
292
- ark: arkData,
293
- msg_type: 3,
294
- msg_seq: client.getMessageSeq(event.MessageId)
295
- });
296
- return createResult(ResultCode.Ok, 'client.groupOpenMessages', {
297
- id: res.id
298
- });
299
- }
300
- if (item.type === 'Ark.BigCard') {
301
- const arkData = createArkBigCardData(item.value);
302
- const res = await client.groupOpenMessages(event.GuildId, {
303
- msg_id: event.MessageId,
304
- ark: arkData,
305
- msg_type: 3,
306
- msg_seq: client.getMessageSeq(event.MessageId)
307
- });
308
- return createResult(ResultCode.Ok, 'client.groupOpenMessages', { id: res.id });
309
- }
310
- const arkData = createArkList(item.value);
311
347
  const res = await client.groupOpenMessages(event.GuildId, {
348
+ content: content,
312
349
  msg_id: event.MessageId,
313
- ark: arkData,
314
350
  msg_type: 3,
351
+ msg_seq: client.getMessageSeq(event.MessageId),
352
+ ...params
353
+ });
354
+ return [createResult(ResultCode.Ok, 'client.groupOpenMessages', { id: res.id })];
355
+ }
356
+ if (content) {
357
+ const res = await client.groupOpenMessages(event.GuildId, {
358
+ content: content,
359
+ msg_id: event.MessageId,
360
+ msg_type: 0,
315
361
  msg_seq: client.getMessageSeq(event.MessageId)
316
362
  });
317
- return createResult(ResultCode.Ok, 'client.groupOpenMessages', { id: res.id });
318
- })).catch(err => [
319
- createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)
320
- ]);
363
+ return [
364
+ createResult(ResultCode.Ok, 'client.groupOpenMessages', {
365
+ id: res.id
366
+ })
367
+ ];
368
+ }
369
+ }
370
+ catch (err) {
371
+ return [createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)];
321
372
  }
322
- return Promise.all([]);
373
+ return [];
323
374
  };
324
375
  /**
325
376
  * 私聊消息
@@ -328,149 +379,155 @@ const GROUP_AT_MESSAGE_CREATE = async (client, event, val) => {
328
379
  * @param val
329
380
  * @returns
330
381
  */
331
- const C2C_MESSAGE_CREATE = (client, event, val) => {
332
- const content = val
333
- .filter(item => item.type == 'Mention' || item.type == 'Text' || item.type == 'Link')
334
- .map(item => {
335
- if (item.type == 'Link') {
336
- return `[${item.value}](${item?.options?.link})`;
337
- }
338
- else if (item.type == 'Text') {
339
- return item.value;
340
- }
341
- return '';
342
- })
343
- .join('');
344
- if (content) {
345
- return Promise.all([content].map(async (item) => {
346
- const res = await client.usersOpenMessages(event.OpenId, {
347
- content: item,
348
- msg_id: event.MessageId,
349
- msg_type: 0,
350
- msg_seq: client.getMessageSeq(event.MessageId)
351
- });
352
- return createResult(ResultCode.Ok, 'client.usersOpenMessages', {
353
- id: res.id
354
- });
355
- })).catch(err => [
356
- createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)
357
- ]);
358
- }
359
- const images = val.filter(item => item.type == 'Image' || item.type == 'ImageFile' || item.type == 'ImageURL');
360
- if (images && images.length > 0) {
361
- return Promise.all(images.map(async (item) => {
362
- if (item.type == 'ImageURL') {
363
- const res = await client.usersOpenMessages(event.OpenId, {
364
- content: '',
365
- media: {
366
- file_info: item.value
367
- },
368
- msg_id: event.MessageId,
369
- msg_type: 7,
370
- msg_seq: client.getMessageSeq(event.MessageId)
371
- });
372
- return createResult(ResultCode.Ok, 'client.usersOpenMessages', {
373
- id: res.id
374
- });
382
+ const C2C_MESSAGE_CREATE = async (client, event, val) => {
383
+ try {
384
+ const content = val
385
+ .filter(item => item.type == 'Mention' || item.type == 'Text' || item.type == 'Link')
386
+ .map(item => {
387
+ if (item.type == 'Link') {
388
+ return `[${item.value}](${item?.options?.link})`;
375
389
  }
376
- const getFileBase64 = () => readFileSync(item.value, 'base64');
377
- const file_data = item.type == 'ImageFile' ? getFileBase64() : item.value;
378
- const file_info = await client
379
- .postRichMediaByUsers(event.OpenId, {
380
- file_type: 1,
381
- file_data: file_data
382
- })
383
- .then(res => res?.file_info);
384
- if (!file_info)
385
- return Promise.resolve(null);
386
- return client.usersOpenMessages(event.OpenId, {
387
- content: '',
390
+ else if (item.type == 'Mention') {
391
+ if (item.value == 'everyone' ||
392
+ item.value == 'all' ||
393
+ item.value == '' ||
394
+ typeof item.value != 'string') {
395
+ return ``;
396
+ }
397
+ if (item.options?.belong == 'user') {
398
+ return `<@${item.value}>`;
399
+ }
400
+ return '';
401
+ }
402
+ else if (item.type == 'Text') {
403
+ return item.value;
404
+ }
405
+ })
406
+ .join('');
407
+ const images = val.filter(item => item.type == 'Image' || item.type == 'ImageFile' || item.type == 'ImageURL');
408
+ if (images && images.length > 0) {
409
+ let url = '';
410
+ images.filter(async (item) => {
411
+ // 已经处理。
412
+ if (url)
413
+ return;
414
+ if (item.type == 'ImageURL') {
415
+ url = item.value;
416
+ }
417
+ else if (item.type === 'ImageFile' || item.type === 'Image') {
418
+ const getFileBase64 = () => readFileSync(item.value, 'base64');
419
+ const file_data = item.type == 'ImageFile' ? getFileBase64() : item.value;
420
+ const file_info = await client
421
+ .postRichMediaByGroup(event.GuildId, {
422
+ file_type: 1,
423
+ file_data: file_data
424
+ })
425
+ .then(res => res?.file_info);
426
+ if (file_info) {
427
+ url = file_info;
428
+ }
429
+ }
430
+ });
431
+ const res = await client.usersOpenMessages(event.OpenId, {
432
+ content: content,
388
433
  media: {
389
- file_info
434
+ file_info: url
390
435
  },
391
436
  msg_id: event.MessageId,
392
437
  msg_type: 7,
393
438
  msg_seq: client.getMessageSeq(event.MessageId)
394
439
  });
395
- })).catch(err => [
396
- createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)
397
- ]);
398
- }
399
- // buttons
400
- const buttons = val.filter(item => item.type == 'BT.group');
401
- if (buttons && buttons.length > 0) {
402
- return Promise.all(buttons.map(async (item) => {
403
- const template_id = item?.options?.template_id;
404
- if (template_id) {
405
- const res = await client.usersOpenMessages(event.GuildId, {
406
- content: '',
407
- msg_id: event.MessageId,
408
- keyboard: {
409
- id: template_id
410
- },
411
- msg_type: 2,
412
- msg_seq: client.getMessageSeq(event.MessageId)
413
- });
414
- return createResult(ResultCode.Ok, 'client.usersOpenMessages', {
440
+ return [
441
+ createResult(ResultCode.Ok, 'client.usersOpenMessages', {
415
442
  id: res.id
416
- });
417
- }
418
- const rows = item.value;
419
- // 构造成按钮
420
- const data = createButtonsData(rows);
421
- const res = await client.usersOpenMessages(event.GuildId, {
422
- content: '',
443
+ })
444
+ ];
445
+ }
446
+ const mdAndButtons = val.filter(item => item.type == 'Markdown' || item.type == 'BT.group');
447
+ if (mdAndButtons && mdAndButtons.length > 0) {
448
+ const params = {};
449
+ mdAndButtons.forEach(async (item) => {
450
+ if (item.type === 'BT.group') {
451
+ // 如果是按钮,获取参数
452
+ const template_id = item?.options?.template_id;
453
+ if (template_id) {
454
+ params['keyboard'] = {
455
+ id: template_id
456
+ };
457
+ }
458
+ else {
459
+ const rows = item.value;
460
+ // 构造成按钮
461
+ const content = createButtonsData(rows);
462
+ params['keyboard'] = {
463
+ content: content
464
+ };
465
+ }
466
+ }
467
+ else if (item.type === 'Markdown') {
468
+ // 如果是markdown,获取内容
469
+ const content = createMarkdownText(item.value);
470
+ if (content) {
471
+ params['markdown'] = {
472
+ content: content
473
+ };
474
+ }
475
+ }
476
+ });
477
+ const res = await client.usersOpenMessages(event.OpenId, {
478
+ content: content,
423
479
  msg_id: event.MessageId,
424
- keyboard: {
425
- content: data
426
- },
427
480
  msg_type: 2,
428
- msg_seq: client.getMessageSeq(event.MessageId)
481
+ msg_seq: client.getMessageSeq(event.MessageId),
482
+ ...params
429
483
  });
430
- return createResult(ResultCode.Ok, 'client.usersOpenMessages', {
431
- id: res.id
484
+ return [createResult(ResultCode.Ok, 'client.usersOpenMessages', { id: res.id })];
485
+ }
486
+ // ark
487
+ const ark = val.filter(item => item.type == 'Ark.BigCard' || item.type == 'Ark.Card' || item.type == 'Ark.list');
488
+ if (ark && ark.length > 0) {
489
+ const params = {};
490
+ ark.forEach(async (item) => {
491
+ if (item.type === 'Ark.Card') {
492
+ const arkData = createArkCardData(item.value);
493
+ params['ark'] = arkData;
494
+ }
495
+ else if (item.type === 'Ark.BigCard') {
496
+ const arkData = createArkBigCardData(item.value);
497
+ params['ark'] = arkData;
498
+ }
499
+ else if (item.type === 'Ark.list') {
500
+ const arkData = createArkList(item.value);
501
+ params['ark'] = arkData;
502
+ }
432
503
  });
433
- })).catch(err => [
434
- createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)
435
- ]);
436
- }
437
- // ark
438
- const ark = val.filter(item => item.type == 'Ark.BigCard' || item.type == 'Ark.Card' || item.type == 'Ark.list');
439
- if (ark && ark.length > 0) {
440
- return Promise.all(ark.map(async (item) => {
441
- if (item.type === 'Ark.Card') {
442
- const arkData = createArkCardData(item.value);
443
- const res = await client.usersOpenMessages(event.GuildId, {
444
- msg_id: event.MessageId,
445
- ark: arkData,
446
- msg_type: 3,
447
- msg_seq: client.getMessageSeq(event.MessageId)
448
- });
449
- return createResult(ResultCode.Ok, 'client.usersOpenMessages', { id: res.id });
450
- }
451
- if (item.type === 'Ark.BigCard') {
452
- const arkData = createArkBigCardData(item.value);
453
- const res = await client.usersOpenMessages(event.GuildId, {
454
- msg_id: event.MessageId,
455
- ark: arkData,
456
- msg_type: 3,
457
- msg_seq: client.getMessageSeq(event.MessageId)
458
- });
459
- return createResult(ResultCode.Ok, 'client.usersOpenMessages', { id: res.id });
460
- }
461
- const arkData = createArkList(item.value);
462
- const res = await client.usersOpenMessages(event.GuildId, {
504
+ const res = await client.usersOpenMessages(event.OpenId, {
505
+ content: content,
463
506
  msg_id: event.MessageId,
464
- ark: arkData,
465
507
  msg_type: 3,
508
+ msg_seq: client.getMessageSeq(event.MessageId),
509
+ ...params
510
+ });
511
+ return [createResult(ResultCode.Ok, 'client.usersOpenMessages', { id: res.id })];
512
+ }
513
+ if (content) {
514
+ const res = await client.usersOpenMessages(event.OpenId, {
515
+ content: content,
516
+ msg_id: event.MessageId,
517
+ msg_type: 0,
466
518
  msg_seq: client.getMessageSeq(event.MessageId)
467
519
  });
468
- return createResult(ResultCode.Ok, 'client.usersOpenMessages', { id: res.id });
469
- })).catch(err => [
470
- createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)
471
- ]);
520
+ return [
521
+ createResult(ResultCode.Ok, 'client.usersOpenMessages', {
522
+ id: res.id
523
+ })
524
+ ];
525
+ }
472
526
  }
473
- return Promise.all([]);
527
+ catch (err) {
528
+ return [createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)];
529
+ }
530
+ return [];
474
531
  };
475
532
  /**
476
533
  * 频道私聊
@@ -479,195 +536,270 @@ const C2C_MESSAGE_CREATE = (client, event, val) => {
479
536
  * @param val
480
537
  * @returns
481
538
  */
482
- const DIRECT_MESSAGE_CREATE = (client, event, val) => {
483
- const content = val
484
- .filter(item => item.type == 'Mention' || item.type == 'Text' || item.type == 'Link')
485
- .map(item => {
486
- if (item.type == 'Link') {
487
- return `[${item.value}](${item?.options?.link})`;
488
- }
489
- if (item.type == 'Text') {
490
- return item.value;
491
- }
492
- return '';
493
- })
494
- .join('');
495
- if (content) {
496
- return Promise.all([content].map(async (item) => {
497
- const res = await client.dmsMessage(event.OpenId, {
498
- content: item,
499
- msg_id: event.MessageId
500
- });
501
- return createResult(ResultCode.Ok, 'client.dmsMessage', { id: res?.id });
502
- })).catch(err => [
503
- createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)
504
- ]);
505
- }
506
- const images = val.filter(item => item.type == 'Image' || item.type == 'ImageFile' || item.type == 'ImageURL');
507
- if (images && images.length > 0) {
508
- return Promise.all(images.map(async (item) => {
509
- if (item.value == 'ImageURL') {
510
- // 请求得到buffer
511
- const data = await axios
512
- .get(item.value, {
513
- responseType: 'arraybuffer'
514
- })
515
- .then(res => res?.data);
516
- const res = await client.postDirectImage(event.OpenId, {
517
- msg_id: event.MessageId,
518
- image: data
519
- });
520
- return createResult(ResultCode.Ok, 'client.postDirectImage', { id: res?.id });
539
+ const DIRECT_MESSAGE_CREATE = async (client, event, val) => {
540
+ try {
541
+ const content = val
542
+ .filter(item => item.type == 'Mention' || item.type == 'Text' || item.type == 'Link')
543
+ .map(item => {
544
+ if (item.type == 'Link') {
545
+ return `[${item.value}](${item?.options?.link})`;
546
+ }
547
+ if (item.type == 'Text') {
548
+ return item.value;
521
549
  }
522
- const file_data = item.type == 'ImageFile' ? readFileSync(item.value) : Buffer.from(item.value, 'base64');
550
+ return '';
551
+ })
552
+ .join('');
553
+ const images = val.filter(item => item.type == 'Image' || item.type == 'ImageFile' || item.type == 'ImageURL');
554
+ if (images && images.length > 0) {
555
+ let imageBuffer = null;
556
+ images.forEach(async (item) => {
557
+ // 已经处理。
558
+ if (imageBuffer)
559
+ return;
560
+ if (item.value == 'ImageURL') {
561
+ // 请求得到buffer
562
+ const data = await axios
563
+ .get(item.value, {
564
+ responseType: 'arraybuffer'
565
+ })
566
+ .then(res => res?.data);
567
+ imageBuffer = data;
568
+ }
569
+ else {
570
+ const file_data = item.type == 'ImageFile' ? readFileSync(item.value) : Buffer.from(item.value, 'base64');
571
+ imageBuffer = file_data;
572
+ }
573
+ });
523
574
  const res = await client.postDirectImage(event.OpenId, {
524
575
  msg_id: event.MessageId,
525
- image: file_data
576
+ content: content,
577
+ image: imageBuffer
526
578
  });
527
- return createResult(ResultCode.Ok, 'client.postDirectImage', { id: res?.id });
528
- })).catch(err => [
529
- createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)
530
- ]);
531
- }
532
- return Promise.all([]);
533
- };
534
- const AT_MESSAGE_CREATE = (client, event, val) => {
535
- const content = val
536
- .filter(item => item.type == 'Mention' || item.type == 'Text' || item.type == 'Link')
537
- .map(item => {
538
- if (item.type == 'Link') {
539
- return `[${item.value}](${item?.options?.link})`;
579
+ return [createResult(ResultCode.Ok, 'client.postDirectImage', { id: res?.id })];
540
580
  }
541
- if (item.type == 'Mention') {
542
- if (item.value == 'everyone' ||
543
- item.value == 'all' ||
544
- item.value == '' ||
545
- typeof item.value != 'string') {
546
- return `@everyone`;
547
- }
548
- if (item.options?.belong == 'user') {
549
- return `<@!${item.value}>`;
550
- }
551
- else if (item.options?.belong == 'channel') {
552
- return `<#${item.value}>`;
553
- }
554
- return '';
581
+ const mdAndButtons = val.filter(item => item.type == 'Markdown' || item.type == 'BT.group');
582
+ if (mdAndButtons && mdAndButtons.length > 0) {
583
+ const params = {};
584
+ mdAndButtons.forEach(async (item) => {
585
+ if (item.type === 'BT.group') {
586
+ // 如果是按钮,获取参数
587
+ const template_id = item?.options?.template_id;
588
+ if (template_id) {
589
+ params['keyboard'] = {
590
+ id: template_id
591
+ };
592
+ }
593
+ else {
594
+ const rows = item.value;
595
+ // 构造成按钮
596
+ const content = createButtonsData(rows);
597
+ params['keyboard'] = {
598
+ content: content
599
+ };
600
+ }
601
+ }
602
+ else if (item.type === 'Markdown') {
603
+ // 如果是markdown,获取内容
604
+ const content = createMarkdownText(item.value);
605
+ if (content) {
606
+ params['markdown'] = {
607
+ content: content
608
+ };
609
+ }
610
+ }
611
+ });
612
+ const res = await client.dmsMessage(event.OpenId, {
613
+ content: '',
614
+ msg_id: event.MessageId,
615
+ ...params
616
+ });
617
+ return [createResult(ResultCode.Ok, 'client.dmsMessage', { id: res.id })];
555
618
  }
556
- else if (item.type == 'Text') {
557
- return item.value;
619
+ // ark
620
+ const ark = val.filter(item => item.type == 'Ark.BigCard' || item.type == 'Ark.Card' || item.type == 'Ark.list');
621
+ if (ark && ark.length > 0) {
622
+ const params = {};
623
+ ark.forEach(async (item) => {
624
+ if (item.type === 'Ark.Card') {
625
+ const arkData = createArkCardData(item.value);
626
+ params['ark'] = arkData;
627
+ }
628
+ else if (item.type === 'Ark.BigCard') {
629
+ const arkData = createArkBigCardData(item.value);
630
+ params['ark'] = arkData;
631
+ }
632
+ else if (item.type === 'Ark.list') {
633
+ const arkData = createArkList(item.value);
634
+ params['ark'] = arkData;
635
+ }
636
+ });
637
+ const res = await client.dmsMessage(event.OpenId, {
638
+ content: content,
639
+ msg_id: event.MessageId,
640
+ ...params
641
+ });
642
+ return [createResult(ResultCode.Ok, 'client.dmsMessage', { id: res.id })];
558
643
  }
559
- })
560
- .join('');
561
- if (content) {
562
- return Promise.all([content].map(async (item) => {
563
- const res = await client.channelsMessagesPost(event.ChannelId, {
564
- content: item,
644
+ if (content) {
645
+ const res = await client.dmsMessage(event.OpenId, {
646
+ content: content,
565
647
  msg_id: event.MessageId
566
648
  });
567
- return createResult(ResultCode.Ok, 'client.channelsMessagesPost', { id: res?.id });
568
- })).catch(err => [
569
- createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)
570
- ]);
649
+ return [createResult(ResultCode.Ok, 'client.dmsMessage', { id: res?.id })];
650
+ }
651
+ return [];
571
652
  }
572
- const images = val.filter(item => item.type == 'Image' || item.type == 'ImageFile' || item.type == 'ImageURL');
573
- if (images && images.length > 0) {
574
- return Promise.all(images.map(async (item) => {
575
- if (item.value == 'ImageURL') {
576
- // 请求得到buffer
577
- const data = await axios
578
- .get(item.value, {
579
- responseType: 'arraybuffer'
580
- })
581
- .then(res => res.data);
582
- const res = await client.postImage(event.ChannelId, {
583
- msg_id: event.MessageId,
584
- image: data
585
- });
586
- return createResult(ResultCode.Ok, 'client.postImage', { id: res?.id });
587
- }
588
- const file_data = item.type == 'ImageFile' ? readFileSync(item.value) : Buffer.from(item.value, 'base64');
589
- const res = await client.postImage(event.ChannelId, {
590
- msg_id: event.MessageId,
591
- image: file_data
592
- });
593
- return createResult(ResultCode.Ok, 'client.postImage', { id: res?.id });
594
- })).catch(err => [
595
- createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)
596
- ]);
653
+ catch (err) {
654
+ return [createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)];
597
655
  }
598
- return Promise.all([]);
599
656
  };
600
657
  /**
601
- *
658
+ * 频道公聊
602
659
  * @param event
603
660
  * @param val
604
661
  * @returns
605
662
  */
606
- const MESSAGE_CREATE = (client, event, val) => {
607
- const content = val
608
- .filter(item => item.type == 'Mention' || item.type == 'Text' || item.type == 'Link')
609
- .map(item => {
610
- if (item.type == 'Link') {
611
- return `[${item.value}](${item?.options?.link})`;
612
- }
613
- if (item.type == 'Mention') {
614
- if (item.value == 'everyone' ||
615
- item.value == 'all' ||
616
- item.value == '' ||
617
- typeof item.value != 'string') {
618
- return `@everyone`;
663
+ const MESSAGE_CREATE = async (client, event, val) => {
664
+ try {
665
+ const content = val
666
+ .filter(item => item.type == 'Mention' || item.type == 'Text' || item.type == 'Link')
667
+ .map(item => {
668
+ if (item.type == 'Link') {
669
+ return `[${item.value}](${item?.options?.link})`;
619
670
  }
620
- if (item.options?.belong == 'user') {
621
- return `<@!${item.value}>`;
671
+ if (item.type == 'Mention') {
672
+ if (item.value == 'everyone' ||
673
+ item.value == 'all' ||
674
+ item.value == '' ||
675
+ typeof item.value != 'string') {
676
+ return `@everyone`;
677
+ }
678
+ if (item.options?.belong == 'user') {
679
+ return `<@!${item.value}>`;
680
+ }
681
+ else if (item.options?.belong == 'channel') {
682
+ return `<#${item.value}>`;
683
+ }
684
+ return '';
622
685
  }
623
- else if (item.options?.belong == 'channel') {
624
- return `<#${item.value}>`;
686
+ else if (item.type == 'Text') {
687
+ return item.value;
625
688
  }
626
- return '';
689
+ })
690
+ .join('');
691
+ const images = val.filter(item => item.type == 'Image' || item.type == 'ImageFile' || item.type == 'ImageURL');
692
+ if (images && images.length > 0) {
693
+ let dataBuffer = null;
694
+ images.forEach(async (item) => {
695
+ if (dataBuffer)
696
+ return; // 已经处理。
697
+ if (item.value == 'ImageURL') {
698
+ // 请求得到buffer
699
+ const data = await axios
700
+ .get(item.value, {
701
+ responseType: 'arraybuffer'
702
+ })
703
+ .then(res => res.data);
704
+ dataBuffer = data;
705
+ }
706
+ else {
707
+ const file_data = item.type == 'ImageFile' ? readFileSync(item.value) : Buffer.from(item.value, 'base64');
708
+ dataBuffer = file_data;
709
+ }
710
+ });
711
+ const res = await client.postImage(event.ChannelId, {
712
+ msg_id: event.MessageId,
713
+ content: content,
714
+ image: dataBuffer
715
+ });
716
+ return [createResult(ResultCode.Ok, 'client.postImage', { id: res?.id })];
717
+ }
718
+ const mdAndButtons = val.filter(item => item.type == 'Markdown' || item.type == 'BT.group');
719
+ if (mdAndButtons && mdAndButtons.length > 0) {
720
+ const params = {};
721
+ mdAndButtons.forEach(async (item) => {
722
+ if (item.type === 'BT.group') {
723
+ // 如果是按钮,获取参数
724
+ const template_id = item?.options?.template_id;
725
+ if (template_id) {
726
+ params['keyboard'] = {
727
+ id: template_id
728
+ };
729
+ }
730
+ else {
731
+ const rows = item.value;
732
+ // 构造成按钮
733
+ const content = createButtonsData(rows);
734
+ params['keyboard'] = {
735
+ content: content
736
+ };
737
+ }
738
+ }
739
+ else if (item.type === 'Markdown') {
740
+ // 如果是markdown,获取内容
741
+ const content = createMarkdownText(item.value);
742
+ if (content) {
743
+ params['markdown'] = {
744
+ content: content
745
+ };
746
+ }
747
+ }
748
+ });
749
+ const res = await client.channelsMessagesPost(event.ChannelId, {
750
+ content: '',
751
+ msg_id: event.MessageId,
752
+ ...params
753
+ });
754
+ return [createResult(ResultCode.Ok, 'client.channelsMessagesPost', { id: res.id })];
627
755
  }
628
- else if (item.type == 'Text') {
629
- return item.value;
756
+ // ark
757
+ const ark = val.filter(item => item.type == 'Ark.BigCard' || item.type == 'Ark.Card' || item.type == 'Ark.list');
758
+ if (ark && ark.length > 0) {
759
+ const params = {};
760
+ ark.forEach(async (item) => {
761
+ if (item.type === 'Ark.Card') {
762
+ const arkData = createArkCardData(item.value);
763
+ params['ark'] = arkData;
764
+ }
765
+ else if (item.type === 'Ark.BigCard') {
766
+ const arkData = createArkBigCardData(item.value);
767
+ params['ark'] = arkData;
768
+ }
769
+ else if (item.type === 'Ark.list') {
770
+ const arkData = createArkList(item.value);
771
+ params['ark'] = arkData;
772
+ }
773
+ });
774
+ const res = await client.channelsMessagesPost(event.GuildId, {
775
+ content: content,
776
+ msg_id: event.MessageId,
777
+ ...params
778
+ });
779
+ return [createResult(ResultCode.Ok, 'client.channelsMessagesPost', { id: res.id })];
630
780
  }
631
- })
632
- .join('');
633
- if (content) {
634
- return Promise.all([content].map(async (item) => {
781
+ if (content) {
635
782
  const res = await client.channelsMessagesPost(event.ChannelId, {
636
- content: item,
783
+ content: content,
637
784
  msg_id: event.MessageId
638
785
  });
639
- return createResult(ResultCode.Ok, 'client.channelsMessagesPost', { id: res?.id });
640
- })).catch(err => [
641
- createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)
642
- ]);
786
+ return [createResult(ResultCode.Ok, 'client.channelsMessagesPost', { id: res?.id })];
787
+ }
788
+ return [];
643
789
  }
644
- const images = val.filter(item => item.type == 'Image' || item.type == 'ImageFile' || item.type == 'ImageURL');
645
- if (images && images.length > 0) {
646
- return Promise.all(images.map(async (item) => {
647
- if (item.value == 'ImageURL') {
648
- // 请求得到buffer
649
- const data = await axios
650
- .get(item.value, {
651
- responseType: 'arraybuffer'
652
- })
653
- .then(res => res.data);
654
- const res = await client.postImage(event.ChannelId, {
655
- msg_id: event.MessageId,
656
- image: data
657
- });
658
- return createResult(ResultCode.Ok, 'client.postImage', { id: res?.id });
659
- }
660
- const file_data = item.type == 'ImageFile' ? readFileSync(item.value) : Buffer.from(item.value, 'base64');
661
- const res = await client.postImage(event.ChannelId, {
662
- msg_id: event.MessageId,
663
- image: file_data
664
- });
665
- return createResult(ResultCode.Ok, 'client.postImage', { id: res?.id });
666
- })).catch(err => [
667
- createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)
668
- ]);
790
+ catch (err) {
791
+ return [createResult(ResultCode.Fail, err?.response?.data ?? err?.message ?? err, null)];
669
792
  }
670
- return Promise.all([]);
793
+ };
794
+ /**
795
+ * 频道公聊 @
796
+ * @param client
797
+ * @param event
798
+ * @param val
799
+ * @returns
800
+ */
801
+ const AT_MESSAGE_CREATE = (client, event, val) => {
802
+ return MESSAGE_CREATE(client, event, val);
671
803
  };
672
804
 
673
805
  export { AT_MESSAGE_CREATE, C2C_MESSAGE_CREATE, DIRECT_MESSAGE_CREATE, GROUP_AT_MESSAGE_CREATE, MESSAGE_CREATE };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alemonjs/qq-bot",
3
- "version": "2.1.0-alpha.4",
3
+ "version": "2.1.0-alpha.6",
4
4
  "description": "阿柠檬qqbot平台连接",
5
5
  "author": "lemonade",
6
6
  "license": "MIT",