Hardline_98
Hardline_98

Reputation: 166

Deleting User Messages in Discord.py

Is there any way to delete a message sent by anyone other than the bot itself, the documentation seems to indicate that it is possible

Your own messages could be deleted without any proper permissions. However to delete other people’s messages, you need the proper permissions to do so.

But I can't find a way to target the message to do so in an on_message event trigger, am I missing something or is it just not possible?

Upvotes: 13

Views: 124478

Answers (5)

ocelot
ocelot

Reputation: 1107

Yup, it should be possible.

You need the bot/user account to have the Manage Messages permission.

@client.event
async def on_message(message):
    await message.delete()

So, the event would occur something like

User sends message
Bot detects that the user has sent a message
Bot deletes the message that the user sent

Hopefully from this you should be able to see how user messages are deleted, just ensure that the bot/user account as the Manage Messages permission.

Upvotes: 25

Adrón
Adrón

Reputation: 1

I figure out a code to delete discord invitations

@client.event
async def on_message(message):
    msg_cnt = message.content.lower()
    if "discord.gg" in msg_cnt:
        await message.delete()

So this does that every time a user send something that contains "discord.gg" it deletes it

You can change "discord.gg" whatever you want excepts "https", that somehow has given me problems

Upvotes: 0

Heewoon Kim
Heewoon Kim

Reputation: 21

This is the code you need:

@client.command()
async def delete():
    message = ctx.message.id
    await message.delete()

Upvotes: 2

Tarek Lein
Tarek Lein

Reputation: 11

if you're trying to delete the last sent message, e.g if a user is calling a command and you want to remove their message and then send the command. Use this "await ctx.message.delete()" at the top of your command, it will find the last sent message and delete it.

Upvotes: 1

Deepak Raj
Deepak Raj

Reputation: 501

you can use message.delete() to delete user message.

it's a code if the user sends some curse word to the server so the bot will clean(delete) the message.

@bot.event
async def on_message(message):
    """ some on_message command """
    if message.author.id == bot.user.id:
        return
    msg_content = message.content.lower()

    curseWord = ['curse1', 'curse2']
    
    # delete curse word if match with the list
    if any(word in msg_content for word in curseWord):
        await message.delete()

if you are using COG:

@commands.Cog.listener()
async def on_message(message):
    # rest same as above 

Upvotes: 2

Related Questions