jarvis-bot/jarvis/cogs/modlog/message.py

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)