diff --git a/DisCatSharp/Entities/Guild/DiscordGuild.Features.cs b/DisCatSharp/Entities/Guild/DiscordGuild.Features.cs index 8ff8bf81b..151100121 100644 --- a/DisCatSharp/Entities/Guild/DiscordGuild.Features.cs +++ b/DisCatSharp/Entities/Guild/DiscordGuild.Features.cs @@ -1,358 +1,633 @@ // This file is part of the DisCatSharp project, based off DSharpPlus. // // Copyright (c) 2021-2022 AITSYS // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. using System; using System.Collections.Generic; using System.Linq; using System.Text; using DisCatSharp.Enums; namespace DisCatSharp.Entities; /// /// Represents the guild features. /// public class GuildFeatures { /// /// List of all guild features. /// public List Features { get; } /// /// Checks the guild features and constructs a new object. /// /// Guild to check public GuildFeatures(DiscordGuild guild) { this.Features = new List(); if (guild.RawFeatures.Contains("ANIMATED_ICON")) this.Features.Add(GuildFeaturesEnum.CanSetAnimatedIcon); if (guild.RawFeatures.Contains("ANIMATED_BANNER")) this.Features.Add(GuildFeaturesEnum.CanSetAnimatedBanner); if (guild.RawFeatures.Contains("BANNER")) this.Features.Add(GuildFeaturesEnum.CanSetBanner); if (guild.RawFeatures.Contains("CHANNEL_BANNER")) this.Features.Add(GuildFeaturesEnum.CanSetChannelBanner); if (guild.RawFeatures.Contains("COMMUNITY")) this.Features.Add(GuildFeaturesEnum.HasCommunityEnabled); if (!guild.RawFeatures.Contains("DISCOVERABLE_DISABLED") && guild.RawFeatures.Contains("DISCOVERABLE")) this.Features.Add(GuildFeaturesEnum.IsDiscoverable); if (guild.RawFeatures.Contains("FEATUREABLE")) this.Features.Add(GuildFeaturesEnum.IsFeatureable); if (guild.RawFeatures.Contains("INVITE_SPLASH")) this.Features.Add(GuildFeaturesEnum.CanSetInviteSplash); if (guild.RawFeatures.Contains("MEMBER_VERIFICATION_GATE_ENABLED")) this.Features.Add(GuildFeaturesEnum.HasMembershipScreeningEnabled); if (guild.RawFeatures.Contains("NEWS")) this.Features.Add(GuildFeaturesEnum.CanCreateNewsChannels); if (guild.RawFeatures.Contains("PARTNERED")) this.Features.Add(GuildFeaturesEnum.IsPartnered); if (guild.RawFeatures.Contains("MORE_EMOJI")) this.Features.Add(GuildFeaturesEnum.CanUploadMoreEmojis); if (guild.RawFeatures.Contains("PREVIEW_ENABLED")) this.Features.Add(GuildFeaturesEnum.HasPreviewEnabled); if (guild.RawFeatures.Contains("VANITY_URL")) this.Features.Add(GuildFeaturesEnum.CanSetVanityUrl); if (guild.RawFeatures.Contains("VERIFIED")) this.Features.Add(GuildFeaturesEnum.IsVerified); if (guild.RawFeatures.Contains("VIP_REGIONS")) this.Features.Add(GuildFeaturesEnum.CanAccessVipRegions); if (guild.RawFeatures.Contains("WELCOME_SCREEN_ENABLED")) this.Features.Add(GuildFeaturesEnum.HasWelcomeScreenEnabled); if (guild.RawFeatures.Contains("TICKETED_EVENTS_ENABLED")) this.Features.Add(GuildFeaturesEnum.HasTicketedEventsEnabled); if (guild.RawFeatures.Contains("MONETIZATION_ENABLED")) this.Features.Add(GuildFeaturesEnum.HasMonetizationEnabled); if (guild.RawFeatures.Contains("MORE_STICKERS")) this.Features.Add(GuildFeaturesEnum.CanUploadMoreStickers); if (guild.RawFeatures.Contains("PRIVATE_THREADS")) this.Features.Add(GuildFeaturesEnum.CanCreatePrivateThreads); if (guild.RawFeatures.Contains("HUB")) this.Features.Add(GuildFeaturesEnum.IsHub); if (guild.RawFeatures.Contains("THREADS_ENABLED_TESTING")) this.Features.Add(GuildFeaturesEnum.HasThreadTestingEnabled); if (guild.RawFeatures.Contains("THREADS_ENABLED")) this.Features.Add(GuildFeaturesEnum.HasThreadsEnabled); if (guild.RawFeatures.Contains("ROLE_ICONS")) this.Features.Add(GuildFeaturesEnum.CanSetRoleIcons); if (guild.RawFeatures.Contains("NEW_THREAD_PERMISSIONS")) this.Features.Add(GuildFeaturesEnum.HasNewThreadPermissions); if (guild.RawFeatures.Contains("ROLE_SUBSCRIPTIONS_ENABLED")) this.Features.Add(GuildFeaturesEnum.HasRoleSubscriptionsEnabled); if (guild.RawFeatures.Contains("PREMIUM_TIER_3_OVERRIDE")) this.Features.Add(GuildFeaturesEnum.PremiumTierThreeOverride); if (guild.RawFeatures.Contains("THREAD_DEFAULT_AUTO_ARCHIVE_DURATION")) this.Features.Add(GuildFeaturesEnum.CanSetThreadDefaultAutoArchiveDuration); if (guild.RawFeatures.Contains("TEXT_IN_VOICE_ENABLED")) this.Features.Add(GuildFeaturesEnum.TextInVoiceEnabled); if (guild.RawFeatures.Contains("HAS_DIRECTORY_ENTRY")) this.Features.Add(GuildFeaturesEnum.HasDirectoryEntry); if (guild.RawFeatures.Contains("LINKED_TO_HUB")) this.Features.Add(GuildFeaturesEnum.IsLinkedToHub); if (guild.RawFeatures.Contains("MEMBER_PROFILES")) this.Features.Add(GuildFeaturesEnum.HasMemberProfiles); if (guild.RawFeatures.Contains("INTERNAL_EMPLOYEE_ONLY")) this.Features.Add(GuildFeaturesEnum.IsStaffOnly); if (guild.RawFeatures.Contains("ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE")) this.Features.Add(GuildFeaturesEnum.RoleSubscriptionsIsAvailableForPurchase); if (guild.RawFeatures.Contains("AUTO_MODERATION")) this.Features.Add(GuildFeaturesEnum.CanSetupAutoModeration); if (guild.RawFeatures.Contains("GUILD_HOME_TEST")) this.Features.Add(GuildFeaturesEnum.GuildHomeTest); if (guild.RawFeatures.Contains("INVITES_DISABLED")) this.Features.Add(GuildFeaturesEnum.InvitesDisabled); + if (guild.RawFeatures.Contains("ACTIVITIES_ALPHA")) this.Features.Add(GuildFeaturesEnum.ActivitiesAlpha); + if (guild.RawFeatures.Contains("ACTIVITIES_EMPLOYEE")) this.Features.Add(GuildFeaturesEnum.ActivitiesEmployee); + if (guild.RawFeatures.Contains("ACTIVITIES_INTERNAL_DEV")) this.Features.Add(GuildFeaturesEnum.ActivitiesInternalDev); + if (guild.RawFeatures.Contains("AUTOMOD_TRIGGER_KEYWORD_FILTER")) this.Features.Add(GuildFeaturesEnum.AutomodTriggerKeywordFilter); + if (guild.RawFeatures.Contains("AUTOMOD_TRIGGER_ML_SPAM_FILTER")) this.Features.Add(GuildFeaturesEnum.AutomodTriggerMlSpamFilter); + if (guild.RawFeatures.Contains("AUTOMOD_TRIGGER_SPAM_LINK_FILTERGuild")) this.Features.Add(GuildFeaturesEnum.AutomodTriggerSpamLinkFilterGuild); + if (guild.RawFeatures.Contains("AUTOMOD_DEFAULT_LIST")) this.Features.Add(GuildFeaturesEnum.AutomodDefaultList); + if (guild.RawFeatures.Contains("BFG")) this.Features.Add(GuildFeaturesEnum.Bfg); + if (guild.RawFeatures.Contains("BOOSTING_TIERS_EXPERIMENT_MEDIUM_GUILD")) this.Features.Add(GuildFeaturesEnum.BoostingTiersExperimentMediumGuild); + if (guild.RawFeatures.Contains("BOOSTING_TIERS_EXPERIMENT_SMALL_GUILD")) this.Features.Add(GuildFeaturesEnum.BoostingTiersExperimentSmallGuild); + if (guild.RawFeatures.Contains("BOT_DEVELOPER_EARLY_ACCESS")) this.Features.Add(GuildFeaturesEnum.BotDeveloperEarlyAccess); + if (guild.RawFeatures.Contains("CREATOR_MONETIZABLE")) this.Features.Add(GuildFeaturesEnum.CreatorMonetizable); + if (guild.RawFeatures.Contains("CREATOR_MONETIZABLE_DISABLED")) this.Features.Add(GuildFeaturesEnum.CreatorMonetizableDisabled); + if (guild.RawFeatures.Contains("CREATOR_MONETIZABLE_PROVISIONAL")) this.Features.Add(GuildFeaturesEnum.CreatorMonetizableProvisional); + if (guild.RawFeatures.Contains("CREATOR_MONETIZABLE_WHITEGLOVE")) this.Features.Add(GuildFeaturesEnum.CreatorMonetizableWhiteGlove); + if (guild.RawFeatures.Contains("CREATOR_MONETIZATION_APPLICATION_ALLOWLIST")) this.Features.Add(GuildFeaturesEnum.CreatorMonetizationApplicationAllowlist); + if (guild.RawFeatures.Contains("DEVELOPER_SUPPORT_SERVER")) this.Features.Add(GuildFeaturesEnum.DeveloperSupportServer); + if (guild.RawFeatures.Contains("EXPOSED_TO_ACTIVITIES_WTP_EXPERIMENT")) this.Features.Add(GuildFeaturesEnum.ExposedToActivitiesWtpExperiment); + if (guild.RawFeatures.Contains("GUILD_COMMUNICATION_DISABLED_GUILDS")) this.Features.Add(GuildFeaturesEnum.GuildCommunicationDisabledGuilds); + if (guild.RawFeatures.Contains("DISABLE_GUILD_COMMUNICATION")) this.Features.Add(GuildFeaturesEnum.DisableGuildCommunication); + if (guild.RawFeatures.Contains("GUILD_HOME_OVERRIDE")) this.Features.Add(GuildFeaturesEnum.GuildHomeOverride); + if (guild.RawFeatures.Contains("GUILD_AUTOMOD_DEFAULT_LIST")) this.Features.Add(GuildFeaturesEnum.GuildAutomodDefaultList); + if (guild.RawFeatures.Contains("GUILD_MEMBER_VERIFICATION_EXPERIMENT")) this.Features.Add(GuildFeaturesEnum.GuildMemberVerificationExperiment); + if (guild.RawFeatures.Contains("GUILD_ROLE_SUBSCRIPTION_PURCHASE_FEEDBACK_LOOP")) this.Features.Add(GuildFeaturesEnum.GuildRoleSubscriptionPurchaseFeedbackLoop); + if (guild.RawFeatures.Contains("GUILD_ROLE_SUBSCRIPTION_TRIALS")) this.Features.Add(GuildFeaturesEnum.GuildRoleSubscriptionTrials); + if (guild.RawFeatures.Contains("HAD_EARLY_ACTIVITIES_ACCESS")) this.Features.Add(GuildFeaturesEnum.HadEarlyActivitiesAccess); + if (guild.RawFeatures.Contains("INCREASED_THREAD_LIMIT")) this.Features.Add(GuildFeaturesEnum.IncreasedThreadLimit); + if (guild.RawFeatures.Contains("MOBILE_WEB_ROLE_SUBSCRIPTION_PURCHASE_PAGE")) this.Features.Add(GuildFeaturesEnum.MobileWebRoleSubscriptionPurchasePage); + if (guild.RawFeatures.Contains("RELAY_ENABLED")) this.Features.Add(GuildFeaturesEnum.RelayEnabled); + if (guild.RawFeatures.Contains("RESTRICT_SPAM_RISK_GUILDS")) this.Features.Add(GuildFeaturesEnum.RestrictSpamRiskGuilds); + if (guild.RawFeatures.Contains("ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE")) this.Features.Add(GuildFeaturesEnum.RoleSubscriptionsAvailableForPurchase); + if (guild.RawFeatures.Contains("THREADS_ENABLED_TESTING")) this.Features.Add(GuildFeaturesEnum.ThreadsEnabledTesting); + if (guild.RawFeatures.Contains("VOICE_CHANNEL_EFFECTS")) this.Features.Add(GuildFeaturesEnum.VoiceChannelEffects); + if (guild.RawFeatures.Contains("SOUNDBOARD")) this.Features.Add(GuildFeaturesEnum.Soundboard); + + if (guild.RawFeatures.Contains("COMMERCE")) this.Features.Add(GuildFeaturesEnum.Commerce); + if (guild.RawFeatures.Contains("EXPOSED_TO_BOOSTING_TIERS_EXPERIMENT")) this.Features.Add(GuildFeaturesEnum.ExposedToBoostingTiersExperiment); + if (guild.RawFeatures.Contains("PUBLIC_DISABLED")) this.Features.Add(GuildFeaturesEnum.PublicDisabled); + if (guild.RawFeatures.Contains("PUBLIC")) this.Features.Add(GuildFeaturesEnum.Public); + if (guild.RawFeatures.Contains("SEVEN_DAY_THREAD_ARCHIVE")) this.Features.Add(GuildFeaturesEnum.SevenDayThreadArchive); + if (guild.RawFeatures.Contains("THREE_DAY_THREAD_ARCHIVE")) this.Features.Add(GuildFeaturesEnum.ThreeDayThreadArchive); + if (guild.RawFeatures.Contains("FEATURABLE")) this.Features.Add(GuildFeaturesEnum.Featurable); + if (guild.RawFeatures.Contains("FORCE_RELAY")) this.Features.Add(GuildFeaturesEnum.ForceRelay); + if (guild.RawFeatures.Contains("LURKABLE")) this.Features.Add(GuildFeaturesEnum.Lurkable); + if (guild.RawFeatures.Contains("MEMBER_LIST_DISABLED")) this.Features.Add(GuildFeaturesEnum.MemberListDisabled); } /// /// Checks whether the guild has a feature enabled. /// /// The feature you'd like to check for. /// Whether the guild has the requested feature. public bool HasFeature(GuildFeaturesEnum flag) => this.Features.Contains(flag); public string ToString(string separator, bool humanReadable) { if (!humanReadable) return string.Join(separator, this.Features); else { var humanReadableFeatures = this.Features.Select(x => AddSpacesToWord(x.ToString())); return string.Join(separator, humanReadableFeatures); } } /// /// Converts a string of characters (here: enum) into a string of characters separated by spaces after a capital letter. /// /// String of text to convert /// String separated by a space after every capital letter. private static string AddSpacesToWord(string text) { if (string.IsNullOrWhiteSpace(text)) return ""; var newText = new StringBuilder(text.Length * 2); newText.Append(text[0]); for (int i = 1; i < text.Length; i++) { if (char.IsUpper(text[i]) && text[i - 1] != ' ') newText.Append(' '); newText.Append(text[i]); } return newText.ToString(); } } /// /// Represents the guild features. /// public enum GuildFeaturesEnum { /// /// Guild has access to set an animated guild icon. /// CanSetAnimatedIcon, /// /// Guild has access to set a guild banner image. /// CanSetBanner, /// /// Guild has access to use commerce features (i.e. create store channels) /// [Obsolete("Store applications are EOL.")] CanCreateStoreChannels, /// /// Guild can enable Welcome Screen, Membership Screening, Stage Channels, News Channels and receives community updates. /// Furthermore the guild can apply as a partner and for the discovery (if the prerequisites are given). /// and is usable. /// HasCommunityEnabled, /// /// Guild is able to be discovered in the discovery. /// IsDiscoverable, /// /// Guild is able to be featured in the discovery. /// IsFeatureable, /// /// Guild has access to set an invite splash background. /// CanSetInviteSplash, /// /// Guild has enabled Membership Screening. /// HasMembershipScreeningEnabled, /// /// Guild has access to create news channels. /// is usable. /// CanCreateNewsChannels, /// /// Guild is partnered. /// IsPartnered, /// /// Guild has increased custom emoji slots. /// CanUploadMoreEmojis, /// /// Guild can be previewed before joining via Membership Screening or the discovery. /// HasPreviewEnabled, /// /// Guild has access to set a vanity URL. /// CanSetVanityUrl, /// /// Guild is verified. /// IsVerified, /// /// Guild has access to set 384kbps bitrate in voice (previously VIP voice servers). /// CanAccessVipRegions, /// /// Guild has enabled the welcome screen. /// HasWelcomeScreenEnabled, /// /// Guild has enabled ticketed events. /// HasTicketedEventsEnabled, /// /// Guild has enabled monetization. /// HasMonetizationEnabled, /// /// Guild has increased custom sticker slots. /// CanUploadMoreStickers, /// /// Guild has access to the three day archive time for threads. /// Needs Premium Tier 1 (). /// [Obsolete("Auto archive duration isn't locked to boosts anymore.")] CanSetThreadArchiveDurationThreeDays, /// /// Guild has access to the seven day archive time for threads. /// Needs Premium Tier 2 (). /// [Obsolete("Auto archive duration isn't locked to boosts anymore.")] CanSetThreadArchiveDurationSevenDays, /// /// Guild has access to create private threads. /// Needs Premium Tier 2 (). /// CanCreatePrivateThreads, /// /// Guild is a hub. /// is usable. /// IsHub, /// /// Guild is in a hub. /// https://github.com/discord/discord-api-docs/pull/3757/commits/4932d92c9d0c783861bc715bf7ebbabb15114e34 /// HasDirectoryEntry, /// /// Guild is linked to a hub. /// IsLinkedToHub, /// /// Guild has full access to threads. /// Old Feature. /// HasThreadTestingEnabled, /// /// Guild has access to threads. /// HasThreadsEnabled, /// /// Guild can set role icons. /// CanSetRoleIcons, /// /// Guild has the new thread permissions. /// Old Feature. /// HasNewThreadPermissions, /// /// Guild can set thread default auto archive duration. /// Old Feature. /// CanSetThreadDefaultAutoArchiveDuration, /// /// Guild has enabled role subscriptions. /// HasRoleSubscriptionsEnabled, /// /// Guild role subscriptions as purchaseable. /// RoleSubscriptionsIsAvailableForPurchase, /// /// Guild has premium tier 3 override. /// PremiumTierThreeOverride, /// /// Guild has access to text in voice. /// Restricted to . /// TextInVoiceEnabled, /// /// Guild can set an animated banner. /// Needs Premium Tier 3 (). /// CanSetAnimatedBanner, /// /// Guild can set an animated banner. /// Needs Premium Tier 3 (). /// [Obsolete("Feature was removed")] CanSetChannelBanner, /// /// Allows members to customize their avatar, banner and bio for that server. /// HasMemberProfiles, /// /// Guild is restricted to users with the badge. /// IsStaffOnly, /// /// Guild can use and setup the experimental auto moderation feature. /// CanSetupAutoModeration, /// /// Guild has access to home. /// GuildHomeTest, /// /// Guild has disabled invites. /// InvitesDisabled, + + /// + /// Currently unknown. + /// + ActivitiesAlpha, + + /// + /// Currently unknown. + /// + ActivitiesEmployee, + + /// + /// Currently unknown. + /// + ActivitiesInternalDev, + + /// + /// Currently unknown. + /// + AutomodTriggerKeywordFilter, + + /// + /// Currently unknown. + /// + AutomodTriggerMlSpamFilter, + + /// + /// Currently unknown. + /// + AutomodTriggerSpamLinkFilterGuild, + + /// + /// Currently unknown. + /// + AutomodDefaultList, + + /// + /// Currently unknown. + /// + Bfg, + + /// + /// Currently unknown. + /// + BoostingTiersExperimentMediumGuild, + + /// + /// Currently unknown. + /// + BoostingTiersExperimentSmallGuild, + + /// + /// Guild has early access features for bot and library developers. + /// + BotDeveloperEarlyAccess, + + /// + /// Currently unknown. + /// + CreatorMonetizable, + + /// + /// Currently unknown. + /// + CreatorMonetizableDisabled, + + /// + /// Currently unknown. + /// + CreatorMonetizableProvisional, + + /// + /// Currently unknown. + /// + CreatorMonetizableWhiteGlove, + + /// + /// Currently unknown. + /// + CreatorMonetizationApplicationAllowlist, + + /// + /// Guild is set as a support server for an app in App Directory. + /// + DeveloperSupportServer, + + /// + /// Guild was previously in the 2021-11_activities_baseline_engagement_bundle experiment. + /// + ExposedToActivitiesWtpExperiment, + + /// + /// Guild had early access to the user timeouts. + /// + GuildCommunicationDisabledGuilds, + + /// + /// Currently unknown. + /// + DisableGuildCommunication, + + /// + /// Guild has access to the Home feature. + /// + GuildHomeOverride, + + /// + /// Guild had early access to the Automod Default List. + /// + GuildAutomodDefaultList, + + /// + /// Guild had early access to approving membership manually. + /// + GuildMemberVerificationExperiment, + + /// + /// Guilds was previously in the 2022-05_mobile_web_role_subscription_purchase_page experiment. + /// + GuildRoleSubscriptionPurchaseFeedbackLoop, + + /// + /// Guild was previously in the 2022-01_guild_role_subscription_trials experiment. + /// + GuildRoleSubscriptionTrials, + + /// + /// Guild previously had access to voice channel activities and can bypass the boost level requirement. + /// + HadEarlyActivitiesAccess, + + /// + /// Allows the guild to have 1,000+ active threads. + /// + IncreasedThreadLimit, + + /// + /// Guild was previously in the 2022-05_mobile_web_role_subscription_purchase_page experiment. + /// + MobileWebRoleSubscriptionPurchasePage, + + /// + /// Shards connections to the guild to different nodes that relay information between each other. + /// + RelayEnabled, + + /// + /// Currently unknown. + /// + RestrictSpamRiskGuilds, + + /// + /// Allows guild's members to purchase role subscriptions. + /// + RoleSubscriptionsAvailableForPurchase, + + /// + /// Used by bot developers to test their bots with threads in guilds with 5 or less members and a bot. + /// + ThreadsEnabledTesting, + + /// + /// Guild had early access to the voice channel effects. + /// + VoiceChannelEffects, + + /// + /// Guild had early access to the soundboard feature. + /// + Soundboard, + + /// + /// Ability to create and use store channels. + /// + [Obsolete("This feature is depcreated")] + Commerce, + + /// + /// Currently unknown. + /// + [Obsolete("This feature is depcreated")] + ExposedToBoostingTiersExperiment, + + /// + /// Deprecated in favor of Community. + /// + [Obsolete("This feature is depcreated")] + PublicDisabled, + + /// + /// Deprecated in favor of Community. + /// + [Obsolete("This feature is depcreated")] + Public, + + /// + /// The guild can use the seven-day archive time for threads. + /// + [Obsolete("This feature is depcreated")] + SevenDayThreadArchive, + + /// + /// The guild can use the three-day archive time for threads. + /// + [Obsolete("This feature is depcreated")] + ThreeDayThreadArchive, + + /// + /// Previously used to control which servers were displayed under the "Featured" category in Discovery. + /// + [Obsolete("This feature is depcreated")] + Featurable, + + /// + /// Shards connections to the guild to different nodes that relay information between each other. + /// + [Obsolete("This feature is depcreated")] + ForceRelay, + + /// + /// Currently unknown. + /// + [Obsolete("This feature is depcreated")] + Lurkable, + + /// + /// Created for the Fortnite server blackout event on Oct 13, 2019, when viewing the member list it would show "There's nothing to see here.". + /// + [Obsolete("This feature is depcreated")] + MemberListDisabled, }