qq_bot/config/config.go

78 lines
1.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package config
import (
"fmt"
"os"
"sync"
"gopkg.in/yaml.v3"
)
var (
ConfigManager = &Config{}
configLock = &sync.RWMutex{}
configLoaded = false
)
type Config struct {
SteamApiKey string `yaml:"steam_api_key"`
OpenaiApiKey string `yaml:"openai_api_key"`
OpenaiApiBaseUrl string `yaml:"openai_api_base_url"`
OpenaiModelName string `yaml:"openai_model_name"`
OpenaiPrompt string `yaml:"openai_prompt"`
Management struct {
Admin int64 `yaml:"admin"`
ReportGroup int64 `yaml:"report_group"`
ProxyAddr string `yaml:"proxy_addr"`
NapcatWsSrv string `yaml:"napcat_ws_srv"`
NapcatHttpSrv string `yaml:"napcat_http_srv"`
} `yaml:"management"`
WebServer struct {
Token string `yaml:"token"`
} `yaml:"web_server"`
}
// LoadConfig 从指定路径加载配置文件
func (cm *Config) LoadConfig(path string) error {
configLock.Lock()
defer configLock.Unlock()
data, err := os.ReadFile(path)
if err != nil {
return fmt.Errorf("读取配置文件失败: %w", err)
}
err = yaml.Unmarshal(data, cm)
if err != nil {
return fmt.Errorf("解析配置文件失败: %w", err)
}
configLoaded = true
return nil
}
// GetConfig 获取配置实例,如果未加载则尝试从默认路径加载
func (cm *Config) GetConfig() *Config {
configLock.RLock()
if configLoaded {
configLock.RUnlock()
return cm
}
configLock.RUnlock()
// 如果当前实例是ConfigManager但配置尚未加载尝试加载
if cm == ConfigManager {
err := ConfigManager.LoadConfig("config.yml")
if err != nil {
panic(fmt.Errorf("加载默认配置失败: %w", err))
}
}
return cm
}
// ReloadConfig 重新加载配置
func ReloadConfig(path string) error {
return ConfigManager.LoadConfig(path)
}