|
|
|
@ -1,6 +1,6 @@
|
|
|
|
|
from __future__ import annotations
|
|
|
|
|
|
|
|
|
|
from typing import TYPE_CHECKING, NotRequired, TypedDict, TypeGuard
|
|
|
|
|
from typing import TYPE_CHECKING, Literal, NotRequired, TypedDict, TypeGuard
|
|
|
|
|
|
|
|
|
|
if TYPE_CHECKING:
|
|
|
|
|
from mipac.types.user import IMeDetailed, IUserDetailed
|
|
|
|
@ -43,35 +43,29 @@ class IRolePolicies(TypedDict):
|
|
|
|
|
rate_limit_factor: IRolePolicieValue
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class IRole(TypedDict):
|
|
|
|
|
class IPartialRole(TypedDict):
|
|
|
|
|
id: str
|
|
|
|
|
created_at: str
|
|
|
|
|
updated_at: str
|
|
|
|
|
name: str
|
|
|
|
|
description: str
|
|
|
|
|
color: str | None
|
|
|
|
|
icon_url: str | None
|
|
|
|
|
target: str
|
|
|
|
|
description: str # 空でもNoneではない
|
|
|
|
|
is_moderator: bool
|
|
|
|
|
is_administrator: bool
|
|
|
|
|
display_order: int
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class IRole(IPartialRole):
|
|
|
|
|
created_at: str
|
|
|
|
|
updated_at: str
|
|
|
|
|
target: Literal["manual", "conditional"]
|
|
|
|
|
cond_formula: dict
|
|
|
|
|
is_public: bool
|
|
|
|
|
is_administrator: bool
|
|
|
|
|
is_moderator: bool
|
|
|
|
|
is_explorable: bool
|
|
|
|
|
as_badge: bool
|
|
|
|
|
can_edit_members_by_moderator: bool
|
|
|
|
|
policies: IRolePolicies
|
|
|
|
|
users_count: int
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class IPartialRole(TypedDict):
|
|
|
|
|
id: str
|
|
|
|
|
name: str
|
|
|
|
|
color: str | None
|
|
|
|
|
icon_url: str | None
|
|
|
|
|
description: str # 空でもNoneではない
|
|
|
|
|
is_moderator: bool
|
|
|
|
|
is_administrator: bool
|
|
|
|
|
display_order: int
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def is_me_role(data: IMeRole | IRoleUser, me_id: str) -> TypeGuard[IMeRole]:
|
|
|
|
|
return data["user"]["id"] == me_id and data["user"].get("avatar_id") is not None
|
|
|
|
|