Package net.dv8tion.jda.api.entities
Class Message.Attachment
- java.lang.Object
-
- net.dv8tion.jda.api.entities.Message.Attachment
-
- All Implemented Interfaces:
ISnowflake
- Enclosing interface:
- Message
public static class Message.Attachment extends Object implements ISnowflake
Represents aMessage
file attachment.
-
-
Constructor Summary
Constructors Constructor Description Attachment(long id, String url, String proxyUrl, String fileName, int size, int height, int width, net.dv8tion.jda.internal.JDAImpl jda)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description CompletableFuture<File>
downloadToFile()
Downloads the attachment into the current working directory using the file name provided bygetFileName()
.CompletableFuture<File>
downloadToFile(File file)
Downloads the attachment to a file at the specified path (relative or absolute).CompletableFuture<File>
downloadToFile(String path)
Downloads the attachment to a file at the specified path (relative or absolute).String
getFileExtension()
The file extension of the Attachment when it was first uploaded.String
getFileName()
The file name of the Attachment when it was first uploaded.int
getHeight()
The height of the Attachment if this Attachment is an image/video.long
getIdLong()
The Snowflake id of this entity.JDA
getJDA()
The corresponding JDA instance for this AttachmentString
getProxyUrl()
Url to the resource proxied by the Discord CDN.int
getSize()
The size of the attachment in bytes.String
getUrl()
The url of the Attachment, most likely on the Discord servers.int
getWidth()
The width of the Attachment if this Attachment is an image/video.boolean
isImage()
Whether or not this attachment is an Image, based ongetWidth()
,getHeight()
, andgetFileExtension()
.boolean
isSpoiler()
Whether or not this attachment is marked as spoiler, based ongetFileName()
.boolean
isVideo()
Whether or not this attachment is a video, based ongetWidth()
,getHeight()
, andgetFileExtension()
.CompletableFuture<Icon>
retrieveAsIcon()
Retrieves the image of this attachment and provides anIcon
equivalent.CompletableFuture<InputStream>
retrieveInputStream()
Enqueues a request to retrieve the contents of this Attachment.-
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface net.dv8tion.jda.api.entities.ISnowflake
getId, getTimeCreated
-
-
-
-
Method Detail
-
getJDA
@Nonnull public JDA getJDA()
The corresponding JDA instance for this Attachment- Returns:
- The corresponding JDA instance for this Attachment
-
getIdLong
public long getIdLong()
Description copied from interface:ISnowflake
The Snowflake id of this entity. This is unique to every entity and will never change.- Specified by:
getIdLong
in interfaceISnowflake
- Returns:
- Long containing the Id.
-
getUrl
@Nonnull public String getUrl()
The url of the Attachment, most likely on the Discord servers.- Returns:
- Non-null String containing the Attachment URL.
-
getProxyUrl
@Nonnull public String getProxyUrl()
Url to the resource proxied by the Discord CDN.- Returns:
- Non-null String containing the proxied Attachment url.
-
getFileName
@Nonnull public String getFileName()
The file name of the Attachment when it was first uploaded.- Returns:
- Non-null String containing the Attachment file name.
-
getFileExtension
@Nullable public String getFileExtension()
The file extension of the Attachment when it was first uploaded.
Null is returned if no characters follow the last occurrence of the '.
' character (or if the character is not present ingetFileName()
).- Returns:
- Non-null String containing the Attachment file extension, or null if it can't be determined.
-
retrieveInputStream
@Nonnull public CompletableFuture<InputStream> retrieveInputStream()
Enqueues a request to retrieve the contents of this Attachment.
The receiver is expected to close the retrievedInputStream
.Example
public void printContents(Message.Attachment attachment) { attachment.retrieveInputStream().thenAccept(in -> { StringBuilder builder = new StringBuilder(); byte[] buf = byte[1024]; int count = 0; while ((count = in.read(buf)) > 0) { builder.append(new String(buf, 0, count)); } in.close(); System.out.println(builder); }).exceptionally(t -> { // handle failure t.printStackTrace(); return null; }); }
- Returns:
CompletableFuture
- Type:InputStream
-
downloadToFile
@Nonnull public CompletableFuture<File> downloadToFile()
Downloads the attachment into the current working directory using the file name provided bygetFileName()
.
This will download the file using thecallback pool
. Alternatively you can useretrieveInputStream()
and use a continuation with a different executor.Example
public void saveLocally(Message.Attachment attachment) { attachment.downloadToFile() .thenAccept(file -> System.out.println("Saved attachment to " + file.getName())) .exceptionally(t -> { // handle failure t.printStackTrace(); return null; }); }
- Returns:
CompletableFuture
- Type:File
-
downloadToFile
@Nonnull public CompletableFuture<File> downloadToFile(String path)
Downloads the attachment to a file at the specified path (relative or absolute).
This will download the file using thecallback pool
. Alternatively you can useretrieveInputStream()
and use a continuation with a different executor.Example
public void saveLocally(Message.Attachment attachment) { attachment.downloadToFile("/tmp/" + attachment.getFileName()) .thenAccept(file -> System.out.println("Saved attachment to " + file.getName())) .exceptionally(t -> { // handle failure t.printStackTrace(); return null; }); }
- Parameters:
path
- The path to save the file to- Returns:
CompletableFuture
- Type:File
- Throws:
IllegalArgumentException
- If the provided path is null
-
downloadToFile
@Nonnull public CompletableFuture<File> downloadToFile(File file)
Downloads the attachment to a file at the specified path (relative or absolute).
This will download the file using thecallback pool
. Alternatively you can useretrieveInputStream()
and use a continuation with a different executor.Example
public void saveLocally(Message.Attachment attachment) { attachment.downloadToFile(new File("/tmp/" + attachment.getFileName())) .thenAccept(file -> System.out.println("Saved attachment to " + file.getName())) .exceptionally(t -> { // handle failure t.printStackTrace(); return null; }); }
- Parameters:
file
- The file to write to- Returns:
CompletableFuture
- Type:File
- Throws:
IllegalArgumentException
- If the provided file is null or cannot be written to
-
retrieveAsIcon
@Nonnull public CompletableFuture<Icon> retrieveAsIcon()
Retrieves the image of this attachment and provides anIcon
equivalent.
Useful withAccountManager.setAvatar(Icon)
.
This will download the file using thecallback pool
. Alternatively you can useretrieveInputStream()
and use a continuation with a different executor.Example
public void changeAvatar(Message.Attachment attachment) { attachment.retrieveAsIcon().thenCompose(icon -> { SelfUser self = attachment.getJDA().getSelfUser(); AccountManager manager = self.getManager(); return manager.setAvatar(icon).submit(); }).exceptionally(t -> { t.printStackTrace(); return null; }); }
- Returns:
CompletableFuture
- Type:Icon
- Throws:
IllegalStateException
- If this is not an image (isImage()
)
-
getSize
public int getSize()
The size of the attachment in bytes.
Example: ifgetSize()
returns 1024, then the attachment is 1024 bytes, or 1KiB, in size.- Returns:
- Positive int containing the size of the Attachment.
-
getHeight
public int getHeight()
The height of the Attachment if this Attachment is an image/video.
If this Attachment is neither an image, nor a video, this returns -1.- Returns:
- int containing image/video Attachment height, or -1 if attachment is neither image nor video.
-
getWidth
public int getWidth()
The width of the Attachment if this Attachment is an image/video.
If this Attachment is neither an image, nor a video, this returns -1.- Returns:
- int containing image/video Attachment width, or -1 if attachment is neither image nor video.
-
isImage
public boolean isImage()
Whether or not this attachment is an Image, based ongetWidth()
,getHeight()
, andgetFileExtension()
.- Returns:
- True if this attachment is an image
-
isVideo
public boolean isVideo()
Whether or not this attachment is a video, based ongetWidth()
,getHeight()
, andgetFileExtension()
.- Returns:
- True if this attachment is a video
-
isSpoiler
public boolean isSpoiler()
Whether or not this attachment is marked as spoiler, based ongetFileName()
.- Returns:
- True if this attachment is marked as spoiler
-
-