#[non_exhaustive]pub struct Attachment {
pub id: AttachmentId,
pub filename: String,
pub description: Option<String>,
pub height: Option<u32>,
pub proxy_url: String,
pub size: u32,
pub url: String,
pub width: Option<u32>,
pub content_type: Option<String>,
pub ephemeral: bool,
pub duration_secs: Option<f64>,
pub waveform: Option<Vec<u8>>,
}
Expand description
A file uploaded with a message. Not to be confused with Embed
s.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. }
syntax; cannot be matched against without a wildcard ..
; and struct update syntax will not work.id: AttachmentId
The unique ID given to this attachment.
filename: String
The filename of the file that was uploaded. This is equivalent to what the uploader had their file named.
description: Option<String>
Description for the file (max 1024 characters).
height: Option<u32>
If the attachment is an image, then the height of the image is provided.
proxy_url: String
The proxy URL.
size: u32
The size of the file in bytes.
url: String
The URL of the uploaded attachment.
width: Option<u32>
If the attachment is an image, then the width of the image is provided.
content_type: Option<String>
The attachment’s media type.
ephemeral: bool
Whether this attachment is ephemeral.
Ephemeral attachments will automatically be removed after a set period of time.
Ephemeral attachments on messages are guaranteed to be available as long as the message itself exists.
duration_secs: Option<f64>
The duration of the audio file (present if MessageFlags::IS_VOICE_MESSAGE
).
waveform: Option<Vec<u8>>
List of bytes representing a sampled waveform (present if
MessageFlags::IS_VOICE_MESSAGE
).
The waveform is intended to be a preview of the entire voice message, with 1 byte per datapoint. Clients sample the recording at most once per 100 milliseconds, but will downsample so that no more than 256 datapoints are in the waveform.
The waveform details are a Discord implementation detail and may change without warning or documentation.
Implementations§
Source§impl Attachment
impl Attachment
Sourcepub fn dimensions(&self) -> Option<(u32, u32)>
pub fn dimensions(&self) -> Option<(u32, u32)>
If this attachment is an image, then a tuple of the width and height in pixels is returned.
Sourcepub async fn download(&self) -> Result<Vec<u8>>
pub async fn download(&self) -> Result<Vec<u8>>
Downloads the attachment, returning back a vector of bytes.
§Examples
Download all of the attachments associated with a Message
:
use std::io::Write;
use std::path::Path;
use serenity::model::prelude::*;
use serenity::prelude::*;
use tokio::fs::File;
use tokio::io::AsyncWriteExt;
#[serenity::async_trait]
impl EventHandler for Handler {
async fn message(&self, context: Context, mut message: Message) {
for attachment in message.attachments {
let content = match attachment.download().await {
Ok(content) => content,
Err(why) => {
println!("Error downloading attachment: {:?}", why);
let _ =
message.channel_id.say(&context, "Error downloading attachment").await;
return;
},
};
let mut file = match File::create(&attachment.filename).await {
Ok(file) => file,
Err(why) => {
println!("Error creating file: {:?}", why);
let _ = message.channel_id.say(&context, "Error creating file").await;
return;
},
};
if let Err(why) = file.write_all(&content).await {
println!("Error writing to file: {:?}", why);
return;
}
let _ = message
.channel_id
.say(&context, format!("Saved {:?}", attachment.filename))
.await;
}
}
}
§Errors
Returns an Error::Io
when there is a problem reading the contents of the HTTP response.
Returns an Error::Http
when there is a problem retrieving the attachment.
Trait Implementations§
Source§impl Clone for Attachment
impl Clone for Attachment
Source§fn clone(&self) -> Attachment
fn clone(&self) -> Attachment
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more