57 lines
1.2 KiB
Go
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
|
|
}
|