refactor(welcome): Streamline WelcomeMessageView and GoodbyeMessageView

Consolidate multiple `ui.TextDisplay` items into single text blocks for `WelcomeMessageView` and `GoodbyeMessageView`. This improves readability and simplifies the UI structure.
This commit is contained in:
Slipstreamm 2025-06-14 14:28:02 -06:00
parent a2eb6f33f1
commit 833f898b82

View File

@ -7,41 +7,19 @@ import os
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
from typing import Literal, Optional 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__)))) sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
import settings_manager import settings_manager
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
# --- Message Component Views ---
class WelcomeMessageView(ui.LayoutView): 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): def __init__(self, member: discord.Member, message: str, member_count: int):
super().__init__(timeout=None) 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() accent_color = member.color if member.color != discord.Color.default() else discord.Color.green()
container = ui.Container(accent_colour=accent_color) 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 account_age = datetime.now(timezone.utc) - member.created_at
if account_age.days >= 365: if account_age.days >= 365:
years = account_age.days // 365 years = account_age.days // 365
@ -51,37 +29,39 @@ class WelcomeMessageView(ui.LayoutView):
months = account_age.days // 30 months = account_age.days // 30
age_str = f"{months} month{'s' if months != 1 else ''} ago" age_str = f"{months} month{'s' if months != 1 else ''} ago"
else: 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 = ( header_section = ui.Section(
f"**Member:** {member.display_name}\n" accessory=ui.Thumbnail(
f"**Account Created:** {member.created_at.strftime('%B %d, %Y')}\n" media=member.display_avatar.url,
f"**Account Age:** {age_str}" 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 text_block = "\n".join([
header_section.add_item(ui.TextDisplay("💬 Feel free to introduce yourself and have fun!")) "🎉 **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) container.add_item(header_section)
self.add_item(container) self.add_item(container)
class GoodbyeMessageView(ui.LayoutView): 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"): def __init__(self, member: discord.Member, message: str, member_count: int, reason: str = "left"):
super().__init__(timeout=None) super().__init__(timeout=None)
# Use darker colors for goodbye messages
if reason == "banned": if reason == "banned":
accent_color = discord.Color.red() accent_color = discord.Color.red()
emoji = "🔨" emoji = "🔨"
@ -97,7 +77,6 @@ class GoodbyeMessageView(ui.LayoutView):
container = ui.Container(accent_colour=accent_color) container = ui.Container(accent_colour=accent_color)
# Header section with avatar
header_section = ui.Section( header_section = ui.Section(
accessory=ui.Thumbnail( accessory=ui.Thumbnail(
media=member.display_avatar.url, media=member.display_avatar.url,
@ -105,16 +84,14 @@ class GoodbyeMessageView(ui.LayoutView):
) )
) )
header_section.add_item(ui.TextDisplay(f"{emoji} **{title}** {emoji}")) lines = [
header_section.add_item(ui.TextDisplay(message)) f"{emoji} **{title}** {emoji}",
message,
# Add member info to the header section "",
member_info_parts = [
f"**Member:** {member.display_name}", f"**Member:** {member.display_name}",
f"**Username:** {member.name}" f"**Username:** {member.name}"
] ]
# Show join date if available
if hasattr(member, 'joined_at') and member.joined_at: if hasattr(member, 'joined_at') and member.joined_at:
join_date = member.joined_at.strftime('%B %d, %Y') join_date = member.joined_at.strftime('%B %d, %Y')
time_in_server = datetime.now(timezone.utc) - member.joined_at time_in_server = datetime.now(timezone.utc) - member.joined_at
@ -129,18 +106,18 @@ class GoodbyeMessageView(ui.LayoutView):
else: else:
duration_str = f"{time_in_server.days} day{'s' if time_in_server.days != 1 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}") lines += [
member_info_parts.append(f"**Time in Server:** {duration_str}") f"**Joined:** {join_date}",
f"**Time in Server:** {duration_str}"
]
header_section.add_item(ui.TextDisplay("\n".join(member_info_parts))) lines += [
"",
# Add server stats to the header section "📊 **Server Statistics**",
server_stats = (
f"📊 **Server Statistics**\n"
f"**Current Members:** {member_count:,}" 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) container.add_item(header_section)
self.add_item(container) self.add_item(container)