import discord from discord.ext import commands from datetime import datetime def get_badges(user): badges = [] if user.public_flags.verified_bot_developer: badges.append("<:verifiedbotdeveloper:1232884870762598481>") if user.public_flags.discord_certified_moderator: badges.append("<:discordcertifiedmoderator:1232882888467419190>") if user.public_flags.bug_hunter: badges.append("<:bughunterbadge:1232881643841392732>") if user.public_flags.staff: badges.append("<:staff:1232884672057573387>") if user.public_flags.partner: badges.append("<:partner:1232884540742303784>") if user.public_flags.hypesquad: badges.append("<:hypesquadbadge:1232883153283190914>") if user.public_flags.hypesquad_bravery: badges.append("<:hypesquadbravery:1232884053506654239>") if user.public_flags.hypesquad_brilliance: badges.append("<:hypesquadbrilliance:1232884259090337913>") if user.public_flags.hypesquad_balance: badges.append("<:hypesquadbalance:1232883920316661852>") if user.public_flags.early_supporter: badges.append("<:earlysupporter:1232883022391676929>") if user.public_flags.active_developer: badges.append("<:activedev:1232880809078165657>") return " ".join(badges) class information(commands.Cog): def __init__(self, bot): self.bot = bot @commands.hybrid_command(name="userinfo", aliases=["user"], with_app_command=True) async def userinfo(self, ctx: commands.Context, member: discord.Member = None): """Displays information about a user""" user = member or ctx.author if not member and ctx.interaction and ctx.interaction.data.get('options'): user_id = ctx.interaction.data['options'][0].get('value') user = await self.bot.fetch_user(user_id) badges = get_badges(user) embed = discord.Embed(title=f"{user.display_name} ({user.id})", color=discord.Color.blue()) embed.description = badges or "No badges" embed.add_field(name="Created", value=f"{user.created_at.strftime('%m/%d/%Y, %I:%M %p')} ({(datetime.utcnow() - user.created_at).days // 365} years ago)", inline=False) if isinstance(user, discord.Member): embed.add_field(name="Joined", value=f"{user.joined_at.strftime('%m/%d/%Y, %I:%M %p')} ({(datetime.utcnow() - user.joined_at).days // 365} years ago)", inline=False) embed.add_field(name="Roles", value=" ".join([role.mention for role in user.roles[1:]]), inline=False) join_position = len(ctx.guild.members) - sorted(ctx.guild.members, key=lambda m: m.joined_at).index(user) mutual_servers = len([s for s in self.bot.guilds if user in s.members]) embed.set_footer(text=f"Join position: ({join_position}) • {mutual_servers} mutual servers") else: embed.add_field(name="Status", value="User is not in this server.", inline=False) embed.set_thumbnail(url=user.avatar.url) await ctx.send(embed=embed) async def setup(bot): await bot.add_cog(information(bot))