@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/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: 'GROUP_AT_MESSAGE_CREATE',
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: 'C2C_MESSAGE_CREATE',
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 && 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
- });
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
- * 发送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>;
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
- * 私聊发送buffer图片
165
+ * 私聊发送
172
166
  * @param id 私信传频道id,公信传子频道id
173
167
  * @param message {消息编号,图片,内容}
174
168
  * @returns
175
169
  */
176
- postDirectImage(guild_id: string, message: {
177
- msg_id: string;
178
- image: Buffer;
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,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
- * 发送buffer图片
250
- * @param id 私信传频道id,公信传子频道id
251
- * @param message {消息编号,图片,内容}
252
- * @param isGroup 是否是群聊
239
+ *
240
+ * @param channel_id
241
+ * @param message
242
+ * @param image
253
243
  * @returns
254
244
  */
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() : '';
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
- * 私聊发送buffer图片
270
+ * 私聊发送
269
271
  * @param id 私信传频道id,公信传子频道id
270
272
  * @param message {消息编号,图片,内容}
271
273
  * @returns
272
274
  */
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() : '';
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 channelsMessages(channel_id, message_id) {
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 };