46 lines
1.2 KiB
Go
46 lines
1.2 KiB
Go
package feishu
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"reasonix/internal/bot"
|
|
|
|
larkim "github.com/larksuite/oapi-sdk-go/v3/service/im/v1"
|
|
)
|
|
|
|
// EditMessage 原地编辑一条已发送的消息(Im.Message.Patch,仅对 interactive
|
|
// card 消息有效)。bot 渲染器用它实现回合中的流式输出。
|
|
func (a *adapter) EditMessage(ctx context.Context, messageID string, msg bot.OutboundMessage) error {
|
|
messageID = strings.TrimSpace(messageID)
|
|
if messageID == "" {
|
|
return fmt.Errorf("feishu edit: empty message id")
|
|
}
|
|
content, err := buildMarkdownCard(msg.Text)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
client, err := a.sdkClient()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return withTransientRetry(ctx, a.logger, "patch message", func(ctx context.Context) error {
|
|
req := larkim.NewPatchMessageReqBuilder().
|
|
MessageId(messageID).
|
|
Body(larkim.NewPatchMessageReqBodyBuilder().Content(content).Build()).
|
|
Build()
|
|
resp, err := client.Im.Message.Patch(ctx, req)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if resp == nil {
|
|
return fmt.Errorf("feishu patch error: empty response")
|
|
}
|
|
if !resp.Success() {
|
|
return fmt.Errorf("feishu patch error: %s", feishuCodeError(resp.Code, resp.Msg))
|
|
}
|
|
return nil
|
|
})
|
|
}
|