use serde::Serialize;
use serde_repr::Serialize_repr;
#[derive(Debug, Serialize)]
pub struct WelcomeImage {
#[serde(skip_serializing)]
pub template: WelcomeImageTemplate,
#[serde(skip_serializing)]
pub background: WelcomeImageBackground,
#[serde(rename = "bg")]
pub background_url: String,
#[serde(rename = "type")]
pub card_type: String,
pub username: String,
pub discriminator: String,
#[serde(rename = "avatar")]
pub avatar_url: String,
#[serde(rename = "guildName")]
pub guild_name: String,
#[serde(rename = "memberCount")]
pub member_count: u64,
#[serde(rename = "textcolor")]
pub text_color: WelcomeImageTextColor,
pub font: u8,
}
#[derive(Debug, Serialize_repr)]
#[repr(u8)]
pub enum WelcomeImageTemplate {
A = 1,
B,
C,
D,
E,
F,
G,
}
#[derive(Debug)]
pub enum WelcomeImageBackground {
Stars,
Stars2,
RainbowGradient,
Rainbow,
Sunset,
Night,
BlobDay,
BlobNight,
Space,
Gaming1,
Gaming3,
Gaming2,
Gaming4,
}
#[derive(Debug, Serialize)]
#[serde(rename_all = "lowercase")]
pub enum WelcomeImageTextColor {
Red,
Orange,
Yellow,
Green,
Blue,
Indigo,
Purple,
Pink,
Black,
White,
}
impl WelcomeImage {
pub fn new<T: ToString, U: ToString, V: ToString, W: ToString>(
username: T,
discriminator: U,
avatar_url: V,
guild_name: W,
member_count: u64,
) -> Self {
Self {
template: WelcomeImageTemplate::A,
background: WelcomeImageBackground::Stars,
background_url: "".into(),
card_type: "join".into(),
username: username.to_string(),
discriminator: discriminator.to_string(),
avatar_url: avatar_url.to_string(),
guild_name: guild_name.to_string(),
member_count,
text_color: WelcomeImageTextColor::White,
font: 1,
}
}
pub fn set_template(mut self, template: WelcomeImageTemplate) -> Self {
self.template = template;
self
}
pub fn set_background(mut self, background: WelcomeImageBackground) -> Self {
self.background = background;
self
}
pub fn set_background_url<T: ToString>(mut self, background_url: T) -> Self {
self.background_url = background_url.to_string();
self
}
pub fn set_font(mut self, font: u8) -> Self {
self.font = font.max(1).min(7);
self
}
pub fn set_text_color(mut self, text_color: WelcomeImageTextColor) -> Self {
self.text_color = text_color;
self
}
pub fn set_leave(mut self, leave: bool) -> Self {
if leave {
self.card_type = "leave".into();
}
self
}
}