Deleting a bot's message in discord.py

19,480

Solution 1

while not client.is_closed:
    channel = client.get_channel('397920718031159318')
    messages = ["A random cat has appeared", "oh look its a cate"]
    message = await client.send_message(channel, random.choice(messages))
    await asyncio.sleep(3) 
    await client.delete_message(message)
    await asyncio.sleep(4)

You have to capture the message object that send_message produces, and then send that object to delete_message

Solution 2

Now (discord.py v1.3.0), just:

import discord

from discord.ext.commands import Bot


bot = Bot()

@bot.command()
async def ping(ctx):
    await ctx.send('pong!', delete_after=5)

bot.run('YOUR_DISCORD_TOKEN')

Solution 3

This is for the rewrite version, but still works:

channel = client.get_channel('397920718031159318')
messages = ["A random cat has appeared", "oh look its a cate"]
await(await client.send_message(channel, random.choice(messages))).delete(delay=3)
await asyncio.sleep(4)

Solution 4

for Discord.py versions 1.0.0 and up it is now: i understand you did not ask how to delete a sender's message but its here anyway...

import asyncio
channel = 397920718031159318 #get the channel
## send the message
message = await ctx.send('message')
## wait for 4 seconds
await asyncio.sleep(4)
## delete the message
await message.delete()

## ^^ To delete the Bots message ^^ ##
## vv To delete the senders message vv ##

## get the message
message = ctx.message
## wait for 4 seconds again
await asyncio.sleep(4)
## delete the message
await message.delete()

#############################

## You can edit the message in about the same way:

message = await ctx.send('Old Message')
await asyncio.sleep(0.5)  # this is so the message has time to be read
await message.edit(content="New Message")

Share:
19,480
christopherson
Author by

christopherson

Updated on June 15, 2022

Comments

  • christopherson
    christopherson about 2 years

    I have already made all of the proper imports and I have tried looking for answers from other posts but it seems to not quite fit my issue. I am trying to randomly send a message, which I can do. However I can not seem to delete the messages after a certain cool down time. The cool down time is not the issue however. It is deleting the bots message. I know how to delete a user's message but I have very little idea on how I would delete the bots message. Any help would be nice. Here is my code with the exception of my token ID and imports.

    async def background_loop():
    await client.wait_until_ready()
    while not client.is_closed:
        channel = client.get_channel('397920718031159318')
        messages = ["A random cat has appeared", "oh look its a cate"]
        await client.send_message(channel, random.choice(messages))
        time.sleep(3) #I am using this as the cool down time to delete the 
                      #message
        await client.delete_message(messages)
        await asyncio.sleep(4)
    
  • Trenton Edwards
    Trenton Edwards about 5 years
    this is rewrite, async has been deprecated
  • VFDan
    VFDan over 4 years
    I don't think that they are using the Bot module of discord.py...