137 lines
4.2 KiB
Python
137 lines
4.2 KiB
Python
# SPDX-License-Identifier: MIT
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING, List, Optional
|
|
|
|
from . import utils
|
|
from .asset import Asset
|
|
from .enums import TeamMembershipState, try_enum
|
|
from .user import BaseUser
|
|
|
|
if TYPE_CHECKING:
|
|
from .state import ConnectionState
|
|
from .types.team import Team as TeamPayload, TeamMember as TeamMemberPayload
|
|
|
|
__all__ = (
|
|
"Team",
|
|
"TeamMember",
|
|
)
|
|
|
|
|
|
class Team:
|
|
"""Represents an application team for a bot provided by Discord.
|
|
|
|
Attributes
|
|
----------
|
|
id: :class:`int`
|
|
The team ID.
|
|
name: :class:`str`
|
|
The team name.
|
|
owner_id: :class:`int`
|
|
The team's owner ID.
|
|
members: List[:class:`TeamMember`]
|
|
A list of the members in the team.
|
|
|
|
.. versionadded:: 1.3
|
|
"""
|
|
|
|
__slots__ = ("_state", "id", "name", "_icon", "owner_id", "members")
|
|
|
|
def __init__(self, state: ConnectionState, data: TeamPayload) -> None:
|
|
self._state: ConnectionState = state
|
|
|
|
self.id: int = int(data["id"])
|
|
self.name: str = data["name"]
|
|
self._icon: Optional[str] = data["icon"]
|
|
self.owner_id: Optional[int] = utils._get_as_snowflake(data, "owner_user_id")
|
|
self.members: List[TeamMember] = [
|
|
TeamMember(self, self._state, member) for member in data["members"]
|
|
]
|
|
|
|
def __repr__(self) -> str:
|
|
return f"<{self.__class__.__name__} id={self.id} name={self.name}>"
|
|
|
|
@property
|
|
def icon(self) -> Optional[Asset]:
|
|
"""Optional[:class:`.Asset`]: Retrieves the team's icon asset, if any."""
|
|
if self._icon is None:
|
|
return None
|
|
return Asset._from_icon(self._state, self.id, self._icon, path="team")
|
|
|
|
@property
|
|
def owner(self) -> Optional[TeamMember]:
|
|
"""Optional[:class:`TeamMember`]: The team's owner."""
|
|
return utils.get(self.members, id=self.owner_id)
|
|
|
|
|
|
class TeamMember(BaseUser):
|
|
"""Represents a team member in a team.
|
|
|
|
.. container:: operations
|
|
|
|
.. describe:: x == y
|
|
|
|
Checks if two team members are equal.
|
|
|
|
.. describe:: x != y
|
|
|
|
Checks if two team members are not equal.
|
|
|
|
.. describe:: hash(x)
|
|
|
|
Return the team member's hash.
|
|
|
|
.. describe:: str(x)
|
|
|
|
Returns the team member's username (with discriminator, if not migrated to new system yet).
|
|
|
|
.. versionadded:: 1.3
|
|
|
|
Attributes
|
|
----------
|
|
name: :class:`str`
|
|
The team member's username.
|
|
id: :class:`int`
|
|
The team member's unique ID.
|
|
discriminator: :class:`str`
|
|
The team member's discriminator.
|
|
|
|
.. note::
|
|
This is being phased out by Discord; the username system is moving away from ``username#discriminator``
|
|
to users having a globally unique username.
|
|
The value of a single zero (``"0"``) indicates that the user has been migrated to the new system.
|
|
See the `help article <https://dis.gd/app-usernames>`__ for details.
|
|
|
|
global_name: Optional[:class:`str`]
|
|
The team members's global display name, if set.
|
|
This takes precedence over :attr:`.name` when shown.
|
|
|
|
.. versionadded:: 2.9
|
|
|
|
avatar: Optional[:class:`str`]
|
|
The avatar hash the team member has. Could be None.
|
|
bot: :class:`bool`
|
|
Specifies if the user is a bot account.
|
|
team: :class:`Team`
|
|
The team that the member is from.
|
|
membership_state: :class:`TeamMembershipState`
|
|
The membership state of the member (e.g. invited or accepted)
|
|
"""
|
|
|
|
__slots__ = ("team", "membership_state", "permissions")
|
|
|
|
def __init__(self, team: Team, state: ConnectionState, data: TeamMemberPayload) -> None:
|
|
self.team: Team = team
|
|
self.membership_state: TeamMembershipState = try_enum(
|
|
TeamMembershipState, data["membership_state"]
|
|
)
|
|
self.permissions: List[str] = data["permissions"]
|
|
super().__init__(state=state, data=data["user"])
|
|
|
|
def __repr__(self) -> str:
|
|
return (
|
|
f"<{self.__class__.__name__} id={self.id} name={self.name!r} global_name={self.global_name!r}"
|
|
f" discriminator={self.discriminator!r} membership_state={self.membership_state!r}>"
|
|
)
|