async def profile(self, ctx: Context, *, member: Member = None): """User's profile""" if not member: member = ctx.author user, _ = await User.get_or_create(id=member.id) # Calculate current level progress: # (exp - curr lvl req) * 100 / (curr lvl req - next lvl req) current_level_exp = (user.level * 4)**2 next_level_exp = ((user.level + 1) * 4)**2 progress = round((user.exp - current_level_exp) * 100 / (next_level_exp - current_level_exp)) # Find position of profile in global user ranking rank = (await User.all().order_by("-exp")).index(user) embed = Embed(ctx, title=f"{member.name}'s profile", color=member.color) embed.set_thumbnail(url=member.avatar_url) embed.add_fields( ("Rank", str(rank + 1)), ("Level", f"{user.level}"), ("Experience", f"{user.exp}/{next_level_exp} ({progress}%)"), ("Balance", f"{user.balance} coins"), ) if mutes := await Mute.filter(guild__id=ctx.guild.id, user__id=member.id).count(): embed.add_field(name="Mutes", value=str(mutes))
async def user(self, ctx: Context, *, user: Union[Member, User] = None): """Shows info about an user or a member""" if not user: user = ctx.author title = str(user) if not user.bot else f"{user} :robot:" embed = Embed(ctx, title=title, color=user.color) embed.set_thumbnail(url=user.avatar_url) embed.add_fields(("ID", user.id), ("Created at", user.created_at)) await ctx.send(embed=embed)
async def server(self, ctx: Context): """Shows info about this server""" embed = Embed(ctx, title=ctx.guild.name) embed.set_thumbnail(url=ctx.guild.icon_url_as(size=2048)) embed.add_fields( (t(ctx, "id"), ctx.guild.id), (t(ctx, "owner"), ctx.guild.owner.mention), (t(ctx, "region"), ctx.guild.region), (t(ctx, "members"), str(ctx.guild.member_count)), (t(ctx, "text_channels"), str(len(ctx.guild.text_channels))), (t(ctx, "voice_channels"), str(len(ctx.guild.voice_channels))), ) await ctx.send(embed=embed)