Source code for chatom.discord.guild

"""Discord-specific Guild (Organization) model.

This module provides the Discord-specific Guild class which extends Organization.
"""

from typing import Any

from chatom.base import Field, Organization

from .user import DiscordUser

__all__ = ("DiscordGuild",)


[docs] class DiscordGuild(Organization): """Discord-specific guild (server) with additional Discord fields. A Discord guild is the organization unit in Discord (commonly called a "server"). Attributes: premium_tier: The guild's boost level (0-3). nsfw_level: The guild's NSFW content level. preferred_locale: The guild's preferred locale. approximate_member_count: Approximate number of members (may differ from member_count). approximate_presence_count: Approximate number of online members. vanity_url_code: The guild's vanity invite code if set. features: List of guild features (e.g., "COMMUNITY", "PARTNERED"). """ premium_tier: int = Field( default=0, description="The guild's boost level (0-3).", ) nsfw_level: int = Field( default=0, description="The guild's NSFW content level.", ) preferred_locale: str = Field( default="en-US", description="The guild's preferred locale.", ) approximate_member_count: int | None = Field( default=None, description="Approximate number of members.", ) approximate_presence_count: int | None = Field( default=None, description="Approximate number of online members.", ) vanity_url_code: str | None = Field( default=None, description="The guild's vanity invite code if set.", ) features: list = Field( default_factory=list, description="List of guild features.", )
[docs] @classmethod def from_discord_guild(cls, guild: Any) -> "DiscordGuild": """Create a DiscordGuild from a discord.py Guild object. Args: guild: A discord.py Guild object. Returns: DiscordGuild instance. """ return cls( id=str(guild.id), name=guild.name, description=guild.description or "", icon_url=str(guild.icon.url) if guild.icon else "", member_count=guild.member_count, owner=DiscordUser.from_discord_user(guild.owner) if guild.owner else None, premium_tier=guild.premium_tier, nsfw_level=guild.nsfw_level.value if hasattr(guild.nsfw_level, "value") else 0, preferred_locale=str(guild.preferred_locale), approximate_member_count=guild.approximate_member_count, approximate_presence_count=guild.approximate_presence_count, vanity_url_code=guild.vanity_url_code, features=list(guild.features) if guild.features else [], )