]> git.lizzy.rs Git - furrybot-discord.git/blob - waifu.js
Add bad apple
[furrybot-discord.git] / waifu.js
1 const common = require("./common.js")
2 const pseudoRandom = require("pseudo-random")
3 const hiragana = require("./hiragana.json")
4 let hiraganaList = []
5
6 for (let k of Object.keys(hiragana))
7         if (k.length == 1)
8                 hiraganaList.push(k)
9
10
11 const waifuName = rng => {
12         let r = Math.floor(1
13                 + rng.random()
14                 + rng.random()
15                 + rng.random()
16                 + rng.random()
17                 + rng.random()
18         )
19
20         let jp = ""
21
22         for (let i = 0; i < r; i++)
23                 jp += common.choose(hiraganaList, rng)
24
25         let en = ""
26
27         for (let i = 0; i < r; i++) {
28                 const combo = hiragana[jp.slice(i, i + 2)]
29
30                 if (combo) {
31                         en += combo
32                         i++
33                 } else {
34                         en += hiragana[jp.slice(i, i + 1)]
35                 }
36         }
37
38         return `${jp} (${common.uppercase(en)})`
39 }
40
41 const waifuSpecies = rng => common.chooseWeighted([
42         [               null, 100], // Human
43         [          "Catgirl",  15],
44         [          "Foxgirl",  15],
45         [         "Wolfgirl",  15],
46         [              "Orc",   5],
47         [              "Elb",   5],
48         [            "Dwarf",   5],
49         [           "Femboy",   3],
50         ["Apache Helicopter",   1],
51         [   "C++ Programmer",   1],
52 ], rng)
53
54 const waifuGender = rng => common.chooseWeighted([
55         [     "Male", 50],
56         [   "Female", 50],
57         [     "null",  1],
58         ["undefined",  1],
59         [ "Infinity",  1],
60         ["-Infinity",  1],
61         [      "NaN",  1],
62         [     "-NaN",  1],
63 ], rng)
64
65 const waifuHair = rng => common.chooseWeighted([
66         [[ "Brown", "#DDAE92"], 25],
67         [[ "Black", "#433F3A"], 25],
68         [["Blonde", "#ECC87E"], 20],
69         [[   "Red", "#E2887F"], 10],
70 ], rng)
71
72 const waifuEyes = rng => common.chooseWeighted([
73         [["Brown", "#463230"], 15],
74         [[ "Blue", "#97C6FE"], 10],
75         [["Green", "#36CC4E"],  5],
76 ], rng)
77
78 const waifuAge = rng => {
79         const tab = common.chooseWeighted([
80                 [[ 200,  600], 25], // deamon
81                 [[1000, 2000],  5], // next level deamon
82                 [[  12,   16], 50], // teen loli
83                 [[  18,   19],  5], // legal loli
84                 [[   5,    9],  5], // true loli
85                 [        null,  1], // unknown
86         ], rng)
87
88         return tab ? tab[0] + Math.floor(rng.random() * (tab[1] - tab[0] + 1)) : null;
89 }
90
91 const waifu = id => {
92         const rng = pseudoRandom(id = id || Math.floor(Math.random() * 32767))
93
94         return {
95                 id,
96                 name: waifuName(rng),
97                 species: waifuSpecies(rng),
98                 gender: waifuGender(rng),
99                 hair: waifuHair(rng),
100                 eyes: waifuEyes(rng),
101                 age: waifuAge(rng),
102         }
103 }
104
105 const formatWaifu = waifu =>
106 `__**${waifu.name}**__
107         **Age:** ${waifu.age || "Unknown"}
108         **Gender:** ${waifu.gender}
109         ${waifu.hair[0]} Hair
110         ${waifu.eyes[0]} Eyes
111
112         #${waifu.id}
113 `
114
115 module.exports = {
116         waifu: {
117                 func: (msg, [id]) =>
118                         msg.reply(formatWaifu(waifu(parseInt(id))))
119         }
120 }