diff --git a/mipac/models/__init__.py b/mipac/models/__init__.py index ad5a7de..80439e9 100644 --- a/mipac/models/__init__.py +++ b/mipac/models/__init__.py @@ -2,8 +2,9 @@ from .chat import Chat from .drive import File, Folder, Properties from .emoji import Emoji from .instance import Instance, InstanceMeta -from .note import Follow, Header, Note, NoteReaction, Poll, Reaction, Renote +from .note import Follow, Header, Note, NoteReaction, Poll, Renote from .user import Followee, FollowRequest, User +from .notification import Reaction __all__ = ( 'Chat', diff --git a/mipac/models/note.py b/mipac/models/note.py index f24de25..d1dc2ef 100644 --- a/mipac/models/note.py +++ b/mipac/models/note.py @@ -4,24 +4,22 @@ from datetime import datetime from typing import TYPE_CHECKING, Literal, Optional, Union from typing_extensions import Self -from mipac.core.models.note import RawReaction, RawRenote +from mipac.core.models.note import RawRenote from mipac.core.models.poll import RawPoll -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, INoteReaction, IPoll +from mipac.exception import NotExistRequiredData if TYPE_CHECKING: from mipac.actions.note import NoteActions from mipac.manager.client import ClientActions - from mipac.manager.reaction import ReactionManager from mipac.models.user import User + from mipac.types.drive import IDriveFile + from mipac.types.emoji import ICustomEmojiLite + from mipac.types.note import INote, INoteReaction, IPoll __all__ = ( 'Note', 'Poll', - 'Reaction', 'Follow', 'Header', 'Renote', @@ -179,52 +177,6 @@ class Renote: return await self.__client.note.action.delete(self.__raw_data.id) -class Reaction: - def __init__(self, raw_data: RawReaction, *, client: ClientActions): - self.__raw_data: RawReaction = raw_data - self.__client: ClientActions = client - - @property - def id(self) -> Optional[str]: - return self.__raw_data.id - - @property - def created_at(self) -> Optional[datetime]: - return self.__raw_data.created_at - - @property - def type(self) -> Optional[str]: - return self.__raw_data.type - - @property - def is_read(self) -> bool: - return self.__raw_data.is_read - - @property - def user(self) -> Optional[User]: - return ( - self.__client._modeler.create_user_instance(self.__raw_data.user) - if self.__raw_data.user - else None - ) - - @property - def note(self) -> Optional[Note]: - return ( - Note(self.__raw_data.note, client=self.__client) - if self.__raw_data.note - else None - ) - - @property - def reaction(self) -> str: - return self.__raw_data.reaction - - @property # TODO: 修正 - def action(self) -> ReactionManager: - return self.__client.reaction - - class NoteReaction: """ Attributes diff --git a/mipac/models/notification.py b/mipac/models/notification.py new file mode 100644 index 0000000..23b3f30 --- /dev/null +++ b/mipac/models/notification.py @@ -0,0 +1,52 @@ +from __future__ import annotations +from datetime import datetime +from typing import TYPE_CHECKING +from mipac.manager.client import ClientActions +from mipac.manager.reaction import ReactionManager +from mipac.models.lite.user import UserLite +from mipac.models.note import Note + +if TYPE_CHECKING: + from mipac.types.notification import IReactionNf + + +class Reaction: + def __init__( + self, reaction: IReactionNf, *, client: ClientActions + ) -> None: + self.__reaction: IReactionNf = reaction + self.__client: ClientActions = client + + @property + def id(self) -> str: + return self.__reaction['id'] + + @property + def created_at(self) -> datetime: + return datetime.strptime( + self.__reaction['created_at'], '%Y-%m-%dT%H:%M:%S.%fZ' + ) + + @property + def type(self) -> str: + return self.__reaction['type'] + + @property + def is_read(self) -> bool: + return self.__reaction['is_read'] + + @property + def user(self) -> UserLite: + return UserLite(self.__reaction['user']) + + @property + def note(self) -> Note: + return Note(self.__reaction['note'], client=self.__client) + + @property + def reaction(self) -> str: + return self.__reaction['reaction'] + + @property + def action(self) -> ReactionManager: + return self.__client.reaction