✨ feat(core): 初始化 Bot 命令处理服务器
- 基于 Gin 框架搭建 HTTP 服务,接收并处理 Bot 命令请求 - 实现插件化命令系统,支持通过 Plugin 接口扩展新命令 - 内置菜单、启用/禁用、时间查询等基础命令 - 新增图片生成插件,对接 OpenAI Images API - 支持管理员权限控制、命令动态启禁用 - 提供完整配置管理(.env)与 Docker 部署方案
This commit is contained in:
87
config/config.go
Normal file
87
config/config.go
Normal file
@@ -0,0 +1,87 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user