maimai_py.enums
1from enum import Enum, IntEnum 2from typing import Union 3 4from maimai_ffi.model import region_map 5 6 7class Version(IntEnum): 8 MAIMAI = 10000 9 MAIMAI_PLUS = 11000 10 MAIMAI_GREEN = 12000 11 MAIMAI_GREEN_PLUS = 13000 12 MAIMAI_ORANGE = 14000 13 MAIMAI_ORANGE_PLUS = 15000 14 MAIMAI_PINK = 16000 15 MAIMAI_PINK_PLUS = 17000 16 MAIMAI_MURASAKI = 18000 17 MAIMAI_MURASAKI_PLUS = 18500 18 MAIMAI_MILK = 19000 19 MAIMAI_MILK_PLUS = 19500 20 MAIMAI_FINALE = 19900 21 MAIMAI_DX = 20000 # 舞萌DX 22 MAIMAI_DX_SPLASH = 21000 # 舞萌DX 2021 23 MAIMAI_DX_UNIVERSE = 22000 # 舞萌DX 2022 24 MAIMAI_DX_FESTIVAL = 23000 # 舞萌DX 2023 25 MAIMAI_DX_BUDDIES = 24000 # 舞萌DX 2024 26 MAIMAI_DX_PRISM = 25000 # 舞萌DX 2025 27 MAIMAI_DX_FUTURE = 30000 # 舞萌DX 2077 28 29 30class Genre(Enum): 31 POPSアニメ = "POPSアニメ" 32 niconicoボーカロイド = "niconicoボーカロイド" 33 東方Project = "東方Project" 34 ゲームバラエティ = "ゲームバラエティ" 35 maimai = "maimai" 36 オンゲキCHUNITHM = "オンゲキCHUNITHM" 37 宴会場 = "宴会場" 38 39 40region_map: tuple[str, ...] = region_map 41 42all_versions = list(Version.__members__.values()) 43"""@private""" 44 45current_version = all_versions[-2] 46"""@private""" 47 48plate_to_version: dict[str, Version] = { 49 "初": Version.MAIMAI, 50 "真": Version.MAIMAI_PLUS, 51 "超": Version.MAIMAI_GREEN, 52 "檄": Version.MAIMAI_GREEN_PLUS, 53 "橙": Version.MAIMAI_ORANGE, 54 "晓": Version.MAIMAI_ORANGE_PLUS, 55 "桃": Version.MAIMAI_PINK, 56 "樱": Version.MAIMAI_PINK_PLUS, 57 "紫": Version.MAIMAI_MURASAKI, 58 "堇": Version.MAIMAI_MURASAKI_PLUS, 59 "白": Version.MAIMAI_MILK, 60 "雪": Version.MAIMAI_MILK_PLUS, 61 "辉": Version.MAIMAI_FINALE, 62 "熊": Version.MAIMAI_DX, 63 "华": Version.MAIMAI_DX, 64 "爽": Version.MAIMAI_DX_SPLASH, 65 "煌": Version.MAIMAI_DX_SPLASH, 66 "星": Version.MAIMAI_DX_UNIVERSE, 67 "宙": Version.MAIMAI_DX_UNIVERSE, 68 "祭": Version.MAIMAI_DX_FESTIVAL, 69 "祝": Version.MAIMAI_DX_FESTIVAL, 70 "双": Version.MAIMAI_DX_BUDDIES, 71 "宴": Version.MAIMAI_DX_BUDDIES, 72 "镜": Version.MAIMAI_DX_PRISM, 73 "未": Version.MAIMAI_DX_FUTURE, 74} 75"""@private""" 76 77 78divingfish_to_version: dict[str, Version] = { 79 "maimai": Version.MAIMAI, 80 "maimai PLUS": Version.MAIMAI_PLUS, 81 "maimai GreeN": Version.MAIMAI_GREEN, 82 "maimai GreeN PLUS": Version.MAIMAI_GREEN_PLUS, 83 "maimai ORANGE": Version.MAIMAI_ORANGE, 84 "maimai ORANGE PLUS": Version.MAIMAI_ORANGE_PLUS, 85 "maimai PiNK": Version.MAIMAI_PINK, 86 "maimai PiNK PLUS": Version.MAIMAI_PINK_PLUS, 87 "maimai MURASAKi": Version.MAIMAI_MURASAKI, 88 "maimai MURASAKi PLUS": Version.MAIMAI_MURASAKI_PLUS, 89 "maimai MiLK": Version.MAIMAI_MILK, 90 "MiLK PLUS": Version.MAIMAI_MILK_PLUS, 91 "maimai FiNALE": Version.MAIMAI_FINALE, 92 "maimai でらっくす": Version.MAIMAI_DX, 93 "maimai でらっくす PLUS": Version.MAIMAI_DX, 94 "maimai でらっくす Splash": Version.MAIMAI_DX_SPLASH, 95 "maimai でらっくす Splash PLUS": Version.MAIMAI_DX_SPLASH, 96 "maimai でらっくす UNiVERSE": Version.MAIMAI_DX_UNIVERSE, 97 "maimai でらっくす UNiVERSE PLUS": Version.MAIMAI_DX_UNIVERSE, 98 "maimai でらっくす FESTiVAL": Version.MAIMAI_DX_FESTIVAL, 99 "maimai でらっくす FESTiVAL PLUS": Version.MAIMAI_DX_FESTIVAL, 100 "maimai でらっくす BUDDiES": Version.MAIMAI_DX_BUDDIES, 101 "maimai でらっくす BUDDiES PLUS": Version.MAIMAI_DX_BUDDIES, 102 "maimai でらっくす PRiSM": Version.MAIMAI_DX_PRISM, 103} 104"""@private""" 105 106name_to_genre: dict[str, Genre] = { 107 "POPSアニメ": Genre.POPSアニメ, 108 "流行&动漫": Genre.POPSアニメ, 109 "niconicoボーカロイド": Genre.niconicoボーカロイド, 110 "niconico & VOCALOID": Genre.niconicoボーカロイド, 111 "東方Project": Genre.東方Project, 112 "东方Project": Genre.東方Project, 113 "ゲームバラエティ": Genre.ゲームバラエティ, 114 "其他游戏": Genre.ゲームバラエティ, 115 "maimai": Genre.maimai, 116 "舞萌": Genre.maimai, 117 "オンゲキCHUNITHM": Genre.オンゲキCHUNITHM, 118 "音击&中二节奏": Genre.オンゲキCHUNITHM, 119 "宴会場": Genre.宴会場, 120} 121"""@private""" 122 123plate_aliases: dict[str, str] = { 124 "暁": "晓", 125 "櫻": "樱", 126 "菫": "堇", 127 "輝": "辉", 128 "華": "华", 129 "極": "极", 130} 131"""@private""" 132 133 134class LevelIndex(Enum): 135 BASIC = 0 136 ADVANCED = 1 137 EXPERT = 2 138 MASTER = 3 139 ReMASTER = 4 140 141 142class FCType(Enum): 143 APP = 0 144 AP = 1 145 FCP = 2 146 FC = 3 147 148 149class FSType(Enum): 150 SYNC = 0 151 FS = 1 152 FSP = 2 153 FSD = 3 154 FSDP = 4 155 156 157class RateType(Enum): 158 SSSP = 0 159 SSS = 1 160 SSP = 2 161 SS = 3 162 SP = 4 163 S = 5 164 AAA = 6 165 AA = 7 166 A = 8 167 BBB = 9 168 BB = 10 169 B = 11 170 C = 12 171 D = 13 172 173 @staticmethod 174 def _from_achievement(achievement: float) -> "RateType": 175 if achievement >= 100.5: 176 return RateType.SSSP 177 if achievement >= 100: 178 return RateType.SSS 179 if achievement >= 99.5: 180 return RateType.SSP 181 if achievement >= 99: 182 return RateType.SS 183 if achievement >= 98: 184 return RateType.SP 185 if achievement >= 97: 186 return RateType.S 187 if achievement >= 94: 188 return RateType.AAA 189 if achievement >= 90: 190 return RateType.AA 191 if achievement >= 80: 192 return RateType.A 193 if achievement >= 75: 194 return RateType.BBB 195 if achievement >= 70: 196 return RateType.BB 197 if achievement >= 60: 198 return RateType.B 199 if achievement >= 50: 200 return RateType.C 201 return RateType.D 202 203 204class SongType(Enum): 205 STANDARD = "standard" 206 DX = "dx" 207 UTAGE = "utage" 208 209 @staticmethod 210 def _from_id(id: Union[int, str]) -> "SongType": 211 id = int(id) 212 return SongType.UTAGE if id > 100000 else SongType.DX if id > 10000 else SongType.STANDARD 213 214 def _to_id(self, id: Union[int, str]) -> int: 215 id = int(id) 216 return id if self == SongType.STANDARD else id + 10000 if self == SongType.DX else id + 100000 217 218 def _to_abbr(self) -> str: 219 return "SD" if self == SongType.STANDARD else "DX" if self else "UTAGE"
class
Version(enum.IntEnum):
8class Version(IntEnum): 9 MAIMAI = 10000 10 MAIMAI_PLUS = 11000 11 MAIMAI_GREEN = 12000 12 MAIMAI_GREEN_PLUS = 13000 13 MAIMAI_ORANGE = 14000 14 MAIMAI_ORANGE_PLUS = 15000 15 MAIMAI_PINK = 16000 16 MAIMAI_PINK_PLUS = 17000 17 MAIMAI_MURASAKI = 18000 18 MAIMAI_MURASAKI_PLUS = 18500 19 MAIMAI_MILK = 19000 20 MAIMAI_MILK_PLUS = 19500 21 MAIMAI_FINALE = 19900 22 MAIMAI_DX = 20000 # 舞萌DX 23 MAIMAI_DX_SPLASH = 21000 # 舞萌DX 2021 24 MAIMAI_DX_UNIVERSE = 22000 # 舞萌DX 2022 25 MAIMAI_DX_FESTIVAL = 23000 # 舞萌DX 2023 26 MAIMAI_DX_BUDDIES = 24000 # 舞萌DX 2024 27 MAIMAI_DX_PRISM = 25000 # 舞萌DX 2025 28 MAIMAI_DX_FUTURE = 30000 # 舞萌DX 2077
MAIMAI =
<Version.MAIMAI: 10000>
MAIMAI_PLUS =
<Version.MAIMAI_PLUS: 11000>
MAIMAI_GREEN =
<Version.MAIMAI_GREEN: 12000>
MAIMAI_GREEN_PLUS =
<Version.MAIMAI_GREEN_PLUS: 13000>
MAIMAI_ORANGE =
<Version.MAIMAI_ORANGE: 14000>
MAIMAI_ORANGE_PLUS =
<Version.MAIMAI_ORANGE_PLUS: 15000>
MAIMAI_PINK =
<Version.MAIMAI_PINK: 16000>
MAIMAI_PINK_PLUS =
<Version.MAIMAI_PINK_PLUS: 17000>
MAIMAI_MURASAKI =
<Version.MAIMAI_MURASAKI: 18000>
MAIMAI_MURASAKI_PLUS =
<Version.MAIMAI_MURASAKI_PLUS: 18500>
MAIMAI_MILK =
<Version.MAIMAI_MILK: 19000>
MAIMAI_MILK_PLUS =
<Version.MAIMAI_MILK_PLUS: 19500>
MAIMAI_FINALE =
<Version.MAIMAI_FINALE: 19900>
MAIMAI_DX =
<Version.MAIMAI_DX: 20000>
MAIMAI_DX_SPLASH =
<Version.MAIMAI_DX_SPLASH: 21000>
MAIMAI_DX_UNIVERSE =
<Version.MAIMAI_DX_UNIVERSE: 22000>
MAIMAI_DX_FESTIVAL =
<Version.MAIMAI_DX_FESTIVAL: 23000>
MAIMAI_DX_BUDDIES =
<Version.MAIMAI_DX_BUDDIES: 24000>
MAIMAI_DX_PRISM =
<Version.MAIMAI_DX_PRISM: 25000>
MAIMAI_DX_FUTURE =
<Version.MAIMAI_DX_FUTURE: 30000>
class
Genre(enum.Enum):
31class Genre(Enum): 32 POPSアニメ = "POPSアニメ" 33 niconicoボーカロイド = "niconicoボーカロイド" 34 東方Project = "東方Project" 35 ゲームバラエティ = "ゲームバラエティ" 36 maimai = "maimai" 37 オンゲキCHUNITHM = "オンゲキCHUNITHM" 38 宴会場 = "宴会場"
maimai =
<Genre.maimai: 'maimai'>
region_map: tuple[str, ...] =
('北京市', '重庆市', '上海市', '天津市', '安徽省', '福建省', '甘肃省', '广东省', '贵州省', '海南省', '河北省', '黑龙江省', '河南省', '湖北省', '湖南省', '江苏省', '江西省', '吉林省', '辽宁省', '青海省', '陕西省', '山东省', '山西省', '四川省', '台湾省', '云南省', '浙江省', '广西壮族自治区', '内蒙古自治区', '宁夏回族自治区', '新疆维吾尔自治区', '西藏自治区')
class
LevelIndex(enum.Enum):
135class LevelIndex(Enum): 136 BASIC = 0 137 ADVANCED = 1 138 EXPERT = 2 139 MASTER = 3 140 ReMASTER = 4
BASIC =
<LevelIndex.BASIC: 0>
ADVANCED =
<LevelIndex.ADVANCED: 1>
EXPERT =
<LevelIndex.EXPERT: 2>
MASTER =
<LevelIndex.MASTER: 3>
ReMASTER =
<LevelIndex.ReMASTER: 4>
class
FCType(enum.Enum):
APP =
<FCType.APP: 0>
AP =
<FCType.AP: 1>
FCP =
<FCType.FCP: 2>
FC =
<FCType.FC: 3>
class
FSType(enum.Enum):
SYNC =
<FSType.SYNC: 0>
FS =
<FSType.FS: 1>
FSP =
<FSType.FSP: 2>
FSD =
<FSType.FSD: 3>
FSDP =
<FSType.FSDP: 4>
class
RateType(enum.Enum):
158class RateType(Enum): 159 SSSP = 0 160 SSS = 1 161 SSP = 2 162 SS = 3 163 SP = 4 164 S = 5 165 AAA = 6 166 AA = 7 167 A = 8 168 BBB = 9 169 BB = 10 170 B = 11 171 C = 12 172 D = 13 173 174 @staticmethod 175 def _from_achievement(achievement: float) -> "RateType": 176 if achievement >= 100.5: 177 return RateType.SSSP 178 if achievement >= 100: 179 return RateType.SSS 180 if achievement >= 99.5: 181 return RateType.SSP 182 if achievement >= 99: 183 return RateType.SS 184 if achievement >= 98: 185 return RateType.SP 186 if achievement >= 97: 187 return RateType.S 188 if achievement >= 94: 189 return RateType.AAA 190 if achievement >= 90: 191 return RateType.AA 192 if achievement >= 80: 193 return RateType.A 194 if achievement >= 75: 195 return RateType.BBB 196 if achievement >= 70: 197 return RateType.BB 198 if achievement >= 60: 199 return RateType.B 200 if achievement >= 50: 201 return RateType.C 202 return RateType.D
SSSP =
<RateType.SSSP: 0>
SSS =
<RateType.SSS: 1>
SSP =
<RateType.SSP: 2>
SS =
<RateType.SS: 3>
SP =
<RateType.SP: 4>
S =
<RateType.S: 5>
AAA =
<RateType.AAA: 6>
AA =
<RateType.AA: 7>
A =
<RateType.A: 8>
BBB =
<RateType.BBB: 9>
BB =
<RateType.BB: 10>
B =
<RateType.B: 11>
C =
<RateType.C: 12>
D =
<RateType.D: 13>
class
SongType(enum.Enum):
205class SongType(Enum): 206 STANDARD = "standard" 207 DX = "dx" 208 UTAGE = "utage" 209 210 @staticmethod 211 def _from_id(id: Union[int, str]) -> "SongType": 212 id = int(id) 213 return SongType.UTAGE if id > 100000 else SongType.DX if id > 10000 else SongType.STANDARD 214 215 def _to_id(self, id: Union[int, str]) -> int: 216 id = int(id) 217 return id if self == SongType.STANDARD else id + 10000 if self == SongType.DX else id + 100000 218 219 def _to_abbr(self) -> str: 220 return "SD" if self == SongType.STANDARD else "DX" if self else "UTAGE"
STANDARD =
<SongType.STANDARD: 'standard'>
DX =
<SongType.DX: 'dx'>
UTAGE =
<SongType.UTAGE: 'utage'>