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

113 lines
3.8 KiB
Python

import discord
from discord.ext import commands
from jarvis.db.types import Setting
from jarvis.utils import build_embed
from jarvis.utils.field import Field
class ModlogMessageCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.Cog.listener()
async def on_message_edit(
self, before: discord.Message, after: discord.Message
):
if not before.author.bot:
modlog = Setting.get(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 = [
Field(
"Original Message",
before.content if before.content else "N/A",
False,
),
Field(
"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_at,
url=after.jump_url,
)
embed.set_author(
name=before.author.name,
icon_url=before.author.avatar_url,
url=after.jump_url,
)
embed.set_footer(
text=f"{before.author.name}#{before.author.discriminator}"
+ f" | {before.author.id}"
)
await channel.send(embed=embed)
@commands.Cog.listener()
async def on_message_delete(self, message: discord.Message):
modlog = Setting.get(guild=message.guild.id, setting="modlog")
if modlog:
fields = [
Field("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(
Field(
name="Attachments",
value=value,
inline=False,
)
)
if message.stickers:
value = "\n".join(
[f"[{x.name}]({x.image_url})" for x in message.stickers]
)
fields.append(
Field(
name="Stickers",
value=value,
inline=False,
)
)
if message.embeds:
value = str(len(message.embeds)) + " embeds"
fields.append(
Field(
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.name,
icon_url=message.author.avatar_url,
url=message.jump_url,
)
embed.set_footer(
text=f"{message.author.name}#{message.author.discriminator}"
+ f" | {message.author.id}"
)
await channel.send(embed=embed)