Skip to content
Advertisement

discord.py :: How do I make on_message_delete ignore a certain user / role via an embed?

I have a log channel set so if a user deletes a message, it gets sent to the channel so my moderators and myself can see deleted messages.

@client.event
async def on_message_delete(message):
    if not message.author.bot:
        embed = Embed(title = "[❌] A message has been deleted by a user.",
                      description = f"{message.author.display_name} (`{message.author.id}`) has deleted a message in the {message.channel.mention} channel.",
                      color = message.author.color,
                      timestamp = datetime.utcnow())

        fields = [("Message:", message.content, False)]

        for name, value, inline in fields:
            embed.add_field(name=name, value=value, inline=inline)
            embed.set_thumbnail(url = message.author.avatar_url)
            embed.set_footer(text = "This message was deleted")
            
        channel = client.get_channel(828362680452644904)
        await channel.send(embed=embed)

I want to make it so this does not send an embed showcasing what my moderators or myself deleted to avoid clutter. Is there a way to do this?

Advertisement

Answer

You can just return if the message meets these conditions:

# get these values from your guild
MY_ID = 1234
MODERATOR_ROLE_ID = 56678

async def on_message_delete(message):
    if message.author.id == MY_ID:
        return
    author_role_ids = [role.id for role in message.author.roles]
    if MODERATOR_ROLE_ID in author_role_ids:
        return
    ...

User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement