diff --git a/backend/internal/robot/namevariety.go b/backend/internal/robot/namevariety.go index 53e831a..a240234 100644 --- a/backend/internal/robot/namevariety.go +++ b/backend/internal/robot/namevariety.go @@ -140,20 +140,23 @@ func cyrillicNick() string { return assembleHandle(form, noun.word) } -// assembleHandle joins an adjective and noun into a handle: a bare noun, the two joined -// by "_" or "." or camel-cased, optionally followed by a trailing number. It keeps at -// most one separator so the result, the number aside, reads like a name a human could pick. +// assembleHandle joins an adjective and noun into a handle: a bare noun, the two +// camel-cased ("DarkWolf"), or joined by a separator. Between two meaningful words a human +// almost always uses "_" — a "." there is a rare tell — so the separator is an underscore +// far more often than a dot. An optional trailing number may follow. func assembleHandle(adj, noun string) string { var base string switch rand.IntN(4) { case 0: - base = noun + base = noun // a bare noun case 1: - base = adj + "_" + noun - case 2: - base = adj + "." + noun + base = adj + noun // camel-cased default: - base = adj + noun + sep := "_" + if rand.IntN(10) == 0 { + sep = "." // a dot between two words is rare + } + base = adj + sep + noun } if rand.IntN(2) == 0 { base += nickNumber()