71 lines
1.9 KiB
Go
71 lines
1.9 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"github.com/kelseyhightower/envconfig"
|
|
)
|
|
|
|
type Config struct {
|
|
Bot BotConfig
|
|
N8n N8nConfig
|
|
Speech SpeechConfig
|
|
Redis RedisConfig
|
|
Server ServerConfig
|
|
Log LogConfig
|
|
}
|
|
|
|
type BotConfig struct {
|
|
Token string `envconfig:"TELEGRAM_BOT_TOKEN" required:"true"`
|
|
Mode string `envconfig:"BOT_MODE" default:"polling"`
|
|
WebhookURL string `envconfig:"TELEGRAM_WEBHOOK_URL"`
|
|
Debug bool `envconfig:"TELEGRAM_DEBUG" default:"false"`
|
|
}
|
|
|
|
type N8nConfig struct {
|
|
WebhookURL string `envconfig:"N8N_WEBHOOK_URL" required:"true"`
|
|
AuthToken string `envconfig:"N8N_AUTH_TOKEN"`
|
|
TimeoutSecs int `envconfig:"N8N_TIMEOUT" default:"30"`
|
|
RetryCount int `envconfig:"N8N_RETRY_COUNT" default:"3"`
|
|
}
|
|
|
|
type SpeechConfig struct {
|
|
Provider string `envconfig:"STT_PROVIDER" default:"openai"`
|
|
OpenAIKey string `envconfig:"OPENAI_API_KEY"`
|
|
WhisperModel string `envconfig:"WHISPER_MODEL" default:"whisper-1"`
|
|
Language string `envconfig:"WHISPER_LANGUAGE" default:""`
|
|
FFmpegPath string `envconfig:"FFMPEG_PATH" default:"ffmpeg"`
|
|
VoiceStorePath string `envconfig:"VOICE_STORE_PATH" default:"/tmp/gw_telegram/voice"`
|
|
}
|
|
|
|
type RedisConfig struct {
|
|
URL string `envconfig:"REDIS_URL" default:"redis://localhost:6379"`
|
|
TTLHours int `envconfig:"SESSION_TTL" default:"24"`
|
|
}
|
|
|
|
type ServerConfig struct {
|
|
Port int `envconfig:"SERVER_PORT" default:"8080"`
|
|
}
|
|
|
|
type LogConfig struct {
|
|
Level string `envconfig:"LOG_LEVEL" default:"info"`
|
|
Format string `envconfig:"LOG_FORMAT" default:"json"`
|
|
}
|
|
|
|
func Load() (*Config, error) {
|
|
var cfg Config
|
|
if err := envconfig.Process("", &cfg); err != nil {
|
|
return nil, fmt.Errorf("load config: %w", err)
|
|
}
|
|
return &cfg, nil
|
|
}
|
|
|
|
func MustLoad() *Config {
|
|
cfg, err := Load()
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "fatal: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
return cfg
|
|
}
|