Skip to content
This repository was archived by the owner on Feb 20, 2024. It is now read-only.

Commit 3074760

Browse files
➖ 移除 betterproto 依赖
1 parent 9278047 commit 3074760

12 files changed

+314
-658
lines changed

nonebot/adapters/villa/adapter.py

+15-16
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@
2626
from .event import (
2727
Event,
2828
event_classes,
29-
pre_handle_event_websocket,
30-
pre_handle_webhook_event,
3129
)
3230
from .exception import ApiNotAvailable, DisconnectError, ReconnectError
3331
from .models import WebsocketInfo
@@ -41,8 +39,8 @@
4139
Logout,
4240
LogoutReply,
4341
Payload,
44-
RobotEvent,
4542
Shutdown,
43+
proto_to_event_data,
4644
)
4745
from .utils import API, log
4846

@@ -113,7 +111,7 @@ async def _handle_http(self, request: Request) -> Response:
113111
try:
114112
event = parse_obj_as(
115113
event_classes,
116-
pre_handle_webhook_event(payload_data),
114+
payload_data,
117115
)
118116
bot_id = event.bot_id
119117
if (bot := self.bots.get(bot_id, None)) is None:
@@ -300,12 +298,12 @@ async def _login(
300298
):
301299
try:
302300
login = Login(
303-
ws_info.uid,
304-
str(bot_config.test_villa_id)
301+
uid=ws_info.uid,
302+
token=str(bot_config.test_villa_id)
305303
+ f".{bot.bot_secret_encrypt}.{bot.self_id}",
306-
ws_info.platform,
307-
ws_info.app_id,
308-
ws_info.device_id,
304+
platform=ws_info.platform,
305+
app_id=ws_info.app_id,
306+
device_id=ws_info.device_id,
309307
)
310308
log("TRACE", f"Sending Login {escape_tag(repr(login))}")
311309
await ws.send_bytes(login.to_bytes_package(bot._ws_squence))
@@ -359,7 +357,9 @@ async def _heartbeat(self, bot: Bot, ws: WebSocket):
359357
log("TRACE", f"Heartbeat {timestamp}")
360358
try:
361359
await ws.send_bytes(
362-
HeartBeat(timestamp).to_bytes_package(bot._ws_squence),
360+
HeartBeat(client_timestamp=timestamp).to_bytes_package(
361+
bot._ws_squence,
362+
),
363363
)
364364
bot._ws_squence += 1
365365
except Exception as e:
@@ -390,25 +390,24 @@ async def receive_payload(ws: WebSocket):
390390
payload = Payload.from_bytes(await ws.receive_bytes())
391391
if payload.biz_type in {BizType.P_LOGIN, BizType.P_LOGOUT, BizType.P_HEARTBEAT}:
392392
if payload.biz_type == BizType.P_LOGIN:
393-
payload = LoginReply.FromString(payload.body_data)
393+
payload = LoginReply.from_proto(payload.body_data)
394394
elif payload.biz_type == BizType.P_LOGOUT:
395-
payload = LogoutReply.FromString(payload.body_data)
395+
payload = LogoutReply.from_proto(payload.body_data)
396396
else:
397-
payload = HeartBeatReply.FromString(payload.body_data)
397+
payload = HeartBeatReply.from_proto(payload.body_data)
398398
if payload.code != 0:
399399
if isinstance(payload, LogoutReply):
400400
log("WARNING", f"Error when logout from server: {payload}")
401401
return payload
402402
raise ReconnectError(payload)
403403
elif payload.biz_type == BizType.P_KICK_OFF:
404-
payload = KickOff.FromString(payload.body_data)
404+
payload = KickOff.from_proto(payload.body_data)
405405
elif payload.biz_type == BizType.SHUTDOWN:
406406
payload = Shutdown()
407407
elif payload.biz_type == BizType.EVENT:
408-
event_data = RobotEvent.FromString(payload.body_data)
409408
return parse_obj_as(
410409
event_classes,
411-
pre_handle_event_websocket(event_data),
410+
proto_to_event_data(payload.body_data),
412411
)
413412
else:
414413
raise ReconnectError

nonebot/adapters/villa/event.py

+18-27
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from dataclasses import asdict
21
from datetime import datetime
32
from enum import IntEnum
43
import json
@@ -8,12 +7,11 @@
87
from nonebot.adapters import Event as BaseEvent
98
from nonebot.utils import escape_tag
109

11-
import betterproto
1210
from pydantic import Field, root_validator
1311

1412
from .message import Message, MessageSegment
1513
from .models import MessageContentInfoGet, QuoteMessage, Robot
16-
from .payload import RobotEvent
14+
from .utils import pascal_to_snake
1715

1816

1917
class EventType(IntEnum):
@@ -53,6 +51,23 @@ class Event(BaseEvent):
5351
send_at: int
5452
"""事件回调时间"""
5553

54+
@root_validator(pre=True)
55+
@classmethod
56+
def pre_handle(cls, data: Dict[str, Any]):
57+
extend_data = data.pop("extend_data")
58+
event_type = data["type"] = EventType(data["type"])
59+
event_name = event_type.name
60+
event_data = extend_data.pop("EventData", extend_data)
61+
if (
62+
event_name in event_data
63+
or (event_name := pascal_to_snake(event_name)) in event_data
64+
):
65+
data.update(event_data[event_name])
66+
else:
67+
raise ValueError(f"Cannot find event data for event type: {event_name}")
68+
69+
return data
70+
5671
@property
5772
def bot_id(self) -> str:
5873
"""机器人ID"""
@@ -485,30 +500,6 @@ class ClickMsgComponentEvent(NoticeEvent):
485500
]
486501

487502

488-
def pre_handle_webhook_event(payload: Dict[str, Any]):
489-
if (event_type := EventType._value2member_map_.get(payload["type"])) is None:
490-
raise ValueError(
491-
f"Unknown event type: {payload['type']} data={escape_tag(str(payload))}",
492-
)
493-
event_name = event_type.name
494-
if event_name not in payload["extend_data"]["EventData"]:
495-
raise ValueError("Cannot find event data for event type: {event_name}")
496-
payload.update(payload["extend_data"]["EventData"][event_name])
497-
payload.pop("extend_data")
498-
return payload
499-
500-
501-
def pre_handle_event_websocket(payload: RobotEvent):
502-
event_data = asdict(payload)
503-
event_data.update(
504-
event_data["extend_data"][
505-
betterproto.Casing.SNAKE(EventType(event_data["type"]).name)
506-
],
507-
)
508-
event_data.pop("extend_data")
509-
return event_data
510-
511-
512503
__all__ = [
513504
"Event",
514505
"NoticeEvent",

nonebot/adapters/villa/exception.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
)
1010

1111
if TYPE_CHECKING:
12-
from betterproto import Message
12+
from pydantic import BaseModel
1313

1414
from .api import ApiResponse
1515

@@ -24,7 +24,7 @@ class NoLogException(BaseNoLogException, VillaAdapterException):
2424

2525

2626
class ReconnectError(VillaAdapterException):
27-
def __init__(self, payload: Optional["Message"] = None):
27+
def __init__(self, payload: Optional["BaseModel"] = None):
2828
super().__init__()
2929
self.payload = payload
3030

0 commit comments

Comments
 (0)