From 1673b6f8f5bc53a30e2f2ef1123057d4e50c37c8 Mon Sep 17 00:00:00 2001 From: bdistin Date: Fri, 8 Mar 2019 10:57:59 -0600 Subject: [PATCH] fix(APIMessage): edit shouldn't remove content (#3129) * edit shouldn't remove content If undefined is passed to the api, content isn't removed in such a case where you are only editing the embed. * fix a related doc string * update typings * requested changes --- src/structures/APIMessage.js | 25 +++++++++++++++---------- src/structures/Message.js | 2 +- typings/index.d.ts | 2 +- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/structures/APIMessage.js b/src/structures/APIMessage.js index 41f983839..e6d67b686 100644 --- a/src/structures/APIMessage.js +++ b/src/structures/APIMessage.js @@ -65,13 +65,18 @@ class APIMessage { /** * Makes the content of this message. - * @returns {string|string[]} + * @returns {?(string|string[])} */ makeContent() { // eslint-disable-line complexity const GuildMember = require('./GuildMember'); - // eslint-disable-next-line eqeqeq - let content = Util.resolveString(this.options.content == null ? '' : this.options.content); + let content; + if (this.options.content === null) { + content = ''; + } else if (typeof this.options.content !== 'undefined') { + content = Util.resolveString(this.options.content); + } + const isSplit = typeof this.options.split !== 'undefined' && this.options.split !== false; const isCode = typeof this.options.code !== 'undefined' && this.options.code !== false; const splitOptions = isSplit ? { ...this.options.split } : undefined; @@ -88,24 +93,24 @@ class APIMessage { if (content || mentionPart) { if (isCode) { const codeName = typeof this.options.code === 'string' ? this.options.code : ''; - content = `${mentionPart}\`\`\`${codeName}\n${Util.escapeMarkdown(content, true)}\n\`\`\``; + content = `${mentionPart}\`\`\`${codeName}\n${Util.escapeMarkdown(content || '', true)}\n\`\`\``; if (isSplit) { splitOptions.prepend = `${splitOptions.prepend || ''}\`\`\`${codeName}\n`; splitOptions.append = `\n\`\`\`${splitOptions.append || ''}`; } } else if (mentionPart) { - content = `${mentionPart}${content}`; + content = `${mentionPart}${content || ''}`; } const disableEveryone = typeof this.options.disableEveryone === 'undefined' ? this.target.client.options.disableEveryone : this.options.disableEveryone; if (disableEveryone) { - content = content.replace(/@(everyone|here)/g, '@\u200b$1'); + content = (content || '').replace(/@(everyone|here)/g, '@\u200b$1'); } if (isSplit) { - content = Util.splitMessage(content, splitOptions); + content = Util.splitMessage(content || '', splitOptions); } } @@ -275,7 +280,7 @@ class APIMessage { /** * Transforms the user-level arguments into a final options object. Passing a transformed options object alone into * this method will keep it the same, allowing for the reuse of the final options object. - * @param {StringResolvable} [content=''] Content to send + * @param {StringResolvable} [content] Content to send * @param {MessageOptions|WebhookMessageOptions|MessageAdditions} [options={}] Options to use * @param {MessageOptions|WebhookMessageOptions} [extra={}] Extra options to add onto transformed options * @param {boolean} [isWebhook=false] Whether or not to use WebhookMessageOptions as the result @@ -284,7 +289,7 @@ class APIMessage { static transformOptions(content, options, extra = {}, isWebhook = false) { if (!options && typeof content === 'object' && !(content instanceof Array)) { options = content; - content = ''; + content = undefined; } if (!options) { @@ -311,7 +316,7 @@ class APIMessage { /** * Creates an `APIMessage` from user-level arguments. * @param {MessageTarget} target Target to send to - * @param {StringResolvable} [content=''] Content to send + * @param {StringResolvable} [content] Content to send * @param {MessageOptions|WebhookMessageOptions|MessageAdditions} [options={}] Options to use * @param {MessageOptions|WebhookMessageOptions} [extra={}] - Extra options to add onto transformed options * @returns {MessageOptions|WebhookMessageOptions} diff --git a/src/structures/Message.js b/src/structures/Message.js index 4b81cf94a..e302de265 100644 --- a/src/structures/Message.js +++ b/src/structures/Message.js @@ -365,7 +365,7 @@ class Message extends Base { /** * Edits the content of the message. - * @param {StringResolvable|APIMessage} [content=''] The new content for the message + * @param {StringResolvable|APIMessage} [content] The new content for the message * @param {MessageEditOptions|MessageEmbed} [options] The options to provide * @returns {Promise} * @example diff --git a/typings/index.d.ts b/typings/index.d.ts index e1838dfc5..c1dfb86b0 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -56,7 +56,7 @@ declare module 'discord.js' { isWebhook?: boolean ): MessageOptions | WebhookMessageOptions; - public makeContent(): string | string[]; + public makeContent(): string | string[] | undefined; public resolve(): Promise; public resolveData(): this; public resolveFiles(): Promise;