Discord.py开发:解决asyncio.sleep实现频道延迟删除的串行等待问题
问题原因
现有代码将延迟等待、频道删除逻辑放在频道遍历循环内部,每处理一个频道就会触发60秒阻塞等待,所有频道的处理为串行执行,因此无法实现先批量发送消息、再统一等待删除的需求。
实现思路
- 第一步:遍历所有符合命名规则的文本频道,完成全部通知消息的发送,同时将这些频道存入待删除列表
- 第二步:所有消息发送完成后,全局执行一次60秒延迟
- 第三步:遍历待删除列表,统一执行频道删除操作,可增加异常捕获避免单个频道删除失败中断整体流程
修正后代码
import asyncio async def on_ready(): # 存储待删除的旧文本频道 pending_delete_channels = [] # 遍历机器人加入的所有公会,单公会场景可直接指定对应guild对象 for guild in bot.guilds: for text_channel in guild.text_channels: if 'text' in text_channel.name: # 发送通知嵌入消息 await text_channel.send(embed=old_channel_embed(bot.user.avatar_url, text_channel.id)) print(f"已向旧频道{text_channel.id}发送通知") # 加入待删除列表 pending_delete_channels.append(text_channel) # 全部消息发送完成后统一等待60秒 await asyncio.sleep(60) # 批量删除所有待处理频道 for channel in pending_delete_channels: try: await channel.delete() print(f"已删除旧频道{channel.id}") except Exception as e: print(f"删除频道{channel.id}失败,错误信息:{str(e)}")
内容的提问来源于stack exchange,提问作者TheT0fu
相关产品推荐
相关产品推荐

