discord.py创建私有VC报错:unexpected keyword argument 'allow_new'
解决创建私有语音频道时的
allow_new TypeError问题 看起来你遇到的这个错误是因为discord.py版本过旧,无法兼容Discord API最新的权限字段导致的。让我一步步帮你解决:
问题根源
错误信息里的TypeError: __new__() got an unexpected keyword argument 'allow_new',是因为Discord官方更新了权限系统的相关参数(新增了allow_new这类权限标识),但你当前使用的discord.py版本没有适配这个变化,在解析频道权限覆盖数据时就会抛出这个异常,直接导致后续修改频道位置的代码根本没机会执行。
解决方案
1. 升级discord.py到最新兼容版本
打开终端,执行以下命令升级你的discord库:
pip install --upgrade discord.py
如果你用到了语音相关的额外功能(比如音频播放),可以用这个命令升级完整版本:
pip install --upgrade discord.py[voice]
2. 优化频道位置调整逻辑
升级完成后,你的原有代码应该能正常运行。另外关于把VC移到频道列表底部的逻辑,有个小细节可以优化:刚创建的VC已经被计入ctx.guild.voice_channels列表中了,所以len(ctx.guild.voice_channels)会比实际需要的底部位置大1,建议改成:
await players_vc.edit(position=len(ctx.guild.voice_channels) - 1)
这样能确保VC准确移到列表最底部。
3. 错误捕获的正确写法
如果你想保留try-except来处理异常,同时确保创建成功后能修改位置,可以这样写:
try: players_vc = await guild.create_voice_channel(f"Game: {game_id}", overwrites=overwrites) # 升级库后这行代码就能正常执行了 await players_vc.edit(position=len(ctx.guild.voice_channels) - 1) print("edited position") except Exception as e: print(f"创建频道时出错: {str(e)}") # 这里可以添加错误后的补救逻辑,比如通知管理员等
测试验证
你可以用之前的vc_test命令重新测试,升级库后应该不会再抛出allow_new的错误,并且测试VC会成功移到频道列表底部。
内容的提问来源于stack exchange,提问作者TeaEyes
相关产品推荐
相关产品推荐

