Skip to main content

onebot_api/message/
send_segment.rs

1use super::utils::*;
2use serde::Serialize;
3
4#[derive(Serialize, Debug, Clone)]
5#[serde(tag = "type")]
6pub enum SendSegment {
7	#[serde(rename = "text")]
8	Text { data: TextData },
9
10	#[serde(rename = "face")]
11	Face { data: FaceData },
12
13	#[serde(rename = "image")]
14	Image { data: ImageData },
15
16	#[serde(rename = "record")]
17	Record { data: RecordData },
18
19	#[serde(rename = "video")]
20	Video { data: VideoData },
21
22	#[serde(rename = "at")]
23	At { data: AtData },
24
25	#[serde(rename = "rps")]
26	Rps { data: RpsData },
27
28	#[serde(rename = "dice")]
29	Dice { data: DiceData },
30
31	#[serde(rename = "shake")]
32	Shake { data: ShakeData },
33
34	#[serde(rename = "poke")]
35	Poke { data: PokeData },
36
37	#[serde(rename = "anonymous")]
38	Anonymous { data: AnonymousData },
39
40	#[serde(rename = "share")]
41	Share { data: ShareData },
42
43	#[serde(rename = "contact")]
44	Contact { data: ContactData },
45
46	#[serde(rename = "location")]
47	Location { data: LocationData },
48
49	#[serde(rename = "music")]
50	Music { data: MusicData },
51
52	#[serde(rename = "reply")]
53	Reply { data: ReplyData },
54
55	#[serde(rename = "forward")]
56	Forward { data: ForwardData },
57
58	#[serde(rename = "node")]
59	Node { data: NodeData },
60
61	#[serde(rename = "xml")]
62	Xml { data: XmlData },
63
64	#[serde(rename = "json")]
65	Json { data: JsonData },
66}
67
68#[derive(Serialize, Debug, Clone)]
69pub struct TextData {
70	/// # 说明
71	/// 纯文本内容
72	pub text: String,
73}
74
75#[derive(Serialize, Debug, Clone)]
76pub struct FaceData {
77	/// # 说明
78	/// QQ 表情 ID
79	/// # 可能的值
80	/// 见 [QQ 表情 ID 表](https://github.com/richardchien/coolq-http-api/wiki/%E8%A1%A8%E6%83%85-CQ-%E7%A0%81-ID-%E8%A1%A8)
81	pub id: String,
82}
83
84#[derive(Serialize, Debug, Clone)]
85pub struct ImageData {
86	/// # 说明
87	/// 图片文件名
88	/// # TIPS
89	/// 发送时,`file` 参数除了支持使用收到的图片文件名直接发送外,还支持:
90	/// - 绝对路径,例如 `file:///C:\\Users\Richard\Pictures\1.png`,格式使用 [`file` URI](https://tools.ietf.org/html/rfc8089)
91	/// - 网络 URL,例如 `http://i1.piimg.com/567571/fdd6e7b6d93f1ef0.jpg`
92	/// - Base64 编码,例如 `base64://iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAIAAADJt1n/AAAAKElEQVQ4EWPk5+RmIBcwkasRpG9UM4mhNxpgowFGMARGEwnBIEJVAAAdBgBNAZf+QAAAAABJRU5ErkJggg==`
93	pub file: String,
94	#[serde(rename = "type")]
95	/// # 说明
96	/// 图片类型,`flash` 表示闪照,无此参数表示普通图片
97	/// # 可能的值
98	/// `flash`
99	pub image_type: Option<ImageType>,
100	/// # 说明
101	/// 只在通过网络 URL 发送时有效,表示是否使用已缓存的文件,默认 `1`
102	/// # 可能的值
103	/// `0` `1`
104	pub cache: Option<bool>,
105	/// # 说明
106	/// 只在通过网络 URL 发送时有效,表示是否通过代理下载文件(需通过环境变量或配置文件配置代理),默认 `1`
107	/// # 可能的值
108	/// `0` `1`
109	pub proxy: Option<bool>,
110	/// # 说明
111	/// 只在通过网络 URL 发送时有效,单位秒,表示下载网络文件的超时时间,默认不超时
112	pub timeout: Option<i32>,
113}
114
115#[derive(Serialize, Debug, Clone)]
116pub struct RecordData {
117	/// # 说明
118	/// 语音文件名
119	/// # TIPS
120	/// 发送时,`file` 参数除了支持使用收到的语音文件名直接发送外,还支持其它形式,参考 [`ImageData::file`]。
121	pub file: String,
122	/// # 说明
123	/// 发送时可选,默认 `0`,设置为 `1` 表示变声
124	/// # 可能的值
125	/// `0` `1`
126	pub magic: String,
127	/// # 说明
128	/// 只在通过网络 URL 发送时有效,表示是否使用已缓存的文件,默认 `1`
129	/// # 可能的值
130	/// `0` `1`
131	pub cache: Option<bool>,
132	/// # 说明
133	/// 只在通过网络 URL 发送时有效,表示是否通过代理下载文件(需通过环境变量或配置文件配置代理),默认 `1`
134	/// # 可能的值
135	/// `0` `1`
136	pub proxy: Option<bool>,
137	/// # 说明
138	/// 只在通过网络 URL 发送时有效,单位秒,表示下载网络文件的超时时间,默认不超时
139	pub timeout: Option<i32>,
140}
141
142#[derive(Serialize, Debug, Clone)]
143pub struct VideoData {
144	/// # 说明
145	/// 视频文件名
146	/// # TIPS
147	/// 发送时,`file` 参数除了支持使用收到的语音文件名直接发送外,还支持其它形式,参考 [`ImageData::file`]。
148	pub file: String,
149	/// # 说明
150	/// 只在通过网络 URL 发送时有效,表示是否使用已缓存的文件,默认 `1`
151	/// # 可能的值
152	/// `0` `1`
153	pub cache: Option<bool>,
154	/// # 说明
155	/// 只在通过网络 URL 发送时有效,表示是否通过代理下载文件(需通过环境变量或配置文件配置代理),默认 `1`
156	/// # 可能的值
157	/// `0` `1`
158	pub proxy: Option<bool>,
159	/// # 说明
160	/// 只在通过网络 URL 发送时有效,单位秒,表示下载网络文件的超时时间,默认不超时
161	pub timeout: Option<i32>,
162}
163
164#[derive(Serialize, Debug, Clone)]
165pub struct AtData {
166	/// # 说明
167	/// @的 QQ 号,`all` 表示全体成员
168	/// # 可能的值
169	/// QQ 号、`all`
170	pub qq: AtType,
171}
172
173#[derive(Serialize, Debug, Clone)]
174pub struct RpsData {}
175
176#[derive(Serialize, Debug, Clone)]
177pub struct DiceData {}
178
179#[derive(Serialize, Debug, Clone)]
180pub struct ShakeData {}
181
182#[derive(Serialize, Debug, Clone)]
183pub struct PokeData {
184	#[serde(rename = "type")]
185	/// # 说明
186	/// 类型
187	/// # 可能的值
188	/// 见 [Mirai 的 PokeMessage 类](https://github.com/mamoe/mirai/blob/f5eefae7ecee84d18a66afce3f89b89fe1584b78/mirai-core/src/commonMain/kotlin/net.mamoe.mirai/message/data/HummerMessage.kt#L49)
189	pub poke_type: String,
190	/// # 说明
191	/// ID
192	/// # 可能的值
193	/// 同上
194	pub id: String,
195}
196
197#[derive(Serialize, Debug, Clone)]
198pub struct AnonymousData {
199	/// # 说明
200	/// 可选,表示无法匿名时是否继续发送
201	/// # 可能的值
202	/// `0` `1`
203	pub ignore: Option<bool>,
204}
205
206#[derive(Serialize, Debug, Clone)]
207pub struct ShareData {
208	/// # 说明
209	/// URL
210	pub url: String,
211	/// # 说明
212	/// 标题
213	pub title: String,
214	/// # 说明
215	/// 发送时可选,内容描述
216	pub content: String,
217	/// # 说明
218	/// 发送时可选,图片 URL
219	pub image: String,
220}
221
222#[derive(Serialize, Debug, Clone)]
223pub struct ContactData {
224	#[serde(rename = "type")]
225	/// # 说明
226	/// 推荐好友/群
227	pub contact_type: ContactType,
228	/// # 说明
229	/// 被推荐人的 QQ 号/被推荐群的群号
230	pub id: String,
231}
232
233#[derive(Serialize, Debug, Clone)]
234pub struct LocationData {
235	/// # 说明
236	/// 纬度
237	pub lat: String,
238	/// # 说明
239	/// 经度
240	pub lon: String,
241	/// # 说明
242	/// 发送时可选,标题
243	pub title: Option<String>,
244	/// # 说明
245	/// 发送时可选,内容描述
246	pub content: Option<String>,
247}
248
249#[derive(Serialize, Debug, Clone)]
250pub struct MusicData {
251	#[serde(rename = "type")]
252	/// # 说明
253	/// 分别表示使用 QQ 音乐、网易云音乐、虾米音乐 / 表示音乐自定义分享
254	/// # 可能的值
255	/// `qq` `163` `xm` `custom`
256	pub music_type: MusicType,
257	/// # 说明
258	/// 歌曲 ID
259	pub id: Option<String>,
260	/// # 说明
261	/// 点击后跳转目标 URL
262	pub url: Option<String>,
263	/// # 说明
264	/// 音乐 URL
265	pub audio: Option<String>,
266	/// # 说明
267	/// 标题
268	pub title: Option<String>,
269	/// # 说明
270	/// 发送时可选,内容描述
271	pub content: Option<String>,
272	/// # 说明
273	/// 发送时可选,图片 URL
274	pub image: Option<String>,
275}
276
277#[derive(Serialize, Debug, Clone)]
278pub struct ReplyData {
279	/// # 说明
280	/// 回复时引用的消息 ID
281	pub id: String,
282}
283
284#[derive(Serialize, Debug, Clone)]
285pub struct ForwardData {}
286
287#[derive(Serialize, Debug, Clone)]
288pub struct NodeData {
289	/// # 说明
290	/// 转发的消息 ID
291	pub id: Option<String>,
292	/// # 说明
293	/// 发送者 QQ 号
294	pub user_id: Option<String>,
295	/// # 说明
296	/// 发送者昵称
297	pub nickname: Option<String>,
298	/// # 说明
299	/// 消息内容,支持发送消息时的 `message` 数据类型,见 [API 的参数](https://github.com/botuniverse/onebot-11/blob/master/api/#%E5%8F%82%E6%95%B0)
300	pub content: Option<Vec<SendSegment>>,
301}
302
303#[derive(Serialize, Debug, Clone)]
304pub struct XmlData {
305	/// # 说明
306	/// XML 内容
307	pub data: String,
308}
309
310#[derive(Serialize, Debug, Clone)]
311pub struct JsonData {
312	/// 说明
313	/// JSON 内容
314	pub data: String,
315}