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

Discord Bot !unban命令报错:async_generator无法用于await表达式

解决Discord Bot解封(unban)功能的TypeError错误

错误原因

报错TypeError: object async_generator can't be used in 'await' expression的根源是这行代码:

banned_users = await ctx.guild.bans()

ctx.guild.bans()返回的是异步生成器,不是可以直接用await等待的协程对象,因此不能用await直接接收它的返回值。

修复方案

有两种可行的修复方式,任选其一即可:

方式一:使用async for遍历异步生成器

直接遍历ctx.guild.bans()返回的异步生成器,不需要提前收集所有封禁记录:

@commands.command(name="unban")
@has_permissions(ban_members=True)
async def unban(self, ctx, *, member):
    try:
        member_name, member_discriminator = member.split('#')
    except ValueError:
        await ctx.send("请使用正确格式:用户名#四位数字标识")
        return

    async for ban_entry in ctx.guild.bans():
        user = ban_entry.user
        if (user.name, user.discriminator) == (member_name, member_discriminator):
            await ctx.guild.unban(user)
            await ctx.send(f"{user.mention} 已成功解封")
            return
    await ctx.send("未找到该用户的封禁记录")

注:原代码中的if ctx.author.guild_permissions.ban_members:可以删除,因为@has_permissions(ban_members=True)装饰器已经会自动检查调用者的权限,无需重复判断。

方式二:将异步生成器转为列表

通过异步列表推导式把所有封禁记录收集到列表中,再进行遍历:

@commands.command(name="unban")
@has_permissions(ban_members=True)
async def unban(self, ctx, *, member):
    try:
        member_name, member_discriminator = member.split('#')
    except ValueError:
        await ctx.send("请使用正确格式:用户名#四位数字标识")
        return

    # 用异步列表推导式收集所有封禁记录
    banned_users = [entry async for entry in ctx.guild.bans()]
    for ban_entry in banned_users:
        user = ban_entry.user
        if (user.name, user.discriminator) == (member_name, member_discriminator):
            await ctx.guild.unban(user)
            await ctx.send(f"{user.mention} 已成功解封")
            return
    await ctx.send("未找到该用户的封禁记录")

额外优化

  • 增加了输入格式错误的处理,避免用户输入不符合要求时程序崩溃
  • 解封成功或未找到用户时添加了反馈提示,提升交互体验

内容的提问来源于stack exchange,提问作者atunagamer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 08:12:43