fix: Enhance userinfo command to fetch up-to-date member data and improve activity status handling

This commit is contained in:
Slipstream 2025-05-31 12:51:02 -06:00
parent 72db1fafd8
commit c75c01786f
Signed by: slipstream
GPG Key ID: 13E498CE010AC6FD
2 changed files with 17 additions and 18 deletions

View File

@ -14,9 +14,14 @@ class UserInfoCog(commands.Cog):
member = ctx.author member = ctx.author
# Fetch the member to ensure up-to-date data, especially for guild members # 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: try:
member = await ctx.guild.fetch_member(member.id) member = await ctx.guild.fetch_member(member.id) # roles/nick/etc.
except discord.NotFound: except discord.NotFound:
await ctx.send("Could not find the specified member in this server.", ephemeral=True) await ctx.send("Could not find the specified member in this server.", ephemeral=True)
return return
@ -24,7 +29,6 @@ class UserInfoCog(commands.Cog):
await ctx.send(f"An error occurred while fetching member data: `{e}`", ephemeral=True) await ctx.send(f"An error occurred while fetching member data: `{e}`", ephemeral=True)
return return
# --- Information Gathering ---
username_discriminator = f"{member.name}#{member.discriminator}" if member.discriminator != "0" else member.name 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") 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" 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] + "..." roles_str = roles_str[:997] + "..."
status_str = str(member.status).title() status_str = str(member.status).title()
if member.activity: activity_str = (
if member.activity.type == discord.ActivityType.playing: f"Playing {member.activity.name}" if member.activity and member.activity.type is discord.ActivityType.playing else
activity_str = f"Playing {member.activity.name}" f"Streaming {member.activity.name}" if member.activity and member.activity.type is discord.ActivityType.streaming else
elif member.activity.type == discord.ActivityType.streaming: f"Listening to {member.activity.title}" if member.activity and member.activity.type is discord.ActivityType.listening else
activity_str = f"Streaming {member.activity.name} on {member.activity.platform}" f"Watching {member.activity.name}" if member.activity and member.activity.type is discord.ActivityType.watching else
elif member.activity.type == discord.ActivityType.listening: f"{member.activity.emoji} {member.activity.name}".strip()
activity_str = f"Listening to {member.activity.title} by {member.activity.artist}" if member.activity and member.activity.type is discord.ActivityType.custom else
elif member.activity.type == discord.ActivityType.watching: "None"
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"
# --- UI Components v2 View --- # --- UI Components v2 View ---
class UserInfoView(ui.LayoutView): class UserInfoView(ui.LayoutView):

View File

@ -65,6 +65,7 @@ async def get_prefix(bot_instance, message):
intents = discord.Intents.default() intents = discord.Intents.default()
intents.message_content = True intents.message_content = True
intents.members = True intents.members = True
intents.presences = True # Required for .status / .activity
# --- Custom Bot Class with setup_hook for async initialization --- # --- Custom Bot Class with setup_hook for async initialization ---
class MyBot(commands.Bot): class MyBot(commands.Bot):