From 7b571f972926cdad5f6f286e836f23fa2d883818 Mon Sep 17 00:00:00 2001 From: Schuyler Cebulskie Date: Sun, 9 Oct 2016 14:32:48 -0400 Subject: [PATCH] Add escapeMarkdown util function --- src/index.js | 1 + src/structures/Message.js | 3 ++- src/structures/interface/TextBasedChannel.js | 3 ++- src/util/EscapeMarkdown.js | 4 ++++ 4 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 src/util/EscapeMarkdown.js diff --git a/src/index.js b/src/index.js index 090c24e84..24b5a26da 100644 --- a/src/index.js +++ b/src/index.js @@ -7,6 +7,7 @@ module.exports = { Collection: require('./util/Collection'), splitMessage: require('./util/SplitMessage'), + escapeMarkdown: require('./util/EscapeMarkdown'), Channel: require('./structures/Channel'), ClientUser: require('./structures/ClientUser'), diff --git a/src/structures/Message.js b/src/structures/Message.js index ffd04b19b..2ead7f0e8 100644 --- a/src/structures/Message.js +++ b/src/structures/Message.js @@ -2,6 +2,7 @@ const Attachment = require('./MessageAttachment'); const Embed = require('./MessageEmbed'); const Collection = require('../util/Collection'); const Constants = require('../util/Constants'); +const escapeMarkdown = require('../../util/EscapeMarkdown'); /** * Represents a Message on Discord @@ -332,7 +333,7 @@ class Message { * @returns {Promise} */ editCode(lang, content) { - content = this.client.resolver.resolveString(content).replace(/```/g, '`\u200b``'); + content = escapeMarkdown(this.client.resolver.resolveString(content), true); return this.edit(`\`\`\`${lang ? lang : ''}\n${content}\n\`\`\``); } diff --git a/src/structures/interface/TextBasedChannel.js b/src/structures/interface/TextBasedChannel.js index 19e52707d..ceac04d75 100644 --- a/src/structures/interface/TextBasedChannel.js +++ b/src/structures/interface/TextBasedChannel.js @@ -2,6 +2,7 @@ const path = require('path'); const Message = require('../Message'); const MessageCollector = require('../MessageCollector'); const Collection = require('../../util/Collection'); +const escapeMarkdown = require('../../util/EscapeMarkdown'); /** * Interface for classes that have text-channel-like features @@ -114,7 +115,7 @@ class TextBasedChannel { if (!options.split.prepend) options.split.prepend = `\`\`\`${lang ? lang : ''}\n`; if (!options.split.append) options.split.append = '\n```'; } - content = this.client.resolver.resolveString(content).replace(/```/g, '`\u200b``'); + content = escapeMarkdown(this.client.resolver.resolveString(content), true); return this.sendMessage(`\`\`\`${lang ? lang : ''}\n${content}\n\`\`\``, options); } diff --git a/src/util/EscapeMarkdown.js b/src/util/EscapeMarkdown.js new file mode 100644 index 000000000..01e01206f --- /dev/null +++ b/src/util/EscapeMarkdown.js @@ -0,0 +1,4 @@ +module.exports = function escapeMarkdown(text, onlyCodeBlock = false) { + if (onlyCodeBlock) return text.replace(/```/g, '`\u200b``'); + return text.replace(/\\(\*|_|`|~|\\)/g, '$1').replace(/(\*|_|`|~|\\)/g, '\\$1'); +};