Make attachment sending work!

This commit is contained in:
bitfl0wer 2023-05-12 19:18:00 +02:00
parent 00acaf6de9
commit 7984c5d19f
No known key found for this signature in database
GPG Key ID: 84BBB60DF895ABF2
1 changed files with 26 additions and 35 deletions

View File

@ -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());
} }
} }