Struct serenity::model::channel::Attachment[][src]

#[non_exhaustive]
pub struct Attachment { pub id: AttachmentId, pub filename: String, pub height: Option<u64>, pub proxy_url: String, pub size: u64, pub url: String, pub width: Option<u64>, pub content_type: Option<String>, }
Expand description

A file uploaded with a message. Not to be confused with Embeds.

Fields (Non-exhaustive)

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional 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.

height: Option<u64>

If the attachment is an image, then the height of the image is provided.

proxy_url: String

The proxy URL.

size: u64

The size of the file in bytes.

url: String

The URL of the uploaded attachment.

width: Option<u64>

If the attachment is an image, then the width of the image is provided.

content_type: Option<String>

The attachment’s media type.

Implementations

If this attachment is an image, then a tuple of the width and height in pixels is returned.

Downloads the attachment, returning back a vector of bytes.

Examples

Download all of the attachments associated with a Message:

use serenity::model::prelude::*;
use serenity::prelude::*;
use tokio::fs::File;
use tokio::io::AsyncWriteExt;
use std::io::Write;
use std::path::Path;

struct Handler;

#[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(&content).await {
                println!("Error writing to file: {:?}", why);

                return;
            }

            let _ = message.channel_id.say(&context, &format!("Saved {:?}", attachment.filename)).await;
        }
    }

    async fn ready(&self, _: Context, ready: Ready) {
        println!("{} is connected!", ready.user.name);
    }
}
let token = std::env::var("DISCORD_TOKEN")?;
let mut client = Client::builder(&token).event_handler(Handler).await?;

client.start().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

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Deserialize this value from the given Serde deserializer. Read more

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more

Instruments this type with the current Span, returning an Instrumented wrapper. Read more

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more

Instruments this type with the current Span, returning an Instrumented wrapper. Read more

Performs the conversion.

Should always be Self

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.