improve ding adapter

add tests/test_ding.py
add some log
This commit is contained in:
Artin
2020-12-30 18:33:54 +08:00
parent 3cb2b44130
commit 086a998b20
7 changed files with 241 additions and 53 deletions

View File

@ -2,9 +2,8 @@ from enum import Enum
from typing import List, Optional
from typing_extensions import Literal
from pydantic import BaseModel
from pydantic import BaseModel, root_validator
from nonebot.utils import escape_tag
from nonebot.typing import overrides
from nonebot.adapters import Event as BaseEvent
@ -27,27 +26,27 @@ class Event(BaseEvent):
@overrides(BaseEvent)
def get_event_name(self) -> str:
raise ValueError("Event has no type!")
raise ValueError("Event has no name!")
@overrides(BaseEvent)
def get_event_description(self) -> str:
raise ValueError("Event has no type!")
raise ValueError("Event has no description!")
@overrides(BaseEvent)
def get_message(self) -> "Message":
raise ValueError("Event has no type!")
raise ValueError("Event has no message!")
@overrides(BaseEvent)
def get_plaintext(self) -> str:
raise ValueError("Event has no type!")
raise ValueError("Event has no plaintext!")
@overrides(BaseEvent)
def get_user_id(self) -> str:
raise ValueError("Event has no type!")
raise ValueError("Event has no user_id!")
@overrides(BaseEvent)
def get_session_id(self) -> str:
raise ValueError("Event has no type!")
raise ValueError("Event has no session_id!")
@overrides(BaseEvent)
def is_tome(self) -> bool:
@ -82,6 +81,21 @@ class MessageEvent(Event):
sessionWebhookExpiredTime: int
isAdmin: bool
message: Message
@root_validator(pre=True)
def gen_message(cls, values: dict):
assert "msgtype" in values, "msgtype must be specified"
# 其实目前钉钉机器人只能接收到 text 类型的消息
assert values[
"msgtype"] in values, f"{values['msgtype']} must be specified"
content = values[values['msgtype']]['content']
# 如果是被 @,第一个字符将会为空格,移除特殊情况
if content[0] == ' ':
content = content[1:]
values["message"] = content
return values
@overrides(Event)
def get_type(self) -> Literal["message", "notice", "request", "meta_event"]:
return "message"
@ -94,6 +108,10 @@ class MessageEvent(Event):
def get_event_description(self) -> str:
return f'Message[{self.msgtype}] {self.msgId} from {self.senderId} "{self.text.content}"'
@overrides(BaseEvent)
def get_message(self) -> Message:
return self.message
@overrides(BaseEvent)
def get_plaintext(self) -> str:
return self.text.content