11package main
22
33import (
4+ "fmt"
45 "os"
56 "time"
67
@@ -9,31 +10,35 @@ import (
910)
1011
1112type Config struct {
12- Recognizer string `yaml:"recognizer" default:"sber"`
13- Telegram struct {
14- Token string `yaml:"token"`
15- } `yaml:"telegram"`
16- Max struct {
17- Token string `yaml:"token"`
18- } `yaml:"max"`
19- Sber struct {
20- Tokens []struct {
21- Name string `yaml:"name"`
22- ClientID string `yaml:"client_id"`
23- ClientSecret string `yaml:"client_secret"`
24- Cooldown time.Duration `yaml:"cooldown"`
25- Limit time.Duration `yaml:"limit"`
26- } `yaml:"tokens"`
27- } `yaml:"sber"`
28- Openrouter ConfigOpenrouter `yaml:"openrouter"`
29- Prompts ConfigPrompts `yaml:"prompts"`
30- Messages ConfigMessages `yaml:"messages"`
31- RateLimit ConfigRateLimit `yaml:"rate_limit"`
32- NumWorkers int `yaml:"num_workers" default:"2"`
33- WaitOnError time.Duration `yaml:"wait_on_error" default:"3s"`
34- FFmpegPath string `yaml:"ffmpeg_path"`
35- SaveDebugMedia bool `yaml:"save_debug_media" default:"false"`
36- StateFile string `yaml:"state_file"`
13+ Recognizer string `yaml:"recognizer" default:"sber"`
14+ Sber ConfigSber `yaml:"sber"`
15+ Openrouter ConfigOpenrouter `yaml:"openrouter"`
16+ Prompts ConfigPrompts `yaml:"prompts"`
17+ Messages ConfigMessages `yaml:"messages"`
18+ RateLimit ConfigRateLimit `yaml:"rate_limit"`
19+ NumWorkers int `yaml:"num_workers" default:"2"`
20+ WaitOnError time.Duration `yaml:"wait_on_error" default:"3s"`
21+ FFmpegPath string `yaml:"ffmpeg_path" default:"ffmpeg"`
22+ SaveDebugMedia bool `yaml:"save_debug_media" default:"false"`
23+ StateFile string `yaml:"state_file"`
24+ Bots map [string ]ConfigBot `yaml:"bots"`
25+ }
26+
27+ type ConfigBot struct {
28+ ID string `yaml:"id"`
29+ Messenger MessengerType `yaml:"messenger"`
30+ Token string `yaml:"token"`
31+ Prompt string `yaml:"prompt"`
32+ }
33+
34+ type ConfigSber struct {
35+ Tokens []struct {
36+ Name string `yaml:"name"`
37+ ClientID string `yaml:"client_id"`
38+ ClientSecret string `yaml:"client_secret"`
39+ Cooldown time.Duration `yaml:"cooldown"`
40+ Limit time.Duration `yaml:"limit"`
41+ } `yaml:"tokens"`
3742}
3843
3944type ConfigOpenrouter struct {
@@ -46,18 +51,17 @@ type ConfigOpenrouter struct {
4651}
4752
4853type ConfigPrompts struct {
49- Prompts struct {
50- SystemPrompt string `yaml:"system"`
51- UserPrompt string `yaml:"user"`
52- } `yaml:"prompts"`
54+ SystemPrompt string `yaml:"system"`
55+ UserPrompt string `yaml:"user"`
5356}
5457
5558type ConfigMessages struct {
56- Listening string `yaml:"listening" default:"Listening"`
57- StartMessage string `yaml:"start" default:"Send me a voice message and I'll transcribe it for you!"`
58- ErrorMessage string `yaml:"error" default:"An error occurred while processing your message. Please try again."`
59- FailureMessage string `yaml:"failure" default:"Failed to transcribe the audio. Please check the audio quality and try again."`
60- RetryMessage string `yaml:"retry" default:"Retrying..."`
59+ Listening string `yaml:"listening" default:"Listening"`
60+ StartMessage string `yaml:"start" default:"Send me a voice message and I'll transcribe it for you!"`
61+ ErrorMessage string `yaml:"error" default:"An error occurred while processing your message. Please try again."`
62+ FailureMessage string `yaml:"failure" default:"Failed to transcribe the audio. Please check the audio quality and try again."`
63+ RetryMessage string `yaml:"retry" default:"Retrying..."`
64+ RateLimitMessage string `yaml:"rate_limit" default:"Rate limit exceeded. Please try again later."`
6165}
6266
6367type ConfigRateLimit struct {
@@ -81,5 +85,18 @@ func loadConfig(filename string) (*Config, error) {
8185 return nil , err
8286 }
8387
88+ // Validate that at least one bot is configured
89+ if len (config .Bots ) == 0 {
90+ return nil , fmt .Errorf ("at least one bot must be configured" )
91+ }
92+
93+ // Fill ID from map keys if not set
94+ for botID , botConfig := range config .Bots {
95+ if botConfig .ID == "" {
96+ botConfig .ID = botID
97+ config .Bots [botID ] = botConfig
98+ }
99+ }
100+
84101 return & config , nil
85102}
0 commit comments