42 lines
1.5 KiB
Python
42 lines
1.5 KiB
Python
import abc
|
||
from typing import Awaitable, Any
|
||
from asyncio import Queue
|
||
from .platform_metadata import PlatformMetadata
|
||
from .astr_message_event import AstrMessageEvent
|
||
from astrbot.core.message.message_event_result import MessageChain
|
||
from .astr_message_event import MessageSesion
|
||
from astrbot.core.utils.metrics import Metric
|
||
|
||
class Platform(abc.ABC):
|
||
def __init__(self, event_queue: Queue):
|
||
super().__init__()
|
||
# 维护了消息平台的事件队列,EventBus 会从这里取出事件并处理。
|
||
self._event_queue = event_queue
|
||
|
||
@abc.abstractmethod
|
||
def run(self) -> Awaitable[Any]:
|
||
'''
|
||
得到一个平台的运行实例,需要返回一个协程对象。
|
||
'''
|
||
raise NotImplementedError
|
||
|
||
@abc.abstractmethod
|
||
def meta(self) -> PlatformMetadata:
|
||
'''
|
||
得到一个平台的元数据。
|
||
'''
|
||
raise NotImplementedError
|
||
|
||
async def send_by_session(self, session: MessageSesion, message_chain: MessageChain) -> Awaitable[Any]:
|
||
'''
|
||
通过会话发送消息。该方法旨在让插件能够直接通过**可持久化的会话数据**发送消息,而不需要保存 event 对象。
|
||
|
||
异步方法。
|
||
'''
|
||
await Metric.upload(msg_event_tick = 1, adapter_name = self.meta().name)
|
||
|
||
def commit_event(self, event: AstrMessageEvent):
|
||
'''
|
||
提交一个事件到事件队列。
|
||
'''
|
||
self._event_queue.put_nowait(event) |