Refactor logging and user credit checks in Leaderboard cog to enhance clarity and user experience. Update log messages for credit retrieval and leaderboard display, ensuring accurate communication of user statuses. Improve embed descriptions for better user feedback on credit standings.
Some checks are pending
Run pre-commit / Run pre-commit (push) Waiting to run
Some checks are pending
Run pre-commit / Run pre-commit (push) Waiting to run
This commit is contained in:
parent
deaa1aabb8
commit
258ba40f01
1 changed files with 28 additions and 24 deletions
|
@ -211,10 +211,9 @@ class Leaderboard(commands.Cog):
|
|||
async def get_user_credits(self, user: discord.Member) -> int:
|
||||
"""Get a user's total credits from all servers."""
|
||||
try:
|
||||
# Use Red's bank API to get the user's balance
|
||||
# This automatically handles the global bank if enabled
|
||||
# Get the user's balance
|
||||
balance = await bank.get_balance(user)
|
||||
log.debug(f"Got balance for {user} ({user.id}): {balance} credits")
|
||||
log.info(f"Credit check for {user} ({user.id}): {balance} credits")
|
||||
return balance
|
||||
except Exception as e:
|
||||
log.error(f"Error getting credits for {user}: {e}")
|
||||
|
@ -226,8 +225,11 @@ class Leaderboard(commands.Cog):
|
|||
min_credits = 10000 # Minimum credits to show on leaderboard - matches API's MIN_CREDITS
|
||||
processed_users = set()
|
||||
|
||||
log.info("Starting to collect user balances...")
|
||||
|
||||
# Process each guild
|
||||
for guild in self.bot.guilds:
|
||||
log.debug(f"Processing guild: {guild.name} ({guild.id})")
|
||||
for member in guild.members:
|
||||
if member.bot or member.id in processed_users:
|
||||
continue
|
||||
|
@ -235,6 +237,7 @@ class Leaderboard(commands.Cog):
|
|||
# Skip opted-out users
|
||||
try:
|
||||
if await self.config.user(member).opted_out():
|
||||
log.debug(f"User {member} ({member.id}) is opted out")
|
||||
continue
|
||||
except Exception as e:
|
||||
log.error(f"Error checking opt-out status for {member}: {e}")
|
||||
|
@ -244,36 +247,32 @@ class Leaderboard(commands.Cog):
|
|||
credits = await self.get_user_credits(member)
|
||||
|
||||
# Debug logging for credit calculation
|
||||
log.debug(f"Checking credits for {member} ({member.id}): {credits} credits, minimum: {min_credits}")
|
||||
log.info(f"User {member} ({member.id}) has {credits} credits (minimum: {min_credits})")
|
||||
|
||||
# Store user data regardless of credits amount
|
||||
all_users[member.id] = {
|
||||
"userId": str(member.id),
|
||||
"username": str(member),
|
||||
"points": credits
|
||||
}
|
||||
if credits >= min_credits:
|
||||
all_users[member.id] = {
|
||||
"userId": str(member.id),
|
||||
"username": str(member),
|
||||
"points": credits
|
||||
}
|
||||
log.info(f"Added {member} to leaderboard with {credits} credits")
|
||||
|
||||
processed_users.add(member.id)
|
||||
except Exception as e:
|
||||
log.error(f"Error getting balance for {member}: {e}")
|
||||
continue
|
||||
|
||||
# Filter and sort users after collecting all data
|
||||
qualified_users = [
|
||||
user for user in all_users.values()
|
||||
if user["points"] >= min_credits
|
||||
]
|
||||
|
||||
# Sort by total credits
|
||||
sorted_users = sorted(
|
||||
qualified_users,
|
||||
all_users.values(),
|
||||
key=lambda x: x["points"],
|
||||
reverse=True
|
||||
)
|
||||
|
||||
# Debug logging
|
||||
log.info(f"Found {len(all_users)} total users, {len(sorted_users)} with {min_credits}+ credits")
|
||||
log.info(f"Found {len(all_users)} users with {min_credits}+ credits")
|
||||
if sorted_users:
|
||||
log.info("Top 10 users:")
|
||||
log.info("Top users on leaderboard:")
|
||||
for user in sorted_users[:10]:
|
||||
log.info(f"User {user['username']} ({user['userId']}) has {user['points']} credits")
|
||||
else:
|
||||
|
@ -359,19 +358,21 @@ class Leaderboard(commands.Cog):
|
|||
async def show_leaderboard(self, ctx: commands.Context, page: int = 1):
|
||||
"""Show the global credits leaderboard."""
|
||||
async with ctx.typing():
|
||||
log.info(f"Leaderboard requested in guild {ctx.guild.name} ({ctx.guild.id})")
|
||||
leaderboard_data = await self.get_all_balances()
|
||||
|
||||
if not leaderboard_data:
|
||||
# Debug info in log
|
||||
log.warning(f"No leaderboard data returned for guild {ctx.guild.id}")
|
||||
return await ctx.send("No users have 10,000 or more credits!")
|
||||
log.warning(f"No users with 10,000+ credits found in guild {ctx.guild.id}")
|
||||
await ctx.send("No users have 10,000 or more credits! Check your balance with `[p]glb credits`")
|
||||
return
|
||||
|
||||
items_per_page = 10
|
||||
chunks = [leaderboard_data[i:i + items_per_page]
|
||||
for i in range(0, len(leaderboard_data), items_per_page)]
|
||||
|
||||
if not chunks:
|
||||
return await ctx.send("No users have 10,000 or more credits!")
|
||||
return await ctx.send("No users have 10,000 or more credits! Check your balance with `[p]glb credits`")
|
||||
|
||||
embeds = []
|
||||
for page_num, entries in enumerate(chunks, 1):
|
||||
|
@ -452,7 +453,7 @@ class Leaderboard(commands.Cog):
|
|||
credits = await self.get_user_credits(member)
|
||||
|
||||
# Debug logging
|
||||
log.info(f"Credits check for {member} ({member.id}): {credits} credits")
|
||||
log.info(f"Credits command used - User {member} ({member.id}) has {credits} credits")
|
||||
|
||||
# Get user's rank
|
||||
leaderboard_data = await self.get_all_balances()
|
||||
|
@ -475,7 +476,10 @@ class Leaderboard(commands.Cog):
|
|||
f"**ID:** {member.id}"
|
||||
)
|
||||
else:
|
||||
embed.description = f"{member.mention} has less than 10,000 credits ({humanize_number(credits)} total)"
|
||||
embed.description = (
|
||||
f"{member.mention} has **{humanize_number(credits)}** credits\n"
|
||||
f"*Need {humanize_number(10000 - credits)} more credits to appear on the leaderboard*"
|
||||
)
|
||||
|
||||
embed.set_thumbnail(url=member.display_avatar.url)
|
||||
await ctx.send(embed=embed)
|
||||
|
|
Loading…
Add table
Reference in a new issue