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

discord.py运行play命令报AttributeError: 'NoneType'无channel属性如何解决

错误原因

该报错的触发原因是调用play命令的用户未加入任何语音频道,此时ctx.message.author.voice会返回None,你直接访问该空对象的channel属性就会抛出属性不存在的错误。

修复步骤
  • 第一步:添加用户语音状态校验,提前判断用户是否加入语音频道,未加入时直接返回提示
  • 第二步:修正语音客户端逻辑,避免机器人已加入频道时player变量为空的问题
  • 第三步:确保系统已安装FFmpeg依赖,音频解码需要用到该工具
依赖安装命令(Zorin OS适用)
sudo apt update && sudo apt install ffmpeg -y
修正后的完整代码
@bot.command(aliases=['p', 'pla'])
async def play(ctx, url: str = 'http://stream.radioparadise.com/rock-128'):
    # 先校验用户是否在语音频道
    if not ctx.author.voice:
        await ctx.send("请先加入一个语音频道再使用播放命令")
        return
    channel = ctx.author.voice.channel
    global player
    # 判断机器人是否已经连接了语音频道
    if ctx.voice_client:
        player = ctx.voice_client
    else:
        try:
            player = await channel.connect()
        except Exception as e:
            await ctx.send(f"加入语音频道失败:{str(e)}")
            return
    # 停止当前正在播放的内容,避免重复播放报错
    if player.is_playing():
        player.stop()
    # 使用传入的url参数,不要硬编码广播地址
    player.play(FFmpegPCMAudio(url))
其他注意事项
  • 确保你的机器人已开启Voice State Intent权限,在Discord开发者后台的Bot设置页开启该开关
  • 确保机器人拥有当前语音频道的连接、说话权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:54:06