- 基于 Gin 框架搭建 HTTP 服务,接收并处理 Bot 命令请求 - 实现插件化命令系统,支持通过 Plugin 接口扩展新命令 - 内置菜单、启用/禁用、时间查询等基础命令 - 新增图片生成插件,对接 OpenAI Images API - 支持管理员权限控制、命令动态启禁用 - 提供完整配置管理(.env)与 Docker 部署方案
88 lines
1.7 KiB
Go
88 lines
1.7 KiB
Go
package config
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"strconv"
|
|
|
|
"github.com/joho/godotenv"
|
|
)
|
|
|
|
var Cfg Config
|
|
|
|
// API 路径常量
|
|
const (
|
|
ImageGenerationsPath = "/v1/images/generations"
|
|
)
|
|
|
|
type Config struct {
|
|
// Server
|
|
ServerAddr string
|
|
|
|
// OpenAI Image
|
|
OpenAIBaseURL string // API 基础地址,如 https://api.openai.com
|
|
OpenAIAPIKey string
|
|
OpenAIModel string
|
|
RequestTimeout int
|
|
ImageCount int
|
|
ImageOutputDir string
|
|
|
|
// Upload
|
|
UploadURL string
|
|
UploadAPIKey string
|
|
|
|
// Proxy
|
|
Proxy string
|
|
|
|
// Admin
|
|
AdminUsers string
|
|
}
|
|
|
|
func Load(envPath string) error {
|
|
if _, err := os.Stat(envPath); err == nil {
|
|
if err := godotenv.Load(envPath); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
Cfg = Config{
|
|
ServerAddr: getEnv("SERVER_ADDR", "127.0.0.1:8000"),
|
|
OpenAIBaseURL: getEnv("OPENAI_BASE_URL", "https://api.openai.com"),
|
|
OpenAIAPIKey: os.Getenv("OPENAI_API_KEY"),
|
|
OpenAIModel: getEnv("OPENAI_MODEL", "gpt-image-2"),
|
|
RequestTimeout: getEnvInt("REQUEST_TIMEOUT", 120),
|
|
ImageCount: getEnvInt("IMAGE_COUNT", 1),
|
|
ImageOutputDir: getEnv("IMAGE_OUTPUT_DIR", "images"),
|
|
UploadURL: os.Getenv("UPLOAD_URL"),
|
|
UploadAPIKey: os.Getenv("UPLOAD_API_KEY"),
|
|
Proxy: os.Getenv("PROXY"),
|
|
AdminUsers: os.Getenv("ADMIN_USERS"),
|
|
}
|
|
|
|
if Cfg.OpenAIAPIKey == "" {
|
|
log.Println("warn: OPENAI_API_KEY is empty")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func getEnv(key, def string) string {
|
|
if v := os.Getenv(key); v != "" {
|
|
return v
|
|
}
|
|
return def
|
|
}
|
|
|
|
func getEnvInt(key string, def int) int {
|
|
v := os.Getenv(key)
|
|
if v == "" {
|
|
return def
|
|
}
|
|
n, err := strconv.Atoi(v)
|
|
if err != nil {
|
|
log.Printf("warn: invalid int for %s=%q, using default %d", key, v, def)
|
|
return def
|
|
}
|
|
return n
|
|
}
|