import importlib import sys from pathlib import Path class AddonManager: def __init__(self, dp, state, bot): self.dp = dp self.state = state self.bot = bot self.loaded = {} def load(self, name: str): """Загрузить аддон по имени""" if name in self.loaded: return f"Аддон {name} уже загружен" module_path = f"addons.{name}" module = importlib.import_module(module_path) if hasattr(module, "register"): module.register(self.dp, self.state, self.bot) self.loaded[name] = module return f"✅ Аддон {name} подключен" return f"⚠️ У аддона {name} нет функции register" def unload(self, name: str): """Отключить аддон""" module = self.loaded.get(name) if not module: return f"Аддон {name} не загружен" if hasattr(module, "unregister"): module.unregister(self.dp) # Удаляем из sys.modules, чтобы можно было перезагрузить sys.modules.pop(f"addons.{name}", None) self.loaded.pop(name) return f"❌ Аддон {name} отключен" def reload(self, name: str): """Перезагрузить аддон""" self.unload(name) return self.load(name) def list_addons(self): """Возвращает список (имя, состояние) для всех аддонов""" addons_path = Path("addons") result = [] for addon in addons_path.iterdir(): if addon.is_dir() and (addon / "__init__.py").exists(): name = addon.name status = "✅ Загружен" if name in self.loaded else "❌ Выключен" result.append((name, status)) return result