diff --git a/mipac/models/note.py b/mipac/models/note.py index 7fccedb7..f24de259 100644 --- a/mipac/models/note.py +++ b/mipac/models/note.py @@ -1,26 +1,21 @@ from __future__ import annotations from datetime import datetime -from typing import TYPE_CHECKING, Any, Literal, Optional, Union +from typing import TYPE_CHECKING, Literal, Optional, Union from typing_extensions import Self -from mipac.core.models.note import RawNote, RawReaction, RawRenote +from mipac.core.models.note import RawReaction, RawRenote from mipac.core.models.poll import RawPoll -from mipac.core.models.reaction import RawNoteReaction -from mipac.core.models.user import RawUser from mipac.exception import NotExistRequiredData from mipac.models.lite.user import UserLite from mipac.types.drive import IDriveFile from mipac.types.emoji import ICustomEmojiLite -from mipac.types.note import INote, IPoll +from mipac.types.note import INote, INoteReaction, IPoll if TYPE_CHECKING: from mipac.actions.note import NoteActions from mipac.manager.client import ClientActions - from mipac.manager.file import MiFile from mipac.manager.reaction import ReactionManager - from mipac.models.drive import File - from mipac.models.emoji import Emoji from mipac.models.user import User __all__ = ( @@ -184,30 +179,6 @@ async def delete(self) -> bool: return await self.__client.note.action.delete(self.__raw_data.id) -class NoteReaction: - def __init__(self, raw_data: RawNoteReaction, *, client: ClientActions): - self.__raw_data = raw_data - self.__client: ClientActions = client - - @property - def id(self) -> str: - return self.__raw_data.id - - @property - def created_at(self) -> datetime: - return self.__raw_data.created_at - - @property - def user(self) -> User: - return self.__client._modeler.create_user_instance( - RawUser(self.__raw_data.user) - ) - - @property - def reaction(self) -> str: - return self.__raw_data.reaction - - class Reaction: def __init__(self, raw_data: RawReaction, *, client: ClientActions): self.__raw_data: RawReaction = raw_data @@ -254,13 +225,57 @@ def action(self) -> ReactionManager: return self.__client.reaction +class NoteReaction: + """ + Attributes + ---------- + id : Optional[str], default=None + created_at : Optional[datetime], default=None + type : Optional[str], default=None + user : Optional[RawUser], default=None + """ + + __slots__ = ( + 'id', + 'created_at', + 'user', + 'type', + '__reaction', + ) + + def __init__(self, reaction: INoteReaction): + self.__reaction: INoteReaction = reaction + + @property + def id(self) -> str | None: + return self.__reaction['id'] + + @property + def created_at(self) -> datetime | None: + return ( + datetime.strptime( + self.__reaction['created_at'], '%Y-%m-%dT%H:%M:%S.%fZ' + ) + if 'created_at' in self.__reaction + else None + ) + + @property + def type(self) -> str | None: + return self.__reaction['type'] + + @property + def user(self) -> UserLite: + return UserLite(self.__reaction['user']) + + class Note: """ Noteモデル Parameters ---------- - raw_data: RawNote + note: INote アクションを持たないNoteクラス client: ClientActions """