diff --git a/discord/enums.py b/discord/enums.py index 211b88fd6..d716fa6f5 100644 --- a/discord/enums.py +++ b/discord/enums.py @@ -53,6 +53,7 @@ __all__ = ( 'StagePrivacyLevel', 'InteractionType', 'InteractionResponseType', + 'NSFWLevel', ) def _create_value_cls(name): @@ -488,6 +489,12 @@ class StagePrivacyLevel(Enum): closed = 2 guild_only = 2 +class NSFWLevel(Enum): + default = 0 + explicit = 1 + safe = 2 + age_restricted = 3 + T = TypeVar('T') def create_unknown_value(cls: Type[T], val: Any) -> T: diff --git a/discord/guild.py b/discord/guild.py index 36317e470..e97569057 100644 --- a/discord/guild.py +++ b/discord/guild.py @@ -37,7 +37,7 @@ from .permissions import PermissionOverwrite from .colour import Colour from .errors import InvalidArgument, ClientException from .channel import * -from .enums import AuditLogAction, VideoQualityMode, VoiceRegion, ChannelType, try_enum, VerificationLevel, ContentFilter, NotificationLevel +from .enums import AuditLogAction, VideoQualityMode, VoiceRegion, ChannelType, try_enum, VerificationLevel, ContentFilter, NotificationLevel, NSFWLevel from .mixins import Hashable from .user import User from .invite import Invite @@ -167,9 +167,8 @@ class Guild(Hashable): preferred_locale: Optional[:class:`str`] The preferred locale for the guild. Used when filtering Server Discovery results to a specific language. - - nsfw: :class:`bool` - If the guild is marked as "not safe for work". + nsfw_level: :class:`NSFWLevel` + The guild's NSFW level. .. versionadded:: 2.0 """ @@ -183,7 +182,7 @@ class Guild(Hashable): 'description', 'max_presences', 'max_members', 'max_video_channel_users', 'premium_tier', 'premium_subscription_count', '_system_channel_flags', 'preferred_locale', '_discovery_splash', '_rules_channel_id', - '_public_updates_channel_id', '_stage_instances', 'nsfw') + '_public_updates_channel_id', '_stage_instances', 'nsfw_level') _PREMIUM_GUILD_LIMITS = { None: _GuildLimit(emoji=50, bitrate=96e3, filesize=8388608), @@ -318,7 +317,7 @@ class Guild(Hashable): self._discovery_splash = guild.get('discovery_splash') self._rules_channel_id = utils._get_as_snowflake(guild, 'rules_channel_id') self._public_updates_channel_id = utils._get_as_snowflake(guild, 'public_updates_channel_id') - self.nsfw = guild.get('nsfw', False) + self.nsfw_level = try_enum(NSFWLevel, guild.get('nsfw_level', 0)) self._stage_instances = {} for s in guild.get('stage_instances', []): diff --git a/discord/types/guild.py b/discord/types/guild.py index d2dadbcf8..65e9387be 100644 --- a/discord/types/guild.py +++ b/discord/types/guild.py @@ -70,6 +70,7 @@ DefaultMessageNotificationLevel = Literal[0, 1] ExplicitContentFilterLevel = Literal[0, 1, 2] MFALevel = Literal[0, 1] VerificationLevel = Literal[0, 1, 2, 3, 4] +NSFWLevel = Literal[0, 1, 2, 3] PremiumTier = Literal[0, 1, 2, 3] GuildFeature = Literal[ 'INVITE_SPLASH', @@ -119,7 +120,7 @@ class Guild(_BaseGuildPreview, _GuildOptional): explicit_content_filter: ExplicitContentFilterLevel roles: List[Role] mfa_level: MFALevel - nsfw: bool + nsfw_level: NSFWLevel application_id: Optional[Snowflake] system_channel_id: Optional[Snowflake] system_channel_flags: int diff --git a/docs/api.rst b/docs/api.rst index d06f15652..68b055f41 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -2197,6 +2197,28 @@ of :class:`enum.Enum`. Alias for :attr:`.closed` +.. class:: NSFWLevel + + Represents the NSFW level of a guild. + + .. versionadded:: 2.0 + + .. attribute:: default + + The guild has not been categorised yet. + + .. attribute:: explicit + + The guild contains NSFW content. + + .. attribute:: safe + + The guild does not contain any NSFW content. + + .. attribute:: age_restricted + + The guild may contain NSFW content. + Async Iterator ----------------