@satorijs/adapter-lark 3.8.4 → 3.8.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.
package/lib/index.cjs CHANGED
@@ -394,6 +394,24 @@ var LarkMessageEncoder = class extends import_core3.MessageEncoder {
394
394
  async post(data) {
395
395
  try {
396
396
  let resp;
397
+ let quote = this.quote;
398
+ if (!quote) {
399
+ const payload = this.options?.session?.lark;
400
+ if (payload?.type === "im.message.receive_v1" && payload.event.message.thread_id) {
401
+ quote = {
402
+ id: payload.event.message.message_id,
403
+ replyInThread: true
404
+ };
405
+ } else if (payload?.type === "card.action.trigger") {
406
+ const { items: [message] } = await this.bot.internal.getImMessage(payload.event.context.open_message_id);
407
+ if (message?.thread_id) {
408
+ quote = {
409
+ id: payload.event.context.open_message_id,
410
+ replyInThread: true
411
+ };
412
+ }
413
+ }
414
+ }
397
415
  if (this.editMessageIds) {
398
416
  const messageId = this.editMessageIds.pop();
399
417
  if (!messageId) throw new Error("No message to edit");
@@ -403,10 +421,10 @@ var LarkMessageEncoder = class extends import_core3.MessageEncoder {
403
421
  } else {
404
422
  await this.bot.internal.updateImMessage(messageId, data);
405
423
  }
406
- } else if (this.quote?.id) {
407
- resp = await this.bot.internal.replyImMessage(this.quote.id, {
424
+ } else if (quote?.id) {
425
+ resp = await this.bot.internal.replyImMessage(quote.id, {
408
426
  ...data,
409
- reply_in_thread: this.quote.replyInThread
427
+ reply_in_thread: quote.replyInThread
410
428
  });
411
429
  } else {
412
430
  data.receive_id = this.channelId;
@@ -419,8 +437,8 @@ var LarkMessageEncoder = class extends import_core3.MessageEncoder {
419
437
  session.messageId = resp.message_id;
420
438
  session.timestamp = Number(resp.create_time) * 1e3;
421
439
  session.userId = resp.sender.id;
422
- session.channelId = this.channelId;
423
- session.guildId = this.guildId;
440
+ session.channelId = this.session.channelId;
441
+ session.guildId = this.session.guildId;
424
442
  session.app.emit(session, "send", session);
425
443
  this.results.push(session.event.message);
426
444
  } catch (e) {
package/lib/index.d.ts CHANGED
@@ -5,7 +5,7 @@ export { Lark, Lark as Feishu };
5
5
  export default LarkBot;
6
6
  declare module '@satorijs/core' {
7
7
  interface Session {
8
- feishu: Lark.Internal;
9
- lark: Lark.Internal;
8
+ feishu: Lark.Internal & Lark.EventPayload;
9
+ lark: Lark.Internal & Lark.EventPayload;
10
10
  }
11
11
  }
@@ -451,7 +451,7 @@ declare module './internal' {
451
451
  * 获取指定消息的内容
452
452
  * @see https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/get
453
453
  */
454
- getImMessage(message_id: string): Promise<GetImMessageResponse>;
454
+ getImMessage(message_id: string, query?: GetImMessageQuery): Promise<GetImMessageResponse>;
455
455
  /**
456
456
  * 发送应用内加急
457
457
  * @see https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/urgent_app
@@ -5426,6 +5426,8 @@ declare module '.' {
5426
5426
  root_id?: string;
5427
5427
  /** 父消息的id open_message_id */
5428
5428
  parent_id?: string;
5429
+ /** 消息所属的话题 ID */
5430
+ thread_id?: string;
5429
5431
  /** 消息类型 text post card image等等 */
5430
5432
  msg_type?: string;
5431
5433
  /** 消息生成的时间戳(毫秒) */
@@ -16732,6 +16734,17 @@ export interface GetImMessageResourceQuery {
16732
16734
  /** 资源类型,可选"image, file“; image对应消息中的 图片,富文本消息中的图片。 file对应消息中的 文件、音频、视频、(表情包除外) */
16733
16735
  type: string;
16734
16736
  }
16737
+ export interface GetImMessageQuery {
16738
+ /**
16739
+ * 用户 ID 类型
16740
+ *
16741
+ * - `open_id`:标识一个用户在某个应用中的身份。同一个用户在不同应用中的 Open ID 不同。
16742
+ * - `union_id`:标识一个用户在某个应用开发商下的身份。同一用户在同一开发商下的应用中的 Union ID 是相同的,在不同开发商下的应用中的 Union ID 是不同的。通过 Union ID,应用开发商可以把同个用户在多个应用中的身份关联起来。
16743
+ * - `user_id`:标识一个用户在某个租户内的身份。同一个用户在租户 A 和租户 B 内的 User ID 是不同的。在同一个租户内,一个用户的 User ID 在所有应用(包括商店应用)中都保持一致。User ID 主要用于在不同的应用间打通用户数据。
16744
+ * @default 'open_id'
16745
+ */
16746
+ user_id_type?: 'open_id' | 'user_id' | 'union_id';
16747
+ }
16735
16748
  export interface UrgentAppImMessageRequest {
16736
16749
  /** 该字段标识目标用户的id类型 */
16737
16750
  user_id_list: string[];
@@ -16,6 +16,7 @@ declare module '../event' {
16
16
  message_id: string;
17
17
  root_id: string;
18
18
  parent_id: string;
19
+ thread_id: string;
19
20
  create_time: string;
20
21
  chat_id: string;
21
22
  chat_type: string;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@satorijs/adapter-lark",
3
3
  "description": "Lark (飞书) Adapter for Satorijs",
4
- "version": "3.8.4",
4
+ "version": "3.8.6",
5
5
  "type": "module",
6
6
  "main": "lib/index.cjs",
7
7
  "types": "lib/index.d.ts",
@@ -35,10 +35,10 @@
35
35
  ],
36
36
  "devDependencies": {
37
37
  "@cordisjs/plugin-server": "^0.2.5",
38
- "@satorijs/core": "^4.3.3",
38
+ "@satorijs/core": "^4.4.2",
39
39
  "cordis": "^3.18.1"
40
40
  },
41
41
  "peerDependencies": {
42
- "@satorijs/core": "^4.3.3"
42
+ "@satorijs/core": "^4.4.2"
43
43
  }
44
44
  }
package/src/index.ts CHANGED
@@ -9,7 +9,7 @@ export default LarkBot
9
9
 
10
10
  declare module '@satorijs/core' {
11
11
  interface Session {
12
- feishu: Lark.Internal
13
- lark: Lark.Internal
12
+ feishu: Lark.Internal & Lark.EventPayload
13
+ lark: Lark.Internal & Lark.EventPayload
14
14
  }
15
15
  }
package/src/message.ts CHANGED
@@ -16,6 +16,25 @@ export class LarkMessageEncoder<C extends Context = Context> extends MessageEnco
16
16
  async post(data?: any) {
17
17
  try {
18
18
  let resp: Lark.Message
19
+ let quote = this.quote
20
+ if (!quote) {
21
+ const payload = this.options?.session?.lark
22
+ if (payload?.type === 'im.message.receive_v1' && payload.event.message.thread_id) {
23
+ quote = {
24
+ id: payload.event.message.message_id,
25
+ replyInThread: true,
26
+ }
27
+ } else if (payload?.type === 'card.action.trigger') {
28
+ // cannot determine whether the card is in thread or not
29
+ const { items: [message] } = await this.bot.internal.getImMessage(payload.event.context.open_message_id)
30
+ if (message?.thread_id) {
31
+ quote = {
32
+ id: payload.event.context.open_message_id,
33
+ replyInThread: true,
34
+ }
35
+ }
36
+ }
37
+ }
19
38
  if (this.editMessageIds) {
20
39
  const messageId = this.editMessageIds.pop()
21
40
  if (!messageId) throw new Error('No message to edit')
@@ -25,10 +44,10 @@ export class LarkMessageEncoder<C extends Context = Context> extends MessageEnco
25
44
  } else {
26
45
  await this.bot.internal.updateImMessage(messageId, data)
27
46
  }
28
- } else if (this.quote?.id) {
29
- resp = await this.bot.internal.replyImMessage(this.quote.id, {
47
+ } else if (quote?.id) {
48
+ resp = await this.bot.internal.replyImMessage(quote.id, {
30
49
  ...data,
31
- reply_in_thread: this.quote.replyInThread,
50
+ reply_in_thread: quote.replyInThread,
32
51
  })
33
52
  } else {
34
53
  data.receive_id = this.channelId
@@ -41,8 +60,8 @@ export class LarkMessageEncoder<C extends Context = Context> extends MessageEnco
41
60
  session.messageId = resp.message_id
42
61
  session.timestamp = Number(resp.create_time) * 1000
43
62
  session.userId = resp.sender.id
44
- session.channelId = this.channelId
45
- session.guildId = this.guildId
63
+ session.channelId = this.session.channelId
64
+ session.guildId = this.session.guildId
46
65
  session.app.emit(session, 'send', session)
47
66
  this.results.push(session.event.message)
48
67
  } catch (e) {
package/src/types/api.ts CHANGED
@@ -451,7 +451,7 @@ declare module './internal' {
451
451
  * 获取指定消息的内容
452
452
  * @see https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/get
453
453
  */
454
- getImMessage(message_id: string): Promise<GetImMessageResponse>
454
+ getImMessage(message_id: string, query?: GetImMessageQuery): Promise<GetImMessageResponse>
455
455
  /**
456
456
  * 发送应用内加急
457
457
  * @see https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/im-v1/message/urgent_app
@@ -5428,6 +5428,8 @@ declare module '.' {
5428
5428
  root_id?: string
5429
5429
  /** 父消息的id open_message_id */
5430
5430
  parent_id?: string
5431
+ /** 消息所属的话题 ID */
5432
+ thread_id?: string
5431
5433
  /** 消息类型 text post card image等等 */
5432
5434
  msg_type?: string
5433
5435
  /** 消息生成的时间戳(毫秒) */
@@ -16752,6 +16754,17 @@ export interface GetImMessageResourceQuery {
16752
16754
  /** 资源类型,可选"image, file“; image对应消息中的 图片,富文本消息中的图片。 file对应消息中的 文件、音频、视频、(表情包除外) */
16753
16755
  type: string
16754
16756
  }
16757
+ export interface GetImMessageQuery {
16758
+ /**
16759
+ * 用户 ID 类型
16760
+ *
16761
+ * - `open_id`:标识一个用户在某个应用中的身份。同一个用户在不同应用中的 Open ID 不同。
16762
+ * - `union_id`:标识一个用户在某个应用开发商下的身份。同一用户在同一开发商下的应用中的 Union ID 是相同的,在不同开发商下的应用中的 Union ID 是不同的。通过 Union ID,应用开发商可以把同个用户在多个应用中的身份关联起来。
16763
+ * - `user_id`:标识一个用户在某个租户内的身份。同一个用户在租户 A 和租户 B 内的 User ID 是不同的。在同一个租户内,一个用户的 User ID 在所有应用(包括商店应用)中都保持一致。User ID 主要用于在不同的应用间打通用户数据。
16764
+ * @default 'open_id'
16765
+ */
16766
+ user_id_type?: 'open_id' | 'user_id' | 'union_id'
16767
+ }
16755
16768
  export interface UrgentAppImMessageRequest {
16756
16769
  /** 该字段标识目标用户的id类型 */
16757
16770
  user_id_list: string[]
@@ -18,6 +18,7 @@ declare module '../event' {
18
18
  message_id: string
19
19
  root_id: string
20
20
  parent_id: string
21
+ thread_id: string
21
22
  create_time: string
22
23
  chat_id: string
23
24
  chat_type: string