mirror of
https://gitlab.com/pancakes1234/wdiscordbotserver.git
synced 2025-06-16 07:14:21 -06:00
feat: Add UserInfoCog to display detailed user information in Discord
This commit is contained in:
parent
74505979c1
commit
f11e519555
86
cogs/userinfo.py
Normal file
86
cogs/userinfo.py
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
import discord
|
||||||
|
from discord.ext import commands
|
||||||
|
from discord import app_commands
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
class UserInfoCog(commands.Cog):
|
||||||
|
def __init__(self, bot: commands.Bot):
|
||||||
|
self.bot = bot
|
||||||
|
|
||||||
|
@app_commands.command(name="aboutuser", description="Display info about a user or yourself.")
|
||||||
|
@app_commands.describe(user="The user to get info about (optional)")
|
||||||
|
async def aboutuser(self, interaction: discord.Interaction, user: Optional[discord.Member] = None):
|
||||||
|
member = user or interaction.user
|
||||||
|
# Fetch up-to-date member info
|
||||||
|
if interaction.guild:
|
||||||
|
member = interaction.guild.get_member(member.id) or member
|
||||||
|
# Fetch user object for banner/profile
|
||||||
|
user_obj = member._user if hasattr(member, '_user') else member
|
||||||
|
# Banner fetching (API call)
|
||||||
|
banner_url = None
|
||||||
|
try:
|
||||||
|
user_obj = await self.bot.fetch_user(member.id)
|
||||||
|
if user_obj.banner:
|
||||||
|
banner_url = user_obj.banner.url
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
# Devices
|
||||||
|
if isinstance(member, discord.Member):
|
||||||
|
status = str(member.status).title()
|
||||||
|
devices = []
|
||||||
|
if hasattr(member, "devices"):
|
||||||
|
for dev in getattr(member, "devices", []):
|
||||||
|
devices.append(str(dev).title())
|
||||||
|
else:
|
||||||
|
# Fallback for older discord.py
|
||||||
|
if member.desktop_status != discord.Status.offline:
|
||||||
|
devices.append("Desktop")
|
||||||
|
if member.mobile_status != discord.Status.offline:
|
||||||
|
devices.append("Mobile")
|
||||||
|
if member.web_status != discord.Status.offline:
|
||||||
|
devices.append("Web")
|
||||||
|
device_str = ", ".join(devices) if devices else "Unknown"
|
||||||
|
else:
|
||||||
|
status = "Unknown"
|
||||||
|
device_str = "Unknown"
|
||||||
|
# Activities
|
||||||
|
activities = []
|
||||||
|
if hasattr(member, "activities"):
|
||||||
|
for activity in member.activities:
|
||||||
|
if isinstance(activity, discord.Game):
|
||||||
|
activities.append(f"Playing {activity.name}")
|
||||||
|
elif isinstance(activity, discord.Spotify):
|
||||||
|
activities.append(f"Listening to {activity.title} by {', '.join(activity.artists)}")
|
||||||
|
elif isinstance(activity, discord.Activity):
|
||||||
|
activities.append(f"{activity.type.name.title()}: {activity.name}")
|
||||||
|
activity_str = ", ".join(activities) if activities else "None"
|
||||||
|
# Roles
|
||||||
|
if isinstance(member, discord.Member) and interaction.guild:
|
||||||
|
roles = [role.mention for role in member.roles if role != interaction.guild.default_role]
|
||||||
|
roles_str = ", ".join(roles) if roles else "None"
|
||||||
|
else:
|
||||||
|
roles_str = "None"
|
||||||
|
# Embed
|
||||||
|
embed = discord.Embed(
|
||||||
|
title=f"User Info: {member.display_name}",
|
||||||
|
color=member.color if hasattr(member, 'color') else discord.Color.blurple(),
|
||||||
|
description=f"Profile of {member.mention}"
|
||||||
|
)
|
||||||
|
if banner_url:
|
||||||
|
embed.set_image(url=banner_url)
|
||||||
|
embed.set_thumbnail(url=member.display_avatar.url)
|
||||||
|
embed.add_field(name="Nickname", value=member.nick or "None", inline=True)
|
||||||
|
embed.add_field(name="Username", value=f"{member.name}#{member.discriminator}", inline=True)
|
||||||
|
embed.add_field(name="User ID", value=member.id, inline=True)
|
||||||
|
embed.add_field(name="Status", value=status, inline=True)
|
||||||
|
embed.add_field(name="Device", value=device_str, inline=True)
|
||||||
|
embed.add_field(name="Activity", value=activity_str, inline=True)
|
||||||
|
embed.add_field(name="Roles", value=roles_str, inline=False)
|
||||||
|
embed.add_field(name="Account Created", value=member.created_at.strftime('%Y-%m-%d %H:%M:%S'), inline=True)
|
||||||
|
if hasattr(member, 'joined_at') and member.joined_at:
|
||||||
|
embed.add_field(name="Joined Server", value=member.joined_at.strftime('%Y-%m-%d %H:%M:%S'), inline=True)
|
||||||
|
embed.set_footer(text=f"Requested by {interaction.user.display_name}", icon_url=interaction.user.display_avatar.url)
|
||||||
|
await interaction.response.send_message(embed=embed)
|
||||||
|
|
||||||
|
async def setup(bot: commands.Bot):
|
||||||
|
await bot.add_cog(UserInfoCog(bot))
|
Loading…
x
Reference in New Issue
Block a user