use bitflags::bitflags;
use serde::{Deserialize, Serialize};
use serde_repr::{Deserialize_repr, Serialize_repr};
use crate::models::payloads::emoji::{APIEmoji, APIPartialEmoji};
use crate::models::payloads::gateway::PresenceUpdateReceiveStatus;
use crate::models::payloads::oauth2::OAuth2Scopes;
use crate::models::payloads::permissions::APIRole;
use crate::models::payloads::sticker::APISticker;
use crate::models::payloads::user::{APIAvatarDecorationData, APIUser};
use crate::models::rest::common::Locale;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIBaseGuild {
pub id: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIUnavailableGuild {
#[serde(flatten)]
pub base: APIBaseGuild,
pub unavailable: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIPartialGuild {
#[serde(flatten)]
pub base: APIBaseGuild,
pub name: String,
pub icon: Option<String>,
pub splash: Option<String>,
pub banner: Option<Option<String>>,
pub description: Option<Option<String>>,
pub features: Option<Vec<GuildFeature>>,
pub verification_level: Option<GuildVerificationLevel>,
pub vanity_url_code: Option<Option<String>>,
pub welcome_screen: Option<APIGuildWelcomeScreen>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIWebhookSourceGuild {
pub icon: Option<String>,
pub id: String,
pub name: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIGuild {
pub icon_hash: Option<Option<String>>,
pub discovery_splash: Option<String>,
pub owner: Option<bool>,
pub owner_id: String,
pub permissions: Option<String>,
pub region: String,
pub afk_channel_id: Option<String>,
pub afk_timeout: i64,
pub widget_enabled: Option<bool>,
pub widget_channel_id: Option<Option<String>>,
pub verification_level: GuildVerificationLevel,
pub default_message_notifications: GuildDefaultMessageNotifications,
pub explicit_content_filter: GuildExplicitContentFilter,
pub roles: Vec<APIRole>,
pub emojis: Vec<APIEmoji>,
pub features: Vec<GuildFeature>,
pub mfa_level: GuildMFALevel,
pub application_id: Option<String>,
pub system_channel_id: Option<String>,
#[serde(with = "crate::utils::serde::flags_numeric")]
pub system_channel_flags: GuildSystemChannelFlags,
pub rules_channel_id: Option<String>,
pub max_presences: Option<Option<i64>>,
pub max_members: Option<i64>,
pub vanity_url_code: Option<String>,
pub description: Option<String>,
pub banner: Option<String>,
pub premium_tier: GuildPremiumTier,
pub premium_subscription_count: Option<i64>,
pub preferred_locale: Locale,
pub public_updates_channel_id: Option<String>,
pub max_video_channel_users: Option<i64>,
pub max_stage_video_channel_users: Option<i64>,
pub approximate_member_count: Option<i64>,
pub approximate_presence_count: Option<i64>,
pub nsfw_level: GuildNSFWLevel,
pub stickers: Vec<APISticker>,
pub premium_progress_bar_enabled: bool,
pub hub_type: Option<GuildHubType>,
pub safety_alerts_channel_id: Option<String>,
pub incidents_data: Option<APIIncidentsData>,
pub name: String,
pub icon: Option<String>,
pub splash: Option<String>,
pub id: String,
pub banner_partial: Option<Option<String>>,
pub description_partial: Option<Option<String>>,
pub features_partial: Option<Vec<GuildFeature>>,
pub verification_level_partial: Option<GuildVerificationLevel>,
pub vanity_url_code_partial: Option<Option<String>>,
pub welcome_screen: Option<APIGuildWelcomeScreen>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIPartialInteractionGuild {
#[serde(flatten)]
pub base: APIBaseGuild,
pub features: Vec<GuildFeature>,
pub locale: Locale,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum GuildDefaultMessageNotifications {
AllMessages = 0,
OnlyMentions = 1,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum GuildExplicitContentFilter {
Disabled = 0,
MembersWithoutRoles = 1,
AllMembers = 2,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum GuildMFALevel {
None = 0,
Elevated = 1,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum GuildNSFWLevel {
Default = 0,
Explicit = 1,
Safe = 2,
AgeRestricted = 3,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum GuildVerificationLevel {
None = 0,
Low = 1,
Medium = 2,
High = 3,
VeryHigh = 4,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum GuildPremiumTier {
None = 0,
Tier1 = 1,
Tier2 = 2,
Tier3 = 3,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum GuildHubType {
Default = 0,
HighSchool = 1,
College = 2,
}
bitflags! {
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
pub struct GuildSystemChannelFlags: u32 {
const SuppressJoinNotifications = 1 << 0;
const SuppressPremiumSubscriptions = 1 << 1;
const SuppressGuildReminderNotifications = 1 << 2;
const SuppressJoinNotificationReplies = 1 << 3;
const SuppressRoleSubscriptionPurchaseNotifications = 1 << 4;
const SuppressRoleSubscriptionPurchaseNotificationReplies = 1 << 5;
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum GuildFeature {
#[serde(rename = "ANIMATED_BANNER")]
AnimatedBanner,
#[serde(rename = "ANIMATED_ICON")]
AnimatedIcon,
#[serde(rename = "APPLICATION_COMMAND_PERMISSIONS_V2")]
ApplicationCommandPermissionsV2,
#[serde(rename = "AUTO_MODERATION")]
AutoModeration,
#[serde(rename = "BANNER")]
Banner,
#[serde(rename = "COMMUNITY")]
Community,
#[serde(rename = "CREATOR_MONETIZABLE_PROVISIONAL")]
CreatorMonetizableProvisional,
#[serde(rename = "CREATOR_STORE_PAGE")]
CreatorStorePage,
#[serde(rename = "DEVELOPER_SUPPORT_SERVER")]
DeveloperSupportServer,
#[serde(rename = "DISCOVERABLE")]
Discoverable,
#[serde(rename = "FEATURABLE")]
Featurable,
#[serde(rename = "HAS_DIRECTORY_ENTRY")]
HasDirectoryEntry,
#[serde(rename = "HUB")]
Hub,
#[serde(rename = "INVITES_DISABLED")]
InvitesDisabled,
#[serde(rename = "INVITE_SPLASH")]
InviteSplash,
#[serde(rename = "LINKED_TO_HUB")]
LinkedToHub,
#[serde(rename = "MEMBER_VERIFICATION_GATE_ENABLED")]
MemberVerificationGateEnabled,
#[serde(rename = "MORE_SOUNDBOARD")]
MoreSoundboard,
#[serde(rename = "MONETIZATION_ENABLED")]
MonetizationEnabled,
#[serde(rename = "MORE_STICKERS")]
MoreStickers,
#[serde(rename = "NEWS")]
News,
#[serde(rename = "PARTNERED")]
Partnered,
#[serde(rename = "PREVIEW_ENABLED")]
PreviewEnabled,
#[serde(rename = "PRIVATE_THREADS")]
PrivateThreads,
#[serde(rename = "RAID_ALERTS_DISABLED")]
RaidAlertsDisabled,
#[serde(rename = "RELAY_ENABLED")]
RelayEnabled,
#[serde(rename = "ROLE_ICONS")]
RoleIcons,
#[serde(rename = "ROLE_SUBSCRIPTIONS_AVAILABLE_FOR_PURCHASE")]
RoleSubscriptionsAvailableForPurchase,
#[serde(rename = "ROLE_SUBSCRIPTIONS_ENABLED")]
RoleSubscriptionsEnabled,
#[serde(rename = "SOUNDBOARD")]
Soundboard,
#[serde(rename = "TICKETED_EVENTS_ENABLED")]
TicketedEventsEnabled,
#[serde(rename = "VANITY_URL")]
VanityURL,
#[serde(rename = "VERIFIED")]
Verified,
#[serde(rename = "VIP_REGIONS")]
VIPRegions,
#[serde(rename = "WELCOME_SCREEN_ENABLED")]
WelcomeScreenEnabled,
#[serde(rename = "GUILD_TAGS")]
GuildTags,
#[serde(rename = "ENHANCED_ROLE_COLORS")]
EnhancedRoleColors,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIGuildPreview {
pub id: String,
pub name: String,
pub icon: Option<String>,
pub splash: Option<String>,
pub discovery_splash: Option<String>,
pub emojis: Vec<APIEmoji>,
pub features: Vec<GuildFeature>,
pub approximate_member_count: i64,
pub approximate_presence_count: i64,
pub description: String,
pub stickers: Vec<APISticker>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIGuildWidgetSettings {
pub enabled: bool,
pub channel_id: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIBaseGuildMember {
pub nick: Option<Option<String>>,
pub roles: Vec<String>,
pub premium_since: Option<Option<String>>,
pub pending: Option<bool>,
pub communication_disabled_until: Option<Option<String>>,
pub avatar_decoration_data: Option<Option<APIAvatarDecorationData>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIFlaggedGuildMember {
#[serde(with = "crate::utils::serde::flags_numeric_opt")]
pub flags: Option<GuildMemberFlags>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIGuildMemberJoined {
pub joined_at: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIGuildMemberAvatar {
pub avatar: Option<Option<String>>,
pub banner: Option<Option<String>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIBaseVoiceGuildMember {
pub deaf: bool,
pub mute: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIGuildMemberUser {
pub user: APIUser,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIGuildMember {
#[serde(flatten)]
pub base: APIBaseGuildMember,
#[serde(flatten)]
pub voice: APIBaseVoiceGuildMember,
#[serde(flatten)]
pub flagged: APIFlaggedGuildMember,
#[serde(flatten)]
pub avatar: APIGuildMemberAvatar,
#[serde(flatten)]
pub joined: APIGuildMemberJoined,
#[serde(flatten)]
pub user: APIGuildMemberUser,
}
bitflags! {
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct GuildMemberFlags: u32 {
const DidRejoin = 1 << 0;
const CompletedOnboarding = 1 << 1;
const BypassesVerification = 1 << 2;
const StartedOnboarding = 1 << 3;
const IsGuest = 1 << 4;
const StartedHomeActions = 1 << 5;
const CompletedHomeActions = 1 << 6;
const AutomodQuarantinedUsernameOrGuildNickname = 1 << 7;
const AutomodQuarantinedBio = 1 << 8;
const DmSettingsUpsellAcknowledged = 1 << 9;
const AutoModQuarantinedGuildTag = 1 << 10;
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIGuildIntegration {
pub id: String,
pub name: String,
pub r#type: APIGuildIntegrationType,
pub enabled: bool,
pub syncing: Option<bool>,
pub role_id: Option<String>,
pub enable_emoticons: Option<bool>,
pub expire_behavior: Option<IntegrationExpireBehavior>,
pub expire_grace_period: Option<i64>,
pub user: Option<APIUser>,
pub account: APIIntegrationAccount,
pub synced_at: Option<String>,
pub subscriber_count: Option<i64>,
pub revoked: Option<bool>,
pub application: Option<APIGuildIntegrationApplication>,
pub scopes: Option<Vec<OAuth2Scopes>>,
}
pub type APIGuildIntegrationType = APIGuildIntegrationTypeEnum;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum APIGuildIntegrationTypeEnum {
#[serde(rename = "discord")]
Discord,
#[serde(rename = "guild_subscription")]
GuildSubscription,
#[serde(rename = "twitch")]
Twitch,
#[serde(rename = "youtube")]
Youtube,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum IntegrationExpireBehavior {
RemoveRole = 0,
Kick = 1,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIIntegrationAccount {
pub id: String,
pub name: String,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIGuildIntegrationApplication {
pub id: String,
pub name: String,
pub icon: Option<String>,
pub description: String,
pub bot: Option<APIUser>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIBan {
pub reason: Option<String>,
pub user: APIUser,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIGuildWidget {
pub id: String,
pub name: String,
pub instant_invite: Option<String>,
pub channels: Vec<APIGuildWidgetChannel>,
pub members: Vec<APIGuildWidgetMember>,
pub presence_count: i64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIGuildWidgetChannel {
pub id: String,
pub name: String,
pub position: i64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIGuildWidgetMember {
pub id: String,
pub username: String,
pub discriminator: String,
pub avatar: Option<String>,
pub status: PresenceUpdateReceiveStatus,
pub activity: Option<APIGuildWidgetMemberActivity>,
pub avatar_url: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIGuildWidgetMemberActivity {
pub name: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum GuildWidgetStyle {
#[serde(rename = "shield")]
Shield,
#[serde(rename = "banner1")]
Banner1,
#[serde(rename = "banner2")]
Banner2,
#[serde(rename = "banner3")]
Banner3,
#[serde(rename = "banner4")]
Banner4,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIGuildWelcomeScreen {
pub description: Option<String>,
pub welcome_channels: Vec<APIGuildWelcomeScreenChannel>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIGuildWelcomeScreenChannel {
pub channel_id: String,
pub description: String,
pub emoji_id: Option<String>,
pub emoji_name: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIGuildMembershipScreening {
pub version: String,
pub form_fields: Vec<APIGuildMembershipScreeningField>,
pub description: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIGuildMembershipScreeningField {
pub field_type: MembershipScreeningFieldType,
pub label: String,
pub values: Option<Vec<String>>,
pub required: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum MembershipScreeningFieldType {
#[serde(rename = "TERMS")]
Terms,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIGuildOnboarding {
pub guild_id: String,
pub prompts: Vec<APIGuildOnboardingPrompt>,
pub default_channel_ids: Vec<String>,
pub enabled: bool,
pub mode: GuildOnboardingMode,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIGuildOnboardingPrompt {
pub id: String,
pub options: Vec<APIGuildOnboardingPromptOption>,
pub title: String,
pub single_select: bool,
pub required: bool,
pub in_onboarding: bool,
pub r#type: GuildOnboardingPromptType,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct APIGuildOnboardingPromptOption {
pub id: String,
pub channel_ids: Vec<String>,
pub role_ids: Vec<String>,
pub emoji: APIPartialEmoji,
pub title: String,
pub description: Option<String>,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum GuildOnboardingMode {
OnboardingDefault = 0,
OnboardingAdvanced = 1,
}
#[derive(Debug, Copy, Clone, Eq, PartialEq, Serialize_repr, Deserialize_repr)]
#[repr(u8)]
pub enum GuildOnboardingPromptType {
MultipleChoice = 0,
Dropdown = 1,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct APIIncidentsData {
pub invites_disabled_until: Option<String>,
pub dms_disabled_until: Option<String>,
pub dm_spam_detected_at: Option<Option<String>>,
pub raid_detected_at: Option<Option<String>>,
}