from __future__ import annotations import functools from typing import List from metadata.genshin import WEAPON_DATA __all__ = ["roles", "weapons", "roleToId", "roleToName", "weaponToName", "weaponToId", "not_real_roles", "roleToTag"] # noinspection SpellCheckingInspection roles = { 20000000: [ "主角", "旅行者", "卑鄙的外乡人", "荣誉骑士", "爷", "风主", "岩主", "雷主", "草主", "履刑者", "人之子", "命定之人", "荣誉骑士", "小可爱", # 丽莎 "小家伙", # 八重神子 "金发异乡人", "大黄金钓鱼手", # 派蒙 "黄毛阿姨", "黄毛叔叔", "大黄倭瓜那菈", ], 10000002: ["神里绫华", "ayaka", "kamisato ayaka", "神里", "绫华", "神里凌华", "凌华", "白鹭公主", "神里大小姐", "冰骗骗花"], 10000003: ["琴", "jean", "团长", "代理团长", "琴团长", "蒲公英骑士", "蒙德砍王", "骑士团的魂"], 10000005: ["空", "aether", "男主", "男主角", "龙哥", "空哥", "王子"], 10000006: ["丽莎", "lisa", "图书管理员", "图书馆管理员", "蔷薇魔女"], 10000007: ["荧", "lumine", "女主", "女主角", "莹", "萤", "黄毛阿姨", "荧妹", "公主殿下"], 10000014: ["芭芭拉", "barbara", "巴巴拉", "拉粑粑", "拉巴巴", "内鬼", "加湿器", "闪耀偶像", "偶像", "蒙德辣王"], 10000015: ["凯亚", "kaeya", "盖亚", "凯子哥", "凯鸭", "矿工", "矿工头子", "骑兵队长", "凯子", "凝冰渡海真君", "花脸猫"], 10000016: [ "迪卢克", "diluc", "卢姥爷", "姥爷", "卢老爷", "卢锅巴", "正义人", "正e人", "正E人", "卢本伟", "暗夜英雄", "卢卢伯爵", "落魄了", "落魄了家人们", "哦哦哦", "前夫哥", "在此烧鸟真君", "E键三连真君", ], 10000020: [ "雷泽", "razor", "狼少年", "狼崽子", "狼崽", "卢皮卡", "小狼", "小狼狼", "小狼狗", "小赛诺", "替身使者", "须佐狼乎", "蒙德砍王", "炸矿之星", ], 10000021: [ "安柏", "amber", "安伯", "兔兔伯爵", "飞行冠军", "侦查骑士", "侦察骑士", "点火姬", "点火机", "打火机", "打火姬", "燃炬焚棘真君", "初代目提瓦特第一火弓", ], 10000022: [ "温迪", "venti", "温蒂", "风神", "卖唱的", "巴巴托斯", "巴巴脱丝", "芭芭托斯", "芭芭脱丝", "干点正事", "不干正事", "吟游诗人", "诶嘿", "唉嘿", "摸鱼", "最弱最丢人的七神", "卖唱的大哥哥", "巴巴托斯大人", "欸嘿聚怪真君", "荻花洲的吹笛人", "直升机", ], 10000023: [ "香菱", "xiangling", "香玲", "锅巴", "厨师", "万民堂厨师", "香师傅", "哪吒", "锅巴发射器", "无敌风火轮真君", "舌尖上的璃月", "提瓦特枪王", ], 10000024: ["北斗", "beidou", "大姐头", "大姐", "无冕的龙王", "稻妻人形继电石"], 10000025: ["行秋", "xingqiu", "秋秋人", "秋妹妹", "书呆子", "水神", "飞云商会二少爷", "秋秋人", "6星水神", "玉老师"], 10000026: [ "魈", "xiao", "杏仁豆腐", "打桩机", "插秧", "三眼五显仙人", "三眼五显真人", "降魔大圣", "护法夜叉", "快乐风男", "无聊", "靖妖傩舞", "矮子仙人", "三点五尺仙人", "跳跳虎", "护法夜叉大将", "金鹏大将", "这里无能真君", "抬头不见低头见真君", "跳跳虎", "随叫随到真君", "成天冷着脸的帅气小哥", ], 10000027: ["凝光", "ningguang", "富婆", "天权星", "寻山见矿真君"], 10000029: [ "可莉", "klee", "嘟嘟可", "火花骑士", "蹦蹦炸弹", "炸鱼", "放火烧山", "放火烧山真君", "蒙德最强战力", "逃跑的太阳", "啦啦啦", "哒哒哒", "炸弹人", "禁闭室", "艾莉丝的女儿", "阿贝多的义妹", "火化骑士", "炸鱼禁闭真君", "蒙德小坦克", "骑士团团宠", ], 10000030: [ "钟离", "zhongli", "摩拉克斯", "岩王爷", "岩神", "钟师傅", "天动万象", "岩王帝君", "未来可期", "帝君", "契约之神", "社会废人", "未来可期真君", "废人养成器", "听书人", ], 10000031: ["菲谢尔", "fischl", "皇女", "小艾米", "小艾咪", "奥兹", "断罪皇女", "中二病", "中二少女", "中二皇女", "奥兹发射器"], 10000032: ["班尼特", "bennett", "点赞哥", "点赞", "倒霉少年", "倒霉蛋", "霹雳闪雷真君", "班神", "班爷", "倒霉", "火神", "六星真神"], 10000033: [ "达达利亚", "tartaglia", "childe", "ajax", "达达鸭", "达达利鸭", "公子", "玩具销售员", "玩具推销员", "钱包", "鸭鸭", "愚人众末席", "至冬国驻璃月港玩具推销员主管", "钟离的钱包", "近战弓兵", "在蒙德认识的冒险家", "永别冬都", "汤达人", "大貉妖处理专家", ], 10000034: ["诺艾尔", "noelle", "女仆", "高达", "岩王帝姬", "山吹", "冰萤术士", "岩王帝姬"], 10000035: ["七七", "qiqi", "僵尸", "肚饿真君", "度厄真君", "77", "起死回骸童子", "救苦度厄真君", "椰羊创始人", "不卜庐砍王"], 10000036: ["重云", "chongyun", "纯阳之体", "冰棍", "驱邪世家", "大外甥"], 10000037: ["甘雨", "ganyu", "椰羊", "椰奶", "鸡腿猎人", "咕噜咕噜滚下山真君", "肝雨", "走路上山真君"], 10000038: [ "阿贝多", "albedo", "可莉哥哥", "升降机", "升降台", "电梯", "白垩之子", "贝爷", "白垩", "阿贝少", "花呗多", "阿贝夕", "abd", "阿师傅", "小王子", "调查小队队长", "西风骑士团首席炼金术师", "白垩老师", "电梯人", "蒙德岩神", "平平无奇", "蒙德NPC", ], 10000039: ["迪奥娜", "diona", "迪欧娜", "dio", "dio娜", "冰猫", "猫猫", "猫娘", "喵喵", "调酒师"], 10000041: [ "莫娜", "mona", "穷鬼", "穷光蛋", "穷", "莫纳", "占星术士", "占星师", "讨龙真君", "半部讨龙真君", "阿斯托洛吉斯·莫娜·梅姬斯图斯", "梅姬斯图斯", "梅姬斯图斯卿", "梅姬", "半部讨龙真君", ], 10000042: [ "刻晴", "keqing", "刻情", "氪晴", "刻师傅", "刻师父", "牛杂", "牛杂师傅", "斩尽牛杂", "免疫", "免疫免疫", "屁斜剑法", "玉衡星", "阿晴", "啊晴", "得不到的女人", "金丝虾球真君", "璃月雷神", "刻猫猫", ], 10000043: ["砂糖", "sucrose", "雷莹术士", "雷萤术士", "雷荧术士"], 10000044: ["辛焱", "xinyan", "辛炎", "黑妹", "摇滚"], 10000045: [ "罗莎莉亚", "rosaria", "罗莎莉娅", "白色史莱姆", "白史莱姆", "修女", "罗莎利亚", "罗莎利娅", "罗沙莉亚", "罗沙莉娅", "罗沙利亚", "罗沙利娅", "萝莎莉亚", "萝莎莉娅", "萝莎利亚", "萝莎利娅", "萝沙莉亚", "萝沙莉娅", "萝沙利亚", "萝沙利娅", ], 10000046: [ "胡桃", "hutao", "hu tao", "胡淘", "往生堂堂主", "火化", "抬棺的", "蝴蝶", "核桃", "堂主", "胡堂主", "雪霁梅香", "黑无常", "嘘嘘鬼王", "琪亚娜", "薪炎之律者", ], 10000047: ["枫原万叶", "kazuha", "kaedehara kazuha", "万叶", "叶天帝", "天帝", "人型气象观测台", "浪人武士"], 10000048: ["烟绯", "yanfei", "烟老师", "律师", "罗翔", "璃月港的知名律法咨询师", "璃月罗翔", "铁人三项真君"], 10000049: [ "宵宫", "yoimiya", "霄宫", "烟花", "肖宫", "肖工", "绷带女孩", "夏祭的女王", "地对鸽导弹", "打火姬二代目", "长野原加特林", "花见坂军火商", ], 10000050: ["托马", "thoma", "家政官", "太郎丸", "地头蛇", "男仆", "男妈妈"], 10000051: ["优菈", "eula", "优拉", "尤拉", "尤菈", "浪花骑士", "记仇", "喷嚏记仇真君"], 10000052: [ "雷电将军", "shougun", "raiden shogun", "raiden", "雷神", "将军", "雷军", "巴尔", "阿影", "影", "巴尔泽布", "煮饭婆", "奶香一刀", "无想一刀", "宅女", "大御所大人", "鸣神", "永恒之神", "姐控", "不会做饭真君", "宅女程序员", "奶香一刀真君", "雷电芽衣", "又哭又闹真君", ], 10000053: ["早柚", "sayu", "小狸猫", "狸猫", "咕噜咕噜赶路真君", "柚岩龙蜥", "善于潜行的矮子", "专业人士"], 10000054: [ "珊瑚宫心海", "kokomi", "sangonomiya kokomi", "心海", "军师", "珊瑚宫", "书记", "观赏鱼", "水母", "鱼", "现人神巫女", "宅家派节能军师", "藤原千花", "能量管理大师", "五星观赏鱼", "海天后", "深海舌鲆鱼小姐", ], 10000055: ["五郎", "gorou", "柴犬", "土狗", "希娜", "希娜小姐", "海祇岛的小狗大将", "修勾", "五郎大将的朋友", "小狗勾"], 10000056: [ "九条裟罗", "sara", "kujou sara", "九条", "九条沙罗", "裟罗", "条家的养子", "雷系班尼特", "雷神单推头子", "珊瑚宫心海的冤家", "荒泷一斗的冤家", "外置暴伤", "维密天使", ], 10000057: [ "荒泷一斗", "itto", "arataki itto", "荒龙一斗", "荒泷天下第一斗", "一斗", "一抖", "荒泷", "1斗", "牛牛", "斗子哥", "牛子哥", "牛子", "孩子王", "斗虫", "巧乐兹", "放牛的", "岩丘丘萨满", "伐伐伐伐伐木工", "希娜小姐的榜一大哥", ], 10000058: [ "八重神子", "miko", "yae miko", "八重", "神子", "狐狸", "想得美哦", "巫女", "屑狐狸", "骚狐狸", "八重宫司", "婶子", "小八", "白辰血脉的后裔", "兼具智慧和美貌的八重神子大人", "稻妻老八", "雷丘丘萨满", "八重樱", "嗑瓜子", "小奥兹", "玲珑油豆腐小姐", ], 10000059: [ "鹿野院平藏", "heizou", "shikanoin heizou", "heizo", "鹿野苑", "鹿野院", "平藏", "鹿野苑平藏", "鹿野", "小鹿", "天领奉行侦探", "鹿野奈奈的表弟", "风拳前锋军", "拳师", "名侦探柯南", "捕快展昭", ], 10000060: ["夜兰", "yelan", "夜阑", "叶澜", "腋兰", "夜天后", "自称就职于总务司的神秘人士", "岩上茶室老板", "夜上海", "胸怀大痣"], 10000062: ["埃洛伊", "aloy", "异界的救世主"], 10000063: ["申鹤", "shenhe", "神鹤", "小姨", "小姨子", "审鹤", "仙家弟子", "驱邪世家旁", "药材杀手"], 10000064: ["云堇", "yunjin", "yun jin", "云瑾", "云先生", "云锦", "神女劈观", "岩北斗", "五更琉璃"], 10000065: [ "久岐忍", "kuki", "kuki shinobu", "shinobu", "97忍", "小忍", "久歧忍", "97", "茄忍", "阿忍", "忍姐", "鬼之副手", "不是忍者的忍者", "医疗忍者", "考证专家", ], 10000066: [ "神里绫人", "ayato", "kamisato ayato", "绫人", "神里凌人", "凌人", "0人", "神人", "零人", "大舅哥", "神里绫华的兄长", "荒泷一斗的虫友", "奥托", "奥托·阿波卡利斯", "奥托主教", "藏镜仕男", "袖藏奶茶真君", "真正的甘雨", "可莉的爷爷", ], 10000067: [ "柯莱", "collei", "柯来", "科莱", "科来", "小天使", "须弥安柏", "须弥飞行冠军", "见习巡林员", "克莱", "草安伯", "道成林见习巡林员", "提纳里的学徒", "安柏的挚友", "兰那罗奶奶", ], 10000068: ["多莉", "dori", "多利", "多力", "多丽", "奸商", "须弥百货商人", "歌玛哈巴依老爷", "艾尔卡萨扎莱宫之主"], 10000069: [ "提纳里", "tighnari", "小提", "提那里", "缇娜里", "提哪里", "驴", "柯莱老师", "柯莱师傅", "巡林官", "提那里", "耳朵很好摸", "道成林巡林官", "柯莱的师父", ], 10000070: ["妮露", "nilou", "尼露", "祖拜尔剧场之星", "红牛"], 10000071: ["赛诺", "cyno", "赛洛", "大风纪官", "大风机关", "胡狼头大人", "夹击妹抖", "游戏王", "冷笑话爱好者"], 10000072: ["坎蒂丝", "candace", "坎迪斯", "水北斗", "赤王后裔", "阿如村守护者"], 10000073: [ "纳西妲", "nahida", "草王", "草神", "小吉祥草王", "草萝莉", "艹萝莉", "羽毛球", "布耶尔", "纳西坦", "摩诃善法大吉祥智慧主", "智慧之神", "草木之主", ], 10000074: ["莱依拉", "layla", "拉一拉", "莱伊拉", "莫娜的同行", "西琳", "黑塔"], 10000075: [ "流浪者", "wanderer", "散兵", "伞兵", "伞兵一号", "国崩", "卢本伟", "大炮", "sb", "斯卡拉姆齐", "倾奇者", "黑主", "崩崩小圆帽", "七叶寂照秘密主", "正机之神", ], 10000076: ["珐露珊", "faruzan", "法露珊", "珐妹", "初音", "miku", "发露姗", "发姐", "法姐", "百岁珊", "初音未来", "童姥", "知论派名宿"], 10000077: ["瑶瑶", "yaoyao", "遥遥", "遥遥无期", "香菱师妹"], 10000078: ["艾尔海森", "alhaitham", "爱尔海森", "艾尔海参", "艾尔", "海森", "海参", "海神"], } not_real_roles = [10000077, 10000078] weapons = { "磐岩结绿": ["绿箭", "绿剑"], "斫峰之刃": ["斫峰", "盾剑"], "无工之剑": ["蜈蚣", "蜈蚣大剑", "无工大剑", "盾大剑", "无工"], "贯虹之槊": ["贯虹", "岩枪", "盾枪", "钟离专武"], "赤角石溃杵": ["赤角", "石溃杵", "荒泷一斗专武"], "尘世之锁": ["尘世锁", "尘世", "盾书", "锁"], "终末嗟叹之诗": ["终末", "终末弓", "叹气弓", "乐团弓", "温迪专武"], "松籁响起之时": ["松籁", "乐团大剑", "松剑", "优菈专武"], "苍古自由之誓": ["苍古", "乐团剑", "枫原万叶专武"], "「渔获」": ["鱼叉", "渔叉", "渔获"], "衔珠海皇": ["海皇", "咸鱼剑", "咸鱼大剑"], "匣里日月": ["日月"], "匣里灭辰": ["灭辰"], "匣里龙吟": ["龙吟"], "天空之翼": ["天空弓"], "天空之刃": ["天空剑"], "天空之卷": ["天空书", "厕纸"], "天空之脊": ["天空枪", "薄荷枪"], "天空之傲": ["天空大剑"], "四风原典": ["四风", "可莉专武"], "试作斩岩": ["斩岩"], "试作星镰": ["星镰"], "试作金珀": ["金珀"], "试作古华": ["古华"], "试作澹月": ["澹月"], "千岩长枪": ["千岩枪"], "千岩古剑": ["千岩剑", "千岩大剑"], "暗巷闪光": ["暗巷剑"], "暗巷猎手": ["暗巷弓"], "阿莫斯之弓": ["阿莫斯", "ams", "痛苦弓", "甘雨专武"], "雾切之回光": ["雾切", "神里绫华专武"], "飞雷之弦振": ["飞雷", "飞雷弓", "宵宫专武"], "薙草之稻光": ["薙草", "稻光", "薙草稻光", "马尾枪", "马尾", "薙刀", "雷电将军专武"], "神乐之真意": ["神乐", "真意", "八重神子专武"], "狼的末路": ["狼末"], "护摩之杖": ["护摩", "护摩枪", "护膜", "胡桃专武"], "和璞鸢": ["鸟枪", "绿枪", "魈专武"], "风鹰剑": ["风鹰"], "冬极白星": ["冬极", "达达利亚专武"], "不灭月华": ["月华", "珊瑚宫心海专武"], "波乱月白经津": ["波乱", "月白", "波乱月白", "经津", "波波津", "神里绫人专武"], "若水": ["麒麟弓", "夜兰专武"], "昭心": ["糟心"], "幽夜华尔兹": ["幽夜", "幽夜弓", "华尔兹", "皇女弓"], "雪葬的星银": ["雪葬", "星银", "雪葬星银", "雪山大剑"], "喜多院十文字": ["喜多院", "十文字"], "万国诸海图谱": ["万国", "万国诸海"], "天目影打刀": ["天目刀", "天目"], "破魔之弓": ["破魔弓"], "曚云之月": ["曚云弓"], "流月针": ["针"], "流浪乐章": ["赌狗书", "赌狗乐章", "赌狗"], "桂木斩长正": ["桂木", "斩长正"], "腐殖之剑": ["腐殖", "腐殖剑"], "风花之颂": ["风花弓"], "证誓之明瞳": ["证誓", "明瞳", "证誓明瞳"], "嘟嘟可故事集": ["嘟嘟可"], "辰砂之纺锤": ["辰砂", "辰砂纺锤", "纺锤", "阿贝多专武"], "白辰之环": ["白辰", "白辰环"], "决斗之枪": ["决斗枪", "决斗", "月卡枪"], "螭骨剑": ["螭骨", "丈育剑", "离骨剑", "月卡大剑"], "黑剑": ["月卡剑"], "苍翠猎弓": ["绿弓", "月卡弓"], "讨龙英杰谭": ["讨龙"], "神射手之誓": ["脚气弓", "神射手"], "黑缨枪": ["史莱姆枪"], "黑岩刺枪": ["黑岩枪"], "黑岩战弓": ["黑岩弓"], "笼钓瓶一心": ["万叶刀", "一心传名刀"], "猎人之径": ["绿弓", "草弓", "提纳里专武"], "竭泽": ["鱼弓"], "王下近侍": ["须弥锻造弓"], "贯月矢": ["须弥锻造长枪"], "盈满之实": ["须弥锻造法器"], "森林王器": ["须弥锻造大剑"], "原木刀": ["须弥锻造单手剑"], "圣显之钥": ["圣显之钥", "圣显", "不灭剑华", "妮露专武"], "西福斯的月光": ["西福斯", "月光"], "赤沙之杖": ["赤沙", "赛诺专武"], "风信之锋": ["风信", "风信锋"], "玛海菈的水色": ["玛海菈", "水色"], "千夜浮梦": ["千夜", "神灯", "茶壶", "夜壶"], "流浪的晚星": ["晚星"], "息灾": ["申鹤专武"], "东花坊时雨": ["东花坊", "时雨", "伞"], "图莱杜拉的回忆": ["图莱杜拉", "铃铛", "流浪者专武"], "裁叶萃光": ["萃光"], } # noinspection PyPep8Naming @functools.lru_cache() def roleToName(shortname: str) -> str: """将角色昵称转为正式名""" shortname = str.casefold(shortname) # 忽略大小写 return next((value[0] for value in roles.values() for name in value if name == shortname), shortname) # noinspection PyPep8Naming @functools.lru_cache() def roleToId(name: str) -> int | None: """获取角色ID""" name = str.casefold(name) return next((key for key, value in roles.items() for n in value if n == name), None) # noinspection PyPep8Naming @functools.lru_cache() def weaponToName(shortname: str) -> str: """将武器昵称转为正式名""" return next((key for key, value in weapons.items() if shortname == key or shortname in value), shortname) # noinspection PyPep8Naming @functools.lru_cache() def weaponToId(name: str) -> int | None: """获取武器ID""" return next((int(key) for key, value in WEAPON_DATA.items() if weaponToName(name) in value["name"]), None) # noinspection PyPep8Naming @functools.lru_cache() def roleToTag(role_name: str) -> List[str]: """通过角色名获取TAG""" role_name = str.casefold(role_name) return next((value for value in roles.values() if value[0] == role_name), [role_name])