From d5e3a009967ca5b3338ac432012630c442dca0d1 Mon Sep 17 00:00:00 2001 From: Valerie Date: Sat, 24 May 2025 07:15:11 -0400 Subject: [PATCH] Refactor profile stats layer for enhanced visual presentation. Update stats area dimensions, improve glass effect opacity and blur, and increase font sizes for better readability. Adjust layout for stats icons and add XP text below the progress bar for clearer user feedback. --- levelup/generator/styles/default.py | 71 +++++++++++++++++++---------- silentmode/__init__.py | 34 -------------- silentmode/info.json | 20 -------- 3 files changed, 46 insertions(+), 79 deletions(-) delete mode 100644 silentmode/__init__.py delete mode 100644 silentmode/info.json diff --git a/levelup/generator/styles/default.py b/levelup/generator/styles/default.py index 0305ccd..627bc37 100644 --- a/levelup/generator/styles/default.py +++ b/levelup/generator/styles/default.py @@ -239,101 +239,122 @@ def generate_default_profile( # Create the stats layer with glass effect stats_layer = Image.new("RGBA", desired_card_size, (0, 0, 0, 0)) + + # Define the stats area to be larger and more prominent stats_area = ( - stats_layer.width // 4, # x1 - stats_layer.height // 3, # y1 - stats_layer.width - (stats_layer.width // 4), # x2 - stats_layer.height - (stats_layer.height // 4), # y2 + 450, # x1 - Start from the middle + 50, # y1 - Start higher up + 950, # x2 - Extend further right + 400 # y2 - Extend lower down ) # Create glass effect for stats area stats_bg = card.crop(stats_area) - glass_bg = imgtools.create_glass_effect(stats_bg, opacity=0.2, blur_radius=15) + glass_bg = imgtools.create_glass_effect(stats_bg, opacity=0.3, blur_radius=20) stats_layer.paste(glass_bg, stats_area) # Add rounded corners to the glass effect - stats_mask = imgtools.get_rounded_corner_mask(glass_bg, radius=20) - stats_layer.putalpha(stats_mask) + stats_mask = imgtools.get_rounded_corner_mask(glass_bg, radius=30) + glass_bg.putalpha(stats_mask) + stats_layer.paste(glass_bg, stats_area, glass_bg) # Draw stats with improved styling draw = ImageDraw.Draw(stats_layer) - font_size = 24 + font_size = 32 # Increased font size font = ImageFont.truetype(str(font_path or imgtools.DEFAULT_FONT), font_size) # Add stats with icons and modern layout - icon_size = font_size + 4 - spacing = icon_size + 10 + icon_size = font_size + 8 # Slightly larger icons + spacing = icon_size + 15 # More spacing between items # Messages stat with icon + msg_y = stats_area[1] + 50 # Start lower down msg_icon = "💬" draw.text( - (stats_area[0] + 10, stats_area[1] + 10), + (stats_area[0] + 30, msg_y), msg_icon, font=font, fill=stat_color, ) draw.text( - (stats_area[0] + 10 + spacing, stats_area[1] + 10), + (stats_area[0] + 30 + spacing, msg_y), f"{humanize_number(messages)}", font=font, fill=stat_color, ) # Voice time stat with icon + voice_y = msg_y + spacing + 20 # Add extra padding between stats voice_icon = "🎤" draw.text( - (stats_area[0] + 10, stats_area[1] + 10 + spacing), + (stats_area[0] + 30, voice_y), voice_icon, font=font, fill=stat_color, ) draw.text( - (stats_area[0] + 10 + spacing, stats_area[1] + 10 + spacing), + (stats_area[0] + 30 + spacing, voice_y), imgtools.abbreviate_time(voicetime), font=font, fill=stat_color, ) # Stars stat with icon + star_y = voice_y + spacing + 20 # Add extra padding between stats star_icon = "⭐" draw.text( - (stats_area[0] + 10, stats_area[1] + 10 + spacing * 2), + (stats_area[0] + 30, star_y), star_icon, font=font, fill=stat_color, ) draw.text( - (stats_area[0] + 10 + spacing, stats_area[1] + 10 + spacing * 2), + (stats_area[0] + 30 + spacing, star_y), f"{humanize_number(stars)}", font=font, fill=stat_color, ) - # Add XP progress bar with glass effect + # Add XP progress bar with enhanced glass effect progress = (current_xp - previous_xp) / (next_xp - previous_xp) - bar_width = stats_area[2] - stats_area[0] - 20 - bar_height = 20 + bar_width = stats_area[2] - stats_area[0] - 60 # Slightly narrower for padding + bar_height = 30 # Taller bar progress_bar = imgtools.make_progress_bar( bar_width, bar_height, progress, color=level_bar_color, - background_color=(100, 100, 100, 128) + background_color=(100, 100, 100, 160) # More visible background ) - stats_layer.paste(progress_bar, (stats_area[0] + 10, stats_area[3] - 30), progress_bar) + progress_bar_y = stats_area[3] - 60 # Move up slightly + stats_layer.paste(progress_bar, (stats_area[0] + 30, progress_bar_y), progress_bar) - # Add level text with modern styling + # Add level text with enhanced modern styling level_text = f"LEVEL {level}" if prestige > 0: level_text = f"P{prestige} • {level_text}" - level_font = ImageFont.truetype(str(font_path or imgtools.DEFAULT_FONT), 32) + level_font = ImageFont.truetype(str(font_path or imgtools.DEFAULT_FONT), 48) # Larger font + level_y = stats_area[1] + 10 # Position at the top of stats area draw.text( - (stats_area[0] + 10, stats_area[1] - 40), + (stats_area[0] + 30, level_y), level_text, font=level_font, fill=user_color, - stroke_width=2, + stroke_width=3, # Thicker stroke + stroke_fill=(0, 0, 0) + ) + + # Add XP text below progress bar + xp_font = ImageFont.truetype(str(font_path or imgtools.DEFAULT_FONT), 24) + xp_text = f"{humanize_number(current_xp)} / {humanize_number(next_xp)} XP" + xp_y = progress_bar_y + bar_height + 5 + draw.text( + (stats_area[0] + 30, xp_y), + xp_text, + font=xp_font, + fill=stat_color, + stroke_width=1, stroke_fill=(0, 0, 0) ) diff --git a/silentmode/__init__.py b/silentmode/__init__.py deleted file mode 100644 index 4752a80..0000000 --- a/silentmode/__init__.py +++ /dev/null @@ -1,34 +0,0 @@ -from redbot.core import commands -from discord.ext.commands import Cog -from redbot.core.bot import Red -import discord -import functools - - -class SilentMode(commands.Cog): - """Makes the bot use @silent for every message it sends.""" - - def __init__(self, bot: Red): - self.bot = bot - self.original_send = discord.abc.Messageable.send - discord.abc.Messageable.send = functools.partialmethod(self._silent_send) - - def cog_unload(self): - """Restore the original send method when the cog is unloaded.""" - discord.abc.Messageable.send = self.original_send - - async def _silent_send(self, messageable, *args, **kwargs): - """Override the send method to add @silent to every message.""" - if args and isinstance(args[0], str): - args = ("@silent " + args[0],) + args[1:] - elif "content" in kwargs and kwargs["content"]: - kwargs["content"] = "@silent " + kwargs["content"] - elif not kwargs.get("content") and (kwargs.get("embed") or kwargs.get("file")): - kwargs["content"] = "@silent" - - return await self.original_send(messageable, *args, **kwargs) - - -async def setup(bot: Red): - """Add the cog to the bot.""" - await bot.add_cog(SilentMode(bot)) \ No newline at end of file diff --git a/silentmode/info.json b/silentmode/info.json deleted file mode 100644 index 59b2c63..0000000 --- a/silentmode/info.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "SilentMode", - "short": "Makes the bot use @silent for every message it sends", - "description": "A cog that automatically adds @silent to every message the bot sends, reducing notifications in servers.", - "end_user_data_statement": "This cog does not store any user data.", - "author": [ - "Valerie" - ], - "required_cogs": {}, - "requirements": [], - "tags": [ - "utility", - "silent", - "notifications" - ], - "min_bot_version": "3.5.0", - "hidden": false, - "disabled": false, - "type": "COG" -} \ No newline at end of file