You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 12:09:04