首页 > 解决方案 > Discord.py:延迟频道删除 - asyncio.sleep()

问题描述

我用 Python 编写了一个 Discordbot,它会自动为 Voicechannel 创建一个关联的 Textchannel。但是,如果机器人崩溃并停止运行,则不会删除现有的文本通道。因此,如果用户进入语音通道 A,他将不再获得文本通道 A 的任何权限。

我的初步想法是,一旦我重新启动机器人,它就会搜索现有的文本通道。在其中写入一条消息并在一分钟后将其删除。我也实现了这一点,只有一分钟后的删除不想像我想象的那样工作。

对于我使用的延迟asyncio.sleep(60)。没有延迟,它会选择通道 ID 并一个接一个地写入通道。延迟写入第一个通道,等待一分钟,然后写入下一个通道。

但我希望它一次写入所有频道,然后在一分钟后删除文本频道。

async def on_ready():

     #Bot Crash - Old Textchannel search
     for text_channel in guild.text_channels:
        if 'text' in text_channel.name:
           old_channels = text_channel
           await bot.get_channel(old_channels.id).send(embed=old_channel_embed(bot.user.avatar_url, old_channels.id))
           print(old_channels.id)

           await asyncio.sleep(60)
           await text_channel.delete()

谢谢和干杯。

标签: pythondiscorddiscord.pybots

解决方案


您以错误的方式处理问题。

您的 for 循环当前正在遍历公会的渠道。然后它检查是否应该删除频道,发送嵌入并等待 60 秒。一旦完成,它就会进入下一个频道。

改变你的代码结构。在一个不阻塞的循环中将嵌入发送到所有通道,然后在循环外休眠 60 秒,然后是一个实际处理删除的循环。


推荐阅读