From b101e643d5564ad93e7df6be9efde6e42cc7141d Mon Sep 17 00:00:00 2001 From: echo <91651232+exhq@users.noreply.github.com> Date: Sat, 8 Oct 2022 22:26:38 +0330 Subject: [PATCH] added uwuify, but correct (#56) * added uwuify command * second try, uwuify: the return * used the correct api * added stuttering, repeating words ending with "y" and word replaces * forgot to add one line lmao * deleted a test statement * added more isowo checks * fixed replace-checking edgecase * moved around statements - thanks arjix * fixed another edgecase - gosh my code sucks * did eslint bs, and added comments * removed multiple toLowerCase calls --- src/plugins/uwuify.ts | 129 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 src/plugins/uwuify.ts diff --git a/src/plugins/uwuify.ts b/src/plugins/uwuify.ts new file mode 100644 index 000000000..710d0e856 --- /dev/null +++ b/src/plugins/uwuify.ts @@ -0,0 +1,129 @@ +import definePlugin from "../utils/types"; +import { findOption, RequiredMessageOption } from "../api/Commands"; + +//words have a chance of ending with these +const endings = [ + "owo", + "UwU", + ">w<", + "^w^", + "ā—wā—", + "ā˜†wā˜†", + "š—Øš˜„š—Ø", + "(į—’į—Øį—•)", + "(ā–°Ė˜vĖ˜ā–°)", + "( Ā“ ā–½ ` ).ļ½”ļ½ā™”", + "*unbuttons shirt*", + ">3<", + ">:3", + ":3", + "murr~", + "ā™„(怂U Ļ‰ U怂)", + "(Ė˜ĪµĖ˜)", + "*screams*", + "*twerks*", + "*sweats*", +]; + +//replacement words +const words = [ + ["love", "wuv"], + ["mr", "mistuh"], + ["dog", "doggo"], + ["cat", "kitteh"], + ["hello", "henwo"], + ["hell", "heck"], + ["fuck", "fwick"], + ["fuk", "fwick"], + ["shit", "shoot"], + ["friend", "fwend"], + ["stop", "stawp"], + ["god", "gosh"], + ["dick", "peepee"], + ["penis", "bulge"], + ["damn", "darn"], +]; + + +//uwuify command +function uwuify(message: string): string { + let isowo = false; + return message + .split(" ") + .map(element => { + isowo = false; + let lowerCase = element.toLowerCase(); + //return if the word is too short - uwuifying short words makes them unreadable + if (element.length < 4) { + return element; + } + + //replacing the words based on the array on line 29 + for (let [find, replace] of words) { + if (element.includes(find)) { + element = element.replace(find, replace); + isowo = true; + } + } + //these are the biggest word changes. if any of these are done we dont do the + //ones after the isowo check. to keep the words somewhat readable + if (lowerCase.includes("u") && !lowerCase.includes("uwu")) { + element = element.replace("u", "UwU"); + isowo = true; + } + if (lowerCase.includes("o") && !lowerCase.includes("owo")) { + element = element.replace("o", "OwO"); + isowo = true; + } + if (lowerCase.endsWith("y") && element.length < 7) { + element = element + " " + "w" + element.slice(1); + isowo = true; + } + + //returning if word has been already uwuified - to prevent over-uwuifying + if (isowo) { + return element; + } + + //more tiny changes - to keep the words that passed through the latter changes uwuified + if (!lowerCase.endsWith("n")) { + element = element.replace("n", "ny"); + } + if (Math.floor(Math.random() * 2) == 1) { + element.replace("s", "sh"); + } + if (Math.floor(Math.random() * 5) == 3 && !isowo) { + element = element[0] + "-" + element[0] + "-" + element; + } + if (Math.floor(Math.random() * 5) == 3) { + element = + element + + " " + + endings[Math.floor(Math.random() * endings.length)]; + } + element = element.replace("r", "w").replace("l", "w"); + return element; + }).join(" "); +} + + + +//actual command declaration +export default definePlugin({ + name: "UwUifier", + description: "Simply uwuify commands", + authors: [{ name: "ECHO", id: 712639419785412668n }], + dependencies: ["CommandsAPI"], + + commands: [ + { + name: "uwuify", + description: "uwuifies your messages", + options: [RequiredMessageOption], + + execute: opts => ({ + content: uwuify(findOption(opts, "message", "")), + }), + }, + ], +});