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

Discord.py实现临时语音频道功能时出现AttributeError报错如何解决

错误原因

on_voice_state_update 事件会在成员语音状态发生任意变动时触发,除了加入、切换语音频道的场景外,也包含离开语音频道的场景。当成员离开语音频道时,after.channel 会返回空值 None,此时直接访问 .id 属性就会触发你遇到的 AttributeError 报错。

修复方案

首先在判断触发频道前新增非空校验,同时优化原代码中不必要的全服务器遍历逻辑,避免Bot加入多服务器时出现重复创建频道的问题,修复后的代码如下:

@Bot.event
async def on_voice_state_update(member, before, after):
    # 排除成员离开语音频道的场景,避免after.channel为空
    if not after.channel:
        return
    # 校验是否加入了指定的触发频道
    if after.channel.id == 826351221145206855:
        # 直接取当前成员所属服务器,无需遍历所有Bot加入的服务器
        guild = member.guild
        maincategory = discord.utils.get(guild.categories, id=816323445213626368)
        # 新增分类非空校验,避免分类ID配置错误导致后续报错
        if not maincategory:
            return
        channel2 = await guild.create_voice_channel(name=f'HALL {member.display_name}', category=maincategory)
        await channel2.set_permissions(member, connect=True, mute_members=True, move_members=True, manage_channels=True)
        await member.move_to(channel2)
        def check(x, y, z):
            return len(channel2.members) == 0
        await Bot.wait_for('voice_state_update', check=check)
        await channel2.delete()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 21:15:02