2026-09-17 18:49:22 +08:00

57 lines
1.2 KiB
Go

package feishu_util
import (
"fmt"
"sync"
"ai_script/config"
lark "github.com/larksuite/oapi-sdk-go/v3"
)
var (
clientOnce sync.Once
clientInst *Client
clientErr error
)
// Client 封装飞书 OpenAPI 客户端与应用凭证。
type Client struct {
AppID string
AppSecret string
Lark *lark.Client
}
// NewClient 使用显式凭证创建客户端。
func NewClient(appID, appSecret string) *Client {
return &Client{
AppID: appID,
AppSecret: appSecret,
Lark: lark.NewClient(appID, appSecret),
}
}
// NewClientFromConfig 从项目配置创建客户端。
func NewClientFromConfig(cfg *config.Config) (*Client, error) {
if cfg == nil {
return nil, fmt.Errorf("config 为空")
}
if cfg.Feishu.AppID == "" || cfg.Feishu.AppSecret == "" {
return nil, fmt.Errorf("配置缺少 feishu.app_id / feishu.app_secret")
}
return NewClient(cfg.Feishu.AppID, cfg.Feishu.AppSecret), nil
}
// DefaultClient 懒加载:读取本地 config/config.{APP_ENV}.yaml 并创建单例客户端。
func DefaultClient() (*Client, error) {
clientOnce.Do(func() {
cfg, err := config.Load()
if err != nil {
clientErr = err
return
}
clientInst, clientErr = NewClientFromConfig(cfg)
})
return clientInst, clientErr
}