From bdd4916de9dcbb3708cf13bcbd48f13ee719d4a6 Mon Sep 17 00:00:00 2001 From: yupix Date: Fri, 9 Feb 2024 11:45:00 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20/mute/*=20=E3=82=92=E5=86=8D=E5=AE=9F?= =?UTF-8?q?=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mipac/actions/mute.py | 92 ----------------------------------- mipac/actions/users/mute.py | 97 ++++++++++++++++++++++++++++++++++++- mipac/manager/mute.py | 23 --------- mipac/manager/user.py | 2 +- 4 files changed, 96 insertions(+), 118 deletions(-) delete mode 100644 mipac/actions/mute.py delete mode 100644 mipac/manager/mute.py diff --git a/mipac/actions/mute.py b/mipac/actions/mute.py deleted file mode 100644 index c83f7d7..0000000 --- a/mipac/actions/mute.py +++ /dev/null @@ -1,92 +0,0 @@ -from __future__ import annotations - -from typing import TYPE_CHECKING, AsyncGenerator - -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 -from mipac.utils.format import remove_dict_empty -from mipac.utils.pagination import Pagination - -if TYPE_CHECKING: - from mipac.manager.client import ClientManager - - -class MuteActions(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 add(self, user_id: str | None = None) -> bool: - """ - Adds the specified user as a mute target - - Parameters - ---------- - user_id : str | None, optional - Mute target user Id, by default None - - Returns - ------- - bool - Whether the mute was successful or not - """ - - user_id = user_id or self._user_id - data = {"userId": user_id} - res: bool = await self._session.request( - Route("POST", "/api/mute/create"), auth=True, json=data - ) - return res - - async def delete(self, user_id: str | None = None) -> bool: - """ - Unmute the specified user - - Parameters - ---------- - user_id : str | None, optional - Unmute target user Id, by default None - - Returns - ------- - bool - Whether the unmute was successful or not. - """ - - user_id = user_id or self._user_id - data = {"userId": user_id} - res: bool = await self._session.request( - Route("POST", "/api/mute/delete"), auth=True, json=data - ) - return res - - async def gets( - self, - limit: int = 100, - since_id: str | None = None, - until_id: str | None = None, - get_all: bool = True, - ) -> AsyncGenerator[MutedUser, None]: - if limit > 100: - raise ParameterError("limit は100以下である必要があります") - - if get_all: - limit = 100 - - body = remove_dict_empty({"limit": limit, "sinceId": since_id, "untilId": until_id}) - - pagination = Pagination[IMutedUser]( - self._session, Route("POST", "/api/mute/list"), json=body - ) - - while True: - raw_mute_users = await pagination.next() - for raw_mute_user in raw_mute_users: - yield MutedUser(raw_mute_user, client=self._client) - - if get_all is False or pagination.is_final: - break diff --git a/mipac/actions/users/mute.py b/mipac/actions/users/mute.py index 1ee8bfc..8cf9080 100644 --- a/mipac/actions/users/mute.py +++ b/mipac/actions/users/mute.py @@ -1,10 +1,12 @@ - from __future__ import annotations from typing import TYPE_CHECKING from mipac.abstract.action import AbstractAction -from mipac.http import HTTPClient +from mipac.http import HTTPClient, Route +from mipac.models.mute import MutedUser +from mipac.types.mute import IMutedUser +from mipac.utils.pagination import Pagination if TYPE_CHECKING: from mipac.client import ClientManager @@ -15,3 +17,94 @@ class MuteActions(AbstractAction): self.__session: HTTPClient = session self.__client: ClientManager = client + async def get_list( + self, limit: int = 30, since_id: str | None = None, until_id: str | None = None + ) -> list[MutedUser]: + """ミュートしているユーザーの一覧を取得します + + Returns + ------- + list[MutedUser] + ミュートしているユーザーの一覧 + """ + + body = {"limit": limit, "sinceId": since_id, "untilId": until_id} + + 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] + + async def get_all_list( + self, limit: int = 30, since_id: str | None = None, until_id: str | None = None + ): + """ミュートしている全てのユーザーを取得します + + Parameters + ---------- + limit : int + 取得するユーザー数, by default 30 + since_id : str | None + 指定したIDより後のミュート中のユーザーを取得します, default=None + until_id : str | None + 指定したIDより前のミュート中のユーザーを取得します, default=None + + Returns + ------- + AsyncGenerator[MutedUser] + ミュートしているユーザー + """ + body = {"limit": limit, "sinceId": since_id, "untilId": until_id} + + pagination = Pagination[IMutedUser]( + 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: + """指定したユーザーをミュートします + + Parameters + ---------- + user_id : str + 対象のユーザーID + expires_at : int | None + ミュートする期間(秒)、無期限でミュートする場合はNoneを指定します + + Returns + ------- + bool + ミュートに成功したかどうか + """ + + 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) -> bool: + """指定したユーザーのミュートを解除します + + Parameters + ---------- + user_id : str + 対象のユーザーID + + Returns + ------- + bool + ミュート解除に成功したかどうか + """ + + res: bool = await self.__session.request( + route=Route("POST", "/api/mute/delete"), json={"userId": user_id} + ) + + return res diff --git a/mipac/manager/mute.py b/mipac/manager/mute.py deleted file mode 100644 index 9339823..0000000 --- a/mipac/manager/mute.py +++ /dev/null @@ -1,23 +0,0 @@ -from __future__ import annotations - -from typing import TYPE_CHECKING - -from mipac.abstract.manager import AbstractManager -from mipac.actions.mute import MuteActions -from mipac.http import HTTPClient - -if TYPE_CHECKING: - from mipac.manager.client import ClientManager - - -class MuteManager(AbstractManager): - def __init__( - self, user_id: str | None = None, *, session: HTTPClient, client: ClientManager - ) -> None: - self._user_id: str | None = user_id - self._session: HTTPClient = session - self._client: ClientManager = client - - @property - def action(self) -> MuteActions: - return MuteActions(user_id=self._user_id, session=self._session, client=self._client) diff --git a/mipac/manager/user.py b/mipac/manager/user.py index d20827a..d7e57ae 100644 --- a/mipac/manager/user.py +++ b/mipac/manager/user.py @@ -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.mute import MuteManager +from mipac.manager.users.mute import MuteManager from mipac.manager.users.list import ( ClientPartialUserListManager, ClientUserListManager,