Add ding adapter

This commit is contained in:
Artin
2020-12-03 00:59:32 +08:00
parent f332199baa
commit edb4458031
11 changed files with 695 additions and 11 deletions

View File

@ -9,9 +9,11 @@ import abc
from functools import reduce, partial
from dataclasses import dataclass, field
from pydantic import BaseModel
from nonebot.config import Config
from nonebot.typing import Driver, Message, WebSocket
from nonebot.typing import Any, Dict, Union, Optional, NoReturn, Callable, Iterable, Awaitable
from nonebot.typing import Any, Dict, Union, Optional, NoReturn, Callable, Iterable, Awaitable, TypeVar, Generic
class BaseBot(abc.ABC):
@ -135,24 +137,27 @@ class BaseBot(abc.ABC):
raise NotImplementedError
class BaseEvent(abc.ABC):
T = TypeVar("T", dict, BaseModel)
class BaseEvent(abc.ABC, Generic[T]):
"""
Event 基类。提供上报信息的关键信息,其余信息可从原始上报消息获取。
"""
def __init__(self, raw_event: dict):
def __init__(self, raw_event: T):
"""
:参数:
* ``raw_event: dict``: 原始上报消息
* ``raw_event: T``: 原始上报消息
"""
self._raw_event = raw_event
self._raw_event: T = raw_event
def __repr__(self) -> str:
return f"<Event {self.self_id}: {self.name} {self.time}>"
@property
def raw_event(self) -> dict:
def raw_event(self) -> T:
"""原始上报消息"""
return self._raw_event
@ -347,17 +352,17 @@ class BaseMessage(list, abc.ABC):
"""消息数组"""
def __init__(self,
message: Union[str, dict, list, BaseMessageSegment,
message: Union[str, dict, list, BaseModel, BaseMessageSegment,
"BaseMessage"] = None,
*args,
**kwargs):
"""
:参数:
* ``message: Union[str, dict, list, MessageSegment, Message]``: 消息内容
* ``message: Union[str, dict, list, BaseModel, MessageSegment, Message]``: 消息内容
"""
super().__init__(*args, **kwargs)
if isinstance(message, (str, dict, list)):
if isinstance(message, (str, dict, list, BaseModel)):
self.extend(self._construct(message))
elif isinstance(message, BaseMessage):
self.extend(message)
@ -448,4 +453,4 @@ class BaseMessage(list, abc.ABC):
return f"{x} {y}" if y.type == "text" else x
plain_text = reduce(_concat, self, "")
return plain_text[1:] if plain_text else plain_text
return plain_text.strip()