112 lines
4.1 KiB
Python
112 lines
4.1 KiB
Python
"""J.A.R.V.I.S. ModlogMessageCog."""
|
|
from dis_snek import Scale, Snake, listen
|
|
from dis_snek.api.events.discord import MessageDelete, MessageUpdate
|
|
from dis_snek.models.discord.embed import EmbedField
|
|
from jarvis_core.db import q
|
|
from jarvis_core.db.models import Setting
|
|
|
|
from jarvis.utils import build_embed
|
|
|
|
|
|
class ModlogMessageCog(Scale):
|
|
"""J.A.R.V.I.S. ModlogMessageCog."""
|
|
|
|
def __init__(self, bot: Snake):
|
|
self.bot = bot
|
|
|
|
@listen()
|
|
async def on_message_edit(self, event: MessageUpdate) -> None:
|
|
"""Process on_message_edit events."""
|
|
before = event.before
|
|
after = event.after
|
|
if not before.author.bot:
|
|
modlog = await Setting.find_one(q(guild=after.guild.id, setting="modlog"))
|
|
if modlog:
|
|
if before.content == after.content or before.content is None:
|
|
return
|
|
channel = before.guild.get_channel(modlog.value)
|
|
fields = [
|
|
EmbedField(
|
|
"Original Message",
|
|
before.content if before.content else "N/A",
|
|
False,
|
|
),
|
|
EmbedField(
|
|
"New Message",
|
|
after.content if after.content else "N/A",
|
|
False,
|
|
),
|
|
]
|
|
embed = build_embed(
|
|
title="Message Edited",
|
|
description=f"{before.author.mention} edited a message",
|
|
fields=fields,
|
|
color="#fc9e3f",
|
|
timestamp=after.edited_timestamp,
|
|
url=after.jump_url,
|
|
)
|
|
embed.set_author(
|
|
name=before.author.username,
|
|
icon_url=before.author.display_avatar.url,
|
|
url=after.jump_url,
|
|
)
|
|
embed.set_footer(
|
|
text=f"{before.author.username}#{before.author.discriminator} | {before.author.id}"
|
|
)
|
|
await channel.send(embed=embed)
|
|
|
|
@listen()
|
|
async def on_message_delete(self, event: MessageDelete) -> None:
|
|
"""Process on_message_delete events."""
|
|
message = event.message
|
|
modlog = await Setting.find_one(q(guild=message.guild.id, setting="modlog"))
|
|
if modlog:
|
|
fields = [EmbedField("Original Message", message.content or "N/A", False)]
|
|
|
|
if message.attachments:
|
|
value = "\n".join([f"[{x.filename}]({x.url})" for x in message.attachments])
|
|
fields.append(
|
|
EmbedField(
|
|
name="Attachments",
|
|
value=value,
|
|
inline=False,
|
|
)
|
|
)
|
|
|
|
if message.sticker_items:
|
|
value = "\n".join([f"Sticker: {x.name}" for x in message.sticker_items])
|
|
fields.append(
|
|
EmbedField(
|
|
name="Stickers",
|
|
value=value,
|
|
inline=False,
|
|
)
|
|
)
|
|
|
|
if message.embeds:
|
|
value = str(len(message.embeds)) + " embeds"
|
|
fields.append(
|
|
EmbedField(
|
|
name="Embeds",
|
|
value=value,
|
|
inline=False,
|
|
)
|
|
)
|
|
|
|
channel = message.guild.get_channel(modlog.value)
|
|
embed = build_embed(
|
|
title="Message Deleted",
|
|
description=f"{message.author.mention}'s message was deleted",
|
|
fields=fields,
|
|
color="#fc9e3f",
|
|
)
|
|
|
|
embed.set_author(
|
|
name=message.author.username,
|
|
icon_url=message.author.display_avatar.url,
|
|
url=message.jump_url,
|
|
)
|
|
embed.set_footer(
|
|
text=f"{message.author.username}#{message.author.discriminator} | {message.author.id}"
|
|
)
|
|
await channel.send(embed=embed)
|