Merge branch 'dev'
This commit is contained in:
commit
e297480104
9 changed files with 92 additions and 17 deletions
37
jarvis/branding.py
Normal file
37
jarvis/branding.py
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
"""JARVIS brandings."""
|
||||||
|
PRIMARY_COLOR = "#3498db"
|
||||||
|
HARD_ACTION = "#ff0000"
|
||||||
|
MODERATE_ACTION = "#ff9900"
|
||||||
|
SOFT_ACTION = "#ffff00"
|
||||||
|
GOOD_ACTION = "#00ff00"
|
||||||
|
|
||||||
|
COMMAND_TYPES = {
|
||||||
|
"HARD": ["ban", "lockdown"],
|
||||||
|
"MODERATE": ["kick", "mute", "lock"],
|
||||||
|
"SOFT": ["warning"],
|
||||||
|
"GOOD": ["unban", "unmute"],
|
||||||
|
}
|
||||||
|
|
||||||
|
CUSTOM_COMMANDS = {}
|
||||||
|
|
||||||
|
|
||||||
|
def get_command_color(command: str) -> str:
|
||||||
|
"""
|
||||||
|
Get a command's color.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
command: Command name
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Hex color string
|
||||||
|
"""
|
||||||
|
if command in COMMAND_TYPES["HARD"]:
|
||||||
|
return HARD_ACTION
|
||||||
|
elif command in COMMAND_TYPES["MODERATE"]:
|
||||||
|
return MODERATE_ACTION
|
||||||
|
elif command in COMMAND_TYPES["SOFT"]:
|
||||||
|
return SOFT_ACTION
|
||||||
|
elif command in COMMAND_TYPES["GOOD"]:
|
||||||
|
return GOOD_ACTION
|
||||||
|
else:
|
||||||
|
return CUSTOM_COMMANDS.get(command, PRIMARY_COLOR)
|
|
@ -336,7 +336,6 @@ class Jarvis(StatsClient):
|
||||||
title="User Verified",
|
title="User Verified",
|
||||||
description=f"{after.mention} was verified",
|
description=f"{after.mention} was verified",
|
||||||
fields=fields,
|
fields=fields,
|
||||||
color="#fc9e3f",
|
|
||||||
)
|
)
|
||||||
embed.set_author(name=after.display_name, icon_url=after.display_avatar.url)
|
embed.set_author(name=after.display_name, icon_url=after.display_avatar.url)
|
||||||
embed.set_footer(text=f"{after.username}#{after.discriminator} | {after.id}")
|
embed.set_footer(text=f"{after.username}#{after.discriminator} | {after.id}")
|
||||||
|
@ -368,7 +367,6 @@ class Jarvis(StatsClient):
|
||||||
title="User Roles Changed",
|
title="User Roles Changed",
|
||||||
description=f"{after.mention} had roles changed",
|
description=f"{after.mention} had roles changed",
|
||||||
fields=fields,
|
fields=fields,
|
||||||
color="#fc9e3f",
|
|
||||||
)
|
)
|
||||||
embed.set_author(name=after.display_name, icon_url=after.display_avatar.url)
|
embed.set_author(name=after.display_name, icon_url=after.display_avatar.url)
|
||||||
embed.set_footer(text=f"{after.username}#{after.discriminator} | {after.id}")
|
embed.set_footer(text=f"{after.username}#{after.discriminator} | {after.id}")
|
||||||
|
@ -511,7 +509,10 @@ class Jarvis(StatsClient):
|
||||||
)
|
)
|
||||||
tracker.inc()
|
tracker.inc()
|
||||||
embed = warning_embed(message.author, "Sent an invite link")
|
embed = warning_embed(message.author, "Sent an invite link")
|
||||||
await message.channel.send(embeds=embed)
|
try:
|
||||||
|
await message.channel.send(embeds=embed)
|
||||||
|
except Exception:
|
||||||
|
self.logger.warn("Failed to send warning embed")
|
||||||
|
|
||||||
async def massmention(self, message: Message) -> None:
|
async def massmention(self, message: Message) -> None:
|
||||||
"""Handle massmention events."""
|
"""Handle massmention events."""
|
||||||
|
@ -547,7 +548,10 @@ class Jarvis(StatsClient):
|
||||||
)
|
)
|
||||||
tracker.inc()
|
tracker.inc()
|
||||||
embed = warning_embed(message.author, "Mass Mention")
|
embed = warning_embed(message.author, "Mass Mention")
|
||||||
await message.channel.send(embeds=embed)
|
try:
|
||||||
|
await message.channel.send(embeds=embed)
|
||||||
|
except Exception:
|
||||||
|
self.logger.warn("Failed to send warning embed")
|
||||||
|
|
||||||
async def roleping(self, message: Message) -> None:
|
async def roleping(self, message: Message) -> None:
|
||||||
"""Handle roleping events."""
|
"""Handle roleping events."""
|
||||||
|
@ -612,7 +616,10 @@ class Jarvis(StatsClient):
|
||||||
)
|
)
|
||||||
tracker.inc()
|
tracker.inc()
|
||||||
embed = warning_embed(message.author, "Pinged a blocked role/user with a blocked role")
|
embed = warning_embed(message.author, "Pinged a blocked role/user with a blocked role")
|
||||||
await message.channel.send(embeds=embed)
|
try:
|
||||||
|
await message.channel.send(embeds=embed)
|
||||||
|
except Exception:
|
||||||
|
self.logger.warn("Failed to send warning embed")
|
||||||
|
|
||||||
async def phishing(self, message: Message) -> None:
|
async def phishing(self, message: Message) -> None:
|
||||||
"""Check if the message contains any known phishing domains."""
|
"""Check if the message contains any known phishing domains."""
|
||||||
|
@ -636,7 +643,10 @@ class Jarvis(StatsClient):
|
||||||
)
|
)
|
||||||
tracker.inc()
|
tracker.inc()
|
||||||
embed = warning_embed(message.author, "Phishing URL")
|
embed = warning_embed(message.author, "Phishing URL")
|
||||||
await message.channel.send(embeds=embed)
|
try:
|
||||||
|
await message.channel.send(embeds=embed)
|
||||||
|
except Exception:
|
||||||
|
self.logger.warn("Failed to send warning embed")
|
||||||
try:
|
try:
|
||||||
await message.delete()
|
await message.delete()
|
||||||
except Exception:
|
except Exception:
|
||||||
|
@ -679,7 +689,10 @@ class Jarvis(StatsClient):
|
||||||
tracker.inc()
|
tracker.inc()
|
||||||
reasons = ", ".join(item["not_safe_reasons"])
|
reasons = ", ".join(item["not_safe_reasons"])
|
||||||
embed = warning_embed(message.author, reasons)
|
embed = warning_embed(message.author, reasons)
|
||||||
await message.channel.send(embeds=embed)
|
try:
|
||||||
|
await message.channel.send(embeds=embed)
|
||||||
|
except Exception:
|
||||||
|
self.logger.warn("Failed to send warning embed")
|
||||||
try:
|
try:
|
||||||
await message.delete()
|
await message.delete()
|
||||||
except Exception:
|
except Exception:
|
||||||
|
|
|
@ -17,6 +17,7 @@ from naff.models.naff.application_commands import (
|
||||||
)
|
)
|
||||||
from naff.models.naff.command import check
|
from naff.models.naff.command import check
|
||||||
|
|
||||||
|
from jarvis.branding import get_command_color
|
||||||
from jarvis.utils import build_embed
|
from jarvis.utils import build_embed
|
||||||
from jarvis.utils.cogs import ModcaseCog
|
from jarvis.utils.cogs import ModcaseCog
|
||||||
from jarvis.utils.permissions import admin_or_permissions
|
from jarvis.utils.permissions import admin_or_permissions
|
||||||
|
@ -54,6 +55,7 @@ class BanCog(ModcaseCog):
|
||||||
title="User Banned",
|
title="User Banned",
|
||||||
description=f"Reason: {reason}",
|
description=f"Reason: {reason}",
|
||||||
fields=fields,
|
fields=fields,
|
||||||
|
color=get_command_color("ban"),
|
||||||
)
|
)
|
||||||
|
|
||||||
embed.set_author(
|
embed.set_author(
|
||||||
|
@ -82,6 +84,7 @@ class BanCog(ModcaseCog):
|
||||||
title="User Unbanned",
|
title="User Unbanned",
|
||||||
description=f"<@{user.id}> was unbanned",
|
description=f"<@{user.id}> was unbanned",
|
||||||
fields=[EmbedField(name="Reason", value=reason)],
|
fields=[EmbedField(name="Reason", value=reason)],
|
||||||
|
color=get_command_color("unban"),
|
||||||
)
|
)
|
||||||
embed.set_author(
|
embed.set_author(
|
||||||
name=user.username,
|
name=user.username,
|
||||||
|
@ -158,6 +161,7 @@ class BanCog(ModcaseCog):
|
||||||
title=f"You have been banned from {ctx.guild.name}",
|
title=f"You have been banned from {ctx.guild.name}",
|
||||||
description=f"Reason: {reason}",
|
description=f"Reason: {reason}",
|
||||||
fields=fields,
|
fields=fields,
|
||||||
|
color=get_command_color("ban"),
|
||||||
)
|
)
|
||||||
|
|
||||||
user_embed.set_author(
|
user_embed.set_author(
|
||||||
|
@ -366,6 +370,7 @@ class BanCog(ModcaseCog):
|
||||||
title=title,
|
title=title,
|
||||||
description=f"No {'in' if not active else ''}active bans",
|
description=f"No {'in' if not active else ''}active bans",
|
||||||
fields=[],
|
fields=[],
|
||||||
|
color=get_command_color("bans_list"),
|
||||||
)
|
)
|
||||||
embed.set_thumbnail(url=ctx.guild.icon.url)
|
embed.set_thumbnail(url=ctx.guild.icon.url)
|
||||||
pages.append(embed)
|
pages.append(embed)
|
||||||
|
|
|
@ -10,6 +10,7 @@ from naff.models.naff.application_commands import (
|
||||||
)
|
)
|
||||||
from naff.models.naff.command import check
|
from naff.models.naff.command import check
|
||||||
|
|
||||||
|
from jarvis.branding import get_command_color
|
||||||
from jarvis.utils import build_embed
|
from jarvis.utils import build_embed
|
||||||
from jarvis.utils.cogs import ModcaseCog
|
from jarvis.utils.cogs import ModcaseCog
|
||||||
from jarvis.utils.permissions import admin_or_permissions
|
from jarvis.utils.permissions import admin_or_permissions
|
||||||
|
@ -43,6 +44,7 @@ class KickCog(ModcaseCog):
|
||||||
title=f"You have been kicked from {guild_name}",
|
title=f"You have been kicked from {guild_name}",
|
||||||
description=f"Reason: {reason}",
|
description=f"Reason: {reason}",
|
||||||
fields=[],
|
fields=[],
|
||||||
|
color=get_command_color("kick"),
|
||||||
)
|
)
|
||||||
|
|
||||||
embed.set_author(
|
embed.set_author(
|
||||||
|
|
|
@ -20,6 +20,7 @@ from naff.models.naff.application_commands import (
|
||||||
)
|
)
|
||||||
from naff.models.naff.command import check
|
from naff.models.naff.command import check
|
||||||
|
|
||||||
|
from jarvis.branding import get_command_color
|
||||||
from jarvis.utils import build_embed
|
from jarvis.utils import build_embed
|
||||||
from jarvis.utils.cogs import ModcaseCog
|
from jarvis.utils.cogs import ModcaseCog
|
||||||
from jarvis.utils.permissions import admin_or_permissions
|
from jarvis.utils.permissions import admin_or_permissions
|
||||||
|
@ -50,6 +51,7 @@ class MuteCog(ModcaseCog):
|
||||||
EmbedField(name="Reason", value=reason),
|
EmbedField(name="Reason", value=reason),
|
||||||
EmbedField(name="Until", value=f"<t:{ts}:F> <t:{ts}:R>"),
|
EmbedField(name="Until", value=f"<t:{ts}:F> <t:{ts}:R>"),
|
||||||
],
|
],
|
||||||
|
color=get_command_color("mute"),
|
||||||
)
|
)
|
||||||
embed.set_author(name=user.display_name, icon_url=user.display_avatar.url)
|
embed.set_author(name=user.display_name, icon_url=user.display_avatar.url)
|
||||||
embed.set_thumbnail(url=user.display_avatar.url)
|
embed.set_thumbnail(url=user.display_avatar.url)
|
||||||
|
@ -211,6 +213,7 @@ class MuteCog(ModcaseCog):
|
||||||
title="User Unmuted",
|
title="User Unmuted",
|
||||||
description=f"{user.mention} has been unmuted",
|
description=f"{user.mention} has been unmuted",
|
||||||
fields=[],
|
fields=[],
|
||||||
|
color=get_command_color("unmute"),
|
||||||
)
|
)
|
||||||
embed.set_author(name=user.display_name, icon_url=user.display_avatar.url)
|
embed.set_author(name=user.display_name, icon_url=user.display_avatar.url)
|
||||||
embed.set_thumbnail(url=user.display_avatar.url)
|
embed.set_thumbnail(url=user.display_avatar.url)
|
||||||
|
|
|
@ -312,6 +312,13 @@ class TagCog(Extension):
|
||||||
|
|
||||||
await ctx.send(embeds=embed)
|
await ctx.send(embeds=embed)
|
||||||
|
|
||||||
|
@tag.subcommand(sub_cmd_name="list", sub_cmd_description="List tag names")
|
||||||
|
async def _list(self, ctx: InteractionContext) -> None:
|
||||||
|
tags = await Tag.find(q(guild=ctx.guild.id)).to_list(None)
|
||||||
|
names = "\n".join(f"`{t.name}`" for t in tags)
|
||||||
|
embed = build_embed(title="All Tags", description=names, fields=[])
|
||||||
|
await ctx.send(embeds=embed)
|
||||||
|
|
||||||
@_get.autocomplete("name")
|
@_get.autocomplete("name")
|
||||||
@_edit.autocomplete("name")
|
@_edit.autocomplete("name")
|
||||||
@_delete.autocomplete("name")
|
@_delete.autocomplete("name")
|
||||||
|
|
|
@ -8,13 +8,6 @@ from io import BytesIO
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
from dateparser import parse
|
from dateparser import parse
|
||||||
from PIL import Image
|
|
||||||
from tzlocal import get_localzone
|
|
||||||
|
|
||||||
from jarvis import const as jconst
|
|
||||||
from jarvis.data import pigpen
|
|
||||||
from jarvis.data.robotcamo import emotes, hk, names
|
|
||||||
from jarvis.utils import build_embed, get_repo_hash
|
|
||||||
from naff import Client, Extension, InteractionContext, const
|
from naff import Client, Extension, InteractionContext, const
|
||||||
from naff.models.discord.channel import GuildCategory, GuildText, GuildVoice
|
from naff.models.discord.channel import GuildCategory, GuildText, GuildVoice
|
||||||
from naff.models.discord.embed import EmbedField
|
from naff.models.discord.embed import EmbedField
|
||||||
|
@ -32,6 +25,13 @@ from naff.models.naff.application_commands import (
|
||||||
)
|
)
|
||||||
from naff.models.naff.command import cooldown
|
from naff.models.naff.command import cooldown
|
||||||
from naff.models.naff.cooldowns import Buckets
|
from naff.models.naff.cooldowns import Buckets
|
||||||
|
from PIL import Image
|
||||||
|
from tzlocal import get_localzone
|
||||||
|
|
||||||
|
from jarvis import const as jconst
|
||||||
|
from jarvis.data import pigpen
|
||||||
|
from jarvis.data.robotcamo import emotes, hk, names
|
||||||
|
from jarvis.utils import build_embed, get_repo_hash
|
||||||
|
|
||||||
JARVIS_LOGO = Image.open("jarvis_small.png").convert("RGBA")
|
JARVIS_LOGO = Image.open("jarvis_small.png").convert("RGBA")
|
||||||
|
|
||||||
|
@ -187,6 +187,8 @@ class UtilCog(Extension):
|
||||||
if not await ctx.guild.fetch_member(user.id):
|
if not await ctx.guild.fetch_member(user.id):
|
||||||
await ctx.send("That user isn't in this guild.", ephemeral=True)
|
await ctx.send("That user isn't in this guild.", ephemeral=True)
|
||||||
return
|
return
|
||||||
|
muted = user.communication_disabled_until is not None
|
||||||
|
|
||||||
user_roles = user.roles
|
user_roles = user.roles
|
||||||
if user_roles:
|
if user_roles:
|
||||||
user_roles = sorted(user.roles, key=lambda x: -x.position)
|
user_roles = sorted(user.roles, key=lambda x: -x.position)
|
||||||
|
@ -215,7 +217,8 @@ class UtilCog(Extension):
|
||||||
)
|
)
|
||||||
|
|
||||||
embed.set_author(
|
embed.set_author(
|
||||||
name=f"{user.display_name}#{user.discriminator}", icon_url=user.display_avatar.url
|
name=f"{'🔇 ' if muted else ''}{user.display_name}#{user.discriminator}",
|
||||||
|
icon_url=user.display_avatar.url,
|
||||||
)
|
)
|
||||||
embed.set_thumbnail(url=user.display_avatar.url)
|
embed.set_thumbnail(url=user.display_avatar.url)
|
||||||
embed.set_footer(text=f"ID: {user.id}")
|
embed.set_footer(text=f"ID: {user.id}")
|
||||||
|
|
|
@ -7,6 +7,7 @@ from naff.models.discord.embed import Embed, EmbedField
|
||||||
from naff.models.discord.guild import AuditLogEntry
|
from naff.models.discord.guild import AuditLogEntry
|
||||||
from naff.models.discord.user import Member
|
from naff.models.discord.user import Member
|
||||||
|
|
||||||
|
from jarvis.branding import PRIMARY_COLOR
|
||||||
from jarvis.config import JarvisConfig
|
from jarvis.config import JarvisConfig
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,7 +15,7 @@ def build_embed(
|
||||||
title: str,
|
title: str,
|
||||||
description: str,
|
description: str,
|
||||||
fields: list,
|
fields: list,
|
||||||
color: str = "#FF0000",
|
color: str = PRIMARY_COLOR,
|
||||||
timestamp: datetime = None,
|
timestamp: datetime = None,
|
||||||
**kwargs: dict,
|
**kwargs: dict,
|
||||||
) -> Embed:
|
) -> Embed:
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
from naff.models.discord.embed import Embed, EmbedField
|
from naff.models.discord.embed import Embed, EmbedField
|
||||||
from naff.models.discord.user import Member
|
from naff.models.discord.user import Member
|
||||||
|
|
||||||
|
from jarvis.branding import get_command_color
|
||||||
from jarvis.utils import build_embed
|
from jarvis.utils import build_embed
|
||||||
|
|
||||||
|
|
||||||
|
@ -15,7 +16,10 @@ def warning_embed(user: Member, reason: str) -> Embed:
|
||||||
"""
|
"""
|
||||||
fields = (EmbedField(name="Reason", value=reason, inline=False),)
|
fields = (EmbedField(name="Reason", value=reason, inline=False),)
|
||||||
embed = build_embed(
|
embed = build_embed(
|
||||||
title="Warning", description=f"{user.mention} has been warned", fields=fields
|
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_author(name=user.display_name, icon_url=user.display_avatar.url)
|
||||||
embed.set_footer(text=f"{user.username}#{user.discriminator} | {user.id}")
|
embed.set_footer(text=f"{user.username}#{user.discriminator} | {user.id}")
|
||||||
|
|
Loading…
Add table
Reference in a new issue