diff --git a/packages/discord.js/src/structures/Attachment.js b/packages/discord.js/src/structures/Attachment.js
index 11a456431..086d7a870 100644
--- a/packages/discord.js/src/structures/Attachment.js
+++ b/packages/discord.js/src/structures/Attachment.js
@@ -99,6 +99,28 @@ class Attachment {
* @type {boolean}
*/
this.ephemeral = data.ephemeral ?? false;
+
+ if ('duration_secs' in data) {
+ /**
+ * The duration of this attachment in seconds
+ * This will only be available if the attachment is an audio file.
+ * @type {?number}
+ */
+ this.duration = data.duration_secs;
+ } else {
+ this.duration ??= null;
+ }
+
+ if ('waveform' in data) {
+ /**
+ * The base64 encoded byte array representing a sampled waveform
+ * This will only be available if the attachment is an audio file.
+ * @type {?string}
+ */
+ this.waveform = data.waveform;
+ } else {
+ this.waveform ??= null;
+ }
}
/**
diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts
index da87693c7..8d4eacc1d 100644
--- a/packages/discord.js/typings/index.d.ts
+++ b/packages/discord.js/typings/index.d.ts
@@ -2014,6 +2014,7 @@ export class Attachment {
private attachment: BufferResolvable | Stream;
public contentType: string | null;
public description: string | null;
+ public duration: number | null;
public ephemeral: boolean;
public height: number | null;
public id: Snowflake;
@@ -2022,6 +2023,7 @@ export class Attachment {
public size: number;
public get spoiler(): boolean;
public url: string;
+ public waveform: string | null;
public width: number | null;
public toJSON(): unknown;
}