From f91314cdf09f6e5ee7a3c40f48cfd7dd14461752 Mon Sep 17 00:00:00 2001 From: Ava Date: Wed, 18 Jan 2023 12:17:12 -0500 Subject: [PATCH 01/33] test --- dozer/cogs/levels.py | 5 +++++ requirements.txt | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index b11fc450..3db46b05 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -7,9 +7,11 @@ import random import typing from datetime import timedelta, timezone, datetime +from io import BytesIO import aiohttp import discord +from PIL import Image from discord.ext.commands import guild_only, has_permissions, BadArgument from discord.ext.tasks import loop from discord.utils import escape_markdown @@ -648,6 +650,8 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): """ member = member or ctx.author embed = discord.Embed(color=member.color) + img = Image.new('RGB', (350, 100), (44, 47, 51)) + img.paste(Image.open(BytesIO(await member.display_avatar.with_size(50).read())), (25, 25)) guild_settings = self.guild_settings.get(ctx.guild.id) @@ -681,6 +685,7 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): embed.description = (f"Level {level}, {total_xp - level_floor}/{level_xp} XP to level up ({total_xp} total)\n" f"#{rank} of {count} in this server") + await ctx.send(file=discord.File(img.tobytes())) embed.set_author(name=member.display_name, icon_url=member.display_avatar.replace(format='png', size=64)) await ctx.send(embed=embed) diff --git a/requirements.txt b/requirements.txt index 5afc5e1d..1b6a4ef2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -13,4 +13,5 @@ rstcloth~=0.3.1 humanize~=3.8.0 pre-commit~=2.20.0 lavaplayer -loguru~=0.6.0 \ No newline at end of file +loguru~=0.6.0 +pillow~=9.4.0 \ No newline at end of file From 2b46a0f0592aab39991b8d6fadf3b78587880895 Mon Sep 17 00:00:00 2001 From: Ava Date: Thu, 19 Jan 2023 12:40:52 -0500 Subject: [PATCH 02/33] added kinda print statements --- dozer/cogs/levels.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index 3db46b05..c7f0c08c 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -648,19 +648,20 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): """Get a user's ranking on the XP leaderboard. If no member is passed, the caller's ranking is shown. """ + await ctx.send('reached point 1') member = member or ctx.author embed = discord.Embed(color=member.color) img = Image.new('RGB', (350, 100), (44, 47, 51)) img.paste(Image.open(BytesIO(await member.display_avatar.with_size(50).read())), (25, 25)) - + await ctx.send('reached point 2') guild_settings = self.guild_settings.get(ctx.guild.id) - + await ctx.send('reached point 3') if guild_settings is None or not guild_settings.enabled: embed.description = "Levels are not enabled in this server" else: cache_record = await self.load_member(ctx.guild.id, member.id) # Grab member from cache to make sure we have the most up to date values - + await ctx.send('reached point 4') # Make Postgres compute the rank for us (need WITH-query so rank() sees records for every user) db_record = await db.Pool.fetchrow(f""" WITH ranked_xp AS ( @@ -677,7 +678,7 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): level = self.level_for_total_xp(total_xp) level_floor = self.total_xp_for_level(level) level_xp = self.total_xp_for_level(level + 1) - level_floor - + await ctx.send('reached point 6') if db_record: # If member does not exist in the db, then return rank as the lowest rank rank = db_record.get("rank") else: @@ -685,6 +686,7 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): embed.description = (f"Level {level}, {total_xp - level_floor}/{level_xp} XP to level up ({total_xp} total)\n" f"#{rank} of {count} in this server") + await ctx.send('reached point 7') await ctx.send(file=discord.File(img.tobytes())) embed.set_author(name=member.display_name, icon_url=member.display_avatar.replace(format='png', size=64)) await ctx.send(embed=embed) From 0e5d0c1cfd576f942dc1eaa099006578a9cbdd72 Mon Sep 17 00:00:00 2001 From: Ava Date: Thu, 19 Jan 2023 12:45:01 -0500 Subject: [PATCH 03/33] fixed avatar size --- dozer/cogs/levels.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index c7f0c08c..1a48bdcd 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -652,7 +652,7 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): member = member or ctx.author embed = discord.Embed(color=member.color) img = Image.new('RGB', (350, 100), (44, 47, 51)) - img.paste(Image.open(BytesIO(await member.display_avatar.with_size(50).read())), (25, 25)) + img.paste(Image.open(BytesIO(await member.display_avatar.with_size(64).read())), (18, 18)) await ctx.send('reached point 2') guild_settings = self.guild_settings.get(ctx.guild.id) await ctx.send('reached point 3') From 9d53acd298420fc02d05c67dfec3a998e534421a Mon Sep 17 00:00:00 2001 From: Ava Date: Thu, 19 Jan 2023 12:47:14 -0500 Subject: [PATCH 04/33] a --- dozer/cogs/levels.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index 1a48bdcd..d5f1528d 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -687,9 +687,14 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): embed.description = (f"Level {level}, {total_xp - level_floor}/{level_xp} XP to level up ({total_xp} total)\n" f"#{rank} of {count} in this server") await ctx.send('reached point 7') - await ctx.send(file=discord.File(img.tobytes())) - embed.set_author(name=member.display_name, icon_url=member.display_avatar.replace(format='png', size=64)) - await ctx.send(embed=embed) + try: + await ctx.send(file=discord.File(img.tobytes())) + await ctx.send('reached point 8') + embed.set_author(name=member.display_name, icon_url=member.display_avatar.replace(format='png', size=64)) + await ctx.send(embed=embed) + except Exception as e: + await ctx.send(str(e)) + rank.example_usage = """ `{prefix}rank`: show your ranking From 7bbe5af80ea180c8987c1fa73ee3e9e72875a6e0 Mon Sep 17 00:00:00 2001 From: Ava Date: Thu, 19 Jan 2023 12:49:45 -0500 Subject: [PATCH 05/33] more debug --- dozer/cogs/levels.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index d5f1528d..e7000419 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -688,11 +688,15 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): f"#{rank} of {count} in this server") await ctx.send('reached point 7') try: - await ctx.send(file=discord.File(img.tobytes())) await ctx.send('reached point 8') + await ctx.send(file=discord.File(img.tobytes())) + await ctx.send('reached point 9') embed.set_author(name=member.display_name, icon_url=member.display_avatar.replace(format='png', size=64)) + await ctx.send('reached point 10') await ctx.send(embed=embed) + await ctx.send('reached point 11') except Exception as e: + await ctx.send('error') await ctx.send(str(e)) From 1793353ba9aa78510e80776038940ca62765863e Mon Sep 17 00:00:00 2001 From: Ava Date: Thu, 19 Jan 2023 12:54:06 -0500 Subject: [PATCH 06/33] error on the error message --- dozer/cogs/levels.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index e7000419..8e9fcc6a 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -697,7 +697,7 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): await ctx.send('reached point 11') except Exception as e: await ctx.send('error') - await ctx.send(str(e)) + await ctx.send(str(e)[0:3999]) rank.example_usage = """ From 8e6ebbd5022bae179b78a2b4b3f82e1d0a5b67b3 Mon Sep 17 00:00:00 2001 From: Ava Date: Thu, 19 Jan 2023 12:55:35 -0500 Subject: [PATCH 07/33] error message too long --- dozer/cogs/levels.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index 8e9fcc6a..ebfa471b 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -697,7 +697,7 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): await ctx.send('reached point 11') except Exception as e: await ctx.send('error') - await ctx.send(str(e)[0:3999]) + await ctx.send(str(e)[0:1999]) rank.example_usage = """ From 7ef3e33d78cff90229c986846f8f049d2270b6fb Mon Sep 17 00:00:00 2001 From: Ava Date: Thu, 19 Jan 2023 12:58:17 -0500 Subject: [PATCH 08/33] a --- dozer/cogs/levels.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index ebfa471b..ce271e50 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -689,7 +689,11 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): await ctx.send('reached point 7') try: await ctx.send('reached point 8') - await ctx.send(file=discord.File(img.tobytes())) + arr = BytesIO() + img.save(arr, format='PNG') + arr.seek(0) + file = discord.File(arr) + await ctx.send(file=file) await ctx.send('reached point 9') embed.set_author(name=member.display_name, icon_url=member.display_avatar.replace(format='png', size=64)) await ctx.send('reached point 10') From 70ad0ced9f0feaacd9fa1d67028226e3d0261cc4 Mon Sep 17 00:00:00 2001 From: Ava Date: Thu, 19 Jan 2023 12:59:58 -0500 Subject: [PATCH 09/33] filename --- dozer/cogs/levels.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index ce271e50..6327c6fc 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -692,7 +692,7 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): arr = BytesIO() img.save(arr, format='PNG') arr.seek(0) - file = discord.File(arr) + file = discord.File(fp=arr, filename=f'{member}.png') await ctx.send(file=file) await ctx.send('reached point 9') embed.set_author(name=member.display_name, icon_url=member.display_avatar.replace(format='png', size=64)) From 777e9e43e426857b7701d703cb9fb4d1e0e6c0b1 Mon Sep 17 00:00:00 2001 From: Ava Date: Thu, 19 Jan 2023 13:02:58 -0500 Subject: [PATCH 10/33] name --- dozer/cogs/levels.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index 6327c6fc..c500a793 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -12,6 +12,7 @@ import aiohttp import discord from PIL import Image +from PIL import ImageDraw from discord.ext.commands import guild_only, has_permissions, BadArgument from discord.ext.tasks import loop from discord.utils import escape_markdown @@ -653,6 +654,8 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): embed = discord.Embed(color=member.color) img = Image.new('RGB', (350, 100), (44, 47, 51)) img.paste(Image.open(BytesIO(await member.display_avatar.with_size(64).read())), (18, 18)) + draw = ImageDraw.Draw(img) + draw.text((100, 20), member.display_name) await ctx.send('reached point 2') guild_settings = self.guild_settings.get(ctx.guild.id) await ctx.send('reached point 3') From 8ca7e4a0e3f675f6e4bf2393b13bb23c255dbf74 Mon Sep 17 00:00:00 2001 From: Ava Date: Thu, 19 Jan 2023 13:08:08 -0500 Subject: [PATCH 11/33] progressbar --- dozer/cogs/levels.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index c500a793..10d5479c 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -681,6 +681,19 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): level = self.level_for_total_xp(total_xp) level_floor = self.total_xp_for_level(level) level_xp = self.total_xp_for_level(level + 1) - level_floor + + def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), fg2=(15, 15, 15)): + # Draw the background + draw.rectangle((x + (height / 2), y, x + width + (height / 2), y + height), fill=fg2, width=10) + draw.ellipse((x + width, y, x + height + width, y + height), fill=fg2) + draw.ellipse((x, y, x + height, y + height), fill=fg2) + width = int(width * progress) + # Draw the part of the progress bar that is actually filled + draw.rectangle((x + (height / 2), y, x + width + (height / 2), y + height), fill=fg, width=10) + draw.ellipse((x + width, y, x + height + width, y + height), fill=fg) + draw.ellipse((x, y, x + height, y + height), fill=fg) + + new_bar(100, 50, 200, 20, (total_xp - level_floor) / (level_xp - level_floor)) await ctx.send('reached point 6') if db_record: # If member does not exist in the db, then return rank as the lowest rank rank = db_record.get("rank") @@ -706,7 +719,6 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): await ctx.send('error') await ctx.send(str(e)[0:1999]) - rank.example_usage = """ `{prefix}rank`: show your ranking `{prefix}rank coolgal#1234`: show another user's ranking From 4c527a503ac4acea2d5214a24e2e42962676c6e8 Mon Sep 17 00:00:00 2001 From: Ava Date: Thu, 19 Jan 2023 13:11:22 -0500 Subject: [PATCH 12/33] more info --- dozer/cogs/levels.py | 34 +++++++++++----------------------- 1 file changed, 11 insertions(+), 23 deletions(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index 10d5479c..e6245e79 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -649,22 +649,19 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): """Get a user's ranking on the XP leaderboard. If no member is passed, the caller's ranking is shown. """ - await ctx.send('reached point 1') member = member or ctx.author embed = discord.Embed(color=member.color) img = Image.new('RGB', (350, 100), (44, 47, 51)) img.paste(Image.open(BytesIO(await member.display_avatar.with_size(64).read())), (18, 18)) draw = ImageDraw.Draw(img) draw.text((100, 20), member.display_name) - await ctx.send('reached point 2') guild_settings = self.guild_settings.get(ctx.guild.id) - await ctx.send('reached point 3') if guild_settings is None or not guild_settings.enabled: embed.description = "Levels are not enabled in this server" else: cache_record = await self.load_member(ctx.guild.id, member.id) # Grab member from cache to make sure we have the most up to date values - await ctx.send('reached point 4') + # Make Postgres compute the rank for us (need WITH-query so rank() sees records for every user) db_record = await db.Pool.fetchrow(f""" WITH ranked_xp AS ( @@ -692,9 +689,8 @@ def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), draw.rectangle((x + (height / 2), y, x + width + (height / 2), y + height), fill=fg, width=10) draw.ellipse((x + width, y, x + height + width, y + height), fill=fg) draw.ellipse((x, y, x + height, y + height), fill=fg) - - new_bar(100, 50, 200, 20, (total_xp - level_floor) / (level_xp - level_floor)) - await ctx.send('reached point 6') + draw.text((100, 50), f'Level {level}, {total_xp - level_floor}/{level_xp} XP to level up') + new_bar(100, 70, 200, 20, (total_xp - level_floor) / (level_xp - level_floor)) if db_record: # If member does not exist in the db, then return rank as the lowest rank rank = db_record.get("rank") else: @@ -702,22 +698,14 @@ def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), embed.description = (f"Level {level}, {total_xp - level_floor}/{level_xp} XP to level up ({total_xp} total)\n" f"#{rank} of {count} in this server") - await ctx.send('reached point 7') - try: - await ctx.send('reached point 8') - arr = BytesIO() - img.save(arr, format='PNG') - arr.seek(0) - file = discord.File(fp=arr, filename=f'{member}.png') - await ctx.send(file=file) - await ctx.send('reached point 9') - embed.set_author(name=member.display_name, icon_url=member.display_avatar.replace(format='png', size=64)) - await ctx.send('reached point 10') - await ctx.send(embed=embed) - await ctx.send('reached point 11') - except Exception as e: - await ctx.send('error') - await ctx.send(str(e)[0:1999]) + + arr = BytesIO() + img.save(arr, format='PNG') + arr.seek(0) + file = discord.File(fp=arr, filename=f'{member}.png') + await ctx.send(file=file) + embed.set_author(name=member.display_name, icon_url=member.display_avatar.replace(format='png', size=64)) + await ctx.send(embed=embed) rank.example_usage = """ `{prefix}rank`: show your ranking From 833d395d0ca7b9c632def2fa88ebfc171464c92f Mon Sep 17 00:00:00 2001 From: Ava Date: Thu, 19 Jan 2023 13:14:07 -0500 Subject: [PATCH 13/33] font size --- dozer/cogs/levels.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index e6245e79..e33f583d 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -11,7 +11,7 @@ import aiohttp import discord -from PIL import Image +from PIL import Image, ImageFont from PIL import ImageDraw from discord.ext.commands import guild_only, has_permissions, BadArgument from discord.ext.tasks import loop @@ -654,7 +654,7 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): img = Image.new('RGB', (350, 100), (44, 47, 51)) img.paste(Image.open(BytesIO(await member.display_avatar.with_size(64).read())), (18, 18)) draw = ImageDraw.Draw(img) - draw.text((100, 20), member.display_name) + draw.text((100, 20), member.display_name, font=ImageFont.truetype('DejaVuSans.ttf', 18)) guild_settings = self.guild_settings.get(ctx.guild.id) if guild_settings is None or not guild_settings.enabled: embed.description = "Levels are not enabled in this server" From 385b270a55c42b9f72047e29b835878bea6f6ca9 Mon Sep 17 00:00:00 2001 From: Ava Date: Thu, 19 Jan 2023 13:16:07 -0500 Subject: [PATCH 14/33] a --- dozer/cogs/levels.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index e33f583d..ef388507 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -651,10 +651,10 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): """ member = member or ctx.author embed = discord.Embed(color=member.color) - img = Image.new('RGB', (350, 100), (44, 47, 51)) + img = Image.new('RGB', (400, 100), (44, 47, 51)) img.paste(Image.open(BytesIO(await member.display_avatar.with_size(64).read())), (18, 18)) draw = ImageDraw.Draw(img) - draw.text((100, 20), member.display_name, font=ImageFont.truetype('DejaVuSans.ttf', 18)) + draw.text((100, 20), member.display_name, font=ImageFont.truetype('DejaVuSans.ttf', 20)) guild_settings = self.guild_settings.get(ctx.guild.id) if guild_settings is None or not guild_settings.enabled: embed.description = "Levels are not enabled in this server" @@ -689,8 +689,8 @@ def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), draw.rectangle((x + (height / 2), y, x + width + (height / 2), y + height), fill=fg, width=10) draw.ellipse((x + width, y, x + height + width, y + height), fill=fg) draw.ellipse((x, y, x + height, y + height), fill=fg) - draw.text((100, 50), f'Level {level}, {total_xp - level_floor}/{level_xp} XP to level up') - new_bar(100, 70, 200, 20, (total_xp - level_floor) / (level_xp - level_floor)) + draw.text((100, 50), f'Level {level}, {total_xp - level_floor}/{level_xp} XP to level up. Level {level}') + new_bar(100, 70, 250, 20, (total_xp - level_floor) / (level_xp - level_floor)) if db_record: # If member does not exist in the db, then return rank as the lowest rank rank = db_record.get("rank") else: From 1e5b518acb17ad7aaf2a7d0d97dbc29566958f78 Mon Sep 17 00:00:00 2001 From: Ava Date: Thu, 19 Jan 2023 13:17:20 -0500 Subject: [PATCH 15/33] a --- dozer/cogs/levels.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index ef388507..4ceef80a 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -654,7 +654,7 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): img = Image.new('RGB', (400, 100), (44, 47, 51)) img.paste(Image.open(BytesIO(await member.display_avatar.with_size(64).read())), (18, 18)) draw = ImageDraw.Draw(img) - draw.text((100, 20), member.display_name, font=ImageFont.truetype('DejaVuSans.ttf', 20)) + draw.text((100, 18), member.display_name, font=ImageFont.truetype('DejaVuSans.ttf', 20)) guild_settings = self.guild_settings.get(ctx.guild.id) if guild_settings is None or not guild_settings.enabled: embed.description = "Levels are not enabled in this server" @@ -689,8 +689,8 @@ def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), draw.rectangle((x + (height / 2), y, x + width + (height / 2), y + height), fill=fg, width=10) draw.ellipse((x + width, y, x + height + width, y + height), fill=fg) draw.ellipse((x, y, x + height, y + height), fill=fg) - draw.text((100, 50), f'Level {level}, {total_xp - level_floor}/{level_xp} XP to level up. Level {level}') - new_bar(100, 70, 250, 20, (total_xp - level_floor) / (level_xp - level_floor)) + draw.text((100, 45), f'Level {level}, {total_xp - level_floor}/{level_xp} XP to level up. Level {level}') + new_bar(100, 65, 250, 20, (total_xp - level_floor) / (level_xp - level_floor)) if db_record: # If member does not exist in the db, then return rank as the lowest rank rank = db_record.get("rank") else: From 29d273f2d2f3671428622dd1c51df99368904ec1 Mon Sep 17 00:00:00 2001 From: Ava Date: Thu, 19 Jan 2023 13:25:59 -0500 Subject: [PATCH 16/33] a --- dozer/cogs/levels.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index 4ceef80a..abf0b658 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -689,13 +689,15 @@ def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), draw.rectangle((x + (height / 2), y, x + width + (height / 2), y + height), fill=fg, width=10) draw.ellipse((x + width, y, x + height + width, y + height), fill=fg) draw.ellipse((x, y, x + height, y + height), fill=fg) - draw.text((100, 45), f'Level {level}, {total_xp - level_floor}/{level_xp} XP to level up. Level {level}') - new_bar(100, 65, 250, 20, (total_xp - level_floor) / (level_xp - level_floor)) + if db_record: # If member does not exist in the db, then return rank as the lowest rank rank = db_record.get("rank") else: rank = count + draw.text((100, 45), f'Level {level}, {total_xp - level_floor}/{level_xp} XP to level up. Level {level}. #{rank} of {count} in server. ') + new_bar(100, 65, 250, 20, (total_xp - level_floor) / (level_xp - level_floor)) + embed.description = (f"Level {level}, {total_xp - level_floor}/{level_xp} XP to level up ({total_xp} total)\n" f"#{rank} of {count} in this server") From dc858332d8727a87ee58c8fca0cc8d3153e3ad02 Mon Sep 17 00:00:00 2001 From: Ava Date: Thu, 19 Jan 2023 13:28:39 -0500 Subject: [PATCH 17/33] add rank --- dozer/cogs/levels.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index abf0b658..54062edb 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -695,8 +695,9 @@ def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), else: rank = count - draw.text((100, 45), f'Level {level}, {total_xp - level_floor}/{level_xp} XP to level up. Level {level}. #{rank} of {count} in server. ') - new_bar(100, 65, 250, 20, (total_xp - level_floor) / (level_xp - level_floor)) + draw.text((100, 45), f'Level {level}, {total_xp - level_floor}/{level_xp} XP to level up. Level {level}. ') + draw.text((100, 47), f'#{rank} of {count} in server.') + new_bar(100, 73, 250, 12, (total_xp - level_floor) / (level_xp - level_floor)) embed.description = (f"Level {level}, {total_xp - level_floor}/{level_xp} XP to level up ({total_xp} total)\n" f"#{rank} of {count} in this server") From 003d9ff1367a9d30d4ac6c0e6bf902c0708c284c Mon Sep 17 00:00:00 2001 From: Ava Date: Thu, 19 Jan 2023 13:30:06 -0500 Subject: [PATCH 18/33] move text --- dozer/cogs/levels.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index 54062edb..efdbc231 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -696,7 +696,7 @@ def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), rank = count draw.text((100, 45), f'Level {level}, {total_xp - level_floor}/{level_xp} XP to level up. Level {level}. ') - draw.text((100, 47), f'#{rank} of {count} in server.') + draw.text((100, 52), f'#{rank} of {count} in server.') new_bar(100, 73, 250, 12, (total_xp - level_floor) / (level_xp - level_floor)) embed.description = (f"Level {level}, {total_xp - level_floor}/{level_xp} XP to level up ({total_xp} total)\n" From 920dda98e86e69222161d867f64b5710a3c88931 Mon Sep 17 00:00:00 2001 From: Ava Date: Thu, 19 Jan 2023 13:31:06 -0500 Subject: [PATCH 19/33] more text movement --- dozer/cogs/levels.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index efdbc231..f6411683 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -695,7 +695,7 @@ def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), else: rank = count - draw.text((100, 45), f'Level {level}, {total_xp - level_floor}/{level_xp} XP to level up. Level {level}. ') + draw.text((100, 42), f'Level {level}, {total_xp - level_floor}/{level_xp} XP to level up. Level {level}. ') draw.text((100, 52), f'#{rank} of {count} in server.') new_bar(100, 73, 250, 12, (total_xp - level_floor) / (level_xp - level_floor)) From 9daf74d029b51a3459afddca0653b47ce4f5a97c Mon Sep 17 00:00:00 2001 From: Ava Date: Thu, 19 Jan 2023 13:32:13 -0500 Subject: [PATCH 20/33] more positioning --- dozer/cogs/levels.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index f6411683..dbd20f5a 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -696,7 +696,7 @@ def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), rank = count draw.text((100, 42), f'Level {level}, {total_xp - level_floor}/{level_xp} XP to level up. Level {level}. ') - draw.text((100, 52), f'#{rank} of {count} in server.') + draw.text((100, 55), f'#{rank} of {count} in server.') new_bar(100, 73, 250, 12, (total_xp - level_floor) / (level_xp - level_floor)) embed.description = (f"Level {level}, {total_xp - level_floor}/{level_xp} XP to level up ({total_xp} total)\n" From f6af68481fd5070ebdf35374bd9cf47a03f08444 Mon Sep 17 00:00:00 2001 From: Ava Date: Thu, 19 Jan 2023 14:45:41 -0500 Subject: [PATCH 21/33] minor text changes --- dozer/cogs/levels.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index dbd20f5a..fa647643 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -696,7 +696,7 @@ def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), rank = count draw.text((100, 42), f'Level {level}, {total_xp - level_floor}/{level_xp} XP to level up. Level {level}. ') - draw.text((100, 55), f'#{rank} of {count} in server.') + draw.text((100, 55), f'#{rank} of {count} in this server') new_bar(100, 73, 250, 12, (total_xp - level_floor) / (level_xp - level_floor)) embed.description = (f"Level {level}, {total_xp - level_floor}/{level_xp} XP to level up ({total_xp} total)\n" From a58c852a84c45c6dd6ff5636b9c08199d2c39532 Mon Sep 17 00:00:00 2001 From: Ava Date: Fri, 20 Jan 2023 10:03:49 -0500 Subject: [PATCH 22/33] circle avatars --- dozer/cogs/levels.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index fa647643..4c7fdfc8 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -652,7 +652,16 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): member = member or ctx.author embed = discord.Embed(color=member.color) img = Image.new('RGB', (400, 100), (44, 47, 51)) - img.paste(Image.open(BytesIO(await member.display_avatar.with_size(64).read())), (18, 18)) + + avatar = Image.open(BytesIO(await member.display_avatar.with_size(64).read())) + bigsize = (avatar.size[0] * 3, avatar.size[1] * 3) + mask = Image.new('L', bigsize, 0) + draw = ImageDraw.Draw(mask) + draw.ellipse((0, 0) + bigsize, fill=255) + mask = mask.resize(avatar.size, Image.ANTIALIAS) + avatar.putalpha(mask) + + img.paste(avatar, (18, 18)) draw = ImageDraw.Draw(img) draw.text((100, 18), member.display_name, font=ImageFont.truetype('DejaVuSans.ttf', 20)) guild_settings = self.guild_settings.get(ctx.guild.id) From 394a2c1668774e64c98e70f2732245ad5f99de3b Mon Sep 17 00:00:00 2001 From: Ava Date: Fri, 20 Jan 2023 10:06:05 -0500 Subject: [PATCH 23/33] idk --- dozer/cogs/levels.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index 4c7fdfc8..01dc1af3 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -706,7 +706,7 @@ def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), draw.text((100, 42), f'Level {level}, {total_xp - level_floor}/{level_xp} XP to level up. Level {level}. ') draw.text((100, 55), f'#{rank} of {count} in this server') - new_bar(100, 73, 250, 12, (total_xp - level_floor) / (level_xp - level_floor)) + new_bar(100, 73, 200, 12, (total_xp - level_floor) / (level_xp - level_floor)) embed.description = (f"Level {level}, {total_xp - level_floor}/{level_xp} XP to level up ({total_xp} total)\n" f"#{rank} of {count} in this server") From 64e2a9bc40ffa0582c33f2055d40a5e570b91cc0 Mon Sep 17 00:00:00 2001 From: Ava Date: Fri, 20 Jan 2023 10:08:34 -0500 Subject: [PATCH 24/33] a --- dozer/cogs/levels.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index 01dc1af3..57c0f87f 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -694,6 +694,8 @@ def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), draw.ellipse((x + width, y, x + height + width, y + height), fill=fg2) draw.ellipse((x, y, x + height, y + height), fill=fg2) width = int(width * progress) + await ctx.send(f"Progress: {str((total_xp - level_floor) / (level_xp - level_floor))}") + await ctx.send(width) # Draw the part of the progress bar that is actually filled draw.rectangle((x + (height / 2), y, x + width + (height / 2), y + height), fill=fg, width=10) draw.ellipse((x + width, y, x + height + width, y + height), fill=fg) @@ -706,6 +708,7 @@ def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), draw.text((100, 42), f'Level {level}, {total_xp - level_floor}/{level_xp} XP to level up. Level {level}. ') draw.text((100, 55), f'#{rank} of {count} in this server') + new_bar(100, 73, 200, 12, (total_xp - level_floor) / (level_xp - level_floor)) embed.description = (f"Level {level}, {total_xp - level_floor}/{level_xp} XP to level up ({total_xp} total)\n" From 98d128a168087ef568111ad4b1dafcec92750780 Mon Sep 17 00:00:00 2001 From: Ava Date: Fri, 20 Jan 2023 10:10:10 -0500 Subject: [PATCH 25/33] a --- dozer/cogs/levels.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index 57c0f87f..cf21249b 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -695,7 +695,7 @@ def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), draw.ellipse((x, y, x + height, y + height), fill=fg2) width = int(width * progress) await ctx.send(f"Progress: {str((total_xp - level_floor) / (level_xp - level_floor))}") - await ctx.send(width) + await ctx.send(str(width)) # Draw the part of the progress bar that is actually filled draw.rectangle((x + (height / 2), y, x + width + (height / 2), y + height), fill=fg, width=10) draw.ellipse((x + width, y, x + height + width, y + height), fill=fg) From f782bd6dca2e5a7e8bcb9a8a77fb4640ae4455e8 Mon Sep 17 00:00:00 2001 From: Ava Date: Fri, 20 Jan 2023 10:30:33 -0500 Subject: [PATCH 26/33] fixed a bad await --- dozer/cogs/levels.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index cf21249b..0fc96c30 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -694,8 +694,7 @@ def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), draw.ellipse((x + width, y, x + height + width, y + height), fill=fg2) draw.ellipse((x, y, x + height, y + height), fill=fg2) width = int(width * progress) - await ctx.send(f"Progress: {str((total_xp - level_floor) / (level_xp - level_floor))}") - await ctx.send(str(width)) + # Draw the part of the progress bar that is actually filled draw.rectangle((x + (height / 2), y, x + width + (height / 2), y + height), fill=fg, width=10) draw.ellipse((x + width, y, x + height + width, y + height), fill=fg) @@ -705,7 +704,8 @@ def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), rank = db_record.get("rank") else: rank = count - + await ctx.send(f"Progress: {str((total_xp - level_floor) / (level_xp - level_floor))}") + await ctx.send(str(((total_xp - level_floor) / (level_xp - level_floor))*200)) draw.text((100, 42), f'Level {level}, {total_xp - level_floor}/{level_xp} XP to level up. Level {level}. ') draw.text((100, 55), f'#{rank} of {count} in this server') From c5788748d8661c8c8469d9afe507cc3a58463ba0 Mon Sep 17 00:00:00 2001 From: Ava Date: Fri, 20 Jan 2023 10:33:00 -0500 Subject: [PATCH 27/33] more 'print statements' --- dozer/cogs/levels.py | 1 + 1 file changed, 1 insertion(+) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index 0fc96c30..8f5cafef 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -706,6 +706,7 @@ def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), rank = count await ctx.send(f"Progress: {str((total_xp - level_floor) / (level_xp - level_floor))}") await ctx.send(str(((total_xp - level_floor) / (level_xp - level_floor))*200)) + await ctx.send(f"{total_xp}, {level_xp}") draw.text((100, 42), f'Level {level}, {total_xp - level_floor}/{level_xp} XP to level up. Level {level}. ') draw.text((100, 55), f'#{rank} of {count} in this server') From 268224d36eb619620c9a54fd51c4362a17cf3183 Mon Sep 17 00:00:00 2001 From: Ava Date: Fri, 20 Jan 2023 10:34:52 -0500 Subject: [PATCH 28/33] I was stupid, I fixed it --- dozer/cogs/levels.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index 8f5cafef..746db093 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -704,13 +704,10 @@ def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), rank = db_record.get("rank") else: rank = count - await ctx.send(f"Progress: {str((total_xp - level_floor) / (level_xp - level_floor))}") - await ctx.send(str(((total_xp - level_floor) / (level_xp - level_floor))*200)) - await ctx.send(f"{total_xp}, {level_xp}") draw.text((100, 42), f'Level {level}, {total_xp - level_floor}/{level_xp} XP to level up. Level {level}. ') draw.text((100, 55), f'#{rank} of {count} in this server') - new_bar(100, 73, 200, 12, (total_xp - level_floor) / (level_xp - level_floor)) + new_bar(100, 73, 200, 12, (total_xp - level_floor) / (level_xp)) embed.description = (f"Level {level}, {total_xp - level_floor}/{level_xp} XP to level up ({total_xp} total)\n" f"#{rank} of {count} in this server") From fe9b344dc0c6050105ddaaa365730d9210d867b2 Mon Sep 17 00:00:00 2001 From: Ava Date: Fri, 20 Jan 2023 10:36:37 -0500 Subject: [PATCH 29/33] cleaup --- dozer/cogs/levels.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index 746db093..09dc02a5 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -707,7 +707,7 @@ def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), draw.text((100, 42), f'Level {level}, {total_xp - level_floor}/{level_xp} XP to level up. Level {level}. ') draw.text((100, 55), f'#{rank} of {count} in this server') - new_bar(100, 73, 200, 12, (total_xp - level_floor) / (level_xp)) + new_bar(100, 73, 250, 12, (total_xp - level_floor) / level_xp) embed.description = (f"Level {level}, {total_xp - level_floor}/{level_xp} XP to level up ({total_xp} total)\n" f"#{rank} of {count} in this server") From 535dc48fb1a3de7174781ffb0d09f46971150d48 Mon Sep 17 00:00:00 2001 From: Ava Date: Fri, 20 Jan 2023 11:00:18 -0500 Subject: [PATCH 30/33] removed old rank card --- dozer/cogs/levels.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index 09dc02a5..5ab08303 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -650,7 +650,7 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): If no member is passed, the caller's ranking is shown. """ member = member or ctx.author - embed = discord.Embed(color=member.color) + # embed = discord.Embed(color=member.color) img = Image.new('RGB', (400, 100), (44, 47, 51)) avatar = Image.open(BytesIO(await member.display_avatar.with_size(64).read())) @@ -709,16 +709,16 @@ def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), new_bar(100, 73, 250, 12, (total_xp - level_floor) / level_xp) - embed.description = (f"Level {level}, {total_xp - level_floor}/{level_xp} XP to level up ({total_xp} total)\n" - f"#{rank} of {count} in this server") + # embed.description = (f"Level {level}, {total_xp - level_floor}/{level_xp} XP to level up ({total_xp} total)\n" + # f"#{rank} of {count} in this server") arr = BytesIO() img.save(arr, format='PNG') arr.seek(0) file = discord.File(fp=arr, filename=f'{member}.png') await ctx.send(file=file) - embed.set_author(name=member.display_name, icon_url=member.display_avatar.replace(format='png', size=64)) - await ctx.send(embed=embed) + # embed.set_author(name=member.display_name, icon_url=member.display_avatar.replace(format='png', size=64)) + # await ctx.send(embed=embed) rank.example_usage = """ `{prefix}rank`: show your ranking From 4776f15e0fb0c755106e45936d2305e9b60e829d Mon Sep 17 00:00:00 2001 From: Ava Date: Fri, 20 Jan 2023 11:01:46 -0500 Subject: [PATCH 31/33] Missed part, and added levels not enabled message --- dozer/cogs/levels.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index 5ab08303..5b04ce8b 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -666,7 +666,8 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): draw.text((100, 18), member.display_name, font=ImageFont.truetype('DejaVuSans.ttf', 20)) guild_settings = self.guild_settings.get(ctx.guild.id) if guild_settings is None or not guild_settings.enabled: - embed.description = "Levels are not enabled in this server" + draw.text((100, 42), "Levels are not enabled in this server") + # embed.description = "Levels are not enabled in this server" else: cache_record = await self.load_member(ctx.guild.id, member.id) # Grab member from cache to make sure we have the most up to date values From f637c695c881684cd690fd7c511dd2b7c6d6c4ed Mon Sep 17 00:00:00 2001 From: Ava Date: Tue, 24 Jan 2023 09:12:16 -0500 Subject: [PATCH 32/33] idk i simplified stuff --- dozer/cogs/levels.py | 65 +++++++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 28 deletions(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index 5b04ce8b..fd43aea3 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -642,15 +642,8 @@ async def _cfg_guild_setting(self, ctx: DozerContext, xp_min=None, xp_max=None, f"Notification channel: {lvl_up_msgs}") await ctx.send(embed=embed) - @command(aliases=["rnak", "level"]) - @guild_only() - @discord.ext.commands.cooldown(rate=1, per=5, type=discord.ext.commands.BucketType.user) - async def rank(self, ctx: DozerContext, *, member: discord.Member = None): - """Get a user's ranking on the XP leaderboard. - If no member is passed, the caller's ranking is shown. - """ - member = member or ctx.author - # embed = discord.Embed(color=member.color) + def make_new_rank_card(self, member: discord.Member, levels_enabled: bool, level: int = 0, total_xp: int = 0, level_floor: int = 0, rank: int = 0, + count: int = 0, level_xp: int = 0): img = Image.new('RGB', (400, 100), (44, 47, 51)) avatar = Image.open(BytesIO(await member.display_avatar.with_size(64).read())) @@ -664,10 +657,42 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): img.paste(avatar, (18, 18)) draw = ImageDraw.Draw(img) draw.text((100, 18), member.display_name, font=ImageFont.truetype('DejaVuSans.ttf', 20)) + + def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), fg2=(15, 15, 15)): + # Draw the background + draw.rectangle((x + (height / 2), y, x + width + (height / 2), y + height), fill=fg2, width=10) + draw.ellipse((x + width, y, x + height + width, y + height), fill=fg2) + draw.ellipse((x, y, x + height, y + height), fill=fg2) + width = int(width * progress) + + # Draw the part of the progress bar that is actually filled + draw.rectangle((x + (height / 2), y, x + width + (height / 2), y + height), fill=fg, width=10) + draw.ellipse((x + width, y, x + height + width, y + height), fill=fg) + draw.ellipse((x, y, x + height, y + height), fill=fg) + + if levels_enabled: + draw.text((100, 42), f'Level {level}, {total_xp - level_floor}/{level_xp} XP to level up. Level {level}. ') + draw.text((100, 55), f'#{rank} of {count} in this server') + + new_bar(100, 73, 250, 12, (total_xp - level_floor) / level_xp) + else: + draw.text((100, 42), "Levels are not enabled in this server") + return img + + @command(aliases=["rnak", "level"]) + @guild_only() + @discord.ext.commands.cooldown(rate=1, per=5, type=discord.ext.commands.BucketType.user) + async def rank(self, ctx: DozerContext, *, member: discord.Member = None): + """Get a user's ranking on the XP leaderboard. + If no member is passed, the caller's ranking is shown. + """ + member = member or ctx.author + # embed = discord.Embed(color=member.color) + guild_settings = self.guild_settings.get(ctx.guild.id) if guild_settings is None or not guild_settings.enabled: - draw.text((100, 42), "Levels are not enabled in this server") - # embed.description = "Levels are not enabled in this server" + img = self.make_new_rank_card(member, levels_enabled=False) + else: cache_record = await self.load_member(ctx.guild.id, member.id) # Grab member from cache to make sure we have the most up to date values @@ -689,27 +714,11 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): level_floor = self.total_xp_for_level(level) level_xp = self.total_xp_for_level(level + 1) - level_floor - def new_bar(x, y, width, height, progress, bg=(129, 66, 97), fg=(211, 211, 211), fg2=(15, 15, 15)): - # Draw the background - draw.rectangle((x + (height / 2), y, x + width + (height / 2), y + height), fill=fg2, width=10) - draw.ellipse((x + width, y, x + height + width, y + height), fill=fg2) - draw.ellipse((x, y, x + height, y + height), fill=fg2) - width = int(width * progress) - - # Draw the part of the progress bar that is actually filled - draw.rectangle((x + (height / 2), y, x + width + (height / 2), y + height), fill=fg, width=10) - draw.ellipse((x + width, y, x + height + width, y + height), fill=fg) - draw.ellipse((x, y, x + height, y + height), fill=fg) - if db_record: # If member does not exist in the db, then return rank as the lowest rank rank = db_record.get("rank") else: rank = count - draw.text((100, 42), f'Level {level}, {total_xp - level_floor}/{level_xp} XP to level up. Level {level}. ') - draw.text((100, 55), f'#{rank} of {count} in this server') - - new_bar(100, 73, 250, 12, (total_xp - level_floor) / level_xp) - + img = self.make_new_rank_card(member, True, level, total_xp, level_floor, rank, count, level_xp) # embed.description = (f"Level {level}, {total_xp - level_floor}/{level_xp} XP to level up ({total_xp} total)\n" # f"#{rank} of {count} in this server") From 7f216d730373a753e1a9338018b62ee2e436aaea Mon Sep 17 00:00:00 2001 From: Travis Weir Date: Mon, 12 Jun 2023 14:08:27 -0500 Subject: [PATCH 33/33] Remove old code --- dozer/cogs/levels.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/dozer/cogs/levels.py b/dozer/cogs/levels.py index fd43aea3..2f4ddb2d 100644 --- a/dozer/cogs/levels.py +++ b/dozer/cogs/levels.py @@ -687,7 +687,6 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): If no member is passed, the caller's ranking is shown. """ member = member or ctx.author - # embed = discord.Embed(color=member.color) guild_settings = self.guild_settings.get(ctx.guild.id) if guild_settings is None or not guild_settings.enabled: @@ -719,16 +718,12 @@ async def rank(self, ctx: DozerContext, *, member: discord.Member = None): else: rank = count img = self.make_new_rank_card(member, True, level, total_xp, level_floor, rank, count, level_xp) - # embed.description = (f"Level {level}, {total_xp - level_floor}/{level_xp} XP to level up ({total_xp} total)\n" - # f"#{rank} of {count} in this server") arr = BytesIO() img.save(arr, format='PNG') arr.seek(0) file = discord.File(fp=arr, filename=f'{member}.png') await ctx.send(file=file) - # embed.set_author(name=member.display_name, icon_url=member.display_avatar.replace(format='png', size=64)) - # await ctx.send(embed=embed) rank.example_usage = """ `{prefix}rank`: show your ranking