Skip to content

Commit 0f6cbfd

Browse files
committed
fix(feishu): resolve merge conflicts and unify bot message fetching
1 parent e7e7306 commit 0f6cbfd

2 files changed

Lines changed: 60 additions & 50 deletions

File tree

internal/channels/feishu/bot_parse.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,11 +225,16 @@ func (c *Channel) buildThreadHistoryContent(ctx context.Context, items []Message
225225
// Resolve mentions in history content
226226
var mentions []mentionInfo
227227
for _, m := range item.Mentions {
228+
name := ""
229+
if c.botOpenID != "" && m.ID == c.botOpenID {
230+
// Bot mention - resolveMentions will strip it if we pass the ID
231+
} else {
232+
name = c.resolveSenderName(ctx, m.ID)
233+
}
228234
mentions = append(mentions, mentionInfo{
229235
Key: m.Key,
230236
OpenID: m.ID,
231-
// Mentions in ListMessages items don't include Name,
232-
// but resolveMentions can still strip the bot mention by ID.
237+
Name: name,
233238
})
234239
}
235240
content = resolveMentions(content, mentions, c.botOpenID)

internal/channels/feishu/larkclient_messaging.go

Lines changed: 53 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -63,54 +63,6 @@ type MessageItem struct {
6363
} `json:"mentions"`
6464
}
6565

66-
func (c *LarkClient) GetMessage(ctx context.Context, messageID string) (*MessageItem, error) {
67-
path := "/open-apis/im/v1/messages/" + messageID
68-
resp, err := c.doJSON(ctx, "GET", path, nil)
69-
if err != nil {
70-
return nil, err
71-
}
72-
if resp.Code != 0 {
73-
return nil, fmt.Errorf("get message: code=%d msg=%s", resp.Code, resp.Msg)
74-
}
75-
var data struct {
76-
Items []MessageItem `json:"items"`
77-
}
78-
if err := json.Unmarshal(resp.Data, &data); err != nil {
79-
return nil, fmt.Errorf("unmarshal MessageItem: %w", err)
80-
}
81-
if len(data.Items) == 0 {
82-
return nil, fmt.Errorf("message %s not found", messageID)
83-
}
84-
return &data.Items[0], nil
85-
}
86-
87-
func (c *LarkClient) ListMessages(ctx context.Context, containerIDType, containerID string, pageSize int, pageToken string) ([]MessageItem, string, error) {
88-
path := fmt.Sprintf("/open-apis/im/v1/messages?container_id_type=%s&container_id=%s",
89-
url.QueryEscape(containerIDType), url.QueryEscape(containerID))
90-
if pageSize > 0 {
91-
path += fmt.Sprintf("&page_size=%d", pageSize)
92-
}
93-
if pageToken != "" {
94-
path += "&page_token=" + pageToken
95-
}
96-
97-
resp, err := c.doJSON(ctx, "GET", path, nil)
98-
if err != nil {
99-
return nil, "", err
100-
}
101-
if resp.Code != 0 {
102-
return nil, "", fmt.Errorf("list messages: code=%d msg=%s", resp.Code, resp.Msg)
103-
}
104-
var data struct {
105-
Items []MessageItem `json:"items"`
106-
PageToken string `json:"page_token"`
107-
HasMore bool `json:"has_more"`
108-
}
109-
if err := json.Unmarshal(resp.Data, &data); err != nil {
110-
return nil, "", fmt.Errorf("unmarshal ListMessages response: %w", err)
111-
}
112-
return data.Items, data.PageToken, nil
113-
}
11466

11567
// --- IM API: Images ---
11668

@@ -167,6 +119,59 @@ func (c *LarkClient) UploadFile(ctx context.Context, data io.Reader, fileName, f
167119

168120
// --- IM API: Get Message ---
169121

122+
// GetMessage retrieves a message by ID.
123+
// Lark API: GET /open-apis/im/v1/messages/{message_id}
124+
func (c *LarkClient) GetMessage(ctx context.Context, messageID string) (*MessageItem, error) {
125+
path := "/open-apis/im/v1/messages/" + messageID
126+
resp, err := c.doJSON(ctx, "GET", path, nil)
127+
if err != nil {
128+
return nil, err
129+
}
130+
if resp.Code != 0 {
131+
return nil, fmt.Errorf("get message: code=%d msg=%s", resp.Code, resp.Msg)
132+
}
133+
var data struct {
134+
Items []MessageItem `json:"items"`
135+
}
136+
if err := json.Unmarshal(resp.Data, &data); err != nil {
137+
return nil, fmt.Errorf("unmarshal MessageItem: %w", err)
138+
}
139+
if len(data.Items) == 0 {
140+
return nil, fmt.Errorf("message %s not found", messageID)
141+
}
142+
return &data.Items[0], nil
143+
}
144+
145+
// ListMessages retrieves all messages from a container (e.g. "thread").
146+
// Lark API: GET /open-apis/im/v1/messages
147+
func (c *LarkClient) ListMessages(ctx context.Context, containerIDType, containerID string, pageSize int, pageToken string) ([]MessageItem, string, error) {
148+
path := fmt.Sprintf("/open-apis/im/v1/messages?container_id_type=%s&container_id=%s",
149+
url.QueryEscape(containerIDType), url.QueryEscape(containerID))
150+
if pageSize > 0 {
151+
path += fmt.Sprintf("&page_size=%d", pageSize)
152+
}
153+
if pageToken != "" {
154+
path += "&page_token=" + pageToken
155+
}
156+
157+
resp, err := c.doJSON(ctx, "GET", path, nil)
158+
if err != nil {
159+
return nil, "", err
160+
}
161+
if resp.Code != 0 {
162+
return nil, "", fmt.Errorf("list messages: code=%d msg=%s", resp.Code, resp.Msg)
163+
}
164+
var data struct {
165+
Items []MessageItem `json:"items"`
166+
PageToken string `json:"page_token"`
167+
HasMore bool `json:"has_more"`
168+
}
169+
if err := json.Unmarshal(resp.Data, &data); err != nil {
170+
return nil, "", fmt.Errorf("unmarshal ListMessages response: %w", err)
171+
}
172+
return data.Items, data.PageToken, nil
173+
}
174+
170175

171176
// --- IM API: Message Resources ---
172177

0 commit comments

Comments
 (0)