aboutsummaryrefslogtreecommitdiff
path: root/waifu.js
diff options
context:
space:
mode:
Diffstat (limited to 'waifu.js')
-rw-r--r--waifu.js120
1 files changed, 120 insertions, 0 deletions
diff --git a/waifu.js b/waifu.js
new file mode 100644
index 0000000..306c716
--- /dev/null
+++ b/waifu.js
@@ -0,0 +1,120 @@
+const common = require("./common.js")
+const pseudoRandom = require("pseudo-random")
+const hiragana = require("./hiragana.json")
+let hiraganaList = []
+
+for (let k of Object.keys(hiragana))
+ if (k.length == 1)
+ hiraganaList.push(k)
+
+
+const waifuName = rng => {
+ let r = Math.floor(1
+ + rng.random()
+ + rng.random()
+ + rng.random()
+ + rng.random()
+ + rng.random()
+ )
+
+ let jp = ""
+
+ for (let i = 0; i < r; i++)
+ jp += common.choose(hiraganaList, rng)
+
+ let en = ""
+
+ for (let i = 0; i < r; i++) {
+ const combo = hiragana[jp.slice(i, i + 2)]
+
+ if (combo) {
+ en += combo
+ i++
+ } else {
+ en += hiragana[jp.slice(i, i + 1)]
+ }
+ }
+
+ return `${jp} (${common.uppercase(en)})`
+}
+
+const waifuSpecies = rng => common.chooseWeighted([
+ [ null, 100], // Human
+ [ "Catgirl", 15],
+ [ "Foxgirl", 15],
+ [ "Wolfgirl", 15],
+ [ "Orc", 5],
+ [ "Elb", 5],
+ [ "Dwarf", 5],
+ [ "Femboy", 3],
+ ["Apache Helicopter", 1],
+ [ "C++ Programmer", 1],
+], rng)
+
+const waifuGender = rng => common.chooseWeighted([
+ [ "Male", 50],
+ [ "Female", 50],
+ [ "null", 1],
+ ["undefined", 1],
+ [ "Infinity", 1],
+ ["-Infinity", 1],
+ [ "NaN", 1],
+ [ "-NaN", 1],
+], rng)
+
+const waifuHair = rng => common.chooseWeighted([
+ [[ "Brown", "#DDAE92"], 25],
+ [[ "Black", "#433F3A"], 25],
+ [["Blonde", "#ECC87E"], 20],
+ [[ "Red", "#E2887F"], 10],
+], rng)
+
+const waifuEyes = rng => common.chooseWeighted([
+ [["Brown", "#463230"], 15],
+ [[ "Blue", "#97C6FE"], 10],
+ [["Green", "#36CC4E"], 5],
+], rng)
+
+const waifuAge = rng => {
+ const tab = common.chooseWeighted([
+ [[ 200, 600], 25], // deamon
+ [[1000, 2000], 5], // next level deamon
+ [[ 12, 16], 50], // teen loli
+ [[ 18, 19], 5], // legal loli
+ [[ 5, 9], 5], // true loli
+ [ null, 1], // unknown
+ ], rng)
+
+ return tab ? tab[0] + Math.floor(rng.random() * (tab[1] - tab[0] + 1)) : null;
+}
+
+const waifu = id => {
+ const rng = pseudoRandom(id = id || Math.floor(Math.random() * 32767))
+
+ return {
+ id,
+ name: waifuName(rng),
+ species: waifuSpecies(rng),
+ gender: waifuGender(rng),
+ hair: waifuHair(rng),
+ eyes: waifuEyes(rng),
+ age: waifuAge(rng),
+ }
+}
+
+const formatWaifu = waifu =>
+`__**${waifu.name}**__
+ **Age:** ${waifu.age || "Unknown"}
+ **Gender:** ${waifu.gender}
+ ${waifu.hair[0]} Hair
+ ${waifu.eyes[0]} Eyes
+
+ #${waifu.id}
+`
+
+module.exports = {
+ waifu: {
+ func: (msg, [id]) =>
+ msg.reply(formatWaifu(waifu(parseInt(id))))
+ }
+}