diff --git a/nonebot_plugin_tetris_stats/db/models.py b/nonebot_plugin_tetris_stats/db/models.py index 37fdfce..b13eb2b 100644 --- a/nonebot_plugin_tetris_stats/db/models.py +++ b/nonebot_plugin_tetris_stats/db/models.py @@ -1,4 +1,5 @@ from datetime import datetime +from typing import Any from nonebot.adapters import Message from nonebot_plugin_orm import Model @@ -13,13 +14,17 @@ from ..utils.typing import CommandType, GameType class PydanticType(TypeDecorator): impl = JSON - def process_bind_param(self, value: BaseModel, dialect: Dialect) -> str: + def process_bind_param(self, value: Any | None, dialect: Dialect) -> str: # noqa: ANN401 # 将 Pydantic 模型实例转换为 JSON - return value.json() + if isinstance(value, BaseModel): + return value.json() + raise TypeError - def process_result_value(self, value: str, dialect: Dialect) -> BaseModel: + def process_result_value(self, value: Any | None, dialect: Dialect) -> BaseModel: # noqa: ANN401 # 将 JSON 转换回 Pydantic 模型实例 - return BaseModel.parse_raw(value) + if isinstance(value, str | bytes): + return BaseModel.parse_raw(value) + raise TypeError class Bind(MappedAsDataclass, Model): diff --git a/nonebot_plugin_tetris_stats/game_data_processor/schemas.py b/nonebot_plugin_tetris_stats/game_data_processor/schemas.py index 4327a79..752c06e 100644 --- a/nonebot_plugin_tetris_stats/game_data_processor/schemas.py +++ b/nonebot_plugin_tetris_stats/game_data_processor/schemas.py @@ -1,5 +1,4 @@ from abc import ABC, abstractmethod -from typing import Self from pydantic import BaseModel @@ -7,8 +6,10 @@ from pydantic import BaseModel class BaseUser(ABC, BaseModel): """游戏用户""" - def __eq__(self, __value: Self) -> bool: - return self.unique_identifier == __value.unique_identifier + def __eq__(self, __value: object) -> bool: + if isinstance(__value, BaseUser): + return self.unique_identifier == __value.unique_identifier + return False @property @abstractmethod