From c75c01786f3584de037919e523f1410dd9ae64ed Mon Sep 17 00:00:00 2001 From: Slipstream Date: Sat, 31 May 2025 12:51:02 -0600 Subject: [PATCH] fix: Enhance userinfo command to fetch up-to-date member data and improve activity status handling --- cogs/user_info_cog.py | 34 ++++++++++++++++------------------ main.py | 1 + 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/cogs/user_info_cog.py b/cogs/user_info_cog.py index d94336d..53e3b61 100644 --- a/cogs/user_info_cog.py +++ b/cogs/user_info_cog.py @@ -14,9 +14,14 @@ class UserInfoCog(commands.Cog): member = ctx.author # Fetch the member to ensure up-to-date data, especially for guild members - if ctx.guild: + # --- Information Gathering --- + cached = ctx.guild.get_member(member.id) if ctx.guild else None + member = cached or member # keep presence if we have it + + # only hit the API if we still need guild-specific data that might be stale + if ctx.guild and member is not None and member.joined_at is None: try: - member = await ctx.guild.fetch_member(member.id) + member = await ctx.guild.fetch_member(member.id) # roles/nick/etc. except discord.NotFound: await ctx.send("Could not find the specified member in this server.", ephemeral=True) return @@ -24,7 +29,6 @@ class UserInfoCog(commands.Cog): await ctx.send(f"An error occurred while fetching member data: `{e}`", ephemeral=True) return - # --- Information Gathering --- username_discriminator = f"{member.name}#{member.discriminator}" if member.discriminator != "0" else member.name created_at_str = member.created_at.strftime("%Y-%m-%d %H:%M:%S UTC") joined_at_str = member.joined_at.strftime("%Y-%m-%d %H:%M:%S UTC") if member.joined_at else "N/A" @@ -35,21 +39,15 @@ class UserInfoCog(commands.Cog): roles_str = roles_str[:997] + "..." status_str = str(member.status).title() - if member.activity: - if member.activity.type == discord.ActivityType.playing: - activity_str = f"Playing {member.activity.name}" - elif member.activity.type == discord.ActivityType.streaming: - activity_str = f"Streaming {member.activity.name} on {member.activity.platform}" - elif member.activity.type == discord.ActivityType.listening: - activity_str = f"Listening to {member.activity.title} by {member.activity.artist}" - elif member.activity.type == discord.ActivityType.watching: - activity_str = f"Watching {member.activity.name}" - elif member.activity.type == discord.ActivityType.custom: - activity_str = f"{member.activity.emoji if member.activity.emoji else ''} {member.activity.name if member.activity.name else ''}".strip() - else: - activity_str = "None" - else: - activity_str = "None" + activity_str = ( + f"Playing {member.activity.name}" if member.activity and member.activity.type is discord.ActivityType.playing else + f"Streaming {member.activity.name}" if member.activity and member.activity.type is discord.ActivityType.streaming else + f"Listening to {member.activity.title}…" if member.activity and member.activity.type is discord.ActivityType.listening else + f"Watching {member.activity.name}" if member.activity and member.activity.type is discord.ActivityType.watching else + f"{member.activity.emoji} {member.activity.name}".strip() + if member.activity and member.activity.type is discord.ActivityType.custom else + "None" + ) # --- UI Components v2 View --- class UserInfoView(ui.LayoutView): diff --git a/main.py b/main.py index d3d951e..413a6bc 100644 --- a/main.py +++ b/main.py @@ -65,6 +65,7 @@ async def get_prefix(bot_instance, message): intents = discord.Intents.default() intents.message_content = True intents.members = True +intents.presences = True # Required for .status / .activity # --- Custom Bot Class with setup_hook for async initialization --- class MyBot(commands.Bot):