feat: /mute/* を再実装

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

@ -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

@ -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

@ -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)

@ -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,

Loading…
Cancel
Save