28 lines
861 B
Python
28 lines
861 B
Python
from __future__ import annotations
|
|
|
|
from collections.abc import Callable
|
|
from typing import Any
|
|
|
|
PluginHandler = Callable[[dict[str, Any]], dict[str, Any]]
|
|
|
|
|
|
class PluginRegistry:
|
|
def __init__(self) -> None:
|
|
self._handlers: dict[str, PluginHandler] = {}
|
|
|
|
def register(self, plugin_id: str, handler: PluginHandler) -> None:
|
|
self._handlers[plugin_id] = handler
|
|
|
|
def execute(self, plugin_id: str, slots: dict[str, Any]) -> dict[str, Any]:
|
|
handler = self._handlers.get(plugin_id)
|
|
if handler is None:
|
|
return {
|
|
"success": False,
|
|
"message": f"插件 {plugin_id} 未注册。",
|
|
"data": {"plugin_id": plugin_id, "slots": slots},
|
|
}
|
|
return handler(slots)
|
|
|
|
def registered_plugins(self) -> list[str]:
|
|
return sorted(self._handlers.keys())
|