package notifications import ( "stream-bot/internal/audio" // вместо player "stream-bot/internal/db" "sync" ) type Manager struct { mu sync.RWMutex settings map[string]*db.NotificationSetting } func NewManager() (*Manager, error) { m := &Manager{ settings: make(map[string]*db.NotificationSetting), } if err := m.load(); err != nil { return nil, err } return m, nil } func (m *Manager) load() error { settings, err := db.GetAllNotificationSettings() if err != nil { return err } m.mu.Lock() defer m.mu.Unlock() for _, s := range settings { m.settings[s.EventName] = &s } return nil } func (m *Manager) PlayEvent(eventName string) error { m.mu.RLock() setting, ok := m.settings[eventName] m.mu.RUnlock() if !ok || !setting.Enabled || setting.SoundFile == "" { return nil } // Используем audio.PlayWithVolume с громкостью из настроек return audio.PlayWithVolume(setting.SoundFile, setting.Volume) } func (m *Manager) UpdateSetting(ns *db.NotificationSetting) error { if err := db.SaveNotificationSetting(ns); err != nil { return err } m.mu.Lock() m.settings[ns.EventName] = ns m.mu.Unlock() return nil } func (m *Manager) GetAll() []db.NotificationSetting { m.mu.RLock() defer m.mu.RUnlock() result := make([]db.NotificationSetting, 0, len(m.settings)) for _, v := range m.settings { result = append(result, *v) } return result }