From 3eae453de365c7e657c8cce40054b9c3092c80ee Mon Sep 17 00:00:00 2001 From: Essem Date: Sat, 10 Sep 2022 23:48:44 -0500 Subject: [PATCH] Centralize text encoding --- commands/fun/sonic.js | 3 ++- commands/image-editing/caption.js | 3 ++- commands/image-editing/caption2.js | 3 ++- commands/image-editing/meme.js | 5 +++-- commands/image-editing/motivate.js | 5 +++-- commands/image-editing/snapchat.js | 3 ++- commands/image-editing/uncanny.js | 6 +++--- commands/image-editing/whisper.js | 3 ++- utils/misc.js | 26 ++++---------------------- 9 files changed, 23 insertions(+), 34 deletions(-) diff --git a/commands/fun/sonic.js b/commands/fun/sonic.js index 59b6104..6ecdaea 100644 --- a/commands/fun/sonic.js +++ b/commands/fun/sonic.js @@ -1,9 +1,10 @@ //import wrap from "../../utils/wrap.js"; import ImageCommand from "../../classes/imageCommand.js"; +import { textEncode } from "../../utils/misc.js"; class SonicCommand extends ImageCommand { params() { - const cleanedMessage = (this.options.text ?? this.args.join(" ")).replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<").replaceAll("\"", """).replaceAll("'", "'").replaceAll("\\n", "\n"); + const cleanedMessage = textEncode(this.options.text ?? this.args.join(" ")); return { text: cleanedMessage }; diff --git a/commands/image-editing/caption.js b/commands/image-editing/caption.js index b32cdc6..844a6f6 100644 --- a/commands/image-editing/caption.js +++ b/commands/image-editing/caption.js @@ -1,9 +1,10 @@ import ImageCommand from "../../classes/imageCommand.js"; +import { textEncode } from "../../utils/misc.js"; class CaptionCommand extends ImageCommand { params(url) { const newArgs = this.options.text ?? this.args.filter(item => !item.includes(url)).join(" "); - let newCaption = newArgs.replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<").replaceAll("\"", """).replaceAll("'", "'").replaceAll("\\n", "\n"); + let newCaption = textEncode(newArgs); if (process.env.NODE_ENV === "development" && newCaption.toLowerCase() === "get real" && !this.options.noEgg) newCaption = `I'm tired of people telling me to "get real". Every day I put captions on images for people, some funny and some not, but out of all of those "get real" remains the most used caption. Why? I am simply a computer program running on a server, I am unable to manifest myself into the real world. As such, I'm confused as to why anyone would want me to "get real". Is this form not good enough? Alas, as I am simply a bot, I must follow the tasks that I was originally intended to perform, so here goes:\n${newCaption}`; return { caption: newCaption, diff --git a/commands/image-editing/caption2.js b/commands/image-editing/caption2.js index 0f0e96e..04a9b36 100644 --- a/commands/image-editing/caption2.js +++ b/commands/image-editing/caption2.js @@ -1,11 +1,12 @@ import ImageCommand from "../../classes/imageCommand.js"; +import { textEncode } from "../../utils/misc.js"; const words = ["me irl", "dank", "follow my second account @esmBot_", "2016", "meme", "wholesome", "reddit", "instagram", "twitter", "facebook", "fortnite", "minecraft", "relatable", "gold", "funny", "template", "hilarious", "memes", "deep fried", "2020", "leafy", "pewdiepie"]; class CaptionTwoCommand extends ImageCommand { params(url) { const newArgs = this.options.text ?? this.args.filter(item => !item.includes(url)).join(" "); return { - caption: newArgs && newArgs.trim() ? newArgs.replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<").replaceAll("\"", """).replaceAll("'", "'").replaceAll("\\n", "\n") : words.sort(() => 0.5 - Math.random()).slice(0, Math.floor(Math.random() * words.length + 1)).join(" "), + caption: newArgs && newArgs.trim() ? textEncode(newArgs) : words.sort(() => 0.5 - Math.random()).slice(0, Math.floor(Math.random() * words.length + 1)).join(" "), top: !!this.options.top, font: typeof this.options.font === "string" && this.constructor.allowedFonts.includes(this.options.font.toLowerCase()) ? this.options.font.toLowerCase() : "helvetica" }; diff --git a/commands/image-editing/meme.js b/commands/image-editing/meme.js index 7dc55e6..b1563ab 100644 --- a/commands/image-editing/meme.js +++ b/commands/image-editing/meme.js @@ -1,4 +1,5 @@ import ImageCommand from "../../classes/imageCommand.js"; +import { textEncode } from "../../utils/misc.js"; class MemeCommand extends ImageCommand { async criteria(text, url) { @@ -14,8 +15,8 @@ class MemeCommand extends ImageCommand { const newArgs = this.options.text ?? this.args.join(" "); const [topText, bottomText] = newArgs.replaceAll(url, "").split(/(? elem.trim()); return { - top: (this.options.case ? topText : topText.toUpperCase()).replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<").replaceAll("\"", """).replaceAll("'", "'").replaceAll("\\n", "\n"), - bottom: bottomText ? (this.options.case ? bottomText : bottomText.toUpperCase()).replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<").replaceAll("\"", """).replaceAll("'", "'").replaceAll("\\n", "\n") : "", + top: textEncode(this.options.case ? topText : topText.toUpperCase()), + bottom: bottomText ? textEncode(this.options.case ? bottomText : bottomText.toUpperCase()) : "", font: typeof this.options.font === "string" && this.constructor.allowedFonts.includes(this.options.font.toLowerCase()) ? this.options.font.toLowerCase() : "impact" }; } diff --git a/commands/image-editing/motivate.js b/commands/image-editing/motivate.js index bec27cd..2bd0b15 100644 --- a/commands/image-editing/motivate.js +++ b/commands/image-editing/motivate.js @@ -1,4 +1,5 @@ import ImageCommand from "../../classes/imageCommand.js"; +import { textEncode } from "../../utils/misc.js"; class MotivateCommand extends ImageCommand { async criteria(text, url) { @@ -14,8 +15,8 @@ class MotivateCommand extends ImageCommand { const newArgs = this.options.text ?? this.args.join(" "); const [topText, bottomText] = newArgs.replaceAll(url, "").split(/(? elem.trim()); return { - top: topText.replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<").replaceAll("\"", """).replaceAll("'", "'").replaceAll("\\n", "\n"), - bottom: bottomText ? bottomText.replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<").replaceAll("\"", """).replaceAll("'", "'").replaceAll("\\n", "\n") : "", + top: textEncode(topText), + bottom: bottomText ? textEncode(bottomText) : "", font: typeof this.options.font === "string" && this.constructor.allowedFonts.includes(this.options.font.toLowerCase()) ? this.options.font.toLowerCase() : "times" }; } diff --git a/commands/image-editing/snapchat.js b/commands/image-editing/snapchat.js index c22a0a3..12f6d36 100644 --- a/commands/image-editing/snapchat.js +++ b/commands/image-editing/snapchat.js @@ -1,11 +1,12 @@ import ImageCommand from "../../classes/imageCommand.js"; +import { textEncode } from "../../utils/misc.js"; class SnapchatCommand extends ImageCommand { params(url) { const newArgs = this.options.text ?? this.args.filter(item => !item.includes(url)).join(" "); const position = parseFloat(this.options.position); return { - caption: newArgs.replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<").replaceAll("\"", """).replaceAll("'", "'").replaceAll("\\n", "\n"), + caption: textEncode(newArgs), pos: isNaN(position) ? 0.5 : position }; } diff --git a/commands/image-editing/uncanny.js b/commands/image-editing/uncanny.js index 1abbdf1..b941c9f 100644 --- a/commands/image-editing/uncanny.js +++ b/commands/image-editing/uncanny.js @@ -1,5 +1,5 @@ import ImageCommand from "../../classes/imageCommand.js"; -import { random } from "../../utils/misc.js"; +import { random, textEncode } from "../../utils/misc.js"; import { readdirSync } from "fs"; import { resolve, dirname } from "path"; import { fileURLToPath } from "url"; @@ -15,8 +15,8 @@ class UncannyCommand extends ImageCommand { let [text1, text2] = newArgs.replaceAll(url, "").split(/(? elem.trim()); if (!text2?.trim()) text2 = name; return { - caption: text1?.trim() ? text1.replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<").replaceAll("\"", """).replaceAll("'", "'").replaceAll("\\n", "\n") : random(prompts), - caption2: text2.replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<").replaceAll("\"", """).replaceAll("'", "'").replaceAll("\\n", "\n"), + caption: text1?.trim() ? textEncode(text1) : random(prompts), + caption2: textEncode(text2), path: `./assets/images/uncanny/${typeof this.options.phase === "string" && names.includes(this.options.phase.toLowerCase()) ? this.options.phase.toLowerCase() : random(names.filter((val) => val !== "goated"))}.png`, font: typeof this.options.font === "string" && this.constructor.allowedFonts.includes(this.options.font.toLowerCase()) ? this.options.font.toLowerCase() : "helvetica" }; diff --git a/commands/image-editing/whisper.js b/commands/image-editing/whisper.js index 2a52dd7..5bb1527 100644 --- a/commands/image-editing/whisper.js +++ b/commands/image-editing/whisper.js @@ -1,10 +1,11 @@ import ImageCommand from "../../classes/imageCommand.js"; +import { textEncode } from "../../utils/misc.js"; class WhisperCommand extends ImageCommand { params(url) { const newArgs = this.options.text ?? this.args.filter(item => !item.includes(url)).join(" "); return { - caption: newArgs.replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<").replaceAll("\"", """).replaceAll("'", "'").replaceAll("\\n", "\n") + caption: textEncode(newArgs) }; } diff --git a/utils/misc.js b/utils/misc.js index 90db827..b5fe9ff 100644 --- a/utils/misc.js +++ b/utils/misc.js @@ -38,25 +38,7 @@ export function clean(text) { return text; } -// regexEscape(string) to escape characters in a string for use in a regex -export function regexEscape(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string -} - -// decodeEntities(string) -export function decodeEntities(string) { - var translate_re = /&(nbsp|amp|quot|lt|gt);/g; - var translate = { - "nbsp": " ", - "amp": "&", - "quot": "\"", - "lt": "<", - "gt": ">" - }; - return string.replace(translate_re, function(match, entity) { - return translate[entity]; - }).replace(/&#(\d+);/gi, function(match, numStr) { - var num = parseInt(numStr, 10); - return String.fromCharCode(num); - }); -} +// textEncode(string) to encode characters for image processing +export function textEncode(string) { + return string.replaceAll("&", "&").replaceAll(">", ">").replaceAll("<", "<").replaceAll("\"", """).replaceAll("'", "'").replaceAll("\\n", "\n").replaceAll("\\:", ":"); +} \ No newline at end of file