typings/fix(MessageEmbed): add interfaces for props, fix copy constructor (#3492)

* updated typings

* Updated docs

* fixed types for MessageEmbedOptions

* added curly bracket spaces

* fix(MessageEmbed): make copy constructor work properly

* fix(MessageEmbed): copy the provider too

Co-authored-by: SpaceEEC <spaceeec@yahoo.com>
This commit is contained in:
Tenpi
2020-02-24 05:44:54 -05:00
committed by GitHub
parent 28490e84b0
commit e57ef25082
2 changed files with 95 additions and 29 deletions

View File

@@ -67,81 +67,108 @@ class MessageEmbed {
this.fields = data.fields ? data.fields.map(Util.cloneObject) : [];
/**
* The thumbnail of this embed (if there is one)
* @type {?Object}
* @typedef {Object} MessageEmbedThumbnail
* @property {string} url URL for this thumbnail
* @property {string} proxyURL ProxyURL for this thumbnail
* @property {number} height Height of this thumbnail
* @property {number} width Width of this thumbnail
*/
/**
* The thumbnail of this embed (if there is one)
* @type {?MessageEmbedThumbnail}
*/
this.thumbnail = data.thumbnail ? {
url: data.thumbnail.url,
proxyURL: data.thumbnail.proxy_url,
proxyURL: data.thumbnail.proxyURL || data.thumbnail.proxy_url,
height: data.thumbnail.height,
width: data.thumbnail.width,
} : null;
/**
* The image of this embed, if there is one
* @type {?Object}
* @typedef {Object} MessageEmbedImage
* @property {string} url URL for this image
* @property {string} proxyURL ProxyURL for this image
* @property {number} height Height of this image
* @property {number} width Width of this image
*/
/**
* The image of this embed, if there is one
* @type {?MessageEmbedImage}
*/
this.image = data.image ? {
url: data.image.url,
proxyURL: data.image.proxy_url,
proxyURL: data.image.proxyURL || data.image.proxy_url,
height: data.image.height,
width: data.image.width,
} : null;
/**
* The video of this embed (if there is one)
* @type {?Object}
* @typedef {Object} MessageEmbedVideo
* @property {string} url URL of this video
* @property {string} proxyURL ProxyURL for this video
* @property {number} height Height of this video
* @property {number} width Width of this video
*/
/**
* The video of this embed (if there is one)
* @type {?MessageEmbedVideo}
* @readonly
*/
this.video = data.video ? {
url: data.video.url,
proxyURL: data.video.proxy_url,
proxyURL: data.video.proxyURL || data.video.proxy_url,
height: data.video.height,
width: data.video.width,
} : null;
/**
* The author of this embed (if there is one)
* @type {?Object}
* @typedef {Object} MessageEmbedAuthor
* @property {string} name The name of this author
* @property {string} url URL of this author
* @property {string} iconURL URL of the icon for this author
* @property {string} proxyIconURL Proxied URL of the icon for this author
*/
/**
* The author of this embed (if there is one)
* @type {?MessageEmbedAuthor}
*/
this.author = data.author ? {
name: data.author.name,
url: data.author.url,
iconURL: data.author.iconURL || data.author.icon_url,
proxyIconURL: data.author.proxyIconUrl || data.author.proxy_icon_url,
proxyIconURL: data.author.proxyIconURL || data.author.proxy_icon_url,
} : null;
/**
* The provider of this embed (if there is one)
* @type {?Object}
* @typedef {Object} MessageEmbedProvider
* @property {string} name The name of this provider
* @property {string} url URL of this provider
*/
this.provider = data.provider;
/**
* The footer of this embed
* @type {?Object}
* The provider of this embed (if there is one)
* @type {?MessageEmbedProvider}
*/
this.provider = data.provider ? {
name: data.provider.name,
url: data.provider.name,
} : null;
/**
* @typedef {Object} MessageEmbedFooter
* @property {string} text The text of this footer
* @property {string} iconURL URL of the icon for this footer
* @property {string} proxyIconURL Proxied URL of the icon for this footer
*/
/**
* The footer of this embed
* @type {?MessageEmbedFooter}
*/
this.footer = data.footer ? {
text: data.footer.text,
iconURL: data.footer.iconURL || data.footer.icon_url,

63
typings/index.d.ts vendored
View File

@@ -1051,23 +1051,23 @@ declare module 'discord.js' {
export class MessageEmbed {
constructor(data?: MessageEmbed | MessageEmbedOptions);
public author: { name?: string; url?: string; iconURL?: string; proxyIconURL?: string } | null;
public author: MessageEmbedAuthor | null;
public color: number;
public readonly createdAt: Date | null;
public description: string;
public fields: EmbedField[];
public files: (MessageAttachment | string | FileOptions)[];
public footer: { text?: string; iconURL?: string; proxyIconURL?: string } | null;
public footer: MessageEmbedFooter | null;
public readonly hexColor: string | null;
public image: { url: string; proxyURL?: string; height?: number; width?: number; } | null;
public image: MessageEmbedImage | null;
public readonly length: number;
public provider: { name: string; url: string; };
public thumbnail: { url: string; proxyURL?: string; height?: number; width?: number; } | null;
public provider: MessageEmbedProvider | null;
public thumbnail: MessageEmbedThumbnail | null;
public timestamp: number | null;
public title: string;
public type: string;
public url: string;
public readonly video: { url?: string; proxyURL?: string; height?: number; width?: number } | null;
public readonly video: MessageEmbedVideo | null;
public addFields(...fields: EmbedField[] | EmbedField[][]): this;
public attachFiles(file: (MessageAttachment | FileOptions | string)[]): this;
public setAuthor(name: StringResolvable, iconURL?: string, url?: string): this;
@@ -2449,13 +2449,52 @@ declare module 'discord.js' {
url?: string;
timestamp?: Date | number;
color?: ColorResolvable;
fields?: { name: string; value: string; inline?: boolean; }[];
fields?: EmbedField[];
files?: (MessageAttachment | string | FileOptions)[];
author?: { name?: string; url?: string; icon_url?: string; iconURL?: string; };
thumbnail?: { url?: string; height?: number; width?: number; };
image?: { url?: string; proxy_url?: string; proxyURL?: string; height?: number; width?: number; };
video?: { url?: string; height?: number; width?: number; };
footer?: { text?: string; icon_url?: string; iconURL?: string; };
author?: Partial<MessageEmbedAuthor> & { icon_url?: string; proxy_icon_url?: string };
thumbnail?: Partial<MessageEmbedThumbnail> & { proxy_url?: string };
image?: Partial<MessageEmbedImage> & { proxy_url?: string };
video?: Partial<MessageEmbedVideo> & { proxy_url?: string };
footer?: Partial<MessageEmbedFooter> & { icon_url?: string; proxy_icon_url?: string };
}
interface MessageEmbedAuthor {
name?: string;
url?: string;
iconURL?: string;
proxyIconURL?: string;
}
interface MessageEmbedThumbnail {
url: string;
proxyURL?: string;
height?: number;
width?: number;
}
interface MessageEmbedFooter {
text?: string;
iconURL?: string;
proxyIconURL?: string;
}
interface MessageEmbedImage {
url: string;
proxyURL?: string;
height?: number;
width?: number;
}
interface MessageEmbedProvider {
name: string;
url: string;
}
interface MessageEmbedVideo {
url?: string;
proxyURL?: string;
height?: number;
width?: number;
}
interface MessageOptions {