1use std::collections::{BTreeMap, BTreeSet};
5
6use crate::{
7 content::{FormValue, OutgoingMessage, RichLayout},
8 conversation::{ConversationPermission, ConversationRef, PermissionSet},
9 interaction::{Modal, PlatformNativeData},
10 source::{message::File, user::User},
11};
12
13#[derive(Clone, Debug, Default, PartialEq, Eq)]
14pub struct Localized<T> {
15 pub default: T,
16 pub translations: BTreeMap<String, T>,
17}
18
19#[derive(Clone, Debug, Default, PartialEq, Eq)]
20pub enum CommandKind {
21 #[default]
22 ChatInput,
23 User,
24 Message,
25 PlatformNative(String),
26}
27
28#[derive(Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord)]
29pub enum CommandContext {
30 Direct,
31 Group,
32 Channel,
33 Administrator,
34 #[default]
35 Any,
36 PlatformNative(String),
37}
38
39#[derive(Clone, Debug, PartialEq, Eq)]
40pub struct CommandChoice {
41 pub name: Localized<String>,
42 pub value: String,
43}
44
45#[derive(Clone, Debug, PartialEq, Eq)]
46pub enum CommandOptionType {
47 Subcommand,
48 SubcommandGroup,
49 String,
50 Integer,
51 Number,
52 Boolean,
53 User,
54 Conversation,
55 Role,
56 Mentionable,
57 Attachment,
58 PlatformNative(String),
59}
60
61#[derive(Clone, Debug, PartialEq)]
62pub struct CommandOption {
63 pub name: Localized<String>,
64 pub description: Localized<String>,
65 pub kind: CommandOptionType,
66 pub required: bool,
67 pub choices: Vec<CommandChoice>,
68 pub options: Vec<CommandOption>,
69 pub autocomplete: bool,
70 pub min_value: Option<f64>,
71 pub max_value: Option<f64>,
72 pub min_length: Option<u32>,
73 pub max_length: Option<u32>,
74 pub allowed_conversation_kinds: Vec<crate::conversation::ConversationKind>,
75 pub platform_data: Option<PlatformNativeData>,
76}
77
78#[derive(Clone, Debug, PartialEq)]
79pub struct CommandDefinition {
80 pub id: Option<String>,
81 pub name: Localized<String>,
82 pub description: Localized<String>,
83 pub kind: CommandKind,
84 pub options: Vec<CommandOption>,
85 pub default_permissions: Option<PermissionSet>,
86 pub contexts: BTreeSet<CommandContext>,
87 pub ephemeral: bool,
88 pub platform_data: Option<PlatformNativeData>,
89}
90
91#[derive(Clone, Debug, PartialEq)]
92pub struct CommandInvocation {
93 pub command_id: Option<String>,
94 pub name: String,
95 pub path: Vec<String>,
96 pub options: BTreeMap<String, Vec<FormValue>>,
97 pub raw_text: Option<String>,
98 pub target_user: Option<User>,
99 pub target_message: Option<crate::conversation::MessageRef>,
100 pub permissions: BTreeSet<ConversationPermission>,
101 pub locale: Option<String>,
102 pub platform_data: Option<PlatformNativeData>,
103}
104
105#[derive(Clone, Debug, PartialEq)]
106pub struct SuggestionRequest {
107 pub id: String,
108 pub query: String,
109 pub field_id: Option<String>,
110 pub user: User,
111 pub conversation: Option<ConversationRef>,
112 pub limit: Option<u32>,
113 pub cursor: Option<String>,
114 pub platform_data: Option<PlatformNativeData>,
115}
116
117#[derive(Clone, Debug, PartialEq)]
118pub struct Suggestion {
119 pub id: String,
120 pub title: String,
121 pub description: Option<String>,
122 pub image: Option<File>,
123 pub value: FormValue,
124 pub message: Option<OutgoingMessage>,
125 pub platform_data: Option<PlatformNativeData>,
126}
127
128#[derive(Clone, Debug, PartialEq)]
130pub struct SuggestionSelection {
131 pub result_id: String,
132 pub query: Option<String>,
133 pub user: User,
134 pub conversation: Option<ConversationRef>,
135 pub message_id: Option<String>,
136 pub platform_data: Option<PlatformNativeData>,
137}
138
139#[derive(Clone, Debug, Default, PartialEq, Eq)]
140pub enum MiniAppMode {
141 #[default]
142 Embedded,
143 FullScreen,
144 External,
145 PlatformNative(String),
146}
147
148#[derive(Clone, Debug, PartialEq)]
149pub struct MiniAppLaunch {
150 pub url: String,
151 pub mode: MiniAppMode,
152 pub initialization_data: Option<serde_json::Value>,
153 pub platform_data: Option<PlatformNativeData>,
154}
155
156#[derive(Clone, Debug, Default, PartialEq, Eq)]
157pub enum VerificationState {
158 Verified,
159 Invalid,
160 #[default]
161 Unverified,
162}
163
164#[derive(Clone, Debug, PartialEq)]
165pub struct MiniAppEvent {
166 pub query_id: Option<String>,
167 pub user: User,
168 pub conversation: Option<ConversationRef>,
169 pub data: serde_json::Value,
170 pub verification: VerificationState,
171 pub platform_data: Option<PlatformNativeData>,
172}
173
174#[derive(Clone, Debug, Default, PartialEq, Eq)]
175pub enum AppSurfaceKind {
176 ChatMenu,
177 Home,
178 Modal,
179 Sidebar,
180 RichMenu,
181 #[default]
182 Unknown,
183 PlatformNative(String),
184}
185
186#[derive(Clone, Debug, PartialEq)]
187pub enum SurfaceContent {
188 Layout(RichLayout),
189 Modal(Modal),
190 MiniApp(MiniAppLaunch),
191 PlatformNative(PlatformNativeData),
192}
193
194#[derive(Clone, Debug, PartialEq)]
195pub struct AppSurface {
196 pub id: Option<String>,
197 pub title: Option<String>,
198 pub kind: AppSurfaceKind,
199 pub content: SurfaceContent,
200 pub user_id: Option<String>,
201 pub conversation: Option<ConversationRef>,
202 pub platform_data: Option<PlatformNativeData>,
203}
204
205#[derive(Clone, Debug, Default, PartialEq)]
206pub struct BotProfile {
207 pub names: BTreeMap<String, String>,
208 pub descriptions: BTreeMap<String, String>,
209 pub short_descriptions: BTreeMap<String, String>,
210 pub avatar: Option<File>,
211 pub default_permissions: Option<PermissionSet>,
212 pub platform_data: Option<PlatformNativeData>,
213}