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