The progress bar continues to grow and does not reset when the level increases

30 Views Asked by At

I wrote the level command for the bot in discord using the libraries: disnake and pillow. And I faced a problem.

    @commands.slash_command(name="level", description="Посмотреть свой уровень.")
    async def level(self, interaction, member: disnake.Member = None):
        if member is None:
            member = interaction.author
        await interaction.response.defer(ephemeral=False)
        self.c.execute("SELECT exp FROM exp WHERE user_id =?", (member.id,))
        result = self.c.fetchone()
        exp = result[0]
        self.c.execute("SELECT cash FROM exp WHERE user_id =?", (member.id,))
        result = self.c.fetchone()
        cash = result[0]
        img = Image.open(r'img/profile1.png')
        idraw = ImageDraw.Draw(img)
        member_name = self.truncate(member.display_name)
        idraw.text((133, 267), member_name, font=ImageFont.truetype(r'OpenSans.ttf', size=32))
        idraw.text((516, 309), str(exp // 200), font=ImageFont.truetype(r'OpenSans.ttf', size=65))
        idraw.text((516, 100), str(cash), font=ImageFont.truetype(r'OpenSans.ttf', size=65))
        experience_needed = int(200 - exp // 200)

        progress = exp / experience_needed
        progress_width = int(295.5 * progress)

        progress_height = 20
        progress_color = (55, 99, 255)
        progress_position = (404, 419)

        border_radius = 20

        if progress_position[0] + progress_width >= 695:
            progress_position = (404, 419)

        idraw.rounded_rectangle([(progress_position[0], progress_position[1]), (progress_position[0] + progress_width, progress_position[1] + progress_height)], fill=progress_color, radius=border_radius)
        # idraw.text((690, 114), "XP: " + str(self.database.execute("experience","users","id",member.id)) + " / " + str(experience_needed), font = ImageFont.truetype(r'Comfortaa.ttf', size = 26))
        # idraw.text((690, 309), "Баланс: " + str(self.database.execute("balance", "users", "id", member.id)), font=ImageFont.truetype(r'Comfortaa.ttf', size=28))
        url = str(member.avatar.url)[:-10]
        avatar = requests.get(url, stream=True)
        avatar = Image.open(io.BytesIO(avatar.content))
        mask = Image.new('L', avatar.size, 0)
        mask_draw = ImageDraw.Draw(mask)
        mask_draw.ellipse((0, 0, avatar.size[0], avatar.size[1]), fill=255)
        avatar = ImageOps.fit(avatar, mask.size, centering=(0.5, 0.5))
        avatar.putalpha(mask)
        avatar = avatar.convert('RGBA')
        avatar = avatar.resize((150, 150))
        img.paste(avatar, (111, 99), avatar)
        img.save(r'img/profilek.png')
        await interaction.edit_original_response(file=disnake.File(f"img/profilek.png"))

I've tried a lot of things, starting with replacing coordinates and ending with lines

if progress_position[0] + progress_width >= 695:
    progress_position = (404, 419)

I will be very grateful if you help me.Thanks in advance!

0

There are 0 best solutions below