Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(MessageAttachment): description (alt text) support #6871

Merged
merged 9 commits into from
Nov 11, 2021
4 changes: 2 additions & 2 deletions src/rest/APIRequest.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ class APIRequest {
let body;
if (this.options.files?.length) {
body = new FormData();
for (const file of this.options.files) {
if (file?.file) body.append(file.key ?? file.name, file.file, file.name);
for (const [index, file] of this.options.files.entries()) {
if (file?.file) body.append(file.key ?? `files[${index}]`, file.file, file.name);
}
if (typeof this.options.data !== 'undefined') {
if (this.options.dontUsePayloadJSON) {
Expand Down
20 changes: 20 additions & 0 deletions src/structures/MessageAttachment.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,16 @@ class MessageAttachment {
if (data) this._patch(data);
}

/**
* Sets the description of this attachment.
* @param {string} description The description of the file
* @returns {MessageAttachment} This attachment
*/
setDescription(description) {
this.description = description;
return this;
}

/**
* Sets the file of this attachment.
* @param {BufferResolvable|Stream} attachment The file
Expand Down Expand Up @@ -122,6 +132,16 @@ class MessageAttachment {
this.contentType ??= null;
}

if ('description' in data) {
/**
* The description (alt text) of this attachment
* @type {?string}
*/
this.description = data.description;
} else {
this.description ??= null;
}

/**
* Whether this attachment is ephemeral
* @type {boolean}
Expand Down
10 changes: 10 additions & 0 deletions src/structures/MessagePayload.js
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,16 @@ class MessagePayload {
}
}

const attachments = this.options.files?.map((file, index) => ({
id: index.toString(),
description: file.description,
}));
if (Array.isArray(this.options.attachments)) {
this.options.attachments.push(...attachments);
} else {
this.options.attachments = attachments;
}

this.data = {
content,
tts,
Expand Down
3 changes: 3 additions & 0 deletions src/structures/interfaces/TextBasedChannel.js
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ class TextBasedChannel {
* @typedef {Object} FileOptions
* @property {BufferResolvable} attachment File to attach
* @property {string} [name='file.jpg'] Filename of the attachment
* @property {string} description The description of the file
*/

/**
Expand Down Expand Up @@ -128,6 +129,7 @@ class TextBasedChannel {
* files: [{
* attachment: 'entire/path/to/file.jpg',
* name: 'file.jpg'
* description: 'A description of the file'
* }]
* })
* .then(console.log)
Expand All @@ -146,6 +148,7 @@ class TextBasedChannel {
* files: [{
* attachment: 'entire/path/to/file.jpg',
* name: 'file.jpg'
* description: 'A description of the file'
* }]
* })
* .then(console.log)
Expand Down
3 changes: 3 additions & 0 deletions typings/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1375,6 +1375,7 @@ export class MessageAttachment {

public attachment: BufferResolvable | Stream;
public contentType: string | null;
public description: string | null;
public ephemeral: boolean;
public height: number | null;
public id: Snowflake;
Expand All @@ -1384,6 +1385,7 @@ export class MessageAttachment {
public readonly spoiler: boolean;
public url: string;
public width: number | null;
public setDescription(description: string): this;
public setFile(attachment: BufferResolvable | Stream, name?: string): this;
public setName(name: string): this;
public setSpoiler(spoiler?: boolean): this;
Expand Down Expand Up @@ -3964,6 +3966,7 @@ export interface FetchThreadsOptions {
export interface FileOptions {
attachment: BufferResolvable | Stream;
name?: string;
description?: string;
}

export interface GuildApplicationCommandPermissionData {
Expand Down