fix: Enhance userinfo command to fetch up-to-date member data and improve activity status handling
This commit is contained in:
parent
72db1fafd8
commit
c75c01786f
@ -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):
|
||||||
|
1
main.py
1
main.py
@ -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):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user