refactor name logic

This commit is contained in:
bridge
2025-11-02 21:01:30 +08:00
parent 272ba8d9d8
commit c5c6c640b7
9 changed files with 740 additions and 117 deletions

View File

@@ -1,110 +0,0 @@
import random
from typing import Optional
from src.classes.avatar import Gender
from src.classes.sect import Sect
"""
仙侠风格姓名数据库
包含50个姓氏和200个名字男女各100个
"""
# 50个仙侠风格的姓氏
SURNAMES = [
"司马", "慕容", "上官", "独孤", "东方", "南宫", "西门", "北冥", "欧阳", "夏侯",
"令狐", "诸葛", "皇甫", "公孙", "轩辕", "百里", "呼延", "闻人", "长孙", "段干",
"", "", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "", ""
]
# 200个仙侠风格的名字
MALE_GIVEN_NAMES = [
# 男性名字 (100个)
"逍遥", "无极", "天行", "凌云", "破晓", "斩风", "御风", "追星", "景天", "清源",
"玄机", "天骄", "无双", "惊鸿", "绝尘", "傲天", "剑心", "风华", "无尘", "天启",
"墨染", "凌霄", "天羽", "星辰", "飞雪", "幽冥", "天籁", "破军", "神威", "无痕",
"天策", "剑魂", "风流", "绝世", "天命", "扶摇", "傲骨", "星河", "天机", "风云",
"天成", "无忧", "破空", "凌波", "天涯", "风尘", "玄凌", "天阙", "元衡", "剑尘",
# 新增的50个仙侠风格名字
"云霄", "青玄", "玄霄", "沧澜", "断尘", "清尘", "承影", "寒月", "晨旭", "破阵",
"北辰", "南斗", "青冥", "太虚", "玄空", "长生", "寒川", "寒星", "惊雷", "苍穹",
"辰渊", "赤霄", "炎霆", "逐霜", "啸月", "逐风", "青穹", "玄霜", "白羽", "青羽",
"紫霄", "云衡", "星衡", "沧海", "霆骁", "擎天", "孤川", "孤鸿", "墨白", "清越",
"青霖", "驭风", "重楼", "寒洲", "星阑", "子陵", "元诚", "行舟", "凌寒", "青霜"
]
FEMALE_GIVEN_NAMES = [
# 女性名字 (100个)
"如雪", "若梦", "凝香", "紫霞", "月华", "清音", "蝶舞", "花颜", "雅韵", "诗涵",
"静雯", "慕蓉", "婉儿", "柔情", "霓裳", "晚颜", "如烟", "妙音", "冰心", "玉颜",
"如玉", "清影", "梦瑶", "紫嫣", "霜华", "若水", "青莲", "雪儿", "慧心", "素衣",
"如意", "诗雨", "梦蝶", "紫萱", "冰莲", "若兰", "清雅", "雪梅", "慕雪", "天音",
"如风", "诗韵", "梦云", "紫烟", "冰雪", "若霜", "清秋", "雪莲", "慕凝", "天香",
# 新增的50个仙侠风格名字
"月影", "青衣", "素心", "霜凝", "清欢", "暮雪", "月灵", "云岚", "灵汐", "冷月",
"冰瑶", "玄月", "青璇", "紫凝", "雪鸢", "绛霓", "绯烟", "流苏", "墨琴", "断晴",
"雨霖", "归晚", "临渊", "婵娟", "听雪", "凝霜", "岚烟", "疏影", "清宵", "流萤",
"夜阑", "素锦", "锦瑟", "孤鸢", "青萝", "碧落", "飞霜", "无霜", "明玥", "皎月",
"醉花", "半夏", "初霁", "白芷", "青黛", "灵芸", "绮罗", "初晴", "寒烟", "月珑"
]
def get_random_male_name():
"""
获取随机男性全名
"""
return random.choice(SURNAMES) + random.choice(MALE_GIVEN_NAMES)
def get_random_female_name():
"""
获取随机女性全名
"""
return random.choice(SURNAMES) + random.choice(FEMALE_GIVEN_NAMES)
def get_random_name(gender: Gender) -> str:
"""
获取随机全名
"""
if gender == Gender.MALE:
return get_random_male_name()
else:
return get_random_female_name()
def get_random_name_for_sect(gender: Gender, sect: Optional[Sect]) -> str:
"""
基于宗门生成姓名:优先使用宗门常见姓与性别对应名,若缺失则回退到全局库。
"""
surname = pick_surname_for_sect(sect)
given_pool = get_given_pool_for_sect(gender, sect)
return surname + random.choice(given_pool)
# —— 新增:基于指定姓氏与宗门风格生成姓名 ——
def pick_surname_for_sect(sect: Optional[Sect]) -> str:
"""
从宗门常见姓或全局库中挑选一个姓氏。
"""
if sect is not None and sect.sect_surnames:
return random.choice(sect.sect_surnames)
return random.choice(SURNAMES)
def get_given_pool_for_sect(gender: Gender, sect: Optional[Sect]) -> list[str]:
"""
返回给定性别与宗门下的名库(回退到全局)。
"""
if sect is None:
return MALE_GIVEN_NAMES if gender == Gender.MALE else FEMALE_GIVEN_NAMES
if gender == Gender.MALE:
return sect.male_sect_given_names or MALE_GIVEN_NAMES
return sect.female_sect_given_names or FEMALE_GIVEN_NAMES
def get_random_name_with_surname(gender: Gender, surname: str, sect: Optional[Sect]) -> str:
"""
使用给定姓氏,结合宗门偏好名库生成姓名;若宗门未配置则回退全局。
"""
if not surname:
return get_random_name_for_sect(gender, sect)
given_pool = get_given_pool_for_sect(gender, sect)
return surname + random.choice(given_pool)