aboutsummaryrefslogtreecommitdiff
path: root/waifu.js
blob: 757009aed257d0f3a8bc0ad082c7ec5cccbc9264 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
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))))
	}
}