Make attachment sending work!
This commit is contained in:
parent
32f337015a
commit
1d2ebdd3cd
|
@ -46,53 +46,30 @@ pub mod messages {
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
} else {
|
} else {
|
||||||
|
for (index, attachment) in message.attachments.iter_mut().enumerate() {
|
||||||
|
attachment.get_mut(index).unwrap().set_id(index as i16);
|
||||||
|
}
|
||||||
let mut form = reqwest::multipart::Form::new();
|
let mut form = reqwest::multipart::Form::new();
|
||||||
let payload_json = to_string(message).unwrap();
|
let payload_json = to_string(message).unwrap();
|
||||||
let mut payload_field =
|
let payload_field = reqwest::multipart::Part::text(payload_json);
|
||||||
reqwest::multipart::Part::text(payload_json).file_name("payload_json");
|
|
||||||
payload_field = match payload_field.mime_str("application/json") {
|
|
||||||
Ok(part) => part,
|
|
||||||
Err(e) => {
|
|
||||||
return Err(InstanceServerError::MultipartCreationError {
|
|
||||||
error: e.to_string(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
form = form.part("payload_json", payload_field);
|
form = form.part("payload_json", payload_field);
|
||||||
|
|
||||||
for (index, attachment) in files.unwrap().into_iter().enumerate() {
|
for (index, attachment) in files.unwrap().into_iter().enumerate() {
|
||||||
let (attachment_content, current_attachment) = attachment.move_content();
|
let (attachment_content, current_attachment) = attachment.move_content();
|
||||||
let (attachment_filename, current_attachment) =
|
let (attachment_filename, _) = current_attachment.move_filename();
|
||||||
current_attachment.move_filename();
|
|
||||||
let (attachment_content_type, _) = current_attachment.move_content_type();
|
|
||||||
let part_name = format!("files[{}]", index);
|
let part_name = format!("files[{}]", index);
|
||||||
let content_disposition = format!(
|
let content_disposition = format!(
|
||||||
"form-data; name=\"{}\"'; filename=\"{}\"",
|
"form-data; name=\"{}\"'; filename=\"{}\"",
|
||||||
part_name, &attachment_filename
|
part_name, &attachment_filename
|
||||||
);
|
);
|
||||||
let mut header_map = HeaderMap::new();
|
let mut header_map = HeaderMap::new();
|
||||||
header_map
|
header_map.insert(CONTENT_DISPOSITION, content_disposition.parse().unwrap());
|
||||||
.insert(CONTENT_DISPOSITION, content_disposition.parse().unwrap())
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
let mut part = multipart::Part::bytes(attachment_content)
|
let mut part = multipart::Part::bytes(attachment_content)
|
||||||
.file_name(attachment_filename)
|
.file_name(attachment_filename)
|
||||||
.headers(header_map);
|
.headers(header_map);
|
||||||
|
|
||||||
part = match part.mime_str(
|
|
||||||
attachment_content_type
|
|
||||||
.unwrap_or("application/octet-stream".to_string())
|
|
||||||
.as_str(),
|
|
||||||
) {
|
|
||||||
Ok(part) => part,
|
|
||||||
Err(e) => {
|
|
||||||
return Err(InstanceServerError::MultipartCreationError {
|
|
||||||
error: e.to_string(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
form = form.part(part_name, part);
|
form = form.part(part_name, part);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,6 +78,8 @@ pub mod messages {
|
||||||
.bearer_auth(token)
|
.bearer_auth(token)
|
||||||
.multipart(form);
|
.multipart(form);
|
||||||
|
|
||||||
|
println!("[Request Headers: ] {:?}", message_request);
|
||||||
|
|
||||||
requester
|
requester
|
||||||
.send_request(
|
.send_request(
|
||||||
message_request,
|
message_request,
|
||||||
|
@ -142,6 +121,10 @@ mod test {
|
||||||
limit::LimitedRequester,
|
limit::LimitedRequester,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
use std::fs::File;
|
||||||
|
use std::io::BufReader;
|
||||||
|
use std::io::Read;
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn send_message() {
|
async fn send_message() {
|
||||||
let channel_id = "1104413094102290492".to_string();
|
let channel_id = "1104413094102290492".to_string();
|
||||||
|
@ -178,6 +161,7 @@ mod test {
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let login_result = instance.login_account(&login_schema).await.unwrap();
|
let login_result = instance.login_account(&login_schema).await.unwrap();
|
||||||
let token = login_result.token;
|
let token = login_result.token;
|
||||||
|
println!("TOKEN: {}", token);
|
||||||
let settings = login_result.settings;
|
let settings = login_result.settings;
|
||||||
let limits = instance.limits.clone();
|
let limits = instance.limits.clone();
|
||||||
let mut user = crate::api::types::User::new(&mut instance, token, limits, settings, None);
|
let mut user = crate::api::types::User::new(&mut instance, token, limits, settings, None);
|
||||||
|
@ -188,12 +172,18 @@ mod test {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn send_message_two() {
|
async fn send_message_attachment() {
|
||||||
let channel_id = "1104413094102290492".to_string();
|
let channel_id = "1104413094102290492".to_string();
|
||||||
|
|
||||||
|
let f = File::open("/drive/hdd1/Pictures/polyphony-chorus8bit.png").unwrap();
|
||||||
|
let mut reader = BufReader::new(f);
|
||||||
|
let mut buffer = Vec::new();
|
||||||
|
|
||||||
|
reader.read_to_end(&mut buffer).unwrap();
|
||||||
|
|
||||||
let attachment = crate::api::types::PartialDiscordFileAttachment {
|
let attachment = crate::api::types::PartialDiscordFileAttachment {
|
||||||
id: None,
|
id: None,
|
||||||
filename: "test".to_string(),
|
filename: "test.png".to_string(),
|
||||||
description: None,
|
description: None,
|
||||||
content_type: None,
|
content_type: None,
|
||||||
size: None,
|
size: None,
|
||||||
|
@ -201,15 +191,15 @@ mod test {
|
||||||
proxy_url: None,
|
proxy_url: None,
|
||||||
width: None,
|
width: None,
|
||||||
height: None,
|
height: None,
|
||||||
ephemeral: Some(false),
|
ephemeral: None,
|
||||||
duration_secs: None,
|
duration_secs: None,
|
||||||
waveform: None,
|
waveform: None,
|
||||||
content: vec![8],
|
content: buffer,
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut message = crate::api::schemas::MessageSendSchema::new(
|
let mut message = crate::api::schemas::MessageSendSchema::new(
|
||||||
None,
|
None,
|
||||||
Some("ashjkdhjksdfgjsdfzjkhsdvhjksdf".to_string()),
|
Some("trans rights now".to_string()),
|
||||||
None,
|
None,
|
||||||
None,
|
None,
|
||||||
None,
|
None,
|
||||||
|
@ -245,9 +235,10 @@ mod test {
|
||||||
let mut user = crate::api::types::User::new(&mut instance, token, limits, settings, None);
|
let mut user = crate::api::types::User::new(&mut instance, token, limits, settings, None);
|
||||||
let vec_attach = vec![attachment.clone()];
|
let vec_attach = vec![attachment.clone()];
|
||||||
let _arg = Some(&vec_attach);
|
let _arg = Some(&vec_attach);
|
||||||
let _response = user
|
let response = user
|
||||||
.send_message(&mut message, &channel_id, Some(vec![attachment.clone()]))
|
.send_message(&mut message, &channel_id, Some(vec![attachment.clone()]))
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
println!("[Response:] {}", response.text().await.unwrap());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue