98 lines
2.1 KiB
JavaScript
98 lines
2.1 KiB
JavaScript
'use strict';
|
|
|
|
const Util = require('../util/Util');
|
|
|
|
/**
|
|
* Represents an attachment in a message.
|
|
*/
|
|
class MessageAttachment {
|
|
/**
|
|
* @param {BufferResolvable|Stream} attachment The file
|
|
* @param {string} [name=null] The name of the file, if any
|
|
* @param {Object} [data] Extra data
|
|
*/
|
|
constructor(attachment, name = null, data) {
|
|
this.attachment = attachment;
|
|
/**
|
|
* The name of this attachment
|
|
* @type {?string}
|
|
*/
|
|
this.name = name;
|
|
if (data) this._patch(data);
|
|
}
|
|
|
|
/**
|
|
* Sets the file of this attachment.
|
|
* @param {BufferResolvable|Stream} attachment The file
|
|
* @param {string} [name=null] The name of the file, if any
|
|
* @returns {MessageAttachment} This attachment
|
|
*/
|
|
setFile(attachment, name = null) {
|
|
this.attachment = attachment;
|
|
this.name = name;
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Sets the name of this attachment.
|
|
* @param {string} name The name of the file
|
|
* @returns {MessageAttachment} This attachment
|
|
*/
|
|
setName(name) {
|
|
this.name = name;
|
|
return this;
|
|
}
|
|
|
|
_patch(data) {
|
|
/**
|
|
* The ID of this attachment
|
|
* @type {Snowflake}
|
|
*/
|
|
this.id = data.id;
|
|
|
|
/**
|
|
* The size of this attachment in bytes
|
|
* @type {number}
|
|
*/
|
|
this.size = data.size;
|
|
|
|
/**
|
|
* The URL to this attachment
|
|
* @type {string}
|
|
*/
|
|
this.url = data.url;
|
|
|
|
/**
|
|
* The Proxy URL to this attachment
|
|
* @type {string}
|
|
*/
|
|
this.proxyURL = data.proxy_url;
|
|
|
|
/**
|
|
* The height of this attachment (if an image or video)
|
|
* @type {?number}
|
|
*/
|
|
this.height = typeof data.height !== 'undefined' ? data.height : null;
|
|
|
|
/**
|
|
* The width of this attachment (if an image or video)
|
|
* @type {?number}
|
|
*/
|
|
this.width = typeof data.width !== 'undefined' ? data.width : null;
|
|
}
|
|
|
|
/**
|
|
* Whether or not this attachment has been marked as a spoiler
|
|
* @type {boolean}
|
|
* @readonly
|
|
*/
|
|
get spoiler() {
|
|
return Util.basename(this.url).startsWith('SPOILER_');
|
|
}
|
|
|
|
toJSON() {
|
|
return Util.flatten(this);
|
|
}
|
|
}
|
|
|
|
module.exports = MessageAttachment;
|