如何添加延迟到message.delete()?

时间:2019-08-07 11:43:24

标签: python discord python-3.7 discord.py discord.py-rewrite

如果除指定的通道之外的其他任何通道都发出了命令,则漫游器会删除该命令消息并通知用户他们只能在帮助通道中使用命令。我希望漫游器在大约5秒钟后删除自己的消息。

这就是我正在尝试的,API文档说要在await message.delete()中添加delay =,但是当我这样做时,消息仍然存在。即使没有它说该消息不存在,它也是一条未知消息,在一个实例中,我几乎删除了整个常规频道。

代码:

if message.content.startswith('!commands'):
        channel = client.get_channel(525412770062139402)
        if message.channel is not channel:
            await message.delete()
            channel = message.channel
            await channel.send("{0.mention} Please use bot commands in the #help channel.".format(message.author))
            channel = message.channel
            await message.delete()

这告诉我这是一条未知消息。我将如何检索机器人的最后一条消息?如果我正确理解了该内容,则该漫游器正在尝试检索已删除的消息,而不是它自己的消息。

3 个答案:

答案 0 :(得分:1)

TextChannel.send(...)也会返回一个Message,因此,如果要存储您的漫游器刚刚发送的消息,可以执行以下操作:

botSentMessage = await channel.send("some message")

最后,要增加延迟,可以使用await asyncio.sleep(delayInSeconds)

您的最终结果应该是这样:

if message.content.startswith('!commands'):
        channel = client.get_channel(525412770062139402)
        if message.channel is not channel:
            await message.delete()
            channel = message.channel

            # Gets the message the bots just sent.
            botsMessage = await channel.send("{0.mention} Please use bot commands in the #help channel.".format(message.author))
            # Waits for 3 seconds before continuing to the next line of code
            await asyncio.sleep(3)
            await botsMessage.delete()

答案 1 :(得分:0)

您可以使用定时睡眠功能:

import time
time.sleep(5)

答案 2 :(得分:0)

您也可以这样做:

await ctx.send("My message", delete_after = 5)

delete_after参数将在倒数结束时自动删除已发送的消息。