package generators import ( "encoding/json" "math/rand" "os" ) type FairyArrays struct { Nm1 []string `json:"nm1"` Nm2 []string `json:"nm2"` Nm3 []string `json:"nm3"` Nm4 []string `json:"nm4"` Nm5 []string `json:"nm5"` Nm6 []string `json:"nm6"` Nm7 []string `json:"nm7"` Nm8 []string `json:"nm8"` Nm9 []string `json:"nm9"` Nm10 []string `json:"nm10"` } func LoadFairyArrays(path string) (FairyArrays, error) { var arrays FairyArrays file, err := os.Open(path) if err != nil { return arrays, err } defer file.Close() decoder := json.NewDecoder(file) err = decoder.Decode(&arrays) return arrays, err } func GenerateFairyNames(arr FairyArrays, gender string, swearFilter func(string) bool) []string { var names []string for i := range 10 { var n string if gender == "female" { if i < 3 { for { n = arr.Nm3[rand.Intn(len(arr.Nm3))] + arr.Nm4[rand.Intn(len(arr.Nm4))] if !swearFilter(n) { break } } } else if i < 6 { for { n = arr.Nm7[rand.Intn(len(arr.Nm7))] + arr.Nm8[rand.Intn(len(arr.Nm8))] if !swearFilter(n) { break } } } else { n = arr.Nm10[rand.Intn(len(arr.Nm10))] } } else { if i < 3 { for { n = arr.Nm1[rand.Intn(len(arr.Nm1))] + arr.Nm2[rand.Intn(len(arr.Nm2))] if !swearFilter(n) { break } } } else if i < 6 { for { n = arr.Nm5[rand.Intn(len(arr.Nm5))] + arr.Nm6[rand.Intn(len(arr.Nm6))] if !swearFilter(n) { break } } } else { n = arr.Nm9[rand.Intn(len(arr.Nm9))] } } names = append(names, n) } return names }