From 64e70a70c54e5334c51b2ed532238a9bed20b004 Mon Sep 17 00:00:00 2001 From: Joinemm Date: Tue, 28 Nov 2023 22:58:20 +0200 Subject: [PATCH] Fix matching of artist names in artist overview --- cogs/lastfm.py | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/cogs/lastfm.py b/cogs/lastfm.py index 42ca1ac..6da418b 100644 --- a/cogs/lastfm.py +++ b/cogs/lastfm.py @@ -704,9 +704,7 @@ async def artist( # helpers async def artist_overview(self, ctx: MisoContext, timeframe: Period, artist: str): - artistinfo = await self.api.artist_get_info( - artist, ctx.lfm.username, autocorrect=True - ) + artistinfo = await self.api.artist_get_info(artist, ctx.lfm.username) artist_url_format = artistinfo["url"].split("/")[-1] url = ( @@ -727,8 +725,6 @@ async def artist_overview(self, ctx: MisoContext, timeframe: Period, artist: str tracks = self.api.get_library_playcounts(tracksdiv) img = soup.select_one("span.library-header-image img") - header = soup.select_one("h2.library-header-title") - formatted_name = header.text.strip() if header else artist content = discord.Embed() @@ -739,7 +735,7 @@ async def artist_overview(self, ctx: MisoContext, timeframe: Period, artist: str username = util.displayname(ctx.lfm.target_user, escape=False) content.set_author( - name=f"{username} | {formatted_name} — " + name=f"{username} | {artistinfo['name']} — " + ( f"{timeframe.display().capitalize()} overview" if timeframe != timeframe.OVERALL @@ -764,21 +760,24 @@ async def artist_overview(self, ctx: MisoContext, timeframe: Period, artist: str AND artist_name = %s """, ctx.guild.id, - formatted_name, + artistinfo["name"], ) if crown_holder_id == ctx.lfm.target_user.id: crownstate = ":crown: " api_data = await asyncio.gather( - self.api.user_get_top_artists(ctx.lfm.username, Period.OVERALL, limit=1000), - self.api.user_get_top_artists(ctx.lfm.username, Period.MONTH, limit=1000), - self.api.user_get_top_artists(ctx.lfm.username, Period.WEEK, limit=1000), + self.api.user_get_top_artists(ctx.lfm.username, Period.OVERALL, limit=500), + self.api.user_get_top_artists(ctx.lfm.username, Period.MONTH, limit=500), + self.api.user_get_top_artists(ctx.lfm.username, Period.WEEK, limit=500), ) def filter_artist(ta_data: dict): try: match = next( - filter(lambda a: a["name"] == artistinfo["name"], ta_data["artist"]) + filter( + lambda a: a["name"].lower() == artistinfo["name"].lower(), + ta_data["artist"], + ) ) field_value = f"**{match['playcount']}** (#{match['@attr']['rank']})" return field_value @@ -797,8 +796,12 @@ def filter_artist(ta_data: dict): value=filter_artist(ta_data) or "None", ) - album_ranking = [f"{name} [**{plays}**]" for (plays, name) in albums[:10]] - track_ranking = [f"{name} [**{plays}**]" for (plays, name) in tracks[:10]] + album_ranking = [ + f"{escape_markdown(name)} [**{plays}**]" for (plays, name) in albums[:10] + ] + track_ranking = [ + f"{escape_markdown(name)} [**{plays}**]" for (plays, name) in tracks[:10] + ] longest_line = len(max(album_ranking, key=len)) + len( max(track_ranking, key=len) )