jarvis-bot/jarvis/embeds/admin.py

207 lines
6.2 KiB
Python

"""JARVIS bot-specific embeds."""
from typing import Optional
from interactions.models.discord.embed import Embed, EmbedField
from interactions.models.discord.guild import Guild
from interactions.models.discord.user import Member, User
from jarvis.branding import get_command_color
from jarvis.utils import build_embed
def ban_embed(
user: User,
admin: User,
reason: str,
type: str,
guild: Guild,
duration: Optional[int] = None,
dm: bool = False,
) -> Embed:
"""
Generate a ban embed.
Args:
user: User to ban
admin: Admin to execute ban
reason: Reason for ban
type: Ban type
guild: Guild to ban from
duration: Optional temporary ban duration
dm: If the embed should be a user embed
"""
fields = [EmbedField(name="Reason", value=reason), EmbedField(name="Type", value=type)]
if duration:
fields.append(EmbedField(name="Duration", value=f"{duration} hours"))
fields.append(EmbedField(name="Admin", value=f"{admin.username}#{admin.discriminator} ({admin.mention})"))
if dm:
embed = build_embed(
title=f"You have been banned from {guild.name}",
description=None,
fields=fields,
color=get_command_color("ban"),
)
embed.set_thumbnail(url=guild.icon.url)
else:
embed = build_embed(
title="User Banned",
description=f"{user.mention} has been banned",
fields=fields,
color=get_command_color("ban"),
)
embed.set_thumbnail(url=user.display_avatar.url)
embed.set_author(name=user.display_name, icon_url=user.display_avatar.url)
embed.set_footer(text=f"{user.username}#{user.discriminator} | {user.id}")
return embed
def unban_embed(user: User, admin: User, reason: str) -> Embed:
"""
Generate an unban embed.
Args:
user: User to unban
admin: Admin to execute unban
reason: Reason for unban
"""
fields = (
EmbedField(name="Reason", value=reason),
EmbedField(name="Admin", value=f"{admin.username}#{admin.discriminator} ({admin.mention})"),
)
embed = build_embed(
title="User Unbanned",
description=f"{user.mention} was unbanned",
fields=fields,
color=get_command_color("unban"),
)
embed.set_thumbnail(url=user.display_avatar.url)
embed.set_author(name=user.display_name, icon_url=user.display_avatar.url)
embed.set_footer(text=f"{user.username}#{user.discriminator} | {user.id}")
return embed
def kick_embed(user: Member, admin: Member, reason: str, guild: Guild, dm: bool = False) -> Embed:
"""
Generate a kick embed.
Args:
user: User to kick
admin: Admin to execute kick
reason: Reason for kick
guild: Guild to kick from
dm: If the embed should be a user embed
"""
fields = [
EmbedField(name="Reason", value="A valid reason"),
EmbedField(
name="Admin",
value=f"{admin.username}#{admin.discriminator} ({admin.mention})",
),
]
if dm:
embed = build_embed(
title=f"You have been kicked from {guild.name}",
color=get_command_color("kick"),
fields=fields,
)
embed.set_thumbnail(url=guild.icon.url)
else:
embed = build_embed(
title="User Kicked",
description=f"{user.mention} has been kicked",
fields=fields,
color=get_command_color("kick"),
)
embed.set_author(name=user.display_name, icon_url=user.display_avatar.url)
embed.set_footer(text=f"{user.username}#{user.discriminator} | {user.id}")
return embed
def mute_embed(user: Member, admin: Member, reason: str, guild: Guild) -> Embed:
"""
Generate a mute embed.
Args:
user: User to mute
admin: Admin to execute mute
reason: Reason for mute
"""
until = int(user.communication_disabled_until.timestamp())
fields = (
EmbedField(name="Reason", value=reason),
EmbedField(name="Until", value=f"<t:{until}:F> (<t:{until}:R>)"),
EmbedField(
name="Admin",
value=f"{admin.username}#{admin.discriminator} ({admin.mention})",
),
)
embed = build_embed(
title="User Muted",
description=f"{user.mention} has been muted",
fields=fields,
color=get_command_color("mute"),
)
embed.set_thumbnail(url=user.display_avatar.url)
embed.set_author(name=user.display_name, icon_url=user.display_avatar.url)
embed.set_footer(text=f"{user.username}#{user.discriminator} | {user.id}")
return embed
def unmute_embed(user: Member, admin: Member, reason: str, guild: Guild) -> Embed:
"""
Generate an umute embed.
Args:
user: User to unmute
admin: Admin to execute unmute
reason: Reason for unmute
"""
fields = (
EmbedField(name="Reason", value=reason),
EmbedField(
name="Admin",
value=f"{admin.username}#{admin.discriminator} ({admin.mention})",
),
)
embed = build_embed(
title="User Unmuted",
description=f"{user.mention} has been unmuted",
fields=fields,
color=get_command_color("mute"),
)
embed.set_thumbnail(url=user.display_avatar.url)
embed.set_author(name=user.display_name, icon_url=user.display_avatar.url)
embed.set_footer(text=f"{user.username}#{user.discriminator} | {user.id}")
return embed
def warning_embed(user: Member, reason: str, admin: Member) -> Embed:
"""
Generate a warning embed.
Args:
user: User to warn
reason: Warning reason
admin: Admin who sent the warning
"""
fields = (
EmbedField(name="Reason", value=reason, inline=False),
EmbedField(name="Admin", value=f"{admin.username}#{admin.discriminator} ({admin.mention})"),
)
embed = build_embed(
title="Warning",
description=f"{user.mention} has been warned",
fields=fields,
color=get_command_color("warning"),
)
embed.set_author(name=user.display_name, icon_url=user.display_avatar.url)
embed.set_footer(text=f"{user.username}#{user.discriminator} | {user.id}")
return embed