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:
parent
a2eb6f33f1
commit
833f898b82
@ -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)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user