diff --git a/mipac/actions/reaction.py b/mipac/actions/reaction.py index 11977ab..e348a74 100644 --- a/mipac/actions/reaction.py +++ b/mipac/actions/reaction.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, override from mipac.abstract.action import AbstractAction from mipac.http import HTTPClient, Route @@ -15,13 +15,13 @@ if TYPE_CHECKING: from mipac.manager.client import ClientManager -class ReactionActions(AbstractAction): +class ClientReactionActions(AbstractAction): def __init__(self, note_id: str | None = None, *, session: HTTPClient, client: ClientManager): self.__note_id: str | None = note_id self.__session: HTTPClient = session self.__client: ClientManager = client - async def add(self, reaction: str, note_id: str | None = None) -> bool: + async def add(self, reaction: str, *, note_id: str | None = None) -> bool: """Add reaction to note Endpoint: `/api/notes/reactions/create` @@ -46,7 +46,7 @@ class ReactionActions(AbstractAction): res: bool = await self.__session.request(route, json=data, auth=True, lower=True) return bool(res) - async def remove(self, note_id: str | None = None) -> bool: + async def remove(self, *, note_id: str | None = None) -> bool: """Remove reaction from note Endpoint: `/api/notes/reactions/delete` @@ -71,12 +71,12 @@ class ReactionActions(AbstractAction): @cache(group="get_note_reaction") async def get_reactions( self, - note_id: str | None = None, - reaction: str | None = None, - *, + type: str | None = None, limit: int = 10, since_id: str | None = None, until_id: str | None = None, + *, + note_id: str | None = None, ) -> list[NoteReaction]: note_id = note_id or self.__note_id @@ -87,7 +87,7 @@ class ReactionActions(AbstractAction): { "noteId": note_id, "limit": limit, - "type": reaction, + "type": type, "sinceId": since_id, "untilId": until_id, } @@ -103,15 +103,54 @@ class ReactionActions(AbstractAction): @cache(group="get_note_reaction", override=True) async def fetch_reactions( self, - reaction: str | None = None, - note_id: str | None = None, - *, + type: str | None = None, limit: int = 10, since_id: str | None = None, until_id: str | None = None, + *, + note_id: str | None = None, ) -> list[NoteReaction]: return await self.get_reactions( - reaction, note_id, limit=limit, since_id=since_id, until_id=until_id + type=type, note_id=note_id, limit=limit, since_id=since_id, until_id=until_id + ) + + +class ReactionActions(ClientReactionActions): + def __init__(self, *, session: HTTPClient, client: ClientManager): + super().__init__(session=session, client=client) + + @override + async def add(self, note_id: str, reaction: str): + return await super().add(reaction=reaction, note_id=note_id) + + @override + async def remove(self, note_id: str): + return await super().remove(note_id=note_id) + + @override + async def get_reactions( + self, + note_id: str, + type: str | None = None, + limit: int = 10, + since_id: str | None = None, + until_id: str | None = None, + ): + return await super().get_reactions( + type=type, limit=limit, since_id=since_id, until_id=until_id, note_id=note_id + ) + + @override + async def fetch_reactions( + self, + note_id: str, + type: str | None = None, + limit: int = 10, + since_id: str | None = None, + until_id: str | None = None, + ): + return await super().fetch_reactions( + type=type, limit=limit, since_id=since_id, until_id=until_id, note_id=note_id ) async def get_emoji_list(self) -> list[CustomEmoji]: diff --git a/mipac/manager/note.py b/mipac/manager/note.py index 8ebd291..c02b738 100644 --- a/mipac/manager/note.py +++ b/mipac/manager/note.py @@ -7,7 +7,7 @@ from mipac.actions.note import ClientNoteActions, NoteActions from mipac.http import HTTPClient from mipac.manager.favorite import ClientFavoriteManager, FavoriteManager from mipac.manager.poll import ClientPollManager, PollManager -from mipac.manager.reaction import ReactionManager +from mipac.manager.reaction import ClientReactionManager, ReactionManager if TYPE_CHECKING: from mipac.manager.client import ClientManager @@ -18,7 +18,7 @@ class ClientNoteManager(AbstractManager): self.__note_id = note_id self.__session: HTTPClient = session self.__client: ClientManager = client - self.reaction: ReactionManager = ReactionManager( + self.reaction: ClientReactionManager = ClientReactionManager( note_id=note_id, session=session, client=client ) self.favorite = ClientFavoriteManager(note_id=note_id, session=session, client=client) @@ -42,9 +42,7 @@ class NoteManager(AbstractManager): self.__note_id: str | None = note_id self.__session: HTTPClient = session self.__client: ClientManager = client - self.reaction: ReactionManager = ReactionManager( - note_id=note_id, session=session, client=client - ) + self.reaction: ReactionManager = ReactionManager(session=session, client=client) self.favorite = FavoriteManager(note_id=note_id, session=session, client=client) self.poll: PollManager = PollManager(note_id=note_id, session=session, client=client) self.__action: NoteActions = NoteActions( diff --git a/mipac/manager/reaction.py b/mipac/manager/reaction.py index 8f98727..0ebeb4d 100644 --- a/mipac/manager/reaction.py +++ b/mipac/manager/reaction.py @@ -3,20 +3,41 @@ from __future__ import annotations from typing import TYPE_CHECKING from mipac.abstract.manager import AbstractManager -from mipac.actions.reaction import ReactionActions +from mipac.actions.reaction import ClientReactionActions, ReactionActions from mipac.http import HTTPClient if TYPE_CHECKING: from mipac.client import ClientManager +class ClientReactionManager(AbstractManager): + def __init__(self, note_id: str | None = None, *, session: HTTPClient, client: ClientManager): + self.__note_id: str | None = note_id + self.__session: HTTPClient = session + self.__client: ClientManager = client + self.__action = ClientReactionActions( + session=self.__session, + client=self.__client, + ) + + @property + def action(self) -> ClientReactionActions: + """リアクションに関するアクション + + Returns + ------- + ClientReactionActions + Reactionに対するアクションを行うクラス + """ + return self.__action + + class ReactionManager(AbstractManager): def __init__(self, note_id: str | None = None, *, session: HTTPClient, client: ClientManager): self.__note_id: str | None = note_id self.__session: HTTPClient = session self.__client: ClientManager = client self.__action = ReactionActions( - note_id=self.__note_id, session=self.__session, client=self.__client, )