some_random_api/structs/
welcome_image.rs

1use serde::Serialize;
2use serde_repr::Serialize_repr;
3
4#[derive(Debug, Serialize)]
5pub struct WelcomeImage {
6    #[serde(skip_serializing)]
7    pub template: WelcomeImageTemplate,
8
9    #[serde(skip_serializing)]
10    pub background: WelcomeImageBackground,
11
12    #[serde(rename = "bg")]
13    pub background_url: String,
14
15    #[serde(rename = "type")]
16    pub card_type: String,
17
18    pub username: String,
19    pub discriminator: String,
20
21    #[serde(rename = "avatar")]
22    pub avatar_url: String,
23
24    #[serde(rename = "guildName")]
25    pub guild_name: String,
26
27    #[serde(rename = "memberCount")]
28    pub member_count: u64,
29
30    #[serde(rename = "textcolor")]
31    pub text_color: WelcomeImageTextColor,
32
33    pub font: u8,
34}
35
36#[derive(Debug, Serialize_repr)]
37#[repr(u8)]
38pub enum WelcomeImageTemplate {
39    A = 1,
40    B,
41    C,
42    D,
43    E,
44    F,
45    G,
46}
47
48#[derive(Debug)]
49pub enum WelcomeImageBackground {
50    Stars,
51    Stars2,
52    RainbowGradient,
53    Rainbow,
54    Sunset,
55    Night,
56    BlobDay,
57    BlobNight,
58    Space,
59    Gaming1,
60    Gaming3,
61    Gaming2,
62    Gaming4,
63}
64
65#[derive(Debug, Serialize)]
66#[serde(rename_all = "lowercase")]
67pub enum WelcomeImageTextColor {
68    Red,
69    Orange,
70    Yellow,
71    Green,
72    Blue,
73    Indigo,
74    Purple,
75    Pink,
76    Black,
77    White,
78}
79
80impl WelcomeImage {
81    /// Create an instnace of [`WelcomeImage`]
82    ///
83    /// # Examples
84    ///
85    /// ```
86    /// use some_random_api::{WelcomeImage, WelcomeImageBackground, WelcomeImageTextColor};
87    ///
88    /// WelcomeImage::new(
89    ///     "username",
90    ///     "discriminator"
91    ///     "avatar url",
92    ///     "guild name",
93    ///     100, // Member count
94    /// )
95    /// .set_background(WelcomeImageBackground::Stars)
96    /// .set_text_color(WelcomeImageTextColor::Red)
97    /// .set_leave(true);
98    /// ```
99    pub fn new<T: ToString, U: ToString, V: ToString, W: ToString>(
100        username: T,
101        discriminator: U,
102        avatar_url: V,
103        guild_name: W,
104        member_count: u64,
105    ) -> Self {
106        Self {
107            template: WelcomeImageTemplate::A,
108            background: WelcomeImageBackground::Stars,
109            background_url: "".into(),
110            card_type: "join".into(),
111            username: username.to_string(),
112            discriminator: discriminator.to_string(),
113            avatar_url: avatar_url.to_string(),
114            guild_name: guild_name.to_string(),
115            member_count,
116            text_color: WelcomeImageTextColor::White,
117            font: 1,
118        }
119    }
120
121    /// Sets the welcome image template
122    pub fn set_template(mut self, template: WelcomeImageTemplate) -> Self {
123        self.template = template;
124        self
125    }
126
127    /// Sets the welcome image background
128    pub fn set_background(mut self, background: WelcomeImageBackground) -> Self {
129        self.background = background;
130        self
131    }
132
133    /// Sets the welcome image background URL
134    pub fn set_background_url<T: ToString>(mut self, background_url: T) -> Self {
135        self.background_url = background_url.to_string();
136        self
137    }
138
139    /// Sets the welcome image font (1-7)
140    pub fn set_font(mut self, font: u8) -> Self {
141        self.font = font.max(1).min(7);
142        self
143    }
144
145    /// Sets the welcome image text color
146    pub fn set_text_color(mut self, text_color: WelcomeImageTextColor) -> Self {
147        self.text_color = text_color;
148        self
149    }
150
151    /// Sets whether the welcome image is for a member that left
152    pub fn set_leave(mut self, leave: bool) -> Self {
153        if leave {
154            self.card_type = "leave".into();
155        }
156
157        self
158    }
159}