from . import htb
from typing import TYPE_CHECKING, cast, Optional
if TYPE_CHECKING:
from .user import User
[docs]class Team(htb.HTBObject):
"""The class representing Hack The Box teams
Attributes:
name: The name of the Team
points: The Team's total points
motto: The Team motto
description: The Team description
country_name: The name of the country the Team is based in
avatar_url: The relative URL of the Tean's avatar
twitter: The Team's Twitter account
facebook: The Team's Facebook account
discord: The Team's Discord
public: Whether the Team is publicly visible
can_delete_avatar: Whether the active User can delete the avatar
is_respected: Whether the active User has respected the Team
join_request_sent: Whether the active User has sent a request to join the Team
"""
name: str
_detailed_attributes = (
"points",
"motto",
"description",
"country_name",
"avatar_url",
"cover_image_url",
"twitter",
"facebook",
"discord",
"public",
"can_delete_avatar",
"captain",
"is_respected",
"join_request_sent",
)
points: int
motto: str
description: str
country_name: str
avatar_url: str
cover_image_url: str
twitter: str
facebook: str
discord: str
public: bool
can_delete_avatar: bool
# noinspection PyUnresolvedReferences
_captain: Optional["User"] = None
is_respected: Optional[bool] = None
join_request_sent: Optional[bool] = None
_ranking: Optional[int] = None
_captain_id: int
def __repr__(self):
return f"<Team '{self.name}'>"
def __init__(self, data: dict, client: htb.HTBClient, summary: bool = False):
self._client = client
self._detailed_func = client.get_team # type: ignore
self.id = data["id"]
self.name = data["name"]
if not summary:
self.points = data["points"]
self.motto = data["motto"]
self.description = data["description"]
self.country_name = data["country_name"]
self.avatar_url = data["avatar_url"]
self.cover_image_url = data["cover_image_url"]
self.twitter = data["twitter"]
self.facebook = data["facebook"]
self.discord = data["facebook"]
self.public = data["public"]
self.can_delete_avatar = data["can_delete_avatar"]
self._captain_id = data["captain"]["id"]
self.is_respected = data["is_respected"]
self.join_request_sent = data["join_request_sent"]
else:
self._is_summary = True
@property
def ranking(self) -> int:
"""Retrieve the global ranking of the team
Returns:
"""
if not self._ranking:
data = cast(dict, self._client.do_request(f"team/stats/owns/{self.id}"))
self._ranking = data["rank"]
return cast(int, self._ranking)
# noinspection PyUnresolvedReferences
@property
def captain(self) -> "User":
from .user import User
if not self._captain:
self._captain = self._client.get_user(self._captain_id)
return cast(User, self._captain)