From 09de07ee9c6983fcaa663be59e5deed8f0ae1aef Mon Sep 17 00:00:00 2001 From: seria Date: Fri, 11 Oct 2024 11:58:42 +0800 Subject: [PATCH] fix: Fix missing character names in dmg lbs --- hoyo_buddy/cogs/admin.py | 10 ++------ hoyo_buddy/commands/leaderboard.py | 30 ++++++------------------ hoyo_buddy/ui/hoyo/leaderboard/others.py | 11 ++++----- 3 files changed, 13 insertions(+), 38 deletions(-) diff --git a/hoyo_buddy/cogs/admin.py b/hoyo_buddy/cogs/admin.py index c4423499..c5597100 100644 --- a/hoyo_buddy/cogs/admin.py +++ b/hoyo_buddy/cogs/admin.py @@ -5,7 +5,7 @@ from typing import TYPE_CHECKING, Any import genshin # noqa: TCH002 -from discord import ButtonStyle, Locale, TextStyle, ui +from discord import ButtonStyle, TextStyle, ui from discord.ext import commands from loguru import logger from seria.utils import write_json @@ -257,13 +257,7 @@ async def fill_lb_command(self, ctx: commands.Context) -> Any: logger.info(f"Updating leaderboard data for {account}") for lb_type in game_lb_types.get(account.game, ()): try: - await cmd.update_lb_data( - translator=self.bot.translator, - pool=self.bot.pool, - lb_type=lb_type, - account=account, - locale=Locale.american_english, - ) + await cmd.update_lb_data(pool=self.bot.pool, lb_type=lb_type, account=account) except Exception as e: self.bot.capture_exception(e) diff --git a/hoyo_buddy/commands/leaderboard.py b/hoyo_buddy/commands/leaderboard.py index bdb5946a..8a944722 100644 --- a/hoyo_buddy/commands/leaderboard.py +++ b/hoyo_buddy/commands/leaderboard.py @@ -8,7 +8,7 @@ from hoyo_buddy.exceptions import FeatureNotImplementedError, LeaderboardNotFoundError from hoyo_buddy.hoyo.clients.ambr import AmbrAPIClient from hoyo_buddy.icons import get_game_icon -from hoyo_buddy.l10n import EnumStr, LocaleStr, Translator +from hoyo_buddy.l10n import EnumStr, LocaleStr from hoyo_buddy.ui.hoyo.leaderboard.others import LbPaginator from hoyo_buddy.utils import ephemeral @@ -17,7 +17,6 @@ import genshin from asyncpg import Pool - from discord import Locale from hoyo_buddy.types import Interaction @@ -161,13 +160,7 @@ async def run( account = account or await i.client.get_account( i.user.id, self.get_games_by_lb_type(lb_type) ) - character_names = await self.update_lb_data( - translator=i.client.translator, - pool=i.client.pool, - lb_type=lb_type, - account=account, - locale=locale, - ) + await self.update_lb_data(pool=i.client.pool, lb_type=lb_type, account=account) lb_size = await self.get_lb_size(lb_type, account.game) embed = ( @@ -178,6 +171,10 @@ async def run( you = await Leaderboard.get_or_none(type=lb_type, game=account.game, uid=account.uid) + async with AmbrAPIClient(locale, i.client.translator) as api: + characters = await api.fetch_characters() + character_names = {char.id: char.name for char in characters} + view = LbPaginator( embed, you, @@ -194,13 +191,7 @@ async def run( await view.start(i) async def update_lb_data( - self, - *, - translator: Translator, - pool: Pool, - lb_type: LeaderboardType, - account: HoyoAccount, - locale: Locale, + self, *, pool: Pool, lb_type: LeaderboardType, account: HoyoAccount ) -> dict[str, str] | None: if lb_type in {LeaderboardType.ABYSS_DMG, LeaderboardType.THEATER_DMG}: character = await self.fetch_character_by_lb_type(account, lb_type) @@ -208,18 +199,13 @@ async def update_lb_data( if character is None: value = 0 extra_info = None - character_names = None else: value = character.value extra_info = {"id": character.id, "icon": character.icon} - async with AmbrAPIClient(locale, translator) as api: - characters = await api.fetch_characters() - character_names = {char.id: char.name for char in characters} else: value = await self.fetch_value_by_lb_type(account, lb_type) extra_info = None - character_names = None if value > 0: await Leaderboard.update_or_create( @@ -231,5 +217,3 @@ async def update_lb_data( extra_info=extra_info, ) await update_lb_ranks(pool, game=account.game, type_=lb_type, order=LB_ORDERS[lb_type]) - - return character_names diff --git a/hoyo_buddy/ui/hoyo/leaderboard/others.py b/hoyo_buddy/ui/hoyo/leaderboard/others.py index 5648d849..638eefa0 100644 --- a/hoyo_buddy/ui/hoyo/leaderboard/others.py +++ b/hoyo_buddy/ui/hoyo/leaderboard/others.py @@ -28,7 +28,7 @@ def __init__( lb_size: int, order: Literal["ASC", "DESC"], process_value: Callable[[float], Any], - character_names: dict[str, str] | None, + character_names: dict[str, str], game: Game, lb_type: LeaderboardType, author: User, @@ -53,12 +53,9 @@ def __init__( def get_lb_line(self, lb: Leaderboard) -> str: value = self.process_value(lb.value) - if self.character_names: - id_ = lb.extra_info["id"] - name = self.character_names.get(str(id_), "???") - name = f" {name} " - else: - name = "" + id_ = lb.extra_info.get("id", "") + name = self.character_names.get(str(id_), "???") + name = f" {name} " return f"{lb.rank}. {lb.username} ({blur_uid(lb.uid, arterisk='x')}) - {name}**{value}**"