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
# 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):

View File

@ -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):