1use super::User;
2
3auto_derived!(
4 #[derive(Default)]
6 pub struct Bot {
7 #[cfg_attr(feature = "serde", serde(rename = "_id"))]
9 pub id: String,
10
11 #[cfg_attr(feature = "serde", serde(rename = "owner"))]
13 pub owner_id: String,
14 pub token: String,
16 pub public: bool,
19
20 #[cfg_attr(
22 feature = "serde",
23 serde(skip_serializing_if = "crate::if_false", default)
24 )]
25 pub analytics: bool,
26 #[cfg_attr(
28 feature = "serde",
29 serde(skip_serializing_if = "crate::if_false", default)
30 )]
31 pub discoverable: bool,
32 #[cfg_attr(
34 feature = "serde",
35 serde(skip_serializing_if = "String::is_empty", default)
36 )]
37 pub interactions_url: String,
38 #[cfg_attr(
40 feature = "serde",
41 serde(skip_serializing_if = "String::is_empty", default)
42 )]
43 pub terms_of_service_url: String,
44 #[cfg_attr(
46 feature = "serde",
47 serde(skip_serializing_if = "String::is_empty", default)
48 )]
49 pub privacy_policy_url: String,
50
51 #[cfg_attr(
53 feature = "serde",
54 serde(skip_serializing_if = "crate::if_zero_u32", default)
55 )]
56 pub flags: u32,
57 }
58
59 pub enum FieldsBot {
61 Token,
62 InteractionsURL,
63 }
64
65 #[repr(u32)]
67 pub enum BotFlags {
68 Verified = 1,
69 Official = 2,
70 }
71
72 pub struct PublicBot {
74 #[cfg_attr(feature = "serde", serde(rename = "_id"))]
76 pub id: String,
77
78 pub username: String,
80 #[cfg_attr(
82 feature = "serde",
83 serde(skip_serializing_if = "String::is_empty", default)
84 )]
85 pub avatar: String,
86 #[cfg_attr(
88 feature = "serde",
89 serde(skip_serializing_if = "String::is_empty", default)
90 )]
91 pub description: String,
92 }
93
94 pub struct FetchBotResponse {
96 pub bot: Bot,
98 pub user: User,
100 }
101
102 #[derive(Default)]
104 #[cfg_attr(feature = "validator", derive(validator::Validate))]
105 pub struct DataCreateBot {
106 #[cfg_attr(
108 feature = "validator",
109 validate(length(min = 2, max = 32), regex = "super::RE_USERNAME")
110 )]
111 pub name: String,
112 }
113
114 #[derive(Default)]
116 #[cfg_attr(feature = "validator", derive(validator::Validate))]
117 pub struct DataEditBot {
118 #[cfg_attr(
120 feature = "validator",
121 validate(length(min = 2, max = 32), regex = "super::RE_USERNAME")
122 )]
123 #[serde(skip_serializing_if = "Option::is_none")]
124 pub name: Option<String>,
125 pub public: Option<bool>,
127 pub analytics: Option<bool>,
131 #[cfg_attr(feature = "validator", validate(length(min = 1, max = 2048)))]
133 pub interactions_url: Option<String>,
134 #[cfg_attr(feature = "validator", validate(length(min = 1)))]
136 pub remove: Option<Vec<FieldsBot>>,
137 }
138
139 #[serde(untagged)]
141 pub enum InviteBotDestination {
142 Server {
144 server: String,
146 },
147 Group {
149 group: String,
151 },
152 }
153
154 pub struct OwnedBotsResponse {
160 pub bots: Vec<Bot>,
162 pub users: Vec<User>,
164 }
165
166 pub struct BotWithUserResponse {
168 #[serde(flatten)]
169 pub bot: Bot,
170 pub user: User,
171 }
172);