python - 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()
谢谢和干杯。
解决方案
您以错误的方式处理问题。
您的 for 循环当前正在遍历公会的渠道。然后它检查是否应该删除频道,发送嵌入并等待 60 秒。一旦完成,它就会进入下一个频道。
改变你的代码结构。在一个不阻塞的循环中将嵌入发送到所有通道,然后在循环外休眠 60 秒,然后是一个实际处理删除的循环。
推荐阅读
- pandas - 如何在 pandas 中设置我的 Tiingo API 密钥?
- node.js - 无法在 Code Runner、VS Code 插件中记录任何内容
- azure - 用于列出代理池和作业运行的 Azure CLI 命令
- sql - 将列值与 Oracle 中的先前记录进行比较
- android - 寻找某个回调的非常基本的术语
- reactjs - 动态添加 colDefs
- wordpress - 无法在移动浏览器上运行的 Wordpress 网站在桌面上运行良好 - 重定向太多
- flutter - Flutter 从外部上下文获取上下文值
- python - 用给定的数字减去数据框列中的每个元素 - python
- javascript - 在 react js 中实现递归 onClick 事件