from typing import List, Optional from app.notifications.base import NotificationProvider from app.config import settings class NotificationManager: _instance = None def __new__(cls): if cls._instance is None: cls._instance = super().__new__(cls) cls._instance._initialized = False return cls._instance def __init__(self): if self._initialized: return self.providers: List[NotificationProvider] = [] self._initialized = True def add_provider(self, provider: NotificationProvider): self.providers.append(provider) async def send_notification(self, title: str, content: str): for provider in self.providers: try: await provider.send(title, content) except Exception: pass def load_providers(self): from app.notifications.serverchan import ServerChanProvider from app.notifications.pushplus import PushPlusProvider if "serverchan" in settings.NOTIFICATION_PROVIDERS: provider = ServerChanProvider() if provider.validate_config(): self.add_provider(provider) if "pushplus" in settings.NOTIFICATION_PROVIDERS: provider = PushPlusProvider() if provider.validate_config(): self.add_provider(provider) notification_manager = NotificationManager()