106 lines
4.0 KiB
Python
106 lines
4.0 KiB
Python
"""NapCat 运行时组件构建器。"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any, Awaitable, Callable, Coroutine
|
|
|
|
from ..codecs.inbound import NapCatInboundCodec
|
|
from ..codecs.notice import NapCatNoticeCodec
|
|
from ..codecs.outbound import NapCatOutboundCodec
|
|
from ..filters import NapCatChatFilter
|
|
from ..heartbeat_monitor import NapCatHeartbeatMonitor
|
|
from ..runtime_state import NapCatRuntimeStateManager
|
|
from ..services import (
|
|
NapCatActionService,
|
|
NapCatBanStateStore,
|
|
NapCatBanTracker,
|
|
NapCatHistoryRecoveryStore,
|
|
NapCatOfficialBotGuard,
|
|
NapCatQueryService,
|
|
)
|
|
from ..transport import NapCatTransportClient
|
|
from .bundle import NapCatRuntimeBundle
|
|
|
|
|
|
class NapCatRuntimeBuilder:
|
|
"""按固定依赖图构建 NapCat 运行时组件。"""
|
|
|
|
def __init__(self, gateway_capability: Any, logger: Any, gateway_name: str) -> None:
|
|
"""初始化运行时构建器。
|
|
|
|
Args:
|
|
gateway_capability: SDK 提供的消息网关能力对象。
|
|
logger: 插件日志对象。
|
|
gateway_name: 当前消息网关名称。
|
|
"""
|
|
self._gateway_capability = gateway_capability
|
|
self._logger = logger
|
|
self._gateway_name = gateway_name
|
|
|
|
def build(
|
|
self,
|
|
on_connection_opened: Callable[[], Coroutine[Any, Any, None]],
|
|
on_connection_closed: Callable[[], Coroutine[Any, Any, None]],
|
|
on_payload: Callable[[dict[str, Any]], Coroutine[Any, Any, None]],
|
|
on_natural_lift: Callable[[dict[str, Any]], Awaitable[None]],
|
|
on_heartbeat_timeout: Callable[[str], Awaitable[None]],
|
|
) -> NapCatRuntimeBundle:
|
|
"""创建一套完整的运行时组件。
|
|
|
|
Args:
|
|
on_connection_opened: 连接建立回调。
|
|
on_connection_closed: 连接断开回调。
|
|
on_payload: 非 echo 载荷回调。
|
|
on_natural_lift: 自然解除禁言回调。
|
|
on_heartbeat_timeout: 心跳超时回调。
|
|
|
|
Returns:
|
|
NapCatRuntimeBundle: 已完成依赖注入的运行时组件集合。
|
|
"""
|
|
chat_filter = NapCatChatFilter(self._logger)
|
|
transport = NapCatTransportClient(
|
|
logger=self._logger,
|
|
on_connection_opened=on_connection_opened,
|
|
on_connection_closed=on_connection_closed,
|
|
on_payload=on_payload,
|
|
)
|
|
action_service = NapCatActionService(self._logger, transport)
|
|
query_service = NapCatQueryService(action_service, self._logger)
|
|
ban_state_store = NapCatBanStateStore(self._logger)
|
|
history_recovery_store = NapCatHistoryRecoveryStore(self._logger)
|
|
inbound_codec = NapCatInboundCodec(self._logger, query_service)
|
|
notice_codec = NapCatNoticeCodec(self._logger, query_service)
|
|
runtime_state = NapCatRuntimeStateManager(
|
|
gateway_capability=self._gateway_capability,
|
|
logger=self._logger,
|
|
gateway_name=self._gateway_name,
|
|
)
|
|
ban_tracker = NapCatBanTracker(
|
|
logger=self._logger,
|
|
query_service=query_service,
|
|
on_natural_lift=on_natural_lift,
|
|
state_store=ban_state_store,
|
|
)
|
|
heartbeat_monitor = NapCatHeartbeatMonitor(
|
|
logger=self._logger,
|
|
on_timeout=on_heartbeat_timeout,
|
|
)
|
|
official_bot_guard = NapCatOfficialBotGuard(self._logger, query_service)
|
|
outbound_codec = NapCatOutboundCodec()
|
|
|
|
return NapCatRuntimeBundle(
|
|
action_service=action_service,
|
|
ban_state_store=ban_state_store,
|
|
ban_tracker=ban_tracker,
|
|
chat_filter=chat_filter,
|
|
heartbeat_monitor=heartbeat_monitor,
|
|
history_recovery_store=history_recovery_store,
|
|
inbound_codec=inbound_codec,
|
|
notice_codec=notice_codec,
|
|
official_bot_guard=official_bot_guard,
|
|
outbound_codec=outbound_codec,
|
|
query_service=query_service,
|
|
runtime_state=runtime_state,
|
|
transport=transport,
|
|
)
|