37 lines
1.3 KiB
Python
37 lines
1.3 KiB
Python
"""NoneBot 版 BotManager:管理 OneBot 适配器实例。"""
|
|||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from typing import Any
|
||
|
|
|
||
|
|
|
||
|
|
class BotManager:
|
||
|
|
def __init__(self):
|
||
|
|
self._adapters: dict[str, Any] = {}
|
||
|
|
|
||
|
|
def register_adapter(self, adapter: Any, platform_id: str | None = None) -> None:
|
||
|
|
pid = platform_id or getattr(adapter, "platform_id", "onebot") or "onebot"
|
||
|
|
self._adapters[str(pid)] = adapter
|
||
|
|
|
||
|
|
def set_bot_instance(self, bot_instance: Any, platform_id: str | None = None) -> None:
|
||
|
|
"""兼容接口:按平台登记一个适配器。"""
|
||
|
|
pid = platform_id or "onebot"
|
||
|
|
from .adapter import OneBotAdapter
|
||
|
|
self.register_adapter(OneBotAdapter(bot_instance, {"platform_id": pid}), pid)
|
||
|
|
|
||
|
|
def get_adapter(self, platform_id: str | None = None) -> Any | None:
|
||
|
|
if not self._adapters:
|
||
|
|
return None
|
||
|
|
if platform_id and str(platform_id) in self._adapters:
|
||
|
|
return self._adapters[str(platform_id)]
|
||
|
|
return next(iter(self._adapters.values()))
|
||
|
|
|
||
|
|
def get_adapter_platform_id(self, adapter: Any) -> str:
|
||
|
|
return str(getattr(adapter, "platform_id", "onebot"))
|
||
|
|
|
||
|
|
def get_platform_ids(self) -> list[str]:
|
||
|
|
return list(self._adapters.keys())
|
||
|
|
|
||
|
|
def get_platform_count(self) -> int:
|
||
|
|
return len(self._adapters)
|