feat: MuteActionsをClientと分けた

pull/109/head
yupix 7 months ago
parent bdd4916de9
commit 62ee3ebabe
No known key found for this signature in database
GPG Key ID: 2FF705F5C56D9C06

@ -1,8 +1,9 @@
from __future__ import annotations
from typing import TYPE_CHECKING
from typing import TYPE_CHECKING, override
from mipac.abstract.action import AbstractAction
from mipac.errors.base import ParameterError
from mipac.http import HTTPClient, Route
from mipac.models.mute import MutedUser
from mipac.types.mute import IMutedUser
@ -12,10 +13,64 @@ if TYPE_CHECKING:
from mipac.client import ClientManager
class MuteActions(AbstractAction):
class ClientMuteActions(AbstractAction):
def __init__(self, user_id: str | None = None, *, session: HTTPClient, client: ClientManager):
self.__user_id: str | None = user_id
self._session: HTTPClient = session
self._client: ClientManager = client
async def create(self, expires_at: int | None = None, *, user_id: str | None = None) -> bool:
"""指定したユーザーをミュートします
Parameters
----------
user_id : str | None
対象のユーザーID, default=None
expires_at : int | None
ミュートする期間()無期限でミュートする場合はNoneを指定します
Returns
-------
bool
ミュートに成功したかどうか
"""
if user_id or self.__user_id:
raise ParameterError("Parameter 'user_id' is required.")
body = {"userId": user_id, "expiresAt": expires_at}
res: bool = await self._session.request(route=Route("POST", "/api/mute/create"), json=body)
return res
async def delete(self, *, user_id: str | None = None) -> bool:
"""指定したユーザーのミュートを解除します
Parameters
----------
user_id : str | None
対象のユーザーID, default=None
Returns
-------
bool
ミュート解除に成功したかどうか
"""
if user_id or self.__user_id:
raise ParameterError("Parameter 'user_id' is required.")
res: bool = await self._session.request(
route=Route("POST", "/api/mute/delete"), json={"userId": user_id}
)
return res
class MuteActions(ClientMuteActions):
def __init__(self, *, session: HTTPClient, client: ClientManager):
self.__session: HTTPClient = session
self.__client: ClientManager = client
super().__init__(session=session, client=client)
async def get_list(
self, limit: int = 30, since_id: str | None = None, until_id: str | None = None
@ -30,17 +85,17 @@ class MuteActions(AbstractAction):
body = {"limit": limit, "sinceId": since_id, "untilId": until_id}
mutes: list[IMutedUser] = await self.__session.request(
mutes: list[IMutedUser] = await self._session.request(
Route("GET", "/api/mute/list"), json=body, auth=True
)
return [MutedUser(raw_mute_user=mute, client=self.__client) for mute in mutes]
return [MutedUser(raw_mute_user=mute, client=self._client) for mute in mutes]
async def get_all_list(
self, limit: int = 30, since_id: str | None = None, until_id: str | None = None
):
"""ミュートしている全てのユーザーを取得します
Parameters
----------
limit : int
@ -49,7 +104,7 @@ class MuteActions(AbstractAction):
指定したIDより後のミュート中のユーザーを取得します, default=None
until_id : str | None
指定したIDより前のミュート中のユーザーを取得します, default=None
Returns
-------
AsyncGenerator[MutedUser]
@ -58,14 +113,19 @@ class MuteActions(AbstractAction):
body = {"limit": limit, "sinceId": since_id, "untilId": until_id}
pagination = Pagination[IMutedUser](
self.__session, Route("GET", "/api/mute/list"), json=body, auth=True
self._session, Route("GET", "/api/mute/list"), json=body, auth=True
)
while pagination.is_final is False:
for raw_muted_user in await pagination.next():
yield MutedUser(raw_mute_user=raw_muted_user, client=self.__client)
async def create(self, user_id: str, expires_at: int | None = None) -> bool:
yield MutedUser(raw_mute_user=raw_muted_user, client=self._client)
@override
async def create(
self,
user_id: str,
expires_at: int | None = None,
) -> bool:
"""指定したユーザーをミュートします
Parameters
@ -80,15 +140,9 @@ class MuteActions(AbstractAction):
bool
ミュートに成功したかどうか
"""
return await super().create(user_id=user_id, expires_at=expires_at)
body = {"userId": user_id, "expiresAt": expires_at}
res: bool = await self.__session.request(
route=Route("POST", "/api/mute/create"), json=body
)
return res
@override
async def delete(self, user_id: str) -> bool:
"""指定したユーザーのミュートを解除します
@ -102,9 +156,4 @@ class MuteActions(AbstractAction):
bool
ミュート解除に成功したかどうか
"""
res: bool = await self.__session.request(
route=Route("POST", "/api/mute/delete"), json={"userId": user_id}
)
return res
return await super().delete(user_id=user_id)

@ -7,7 +7,7 @@ from mipac.actions.user import ClientUserActions, UserActions
from mipac.http import HTTPClient
from mipac.manager.blocking import BlockingManager
from mipac.manager.follow import FollowManager
from mipac.manager.users.mute import MuteManager
from mipac.manager.users.mute import ClientMuteManager, MuteManager
from mipac.manager.users.list import (
ClientPartialUserListManager,
ClientUserListManager,
@ -30,7 +30,9 @@ class ClientUserManager(AbstractManager):
user=user, session=session, client=client
)
# self.follow: FollowManager = FollowManager(session=session, client=client) TODO: Client版のFollowManagerを作る
# self.mute: MuteManager = MuteManager(session=session, client=client) TODO: Client版のMuteManagerを作る
self.mute: ClientMuteManager = ClientMuteManager(
user_id=user.id, session=session, client=client
)
# self.block = BlockingManager(session=session, client=client) TODO: Client版のBlockingManagerを作る
self.list = ClientPartialUserListManager(user_id=user.id, session=session, client=client)

@ -1,20 +1,29 @@
from __future__ import annotations
from typing import TYPE_CHECKING
from mipac.abstract.manager import AbstractManager
from mipac.http import HTTPClient
from mipac.actions.users.mute import MuteActions
from mipac.actions.users.mute import MuteActions, ClientMuteActions
if TYPE_CHECKING:
from mipac.manager.client import ClientManager
class ClientMuteManager(AbstractManager):
def __init__(self, user_id: str, *, session: HTTPClient, client: ClientManager):
self._action: ClientMuteActions = ClientMuteActions(
user_id=user_id, session=session, client=client
)
@property
def action(self) -> ClientMuteActions:
return self._action
class MuteManager(AbstractManager):
def __init__(self, *, session: HTTPClient, client: ClientManager):
self.__session: HTTPClient = session
self.__client: ClientManager = client
self._action: MuteActions = MuteActions(session=session, client=client)
@property
def action(self) -> MuteActions:
return MuteActions(session=self.__session, client=self.__client)
return self._action

Loading…
Cancel
Save