diff --git a/CHANGELOG.md b/CHANGELOG.md index af98289db1..20efc5f7dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,8 @@ These changes are available on the `master` branch, but have not yet been releas ([#2659](https://github.com/Pycord-Development/pycord/pull/2659)) - Added `VoiceMessage` subclass of `File` to allow voice messages to be sent. ([#2579](https://github.com/Pycord-Development/pycord/pull/2579)) +- Add missing `Guild` feature flags and `Guild.edit` parameters. + ([#2672](https://github.com/Pycord-Development/pycord/pull/2672)) ### Fixed diff --git a/discord/guild.py b/discord/guild.py index 337abd31c0..58abfac6be 100644 --- a/discord/guild.py +++ b/discord/guild.py @@ -1663,6 +1663,9 @@ async def edit( public_updates_channel: TextChannel | None = MISSING, premium_progress_bar_enabled: bool = MISSING, disable_invites: bool = MISSING, + discoverable: bool = MISSING, + enable_raid_alerts: bool = MISSING, + enable_activity_feed: bool = MISSING, ) -> Guild: r"""|coro| @@ -1740,6 +1743,12 @@ async def edit( Whether the guild should have premium progress bar enabled. disable_invites: :class:`bool` Whether the guild should have server invites enabled or disabled. + discoverable: :class:`bool` + Whether the guild should be discoverable in the discover tab. + enable_raid_alerts: :class:`bool` + Whether activity alerts for the guild should be enabled. + enable_activity_feed: class:`bool` + Whether the guild's user activity feed should be enabled. reason: Optional[:class:`str`] The reason for editing this guild. Shows up on the audit log. @@ -1861,8 +1870,12 @@ async def edit( fields["system_channel_flags"] = system_channel_flags.value + if premium_progress_bar_enabled is not MISSING: + fields["premium_progress_bar_enabled"] = premium_progress_bar_enabled + + features: list[GuildFeature] = self.features.copy() + if community is not MISSING: - features = self.features.copy() if community: if ( "rules_channel_id" in fields @@ -1872,8 +1885,7 @@ async def edit( features.append("COMMUNITY") else: raise InvalidArgument( - "community field requires both rules_channel and" - " public_updates_channel fields to be provided" + "community field requires both rules_channel and public_updates_channel fields to be provided" ) else: if "COMMUNITY" in features: @@ -1883,20 +1895,43 @@ async def edit( fields["public_updates_channel_id"] = None features.remove("COMMUNITY") - fields["features"] = features - - if premium_progress_bar_enabled is not MISSING: - fields["premium_progress_bar_enabled"] = premium_progress_bar_enabled - if disable_invites is not MISSING: - features = self.features.copy() if disable_invites: - if not "INVITES_DISABLED" in features: + if "INVITES_DISABLED" not in features: features.append("INVITES_DISABLED") else: if "INVITES_DISABLED" in features: features.remove("INVITES_DISABLED") + if discoverable is not MISSING: + if discoverable: + if "DISCOVERABLE" not in features: + features.append("DISCOVERABLE") + else: + if "DISCOVERABLE" in features: + features.remove("DISCOVERABLE") + + if raid_alerts is not MISSING: + if raid_alerts: + if "RAID_ALERTS_DISABLED" in features: + features.remove("RAID_ALERTS_DISABLED") + else: + if "RAID_ALERTS_DISABLED" not in features: + features.append("RAID_ALERTS_DISABLED") + + if enable_activity_feed is not MISSING: + if enable_activity_feed: + if "ACTIVITY_FEED_ENABLED_BY_USER" not in features: + features.append("ACTIVITY_FEED_ENABLED_BY_USER") + if "ACTIVITY_FEED_DISABLED_BY_USER" in features: + features.remove("ACTIVITY_FEED_DISABLED_BY_USER") + else: + if "ACTIVITY_FEED_ENABLED_BY_USER" in features: + features.remove("ACTIVITY_FEED_ENABLED_BY_USER") + if "ACTIVITY_FEED_DISABLED_BY_USER" not in features: + features.append("ACTIVITY_FEED_DISABLED_BY_USER") + + if self.features != features: fields["features"] = features data = await http.edit_guild(self.id, reason=reason, **fields) diff --git a/discord/types/guild.py b/discord/types/guild.py index 9ada5e194e..f0fd5078ac 100644 --- a/discord/types/guild.py +++ b/discord/types/guild.py @@ -59,6 +59,8 @@ class UnavailableGuild(TypedDict): NSFWLevel = Literal[0, 1, 2, 3] PremiumTier = Literal[0, 1, 2, 3] GuildFeature = Literal[ + "ACTIVITY_FEED_DISABLED_BY_USER", + "ACTIVITY_FEED_ENABLED_BY_USER", "ANIMATED_BANNER", "ANIMATED_ICON", "APPLICATION_COMMAND_PERMISSIONS_V2", @@ -88,6 +90,7 @@ class UnavailableGuild(TypedDict): "PREVIEW_ENABLED", "ROLE_ICONS", "ROLE_SUBSCRIPTIONS_ENABLED", + "RAID_ALERTS_DISABLED", "SEVEN_DAY_THREAD_ARCHIVE", "TEXT_IN_VOICE_ENABLED", "THREAD_DEFAULT_AUTO_ARCHIVE_DURATION",