@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/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, createResult, ResultCode } from 'alemonjs';
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: 'GROUP_AT_MESSAGE_CREATE',
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: 'C2C_MESSAGE_CREATE',
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 && cbp.onapis(async (data, consume) => {
401
- const key = data.payload?.key;
402
- if (client[key]) {
403
- // 如果 client 上有对应的 key,直接调用。
404
- const params = data.payload.params;
405
- const res = await client[key](...params);
406
- consume([createResult(ResultCode.Ok, '请求完成', res)]);
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
- * 发送buffer图片
159
- * @param id 私信传频道id,公信传子频道id
160
- * @param message {消息编号,图片,内容}
161
- * @param isGroup 是否是群聊
148
+ *
149
+ * @param channel_id
150
+ * @param message
151
+ * @param image
162
152
  * @returns
163
153
  */
164
- postImage(channel_id: string, message: {
165
- msg_id: string;
166
- image: Buffer;
154
+ channelsMessages(channel_id: string, message: {
167
155
  content?: string;
168
- name?: string;
169
- }): Promise<any>;
170
- /**
171
- * 私聊发送buffer图片
172
- * @param id 私信传频道id,公信传子频道id
173
- * @param message {消息编号,图片,内容}
174
- * @returns
175
- */
176
- postDirectImage(guild_id: string, message: {
177
- msg_id: string;
178
- image: Buffer;
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
- name?: string;
181
- }): Promise<any>;
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
- channelsMessages(channel_id: string, message_id: string): Promise<any>;
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
- * 发送buffer图片
250
- * @param id 私信传频道id,公信传子频道id
251
- * @param message {消息编号,图片,内容}
252
- * @param isGroup 是否是群聊
235
+ *
236
+ * @param channel_id
237
+ * @param message
238
+ * @param image
253
239
  * @returns
254
240
  */
255
- async postImage(channel_id, message) {
256
- const formdata = await this.createFrom(message.image, message.msg_id, message.content, message.name);
257
- const dary = formdata != false ? formdata.getBoundary() : '';
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
- * 私聊发送buffer图片
269
- * @param id 私信传频道id,公信传子频道id
270
- * @param message {消息编号,图片,内容}
271
- * @returns
272
- */
273
- async postDirectImage(guild_id, message) {
274
- const formdata = await this.createFrom(message.image, message.msg_id, message.content, message.name);
275
- const dary = formdata != false ? formdata.getBoundary() : '';
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 channelsMessages(channel_id, message_id) {
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 };