///|
/// A guild's onboarding configuration.
#derive(ToJson, FromJson, Debug)
pub(all) struct GuildOnboarding {
guild_id : GuildId
prompts : Array[OnboardingPrompt]
default_channel_ids : Array[ChannelId]
enabled : Bool
mode : OnboardingMode
}
///|
/// A question presented during guild onboarding.
#derive(ToJson(fields(typ(rename="type"))), FromJson(fields(typ(rename="type"))), Debug)
pub(all) struct OnboardingPrompt {
id : GenericId
typ : OnboardingPromptType
options : Array[OnboardingPromptOption]
title : String
single_select : Bool
required : Bool
in_onboarding : Bool
}
///|
/// A selectable answer to an onboarding prompt.
#derive(ToJson, FromJson, Debug)
pub(all) struct OnboardingPromptOption {
id : GenericId
channel_ids : Array[ChannelId]
role_ids : Array[RoleId]
emoji : Emoji?
emoji_id : EmojiId?
emoji_name : String?
emoji_animated : Bool?
title : String
description : Nullable[String]
}
///|
/// The input control used by an onboarding prompt.
#derive(Eq, Debug)
#non_exhaustive
pub(all) enum OnboardingPromptType {
MultipleChoice
Dropdown
Unknown(Int32)
}
///|
/// The Discord integer value of this `OnboardingPromptType`.
pub fn OnboardingPromptType::to_int(self : OnboardingPromptType) -> Int32 {
match self {
MultipleChoice => 0
Dropdown => 1
Unknown(value) => value
}
}
///|
/// The `OnboardingPromptType` for its Discord integer value; unknown values become `Unknown(n)`.
pub fn OnboardingPromptType::from_int(value : Int32) -> OnboardingPromptType {
match value {
0 => MultipleChoice
1 => Dropdown
value => Unknown(value)
}
}
///|
/// Encodes the `OnboardingPromptType` as its Discord integer value.
pub impl ToJson for OnboardingPromptType with fn to_json(self) {
Json::number(self.to_int().to_double())
}
///|
/// Decodes the `OnboardingPromptType` from a JSON number; unknown values become `Unknown(n)`.
pub impl @json.FromJson for OnboardingPromptType with fn from_json(json, path) {
match json {
Number(value, ..) => OnboardingPromptType::from_int(value.to_int())
_ =>
raise JsonDecodeError((path, "expected onboarding prompt type (number)"))
}
}
///|
/// How extensively onboarding is configured for a guild.
#derive(Eq, Debug)
#non_exhaustive
pub(all) enum OnboardingMode {
Default
Advanced
Unknown(Int32)
}
///|
/// The Discord integer value of this `OnboardingMode`.
pub fn OnboardingMode::to_int(self : OnboardingMode) -> Int32 {
match self {
Default => 0
Advanced => 1
Unknown(value) => value
}
}
///|
/// The `OnboardingMode` for its Discord integer value; unknown values become `Unknown(n)`.
pub fn OnboardingMode::from_int(value : Int32) -> OnboardingMode {
match value {
0 => Default
1 => Advanced
value => Unknown(value)
}
}
///|
/// Encodes the `OnboardingMode` as its Discord integer value.
pub impl ToJson for OnboardingMode with fn to_json(self) {
Json::number(self.to_int().to_double())
}
///|
/// Decodes the `OnboardingMode` from a JSON number; unknown values become `Unknown(n)`.
pub impl @json.FromJson for OnboardingMode with fn from_json(json, path) {
match json {
Number(value, ..) => OnboardingMode::from_int(value.to_int())
_ => raise JsonDecodeError((path, "expected onboarding mode (number)"))
}
}