Source code for wyvern.models.members

from __future__ import annotations

import datetime
import typing

import attrs

from wyvern.models.snowflake import Snowflake
from wyvern.models.users import PartialUser, User

if typing.TYPE_CHECKING:
    import discord_typings

    from wyvern.api.bot import GatewayBot

__all__: tuple[str, ...] = ("GuildMember",)


[docs]@attrs.define(kw_only=True) class GuildMember(User): raw: discord_typings.GuildMemberData # type: ignore """Raw payload.""" user: User """User of the member.""" guild_id: Snowflake """ID of the guild this member belongs to.""" nickname: str | None """Nickname of the member, if any.""" role_ids: list[Snowflake] """List of role ids.""" joined_at: datetime.datetime """Datetime on which the member joined the guild.""" premium_since: datetime.datetime | None """Datetime since member has been boosting the guild.""" deaf: bool | None """True if member is deafened.""" mute: bool | None """True if member is muted.""" pending: bool """True if member is in pending state.""" communication_disabled_until: datetime.datetime | None """Timeout for the member.""" guild_avatar_hash: str | None """Avatar hash for the guild.""" @property def display_name(self) -> str: """ Returns ------- str Nickname of the user if exists, else the username. """ return self.nickname or self.username @classmethod def from_payload(cls, bot: GatewayBot, guild_id: int, payload: discord_typings.GuildMemberData) -> GuildMember: user: User = User.from_partial(bot, PartialUser.from_payload(payload["user"])) # type: ignore return GuildMember( user=user, id=user.id, username=user.username, discriminator=user.discriminator, raw=payload, avatar_hash=user.avatar_hash, is_bot=user.is_bot, is_system=user.is_system, is_mfa_enabled=user.is_mfa_enabled, banner_hash=user.banner_hash, accent_color=user.accent_color, locale=user.locale, flags_value=user.flags_value, premium_type_value=user.premium_type_value, public_flags_value=user.public_flags_value, bot=bot, partial_user=user.partial_user, guild_id=Snowflake(guild_id), nickname=payload.get("nick"), role_ids=[Snowflake(_id) for _id in payload["roles"]], joined_at=datetime.datetime.fromisoformat(payload["joined_at"]), premium_since=datetime.datetime.fromisoformat(ps) if (ps := payload.get("premium_since")) else None, deaf=payload["deaf"], mute=payload["mute"], pending=payload.get("pending") or False, communication_disabled_until=payload.get("communication_disabled_until"), guild_avatar_hash=av if (av := payload.get("avatar")) else None, )