package config import ( "fmt" "os" "gopkg.in/yaml.v3" ) type Config struct { Bot BotConfig `yaml:"bot"` Admins []int64 `yaml:"admins"` Channel ChannelConfig `yaml:"channel"` Database DatabaseConfig `yaml:"database"` TOC TOCConfig `yaml:"toc"` } type BotConfig struct { Token string `yaml:"token"` } type ChannelConfig struct { ID int64 `yaml:"id"` } type DatabaseConfig struct { Path string `yaml:"path"` } type TOCConfig struct { DebounceSeconds int `yaml:"debounce_seconds"` CoverImage string `yaml:"cover_image"` // 封面图片路径,留空则不使用图片 } func Load(path string) (*Config, error) { data, err := os.ReadFile(path) if err != nil { return nil, fmt.Errorf("failed to read config file: %w", err) } var cfg Config if err := yaml.Unmarshal(data, &cfg); err != nil { return nil, fmt.Errorf("failed to parse config: %w", err) } if cfg.Bot.Token == "" { return nil, fmt.Errorf("bot token is required") } if cfg.Database.Path == "" { cfg.Database.Path = "./data/bot.db" } if cfg.TOC.DebounceSeconds <= 0 { cfg.TOC.DebounceSeconds = 3 } return &cfg, nil } func (c *Config) IsAdmin(userID int64) bool { for _, id := range c.Admins { if id == userID { return true } } return false } // IsSuperAdmin 检查是否为超级管理员(配置文件中的管理员) func (c *Config) IsSuperAdmin(userID int64) bool { for _, id := range c.Admins { if id == userID { return true } } return false }