11import asyncio
22
33from discord import Color , Embed , Interaction , Member , User , app_commands
4- from discord .app_commands import command , guild_only
54from discord .ext .commands import Cog
65from humanize import naturaltime
7- from odmantic import AIOEngine , Model , query
6+ from odmantic import query
87
98from bot .main import ActBot
10- from bot .ui import EmbedX
119from db .actor import Actor
1210
1311
@@ -16,7 +14,9 @@ def __init__(self, bot: ActBot):
1614 self .bot = bot
1715
1816 @app_commands .guild_only ()
19- @app_commands .command (description = "Get your or another member's information" )
17+ @app_commands .command (
18+ description = "View your or another member's profile information"
19+ )
2020 async def profile (
2121 self , interaction : Interaction , member : Member | User | None = None
2222 ):
@@ -57,7 +57,7 @@ async def profile(
5757 await interaction .followup .send (embed = embed )
5858
5959 @app_commands .guild_only ()
60- @app_commands .command (description = "View leaderboard " )
60+ @app_commands .command (description = "View top members " )
6161 async def leaderboard (self , interaction : Interaction ):
6262 # Check guild (not needed but just for type-checking)
6363 guild = interaction .guild
@@ -82,56 +82,26 @@ async def leaderboard(self, interaction: Interaction):
8282 )
8383 if not actors :
8484 await interaction .followup .send (
85- embed = EmbedX .info ("" , "No members found for the leaderboard." )
85+ embed = Embed (
86+ title = "❔" ,
87+ description = "No members found." ,
88+ color = Color .yellow (),
89+ )
8690 )
8791 return
8892
89- # Get associated members
90- members = []
91- for actor in actors :
92- member = guild .get_member (actor .id ) # Try get from cache
93- if member :
94- members .append (member )
95- else :
96- members .append (None ) # placeholder to fetch later concurrently
97-
98- # Fetch missing members concurrently
99- members_futures = [
100- guild .fetch_member (actor .id )
101- for i , actor in enumerate (actors )
102- if members [i ] is None
103- ]
104- try :
105- fetched_members = await asyncio .gather (* members_futures )
106- except Exception as e :
107- await interaction .followup .send (
108- embed = EmbedX .error (description = "Could not fetch members." )
109- )
110- return
111-
112- # Update members list with fetched members
113- fetched_index = 0
114- for i , actor in enumerate (actors ):
115- if members [i ] is None :
116- members [i ] = fetched_members [fetched_index ]
117- fetched_index += 1
118-
119- # Create embed
93+ # Create embed while fetching memebrs associated with actors
12094 embed = Embed (title = "🏆 Leaderboard" , color = Color .blue ())
12195 for i , actor in enumerate (actors ):
122- member = members [i ]
123- member_name = member .display_name if member else f"{ actor .display_name } (⚠)"
124- embed .add_field (
125- name = "" ,
126- value = 10 * "➖" ,
127- inline = False ,
128- )
96+ separator = 10 * " "
97+ embed .add_field (name = "" , value = "" , inline = False )
12998 embed .add_field (
130- name = f"**{ i + 1 } ** ✨ { member_name } " ,
131- value = f" " ,
99+ name = f"# **{ i + 1 } ** { separator } { actor . display_name } " ,
100+ value = f"" ,
132101 )
102+ embed .add_field (name = "" , value = "" )
133103 embed .add_field (
134- name = f"🏅 { actor . level } ⏫ { actor . xp } 💰 { actor . gold } " ,
135- value = " " ,
104+ name = f"" ,
105+ value = f"-# 🏅 { actor . level } { separator } ⏫ { actor . xp } { separator } 💰 { actor . gold } " ,
136106 )
137107 await interaction .followup .send (embed = embed )
0 commit comments