【问题标题】:Discord.py: Delay a channel delete - asyncio.sleep()Discord.py:延迟频道删除 - asyncio.sleep()
【发布时间】:2021-11-08 15:28:24
【问题描述】:

我用 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()

感谢和干杯。

【问题讨论】:

    标签: python discord discord.py bots


    【解决方案1】:

    您以错误的方式解决问题。

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

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

    【讨论】:

    • 啊,好吧。这已经帮助了我。我现在已经这样实现了:hastebin.com/rekoliqufi.py 就是这样工作的,但是第二个循环仍然可以更有效地编写还是?这实际上是相同的循环,只是我执行了其他操作。仍然让我感到困惑的是第一个循环中的 else 。只有在没有找到旧频道时才应该执行此操作。但它找到了频道,最后仍然写着“没有找到旧频道”。 i.imgur.com/HfHSIMV.png 谢谢到目前为止,我仍在努力学习 Python,每个答案都有帮助。
    • 我认为您对 if else 语句有点困惑。你的 if 在 for 循环中运行,你的 else 在它之外。它们彼此之间的相关性为零。您通常可以通过在第一个循环之外添加一个变量并根据其中发生的任何情况对其进行相应更改来解决此问题,以便您可以输出结果。
    猜你喜欢
    • 2021-01-25
    • 2021-10-04
    • 2021-12-21
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 2018-02-28
    • 2020-10-11
    • 2012-06-24
    相关资源
    最近更新 更多