diff --git a/CHANGELOG.md b/CHANGELOG.md index fdfdc6d896..4e7acd7334 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,8 @@ These changes are available on the `master` branch, but have not yet been releas ([#2564](https://github.com/Pycord-Development/pycord/pull/2564)) - Added `Message.forward_to`, `Message.snapshots`, and other related attributes. ([#2598](https://github.com/Pycord-Development/pycord/pull/2598)) +- Add missing `Guild` feature flags and `Guild.edit` parameters. + ([#2672](https://github.com/Pycord-Development/pycord/pull/2672)) - Added the ability to change the API's base URL with `Route.API_BASE_URL`. ([#2714](https://github.com/Pycord-Development/pycord/pull/2714)) - Added the ability to pass a `datetime.time` object to `format_dt`. diff --git a/discord/guild.py b/discord/guild.py index 6a9d54537a..fd0e21e0ea 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, + disable_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. + disable_raid_alerts: :class:`bool` + Whether activity alerts for the guild should be disabled. + 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 disable_raid_alerts is not MISSING: + if disable_raid_alerts: + if "RAID_ALERTS_DISABLED" not in features: + features.append("RAID_ALERTS_DISABLED") + else: + if "RAID_ALERTS_DISABLED" in features: + features.remove("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",