🐛 修复 io rank 比较或展示顺序可能有问题的bug (#574)
Some checks failed
Code Coverage / Test (macos-latest, 3.10) (push) Has been cancelled
Code Coverage / Test (macos-latest, 3.11) (push) Has been cancelled
Code Coverage / Test (macos-latest, 3.12) (push) Has been cancelled
Code Coverage / Test (macos-latest, 3.13) (push) Has been cancelled
Code Coverage / Test (macos-latest, 3.14) (push) Has been cancelled
Code Coverage / Test (ubuntu-latest, 3.10) (push) Has been cancelled
Code Coverage / Test (ubuntu-latest, 3.11) (push) Has been cancelled
Code Coverage / Test (ubuntu-latest, 3.12) (push) Has been cancelled
Code Coverage / Test (ubuntu-latest, 3.13) (push) Has been cancelled
Code Coverage / Test (ubuntu-latest, 3.14) (push) Has been cancelled
Code Coverage / Test (windows-latest, 3.10) (push) Has been cancelled
Code Coverage / Test (windows-latest, 3.11) (push) Has been cancelled
Code Coverage / Test (windows-latest, 3.12) (push) Has been cancelled
Code Coverage / Test (windows-latest, 3.13) (push) Has been cancelled
Code Coverage / Test (windows-latest, 3.14) (push) Has been cancelled
TypeCheck / TypeCheck (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Code Coverage / check (push) Has been cancelled

This commit is contained in:
呵呵です
2025-12-25 23:58:51 +08:00
committed by GitHub
parent fcecf5a01f
commit 59a1c80ce5

View File

@@ -91,6 +91,22 @@ async def _(event_session: Uninfo, template: Template | None = None):
await UniMessage.image(raw=await make_image_v2(latest_data, compare_data)).finish()
_RANK_ORDER_INDEX = {
v: i
for i, v in enumerate(
('x+', 'x', 'u', 'ss', 's+', 's', 's-', 'a+', 'a', 'a-', 'b+', 'b', 'b-', 'c+', 'c', 'c-', 'd+', 'd', 'z')
)
}
def _rank_sort_key(rank: str) -> int:
try:
return _RANK_ORDER_INDEX[rank]
except KeyError as e:
msg = f'未知段位: {rank!r}'
raise ValueError(msg) from e
async def make_image_v1(latest_data: TETRIOLeagueStats, compare_data: TETRIOLeagueStats) -> bytes:
return await render_image(
DataV1(
@@ -100,7 +116,11 @@ async def make_image_v1(latest_data: TETRIOLeagueStats, compare_data: TETRIOLeag
require_tr=round(i[0].tr_line, 2),
players=i[0].player_count,
)
for i in zip(latest_data.fields, compare_data.fields, strict=True)
for i in zip(
sorted(latest_data.fields, key=lambda x: _rank_sort_key(x.rank)),
sorted(compare_data.fields, key=lambda x: _rank_sort_key(x.rank)),
strict=True,
)
},
updated_at=latest_data.update_time,
lang=get_lang(),
@@ -124,7 +144,11 @@ async def make_image_v2(latest_data: TETRIOLeagueStats, compare_data: TETRIOLeag
),
players=i[0].player_count,
)
for i in zip(latest_data.fields, compare_data.fields, strict=True)
for i in zip(
sorted(latest_data.fields, key=lambda x: _rank_sort_key(x.rank)),
sorted(compare_data.fields, key=lambda x: _rank_sort_key(x.rank)),
strict=True,
)
},
updated_at=latest_data.update_time,
lang=get_lang(),