Add custom implementation to allow simple-array behaviour for GuildFeatures
This commit is contained in:
parent
6bae67a862
commit
cb6a4352bc
|
@ -1,8 +1,20 @@
|
|||
use serde::{Deserialize, Serialize};
|
||||
#[cfg(feature = "sqlx")]
|
||||
use sqlx::{
|
||||
database::{HasArguments, HasValueRef},
|
||||
encode::IsNull,
|
||||
error::BoxDynError,
|
||||
Decode, Encode, MySql,
|
||||
};
|
||||
use std::fmt::{Display, Formatter};
|
||||
use std::io::Write;
|
||||
use std::ops::{Deref, DerefMut};
|
||||
use std::str::FromStr;
|
||||
|
||||
use crate::types::config::types::subconfigs::guild::{
|
||||
autojoin::AutoJoinConfiguration, discovery::DiscoverConfiguration,
|
||||
};
|
||||
use crate::types::{Error, GuildError};
|
||||
|
||||
#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
|
||||
#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
|
||||
|
@ -19,7 +31,7 @@ pub enum GuildFeatures {
|
|||
AutoModTriggerSpamLinkFilter,
|
||||
AutoModTriggerUserProfile,
|
||||
Banner,
|
||||
BFG,
|
||||
Bfg,
|
||||
BoostingTiersExperimentMediumGuild,
|
||||
BoostingTiersExperimentSmallGuild,
|
||||
BotDeveloperEarlyAccess,
|
||||
|
@ -67,7 +79,7 @@ pub enum GuildFeatures {
|
|||
GuildWebPageVanityURL,
|
||||
HadEarlyActivitiesAccess,
|
||||
HasDirectoryEntry,
|
||||
HideFromExperimentUI,
|
||||
HideFromExperimentUi,
|
||||
Hub,
|
||||
IncreasedThreadLimit,
|
||||
InternalEmployeeOnly,
|
||||
|
@ -85,6 +97,7 @@ pub enum GuildFeatures {
|
|||
News,
|
||||
NewThreadPermissions,
|
||||
Partnered,
|
||||
#[serde(rename = "PREMIUM_TIER_3_OVERRIDE")]
|
||||
PremiumTier3Override,
|
||||
PreviewEnabled,
|
||||
RaidAlertsDisabled,
|
||||
|
@ -98,7 +111,7 @@ pub enum GuildFeatures {
|
|||
SharedCanvasFriendsAndFamilyTest,
|
||||
Soundboard,
|
||||
SummariesEnabled,
|
||||
SummariesEnabledGA,
|
||||
SummariesEnabledGa,
|
||||
SummariesDisabledByUser,
|
||||
SummariesEnabledByUser,
|
||||
TextInStageEnabled,
|
||||
|
@ -109,11 +122,400 @@ pub enum GuildFeatures {
|
|||
ThreadsOnlyChannel,
|
||||
TicketedEventsEnabled,
|
||||
TicketingEnabled,
|
||||
VanityUrls,
|
||||
VanityUrl,
|
||||
Verified,
|
||||
VIPRegions,
|
||||
VipRegions,
|
||||
VoiceChannelEffects,
|
||||
WelcomeScreenEnabled,
|
||||
|
||||
/// Spacebar Specific
|
||||
AliasableNames,
|
||||
AllowInvalidChannelName,
|
||||
AllowUnnamedChannels,
|
||||
CrossChannelReplies,
|
||||
IrcLikeCategoryNames,
|
||||
InvitesClosed,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
|
||||
pub struct GuildFeaturesList(Vec<GuildFeatures>);
|
||||
|
||||
impl Deref for GuildFeaturesList {
|
||||
type Target = Vec<GuildFeatures>;
|
||||
fn deref(&self) -> &Self::Target {
|
||||
&self.0
|
||||
}
|
||||
}
|
||||
|
||||
impl DerefMut for GuildFeaturesList {
|
||||
fn deref_mut(&mut self) -> &mut Self::Target {
|
||||
&mut self.0
|
||||
}
|
||||
}
|
||||
|
||||
impl Display for GuildFeaturesList {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
||||
let features = self
|
||||
.iter()
|
||||
.map(|x| serde_json::to_string(x).unwrap().replace('"', ""))
|
||||
.collect::<Vec<_>>()
|
||||
.join(",");
|
||||
write!(f, "{features}")
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "sqlx")]
|
||||
impl<'r> sqlx::Decode<'r, sqlx::MySql> for GuildFeaturesList {
|
||||
fn decode(value: <MySql as HasValueRef<'r>>::ValueRef) -> Result<Self, BoxDynError> {
|
||||
let v = <&str as Decode<sqlx::MySql>>::decode(value)?;
|
||||
Ok(Self(
|
||||
v.split(',')
|
||||
.filter(|f| !f.is_empty())
|
||||
.flat_map(GuildFeatures::from_str)
|
||||
.collect(),
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "sqlx")]
|
||||
impl<'q> sqlx::Encode<'q, sqlx::MySql> for GuildFeaturesList {
|
||||
fn encode_by_ref(&self, buf: &mut <MySql as HasArguments<'q>>::ArgumentBuffer) -> IsNull {
|
||||
if self.is_empty() {
|
||||
return IsNull::Yes;
|
||||
}
|
||||
let features = self
|
||||
.iter()
|
||||
.map(|x| x.to_str())
|
||||
.collect::<Vec<_>>()
|
||||
.join(",");
|
||||
|
||||
let _ = buf.write(features.as_bytes());
|
||||
IsNull::No
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "sqlx")]
|
||||
impl sqlx::Type<sqlx::MySql> for GuildFeaturesList {
|
||||
fn type_info() -> sqlx::mysql::MySqlTypeInfo {
|
||||
<&str as sqlx::Type<sqlx::MySql>>::type_info()
|
||||
}
|
||||
|
||||
fn compatible(ty: &sqlx::mysql::MySqlTypeInfo) -> bool {
|
||||
<&str as sqlx::Type<sqlx::MySql>>::compatible(ty)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "sqlx")]
|
||||
impl sqlx::TypeInfo for GuildFeaturesList {
|
||||
fn is_null(&self) -> bool {
|
||||
false
|
||||
}
|
||||
|
||||
fn name(&self) -> &str {
|
||||
"TEXT"
|
||||
}
|
||||
}
|
||||
|
||||
impl FromStr for GuildFeatures {
|
||||
type Err = Error;
|
||||
|
||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||
let s = s.to_ascii_uppercase();
|
||||
match s.as_str() {
|
||||
"ACTIVITIES_ALPHA" => Ok(GuildFeatures::ActivitiesAlpha),
|
||||
"ACTIVITIES_EMPLOYEE" => Ok(GuildFeatures::ActivitiesEmployee),
|
||||
"ACTIVITIES_INTERNAL_DEV" => Ok(GuildFeatures::ActivitiesInternalDev),
|
||||
"ANIMATED_BANNER" => Ok(GuildFeatures::AnimatedBanner),
|
||||
"ANIMATED_ICON" => Ok(GuildFeatures::AnimatedIcon),
|
||||
"APPLICATION_COMMAND_PERMISSIONS_V2" => {
|
||||
Ok(GuildFeatures::ApplicationCommandPermissionsV2)
|
||||
}
|
||||
"AUTO_MODERATION" => Ok(GuildFeatures::AutoModeration),
|
||||
"AUTO_MOD_TRIGGER_KEYWORD_FILTER" => Ok(GuildFeatures::AutoModTriggerKeywordFilter),
|
||||
"AUTO_MOD_TRIGGER_ML_SPAM_FILTER" => Ok(GuildFeatures::AutoModTriggerMLSpamFilter),
|
||||
"AUTO_MOD_TRIGGER_SPAM_LINK_FILTER" => Ok(GuildFeatures::AutoModTriggerSpamLinkFilter),
|
||||
"AUTO_MOD_TRIGGER_USER_PROFILE" => Ok(GuildFeatures::AutoModTriggerUserProfile),
|
||||
"BANNER" => Ok(GuildFeatures::Banner),
|
||||
"BFG" => Ok(GuildFeatures::Bfg),
|
||||
"BOOSTING_TIERS_EXPERIMENT_MEDIUM_GUILD" => {
|
||||
Ok(GuildFeatures::BoostingTiersExperimentMediumGuild)
|
||||
}
|
||||
"BOOSTING_TIERS_EXPERIMENT_SMALL_GUILD" => {
|
||||
Ok(GuildFeatures::BoostingTiersExperimentSmallGuild)
|
||||
}
|
||||
"BOT_DEVELOPER_EARLY_ACCESS" => Ok(GuildFeatures::BotDeveloperEarlyAccess),
|
||||
"BURST_REACTIONS" => Ok(GuildFeatures::BurstReactions),
|
||||
"COMMUNITY_CANARY" => Ok(GuildFeatures::CommunityCanary),
|
||||
"COMMUNITY_EXP_LARGE_GATED" => Ok(GuildFeatures::CommunityExpLargeGated),
|
||||
"COMMUNITY_EXP_LARGE_UNGATED" => Ok(GuildFeatures::CommunityExpLargeUngated),
|
||||
"COMMUNITY_EXP_MEDIUM" => Ok(GuildFeatures::CommunityExpMedium),
|
||||
"CHANNEL_EMOJIS_GENERATED" => Ok(GuildFeatures::ChannelEmojisGenerated),
|
||||
"CHANNEL_HIGHLIGHTS" => Ok(GuildFeatures::ChannelHighlights),
|
||||
"CHANNEL_HIGHLIGHTS_DISABLED" => Ok(GuildFeatures::ChannelHighlightsDisabled),
|
||||
"CLYDE_ENABLED" => Ok(GuildFeatures::ClydeEnabled),
|
||||
"CLYDE_EXPERIMENT_ENABLED" => Ok(GuildFeatures::ClydeExperimentEnabled),
|
||||
"CLYDE_DISABLED" => Ok(GuildFeatures::ClydeDisabled),
|
||||
"COMMUNITY" => Ok(GuildFeatures::Community),
|
||||
"CREATOR_ACCEPTED_NEW_TERMS" => Ok(GuildFeatures::CreatorAcceptedNewTerms),
|
||||
"CREATOR_MONETIZABLE" => Ok(GuildFeatures::CreatorMonetizable),
|
||||
"CREATOR_MONETIZABLE_DISABLED" => Ok(GuildFeatures::CreatorMonetizableDisabled),
|
||||
"CREATOR_MONETIZABLE_PENDING_NEW_OWNER_ONBOARDING" => {
|
||||
Ok(GuildFeatures::CreatorMonetizablePendingNewOwnerOnboarding)
|
||||
}
|
||||
"CREATOR_MONETIZABLE_PROVISIONAL" => Ok(GuildFeatures::CreatorMonetizableProvisional),
|
||||
"CREATOR_MONETIZABLE_RESTRICTED" => Ok(GuildFeatures::CreatorMonetizableRestricted),
|
||||
"CREATOR_MONETIZABLE_WHITEGLOVE" => Ok(GuildFeatures::CreatorMonetizableWhiteglove),
|
||||
"CREATOR_MONETIZABLE_APPLICATION_ALLOWLIST" => {
|
||||
Ok(GuildFeatures::CreatorMonetizableApplicationAllowlist)
|
||||
}
|
||||
"CREATE_STORE_PAGE" => Ok(GuildFeatures::CreateStorePage),
|
||||
"DEVELOPER_SUPPORT_SERVER" => Ok(GuildFeatures::DeveloperSupportServer),
|
||||
"DISCOVERABLE_DISABLED" => Ok(GuildFeatures::DiscoverableDisabled),
|
||||
"DISCOVERABLE" => Ok(GuildFeatures::Discoverable),
|
||||
"ENABLED_DISCOVERABLE_BEFORE" => Ok(GuildFeatures::EnabledDiscoverableBefore),
|
||||
"EXPOSED_TO_ACTIVITIES_WTP_EXPERIMENT" => {
|
||||
Ok(GuildFeatures::ExposedToActivitiesWTPExperiment)
|
||||
}
|
||||
"GUESTS_ENABLED" => Ok(GuildFeatures::GuestsEnabled),
|
||||
"GUILD_AUTOMOD_DEFAULT_LIST" => Ok(GuildFeatures::GuildAutomodDefaultList),
|
||||
"GUILD_COMMUNICATION_DISABLED_GUILDS" => {
|
||||
Ok(GuildFeatures::GuildCommunicationDisabledGuilds)
|
||||
}
|
||||
"GUILD_HOME_DEPRECATION_OVERRIDE" => Ok(GuildFeatures::GuildHomeDeprecationOverride),
|
||||
"GUILD_HOME_OVERRIDE" => Ok(GuildFeatures::GuildHomeOverride),
|
||||
"GUILD_HOME_TEST" => Ok(GuildFeatures::GuildHomeTest),
|
||||
"GUILD_MEMBER_VERIFICATION_EXPERIMENT" => {
|
||||
Ok(GuildFeatures::GuildMemberVerificationExperiment)
|
||||
}
|
||||
"GUILD_ONBOARDING" => Ok(GuildFeatures::GuildOnboarding),
|
||||
"GUILD_ONBOARDING_ADMIN_ONLY" => Ok(GuildFeatures::GuildOnboardingAdminOnly),
|
||||
"GUILD_ONBOARDING_EVER_ENABLED" => Ok(GuildFeatures::GuildOnboardingEverEnabled),
|
||||
"GUILD_ONBOARDING_HAS_PROMPTS" => Ok(GuildFeatures::GuildOnboardingHasPrompts),
|
||||
"GUILD_ROLE_SUBSCRIPTION" => Ok(GuildFeatures::GuildRoleSubscription),
|
||||
"GUILD_ROLE_SUBSCRIPTION_PURCHASE_FEEDBACK_LOOP" => {
|
||||
Ok(GuildFeatures::GuildRoleSubscriptionPurchaseFeedbackLoop)
|
||||
}
|
||||
"GUILD_ROLE_SUBSCRIPTION_TRIALS" => Ok(GuildFeatures::GuildRoleSubscriptionTrials),
|
||||
"GUILD_SERVER_GUIDE" => Ok(GuildFeatures::GuildServerGuide),
|
||||
"GUILD_WEB_PAGE_VANITY_URL" => Ok(GuildFeatures::GuildWebPageVanityURL),
|
||||
"HAD_EARLY_ACTIVITIES_ACCESS" => Ok(GuildFeatures::HadEarlyActivitiesAccess),
|
||||
"HAS_DIRECTORY_ENTRY" => Ok(GuildFeatures::HasDirectoryEntry),
|
||||
"HIDE_FROM_EXPERIMENT_UI" => Ok(GuildFeatures::HideFromExperimentUi),
|
||||
"HUB" => Ok(GuildFeatures::Hub),
|
||||
"INCREASED_THREAD_LIMIT" => Ok(GuildFeatures::IncreasedThreadLimit),
|
||||
"INTERNAL_EMPLOYEE_ONLY" => Ok(GuildFeatures::InternalEmployeeOnly),
|
||||
"INVITE_SPLASH" => Ok(GuildFeatures::InviteSplash),
|
||||
"INVITES_DISABLED" => Ok(GuildFeatures::InvitesDisabled),
|
||||
"LINKED_TO_HUB" => Ok(GuildFeatures::LinkedToHub),
|
||||
"MARKETPLACES_CONNECTION_ROLES" => Ok(GuildFeatures::MarketplacesConnectionRoles),
|
||||
"MEMBER_PROFILES" => Ok(GuildFeatures::MemberProfiles),
|
||||
"MEMBER_VERIFICATION_GATE_ENABLED" => Ok(GuildFeatures::MemberVerificationGateEnabled),
|
||||
"MEMBER_VERIFICATION_MANUAL_APPROVAL" => {
|
||||
Ok(GuildFeatures::MemberVerificationManualApproval)
|
||||
}
|
||||
"MOBILE_WEB_ROLE_SUBSCRIPTION_PURCHASE_PAGE" => {
|
||||
Ok(GuildFeatures::MobileWebRoleSubscriptionPurchasePage)
|
||||
}
|
||||
"MONETIZATION_ENABLED" => Ok(GuildFeatures::MonetizationEnabled),
|
||||
"MORE_EMOJI" => Ok(GuildFeatures::MoreEmoji),
|
||||
"MORE_STICKERS" => Ok(GuildFeatures::MoreStickers),
|
||||
"NEWS" => Ok(GuildFeatures::News),
|
||||
"NEW_THREAD_PERMISSIONS" => Ok(GuildFeatures::NewThreadPermissions),
|
||||
"PARTNERED" => Ok(GuildFeatures::Partnered),
|
||||
"PREMIUM_TIER_3_OVERRIDE" => Ok(GuildFeatures::PremiumTier3Override),
|
||||
"PREVIEW_ENABLED" => Ok(GuildFeatures::PreviewEnabled),
|
||||
"RAID_ALERTS_DISABLED" => Ok(GuildFeatures::RaidAlertsDisabled),
|
||||
"RELAY_ENABLED" => Ok(GuildFeatures::RelayEnabled),
|
||||
"RESTRICT_SPAM_RISK_GUILD" => Ok(GuildFeatures::RestrictSpamRiskGuild),
|
||||
"ROLE_ICONS" => Ok(GuildFeatures::RoleIcons),
|
||||
"ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE" => {
|
||||
Ok(GuildFeatures::RoleSubscriptionsAvailableForPurchase)
|
||||
}
|
||||
"ROLE_SUBSCRIPTIONS_ENABLED" => Ok(GuildFeatures::RoleSubscriptionsEnabled),
|
||||
"ROLE_SUBSCRIPTIONS_ENABLED_FOR_PURCHASE" => {
|
||||
Ok(GuildFeatures::RoleSubscriptionsEnabledForPurchase)
|
||||
}
|
||||
"SHARD" => Ok(GuildFeatures::Shard),
|
||||
"SHARED_CANVAS_FRIENDS_AND_FAMILY_TEST" => {
|
||||
Ok(GuildFeatures::SharedCanvasFriendsAndFamilyTest)
|
||||
}
|
||||
"SOUNDBOARD" => Ok(GuildFeatures::Soundboard),
|
||||
"SUMMARIES_ENABLED" => Ok(GuildFeatures::SummariesEnabled),
|
||||
"SUMMARIES_ENABLED_GA" => Ok(GuildFeatures::SummariesEnabledGa),
|
||||
"SUMMARIES_DISABLED_BY_USER" => Ok(GuildFeatures::SummariesDisabledByUser),
|
||||
"SUMMARIES_ENABLED_BY_USER" => Ok(GuildFeatures::SummariesEnabledByUser),
|
||||
"TEXT_IN_STAGE_ENABLED" => Ok(GuildFeatures::TextInStageEnabled),
|
||||
"TEXT_IN_VOICE_ENABLED" => Ok(GuildFeatures::TextInVoiceEnabled),
|
||||
"THREADS_ENABLED_TESTING" => Ok(GuildFeatures::ThreadsEnabledTesting),
|
||||
"THREADS_ENABLED" => Ok(GuildFeatures::ThreadsEnabled),
|
||||
"THREAD_DEFAULT_AUTO_ARCHIVE_DURATION" => {
|
||||
Ok(GuildFeatures::ThreadDefaultAutoArchiveDuration)
|
||||
}
|
||||
"THREADS_ONLY_CHANNEL" => Ok(GuildFeatures::ThreadsOnlyChannel),
|
||||
"TICKETED_EVENTS_ENABLED" => Ok(GuildFeatures::TicketedEventsEnabled),
|
||||
"TICKETING_ENABLED" => Ok(GuildFeatures::TicketingEnabled),
|
||||
"VANITY_URL" => Ok(GuildFeatures::VanityUrl),
|
||||
"VERIFIED" => Ok(GuildFeatures::Verified),
|
||||
"VIP_REGIONS" => Ok(GuildFeatures::VipRegions),
|
||||
"VOICE_CHANNEL_EFFECTS" => Ok(GuildFeatures::VoiceChannelEffects),
|
||||
"WELCOME_SCREEN_ENABLED" => Ok(GuildFeatures::WelcomeScreenEnabled),
|
||||
"ALIASABLE_NAMES" => Ok(GuildFeatures::AliasableNames),
|
||||
"ALLOW_INVALID_CHANNEL_NAME" => Ok(GuildFeatures::AllowInvalidChannelName),
|
||||
"ALLOW_UNNAMED_CHANNELS" => Ok(GuildFeatures::AllowUnnamedChannels),
|
||||
"CROSS_CHANNEL_REPLIES" => Ok(GuildFeatures::CrossChannelReplies),
|
||||
"IRC_LIKE_CATEGORY_NAMES" => Ok(GuildFeatures::IrcLikeCategoryNames),
|
||||
"INVITES_CLOSED" => Ok(GuildFeatures::InvitesClosed),
|
||||
_ => Err(Error::Guild(GuildError::InvalidGuildFeature)),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl GuildFeatures {
|
||||
pub fn to_str(&self) -> &'static str {
|
||||
match *self {
|
||||
GuildFeatures::ActivitiesAlpha => "ACTIVITIES_ALPHA",
|
||||
GuildFeatures::ActivitiesEmployee => "ACTIVITIES_EMPLOYEE",
|
||||
GuildFeatures::ActivitiesInternalDev => "ACTIVITIES_INTERNAL_DEV",
|
||||
GuildFeatures::AnimatedBanner => "ANIMATED_BANNER",
|
||||
GuildFeatures::AnimatedIcon => "ANIMATED_ICON",
|
||||
GuildFeatures::ApplicationCommandPermissionsV2 => "APPLICATION_COMMAND_PERMISSIONS_V2",
|
||||
GuildFeatures::AutoModeration => "AUTO_MODERATION",
|
||||
GuildFeatures::AutoModTriggerKeywordFilter => "AUTO_MOD_TRIGGER_KEYWORD_FILTER",
|
||||
GuildFeatures::AutoModTriggerMLSpamFilter => "AUTO_MOD_TRIGGER_ML_SPAM_FILTER",
|
||||
GuildFeatures::AutoModTriggerSpamLinkFilter => "AUTO_MOD_TRIGGER_SPAM_LINK_FILTER",
|
||||
GuildFeatures::AutoModTriggerUserProfile => "AUTO_MOD_TRIGGER_USER_PROFILE",
|
||||
GuildFeatures::Banner => "BANNER",
|
||||
GuildFeatures::Bfg => "BFG",
|
||||
GuildFeatures::BoostingTiersExperimentMediumGuild => {
|
||||
"BOOSTING_TIERS_EXPERIMENT_MEDIUM_GUILD"
|
||||
}
|
||||
GuildFeatures::BoostingTiersExperimentSmallGuild => {
|
||||
"BOOSTING_TIERS_EXPERIMENT_SMALL_GUILD"
|
||||
}
|
||||
GuildFeatures::BotDeveloperEarlyAccess => "BOT_DEVELOPER_EARLY_ACCESS",
|
||||
GuildFeatures::BurstReactions => "BURST_REACTIONS",
|
||||
GuildFeatures::CommunityCanary => "COMMUNITY_CANARY",
|
||||
GuildFeatures::CommunityExpLargeGated => "COMMUNITY_EXP_LARGE_GATED",
|
||||
GuildFeatures::CommunityExpLargeUngated => "COMMUNITY_EXP_LARGE_UNGATED",
|
||||
GuildFeatures::CommunityExpMedium => "COMMUNITY_EXP_MEDIUM",
|
||||
GuildFeatures::ChannelEmojisGenerated => "CHANNEL_EMOJIS_GENERATED",
|
||||
GuildFeatures::ChannelHighlights => "CHANNEL_HIGHLIGHTS",
|
||||
GuildFeatures::ChannelHighlightsDisabled => "CHANNEL_HIGHLIGHTS_DISABLED",
|
||||
GuildFeatures::ClydeEnabled => "CLYDE_ENABLED",
|
||||
GuildFeatures::ClydeExperimentEnabled => "CLYDE_EXPERIMENT_ENABLED",
|
||||
GuildFeatures::ClydeDisabled => "CLYDE_DISABLED",
|
||||
GuildFeatures::Community => "COMMUNITY",
|
||||
GuildFeatures::CreatorAcceptedNewTerms => "CREATOR_ACCEPTED_NEW_TERMS",
|
||||
GuildFeatures::CreatorMonetizable => "CREATOR_MONETIZABLE",
|
||||
GuildFeatures::CreatorMonetizableDisabled => "CREATOR_MONETIZABLE_DISABLED",
|
||||
GuildFeatures::CreatorMonetizablePendingNewOwnerOnboarding => {
|
||||
"CREATOR_MONETIZABLE_PENDING_NEW_OWNER_ONBOARDING"
|
||||
}
|
||||
GuildFeatures::CreatorMonetizableProvisional => "CREATOR_MONETIZABLE_PROVISIONAL",
|
||||
GuildFeatures::CreatorMonetizableRestricted => "CREATOR_MONETIZABLE_RESTRICTED",
|
||||
GuildFeatures::CreatorMonetizableWhiteglove => "CREATOR_MONETIZABLE_WHITEGLOVE",
|
||||
GuildFeatures::CreatorMonetizableApplicationAllowlist => {
|
||||
"CREATOR_MONETIZABLE_APPLICATION_ALLOWLIST"
|
||||
}
|
||||
GuildFeatures::CreateStorePage => "CREATE_STORE_PAGE",
|
||||
GuildFeatures::DeveloperSupportServer => "DEVELOPER_SUPPORT_SERVER",
|
||||
GuildFeatures::DiscoverableDisabled => "DISCOVERABLE_DISABLED",
|
||||
GuildFeatures::Discoverable => "DISCOVERABLE",
|
||||
GuildFeatures::EnabledDiscoverableBefore => "ENABLED_DISCOVERABLE_BEFORE",
|
||||
GuildFeatures::ExposedToActivitiesWTPExperiment => {
|
||||
"EXPOSED_TO_ACTIVITIES_WTP_EXPERIMENT"
|
||||
}
|
||||
GuildFeatures::GuestsEnabled => "GUESTS_ENABLED",
|
||||
GuildFeatures::GuildAutomodDefaultList => "GUILD_AUTOMOD_DEFAULT_LIST",
|
||||
GuildFeatures::GuildCommunicationDisabledGuilds => {
|
||||
"GUILD_COMMUNICATION_DISABLED_GUILDS"
|
||||
}
|
||||
GuildFeatures::GuildHomeDeprecationOverride => "GUILD_HOME_DEPRECATION_OVERRIDE",
|
||||
GuildFeatures::GuildHomeOverride => "GUILD_HOME_OVERRIDE",
|
||||
GuildFeatures::GuildHomeTest => "GUILD_HOME_TEST",
|
||||
GuildFeatures::GuildMemberVerificationExperiment => {
|
||||
"GUILD_MEMBER_VERIFICATION_EXPERIMENT"
|
||||
}
|
||||
GuildFeatures::GuildOnboarding => "GUILD_ONBOARDING",
|
||||
GuildFeatures::GuildOnboardingAdminOnly => "GUILD_ONBOARDING_ADMIN_ONLY",
|
||||
GuildFeatures::GuildOnboardingEverEnabled => "GUILD_ONBOARDING_EVER_ENABLED",
|
||||
GuildFeatures::GuildOnboardingHasPrompts => "GUILD_ONBOARDING_HAS_PROMPTS",
|
||||
GuildFeatures::GuildRoleSubscription => "GUILD_ROLE_SUBSCRIPTION",
|
||||
GuildFeatures::GuildRoleSubscriptionPurchaseFeedbackLoop => {
|
||||
"GUILD_ROLE_SUBSCRIPTION_PURCHASE_FEEDBACK_LOOP"
|
||||
}
|
||||
GuildFeatures::GuildRoleSubscriptionTrials => "GUILD_ROLE_SUBSCRIPTION_TRIALS",
|
||||
GuildFeatures::GuildServerGuide => "GUILD_SERVER_GUIDE",
|
||||
GuildFeatures::GuildWebPageVanityURL => "GUILD_WEB_PAGE_VANITY_URL",
|
||||
GuildFeatures::HadEarlyActivitiesAccess => "HAD_EARLY_ACTIVITIES_ACCESS",
|
||||
GuildFeatures::HasDirectoryEntry => "HAS_DIRECTORY_ENTRY",
|
||||
GuildFeatures::HideFromExperimentUi => "HIDE_FROM_EXPERIMENT_UI",
|
||||
GuildFeatures::Hub => "HUB",
|
||||
GuildFeatures::IncreasedThreadLimit => "INCREASED_THREAD_LIMIT",
|
||||
GuildFeatures::InternalEmployeeOnly => "INTERNAL_EMPLOYEE_ONLY",
|
||||
GuildFeatures::InviteSplash => "INVITE_SPLASH",
|
||||
GuildFeatures::InvitesDisabled => "INVITES_DISABLED",
|
||||
GuildFeatures::LinkedToHub => "LINKED_TO_HUB",
|
||||
GuildFeatures::MarketplacesConnectionRoles => "MARKETPLACES_CONNECTION_ROLES",
|
||||
GuildFeatures::MemberProfiles => "MEMBER_PROFILES",
|
||||
GuildFeatures::MemberVerificationGateEnabled => "MEMBER_VERIFICATION_GATE_ENABLED",
|
||||
GuildFeatures::MemberVerificationManualApproval => {
|
||||
"MEMBER_VERIFICATION_MANUAL_APPROVAL"
|
||||
}
|
||||
GuildFeatures::MobileWebRoleSubscriptionPurchasePage => {
|
||||
"MOBILE_WEB_ROLE_SUBSCRIPTION_PURCHASE_PAGE"
|
||||
}
|
||||
GuildFeatures::MonetizationEnabled => "MONETIZATION_ENABLED",
|
||||
GuildFeatures::MoreEmoji => "MORE_EMOJI",
|
||||
GuildFeatures::MoreStickers => "MORE_STICKERS",
|
||||
GuildFeatures::News => "NEWS",
|
||||
GuildFeatures::NewThreadPermissions => "NEW_THREAD_PERMISSIONS",
|
||||
GuildFeatures::Partnered => "PARTNERED",
|
||||
GuildFeatures::PremiumTier3Override => "PREMIUM_TIER_3_OVERRIDE",
|
||||
GuildFeatures::PreviewEnabled => "PREVIEW_ENABLED",
|
||||
GuildFeatures::RaidAlertsDisabled => "RAID_ALERTS_DISABLED",
|
||||
GuildFeatures::RelayEnabled => "RELAY_ENABLED",
|
||||
GuildFeatures::RestrictSpamRiskGuild => "RESTRICT_SPAM_RISK_GUILD",
|
||||
GuildFeatures::RoleIcons => "ROLE_ICONS",
|
||||
GuildFeatures::RoleSubscriptionsAvailableForPurchase => {
|
||||
"ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE"
|
||||
}
|
||||
GuildFeatures::RoleSubscriptionsEnabled => "ROLE_SUBSCRIPTIONS_ENABLED",
|
||||
GuildFeatures::RoleSubscriptionsEnabledForPurchase => {
|
||||
"ROLE_SUBSCRIPTIONS_ENABLED_FOR_PURCHASE"
|
||||
}
|
||||
GuildFeatures::Shard => "SHARD",
|
||||
GuildFeatures::SharedCanvasFriendsAndFamilyTest => {
|
||||
"SHARED_CANVAS_FRIENDS_AND_FAMILY_TEST"
|
||||
}
|
||||
GuildFeatures::Soundboard => "SOUNDBOARD",
|
||||
GuildFeatures::SummariesEnabled => "SUMMARIES_ENABLED",
|
||||
GuildFeatures::SummariesEnabledGa => "SUMMARIES_ENABLED_GA",
|
||||
GuildFeatures::SummariesDisabledByUser => "SUMMARIES_DISABLED_BY_USER",
|
||||
GuildFeatures::SummariesEnabledByUser => "SUMMARIES_ENABLED_BY_USER",
|
||||
GuildFeatures::TextInStageEnabled => "TEXT_IN_STAGE_ENABLED",
|
||||
GuildFeatures::TextInVoiceEnabled => "TEXT_IN_VOICE_ENABLED",
|
||||
GuildFeatures::ThreadsEnabledTesting => "THREADS_ENABLED_TESTING",
|
||||
GuildFeatures::ThreadsEnabled => "THREADS_ENABLED",
|
||||
GuildFeatures::ThreadDefaultAutoArchiveDuration => {
|
||||
"THREAD_DEFAULT_AUTO_ARCHIVE_DURATION"
|
||||
}
|
||||
GuildFeatures::ThreadsOnlyChannel => "THREADS_ONLY_CHANNEL",
|
||||
GuildFeatures::TicketedEventsEnabled => "TICKETED_EVENTS_ENABLED",
|
||||
GuildFeatures::TicketingEnabled => "TICKETING_ENABLED",
|
||||
GuildFeatures::VanityUrl => "VANITY_URL",
|
||||
GuildFeatures::Verified => "VERIFIED",
|
||||
GuildFeatures::VipRegions => "VIP_REGIONS",
|
||||
GuildFeatures::VoiceChannelEffects => "VOICE_CHANNEL_EFFECTS",
|
||||
GuildFeatures::WelcomeScreenEnabled => "WELCOME_SCREEN_ENABLED",
|
||||
GuildFeatures::AliasableNames => "ALIASABLE_NAMES",
|
||||
GuildFeatures::AllowInvalidChannelName => "ALLOW_INVALID_CHANNEL_NAME",
|
||||
GuildFeatures::AllowUnnamedChannels => "ALLOW_UNNAMED_CHANNELS",
|
||||
GuildFeatures::CrossChannelReplies => "CROSS_CHANNEL_REPLIES",
|
||||
GuildFeatures::IrcLikeCategoryNames => "IRC_LIKE_CATEGORY_NAMES",
|
||||
GuildFeatures::InvitesClosed => "INVITES_CLOSED",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
|
||||
|
|
|
@ -2,6 +2,7 @@ use chrono::{DateTime, Utc};
|
|||
use serde::{Deserialize, Serialize};
|
||||
use serde_repr::{Deserialize_repr, Serialize_repr};
|
||||
|
||||
use crate::types::types::guild_configuration::GuildFeaturesList;
|
||||
use crate::types::{
|
||||
entities::{Channel, Emoji, RoleObject, Sticker, User, VoiceState, Webhook},
|
||||
interfaces::WelcomeScreenObject,
|
||||
|
@ -35,8 +36,9 @@ pub struct Guild {
|
|||
pub roles: Vec<RoleObject>,
|
||||
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||
pub emojis: Vec<Emoji>,
|
||||
//#[cfg_attr(feature = "sqlx", sqlx(try_from = "String"))]
|
||||
pub features: GuildFeaturesList,
|
||||
#[cfg_attr(feature = "sqlx", sqlx(skip))]
|
||||
pub features: Option<Vec<String>>,
|
||||
pub application_id: Option<String>,
|
||||
pub system_channel_id: Option<Snowflake>,
|
||||
pub system_channel_flags: Option<i32>,
|
||||
|
|
|
@ -14,6 +14,15 @@ pub enum Error {
|
|||
|
||||
#[error(transparent)]
|
||||
FieldFormat(#[from] FieldFormatError),
|
||||
|
||||
#[error(transparent)]
|
||||
Guild(#[from] GuildError),
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Eq, thiserror::Error)]
|
||||
pub enum GuildError {
|
||||
#[error("Invalid Guild Feature")]
|
||||
InvalidGuildFeature,
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Eq, thiserror::Error)]
|
||||
|
|
Loading…
Reference in New Issue