181 lines
3.7 KiB
INI
181 lines
3.7 KiB
INI
"NameFilter2"
|
||
{
|
||
"settings"
|
||
{
|
||
// names shorter than this after filtering get a replacement name
|
||
"min_length" "2"
|
||
|
||
// percentage of a name's letters that must survive folding; below
|
||
// this the name gets a replacement instead. 0 disables the check
|
||
"min_survived_letters" "50"
|
||
|
||
// a name containing a contiguous typeable (printable ASCII) run with
|
||
// at least this many letters/digits is kept as-is, unicode decoration
|
||
// and all, unless an advert or banned filter matches. An admin can
|
||
// target such a name by its typeable part. 0 disables the exemption
|
||
"keep_typeable_run" "5"
|
||
|
||
// non-ASCII characters that are always kept.
|
||
// accented Latin letters (À-ÿ, Latin Extended-A) are also kept, but only
|
||
// when the name starts with at least two plain Latin letters; otherwise
|
||
// they are reduced to their base letter (Å -> A, æ -> ae)
|
||
"whitelist" "äöüÄÖܧğĞšŠ"
|
||
}
|
||
|
||
// single-character lookalikes folded to ASCII before unmapped unicode is stripped.
|
||
// key = the confusable character (raw UTF-8), value = ASCII replacement
|
||
"confusables"
|
||
{
|
||
// Cyrillic lowercase
|
||
"а" "a"
|
||
"е" "e"
|
||
"о" "o"
|
||
"р" "p"
|
||
"с" "c"
|
||
"у" "y"
|
||
"х" "x"
|
||
"і" "i"
|
||
"ѕ" "s"
|
||
"ј" "j"
|
||
// Cyrillic uppercase
|
||
"А" "A"
|
||
"В" "B"
|
||
"Е" "E"
|
||
"К" "K"
|
||
"М" "M"
|
||
"Н" "H"
|
||
"О" "O"
|
||
"Р" "P"
|
||
"С" "C"
|
||
"Т" "T"
|
||
"Х" "X"
|
||
"Ѕ" "S"
|
||
"І" "I"
|
||
"Ј" "J"
|
||
"У" "Y"
|
||
"З" "3"
|
||
// Cyrillic mirrored/aesthetic lookalikes
|
||
"Я" "R"
|
||
"я" "r"
|
||
"И" "N"
|
||
"и" "n"
|
||
"в" "b"
|
||
"к" "k"
|
||
"м" "m"
|
||
"н" "h"
|
||
"т" "t"
|
||
// Cyrillic with diacritics, same lookalikes as their base letters
|
||
"Ѐ" "E"
|
||
"Ё" "E"
|
||
"ѐ" "e"
|
||
"ё" "e"
|
||
"Ї" "I"
|
||
"ї" "i"
|
||
"Ў" "Y"
|
||
"ў" "y"
|
||
"Ѝ" "N"
|
||
"Й" "N"
|
||
"ѝ" "n"
|
||
"й" "n"
|
||
// Greek
|
||
"Α" "A"
|
||
"Β" "B"
|
||
"Ε" "E"
|
||
"Ζ" "Z"
|
||
"Η" "H"
|
||
"Ι" "I"
|
||
"Κ" "K"
|
||
"Μ" "M"
|
||
"Ν" "N"
|
||
"Ο" "O"
|
||
"Ρ" "P"
|
||
"Τ" "T"
|
||
"Υ" "Y"
|
||
"Χ" "X"
|
||
"α" "a"
|
||
"ν" "v"
|
||
"ο" "o"
|
||
// Greek with tonos/dialytika, same lookalikes as their base letters
|
||
"Ά" "A"
|
||
"Έ" "E"
|
||
"Ή" "H"
|
||
"Ί" "I"
|
||
"Ϊ" "I"
|
||
"Ό" "O"
|
||
"Ύ" "Y"
|
||
"Ϋ" "Y"
|
||
"Ώ" "O"
|
||
"ά" "a"
|
||
"ή" "n"
|
||
"ό" "o"
|
||
"ώ" "w"
|
||
// Greek aesthetic lookalikes
|
||
"Λ" "A"
|
||
"Σ" "E"
|
||
"Δ" "A"
|
||
"Ω" "O"
|
||
"Θ" "O"
|
||
"θ" "o"
|
||
"μ" "u"
|
||
"ω" "w"
|
||
"η" "n"
|
||
// math symbols used as letters
|
||
"∂" "d"
|
||
"∑" "E"
|
||
}
|
||
|
||
// regexes (case-insensitive) whose matches are REMOVED from the name;
|
||
// the rest of the name is kept. Applied to the pure-ASCII folded name.
|
||
"adverts"
|
||
{
|
||
"1" "(astraserver|bruss\.org|marcoplay|marcoserv|css-vip|for-css)\.(ru|com)"
|
||
"2" "discord\.gg/\S+"
|
||
}
|
||
|
||
// regexes (case-insensitive); ANY match assigns a replacement name.
|
||
// Anchor with ^...$ for full-match "too default" names.
|
||
"banned"
|
||
{
|
||
"1" "^player[0-9]*$"
|
||
"2" "^unnamed$"
|
||
"3" "^default$"
|
||
"4" "^nick(name)?$"
|
||
"5" "[a4]+d+m+[il1!]+n+"
|
||
"6" "@((!?)me|(c?)t(s?)|(!?)admins|(!?)friends|random((c?)t?)|humans|spec|alive|dead|aim|bots)"
|
||
}
|
||
|
||
// replacement names; picked deterministically (client % count, next-free probe)
|
||
"names"
|
||
{
|
||
"1" "Reimu Hakurei"
|
||
"2" "Koishi Komeiji"
|
||
"3" "Youmu Konpaku"
|
||
"4" "Sakuya Izayoi"
|
||
"5" "Flandre Scarlet"
|
||
"6" "Remilia Scarlet"
|
||
"7" "Satori Komeiji"
|
||
"8" "Alice Margatroid"
|
||
"9" "Fujiwara no Mokou"
|
||
"10" "Aya Shameimaru"
|
||
"11" "Tenshi Hinanawi"
|
||
"12" "Yukari Yakumo"
|
||
"13" "Sanae Kochiya"
|
||
"14" "Shion Yorigami"
|
||
"15" "Reisen Udongein Inaba"
|
||
"16" "Saeko Busujima"
|
||
"17" "Rei Miyamoto"
|
||
"18" "Saya Takagi"
|
||
"19" "Eru Chitanda"
|
||
"20" "Fuyumi Irisu"
|
||
"21" "Lisara Restall"
|
||
"22" "Sen Yarizui"
|
||
"23" "Momiji Binboda"
|
||
"24" "Ranmaru Rindou"
|
||
"25" "Tatenashi Sarashiki"
|
||
"26" "Laura Bodewig"
|
||
"27" "Houki Shinonono"
|
||
"28" "Ririchiyo Shirakiin"
|
||
"29" "Karuta Roromiya"
|
||
}
|
||
}
|