diff options
Diffstat (limited to 'waifu.js')
-rw-r--r-- | waifu.js | 120 |
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)))) + } +} |