diff --git a/cogs/welcome_cog.py b/cogs/welcome_cog.py index 46b0e5f..cb3b997 100644 --- a/cogs/welcome_cog.py +++ b/cogs/welcome_cog.py @@ -7,41 +7,19 @@ import os from datetime import datetime, timedelta, timezone from typing import Literal, Optional -# Add the parent directory to sys.path to ensure settings_manager is accessible sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) import settings_manager log = logging.getLogger(__name__) -# --- Message Component Views --- - - class WelcomeMessageView(ui.LayoutView): - """An enhanced view for welcome messages with member count and improved styling.""" - def __init__(self, member: discord.Member, message: str, member_count: int): super().__init__(timeout=None) - # Use member's color or a nice default accent_color = member.color if member.color != discord.Color.default() else discord.Color.green() - container = ui.Container(accent_colour=accent_color) - # Add a welcome banner/header with avatar - header_section = ui.Section( - accessory=ui.Thumbnail( - media=member.display_avatar.url, - description="New Member Avatar", - ) - ) - - # Welcome title with emoji - header_section.add_item(ui.TextDisplay("🎉 **Welcome to the Server!** 🎉")) - header_section.add_item(ui.TextDisplay(message)) - - # Add member info to the header section - # Calculate account age account_age = datetime.now(timezone.utc) - member.created_at if account_age.days >= 365: years = account_age.days // 365 @@ -51,37 +29,39 @@ class WelcomeMessageView(ui.LayoutView): months = account_age.days // 30 age_str = f"{months} month{'s' if months != 1 else ''} ago" else: - age_str = f"{account_age.days} day{'s' if account_age.days != 1 else ''} ago" + age_str = f"{account_age.days} days ago" - member_info = ( - f"**Member:** {member.display_name}\n" - f"**Account Created:** {member.created_at.strftime('%B %d, %Y')}\n" - f"**Account Age:** {age_str}" + header_section = ui.Section( + accessory=ui.Thumbnail( + media=member.display_avatar.url, + description="New Member Avatar", + ) ) - header_section.add_item(ui.TextDisplay(member_info)) - # Add server stats to the header section - server_stats = ( - f"📊 **Server Statistics**\n" - f"**Total Members:** {member_count:,}\n" - f"**You are member #{member_count:,}**" - ) - header_section.add_item(ui.TextDisplay(server_stats)) - - # Add welcome footer - header_section.add_item(ui.TextDisplay("💬 Feel free to introduce yourself and have fun!")) - + text_block = "\n".join([ + "🎉 **Welcome to the Server!** 🎉", + message, + "", + f"**Member:** {member.display_name}", + f"**Account Created:** {member.created_at.strftime('%B %d, %Y')}", + f"**Account Age:** {age_str}", + "", + "📊 **Server Statistics**", + f"**Total Members:** {member_count:,}", + f"**You are member #{member_count:,}**", + "", + "💬 Feel free to introduce yourself and have fun!" + ]) + + header_section.add_item(ui.TextDisplay(text_block)) container.add_item(header_section) self.add_item(container) class GoodbyeMessageView(ui.LayoutView): - """An enhanced view for goodbye messages with member count and improved styling.""" - def __init__(self, member: discord.Member, message: str, member_count: int, reason: str = "left"): super().__init__(timeout=None) - # Use darker colors for goodbye messages if reason == "banned": accent_color = discord.Color.red() emoji = "🔨" @@ -94,31 +74,28 @@ class GoodbyeMessageView(ui.LayoutView): accent_color = discord.Color.dark_grey() emoji = "👋" title = "Member Left" - + container = ui.Container(accent_colour=accent_color) - # Header section with avatar header_section = ui.Section( accessory=ui.Thumbnail( media=member.display_avatar.url, description="Former Member Avatar", ) ) - - header_section.add_item(ui.TextDisplay(f"{emoji} **{title}** {emoji}")) - header_section.add_item(ui.TextDisplay(message)) - - # Add member info to the header section - member_info_parts = [ + + lines = [ + f"{emoji} **{title}** {emoji}", + message, + "", f"**Member:** {member.display_name}", f"**Username:** {member.name}" ] - - # Show join date if available + if hasattr(member, 'joined_at') and member.joined_at: join_date = member.joined_at.strftime('%B %d, %Y') time_in_server = datetime.now(timezone.utc) - member.joined_at - + if time_in_server.days >= 365: years = time_in_server.days // 365 months = (time_in_server.days % 365) // 30 @@ -128,19 +105,19 @@ class GoodbyeMessageView(ui.LayoutView): duration_str = f"{months} month{'s' if months != 1 else ''}" else: duration_str = f"{time_in_server.days} day{'s' if time_in_server.days != 1 else ''}" - - member_info_parts.append(f"**Joined:** {join_date}") - member_info_parts.append(f"**Time in Server:** {duration_str}") - - header_section.add_item(ui.TextDisplay("\n".join(member_info_parts))) - - # Add server stats to the header section - server_stats = ( - f"📊 **Server Statistics**\n" + + lines += [ + f"**Joined:** {join_date}", + f"**Time in Server:** {duration_str}" + ] + + lines += [ + "", + "📊 **Server Statistics**", f"**Current Members:** {member_count:,}" - ) - header_section.add_item(ui.TextDisplay(server_stats)) - + ] + + header_section.add_item(ui.TextDisplay("\n".join(lines))) container.add_item(header_section) self.add_item(container)